Spaces:
Sleeping
Sleeping
dinhquangson
commited on
Commit
•
6124a40
1
Parent(s):
2b22ee8
Update QueryMetadataExtractor.py
Browse files- QueryMetadataExtractor.py +35 -30
QueryMetadataExtractor.py
CHANGED
@@ -11,34 +11,34 @@ class QueryMetadataExtractor:
|
|
11 |
|
12 |
def __init__(self):
|
13 |
prompt = """
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
generator = OpenAIGenerator(
|
38 |
api_key=Secret.from_env_var("OCTOAI_TOKEN"),
|
39 |
api_base_url="https://text.octoai.run/v1",
|
40 |
-
model="
|
41 |
-
generation_kwargs = {"max_tokens": 512}
|
42 |
)
|
43 |
self.pipeline = Pipeline()
|
44 |
self.pipeline.add_component(name="builder", instance=PromptBuilder(prompt))
|
@@ -48,13 +48,18 @@ class QueryMetadataExtractor:
|
|
48 |
@component.output_types(filters=Dict[str, str])
|
49 |
def run(self, query: str, metadata_fields: List[str]):
|
50 |
result = self.pipeline.run({'builder': {'query': query, 'metadata_fields': metadata_fields}})
|
51 |
-
|
52 |
-
|
53 |
-
|
|
|
|
|
|
|
|
|
54 |
# this can be done with specific data structures and in a more sophisticated way
|
55 |
filters = []
|
56 |
-
for key, value in
|
57 |
field = f"meta.{key}"
|
58 |
filters.append({f"field": field, "operator": "==", "value": value})
|
59 |
-
|
60 |
return {"filters": {"operator": "AND", "conditions": filters}}
|
|
|
|
11 |
|
12 |
def __init__(self):
|
13 |
prompt = """
|
14 |
+
Bạn là một phần của hệ thống thông tin xử lý các truy vấn của người dùng.
|
15 |
+
Cho một truy vấn từ người dùng, bạn trích xuất thông tin khớp với danh sách các trường metadata đã cho.
|
16 |
+
Thông tin được trích xuất từ truy vấn phải khớp với ngữ nghĩa liên quan đến các trường metadata đã cho.
|
17 |
+
Thông tin bạn trích xuất từ truy vấn sẽ được sử dụng như bộ lọc để thu hẹp không gian tìm kiếm
|
18 |
+
khi truy vấn một chỉ mục.
|
19 |
+
Chỉ bao gồm giá trị của metadata đã trích xuất mà không bao gồm tên của trường metadata.
|
20 |
+
Thông tin đã trích xuất trong 'Extracted metadata' phải trả về dưới dạng cấu trúc JSON hợp lệ.
|
21 |
+
###
|
22 |
+
Ví dụ 1:
|
23 |
+
Truy vấn: "Luật được Quốc hội ban hành năm 2014?"
|
24 |
+
Metadata fields: {"publisher", "publish_year", "document_type"}
|
25 |
+
Extracted metadata fields: {"publisher": "Quốc hội", "publish_year": 2014, "document_type":"Luật"}
|
26 |
+
###
|
27 |
+
Ví dụ 2:
|
28 |
+
Truy vấn: "Nghị định được Chính phủ ban hành năm 2021?"
|
29 |
+
Trường metadata: {"publisher", "publish_year", "document_type"}
|
30 |
+
Extracted metadata fields: {"publisher": "Chính phủ", "publish_year": 2021, "document_type":"Nghị định"}
|
31 |
+
###
|
32 |
+
Ví dụ 3:
|
33 |
+
Truy vấn: "{{query}}"
|
34 |
+
Trường metadata: "{{metadata_fields}}"
|
35 |
+
Extracted metadata fields:
|
36 |
+
"""
|
37 |
generator = OpenAIGenerator(
|
38 |
api_key=Secret.from_env_var("OCTOAI_TOKEN"),
|
39 |
api_base_url="https://text.octoai.run/v1",
|
40 |
+
model="meta-llama-3-70b-instruct",
|
41 |
+
generation_kwargs = {"max_tokens": 512,"response_format": { "type": "json_object" }}
|
42 |
)
|
43 |
self.pipeline = Pipeline()
|
44 |
self.pipeline.add_component(name="builder", instance=PromptBuilder(prompt))
|
|
|
48 |
@component.output_types(filters=Dict[str, str])
|
49 |
def run(self, query: str, metadata_fields: List[str]):
|
50 |
result = self.pipeline.run({'builder': {'query': query, 'metadata_fields': metadata_fields}})
|
51 |
+
|
52 |
+
import json
|
53 |
+
first_reply = result['llm']['replies'][0]
|
54 |
+
parsed_data = json.loads(first_reply)
|
55 |
+
metadata = parsed_data['answer']
|
56 |
+
metadata = metadata.replace("'",'"')
|
57 |
+
data = json.loads(metadata)
|
58 |
# this can be done with specific data structures and in a more sophisticated way
|
59 |
filters = []
|
60 |
+
for key, value in data.items():
|
61 |
field = f"meta.{key}"
|
62 |
filters.append({f"field": field, "operator": "==", "value": value})
|
63 |
+
print(filters)
|
64 |
return {"filters": {"operator": "AND", "conditions": filters}}
|
65 |
+
|