Update utils.py
Browse files
utils.py
CHANGED
@@ -283,63 +283,62 @@ def document_storage_chroma(splits):
|
|
283 |
#Dokumente, die vom Retriever rausgesucht wurden auf Relevanz untersuchen
|
284 |
def grade_documents_direct(prompt, documents):
|
285 |
print("---CHECK RELEVANCE---")
|
286 |
-
|
287 |
# Data model
|
288 |
class grade(BaseModel):
|
289 |
#Binary score for relevance check.
|
290 |
binary_score: str = Field(description="Relevanz Bewertung 'ja' oder 'nein'")
|
291 |
-
|
292 |
# LLM
|
293 |
model = ChatOpenAI(temperature=0.3, model="gpt-3.5-turbo-1106", streaming=True)
|
294 |
-
|
295 |
-
|
|
|
296 |
Hier ist das erhaltene Dokument: \n\n {context} \n\n
|
297 |
Hier ist die Nutzeranfrage: {question} \n
|
298 |
Wenn das erhaltene Dokument Keywörter oder semantische Bedeutung in Bezug auf die Nutzeranfrage hat, bewerte es als relevant. \n
|
299 |
-
Gib eine binäre Bewertung von 'ja' oder 'nein' Bewertung, um anzuzeigen ob das Dokuemnt relevant ist zur Nutzeranfrage oder nicht.
|
300 |
-
grade_prompt = PromptTemplate(input_variables = ["context", "question"],
|
301 |
template = xxx)
|
302 |
|
303 |
"""
|
304 |
# Tool
|
305 |
grade_tool_oai = convert_to_openai_tool(grade)
|
306 |
-
|
307 |
# LLM with tool and enforce invocation
|
308 |
llm_with_tool = model.bind(
|
309 |
tools=[convert_to_openai_tool(grade_tool_oai)],
|
310 |
tool_choice={"type": "function", "function": {"name": "grade"}},
|
311 |
)
|
312 |
-
|
313 |
# Parser
|
314 |
parser_tool = PydanticToolsParser(tools=[grade])
|
315 |
-
|
316 |
# Prompt
|
317 |
prompt = PromptTemplate(
|
318 |
-
template="Du bist ein Bewerter, der die Relevanz von einem erhaltenen Dokument zu einer Nutzeranfrage bewerten soll. \n
|
319 |
Hier ist das erhaltene Dokument: \n\n {context} \n\n
|
320 |
Hier ist die Nutzeranfrage: {question} \n
|
321 |
Wenn das erhaltene Dokument Keywörter oder semantische Bedeutung in Bezug auf die Nutzeranfrage hat, bewerte es als relevant. \n
|
322 |
-
Gib eine binäre Bewertung von 'ja' oder 'nein' Bewertung, um anzuzeigen ob das Dokuemnt relevant ist zur Nutzeranfrage oder nicht.",
|
323 |
input_variables=["context", "question"],
|
324 |
)
|
325 |
|
326 |
# Chain
|
327 |
chain = prompt | llm_with_tool | parser_tool
|
328 |
-
|
329 |
# Score
|
330 |
filtered_docs = []
|
331 |
|
332 |
-
|
333 |
-
|
334 |
-
|
335 |
-
print("
|
|
|
|
|
|
|
|
|
336 |
|
337 |
-
if not score == "nein":
|
338 |
-
print("---Bewertung: Dokument ist relevant---")
|
339 |
-
filtered_docs.append(d)
|
340 |
-
else:
|
341 |
-
print("---Bewertung: Dokument irrelevant---")
|
342 |
-
continue
|
343 |
return filtered_docs
|
344 |
|
345 |
|
|
|
283 |
#Dokumente, die vom Retriever rausgesucht wurden auf Relevanz untersuchen
|
284 |
def grade_documents_direct(prompt, documents):
|
285 |
print("---CHECK RELEVANCE---")
|
286 |
+
|
287 |
# Data model
|
288 |
class grade(BaseModel):
|
289 |
#Binary score for relevance check.
|
290 |
binary_score: str = Field(description="Relevanz Bewertung 'ja' oder 'nein'")
|
291 |
+
|
292 |
# LLM
|
293 |
model = ChatOpenAI(temperature=0.3, model="gpt-3.5-turbo-1106", streaming=True)
|
294 |
+
|
295 |
+
"""
|
296 |
+
xxx = Du bist ein Bewerter, der die Relevanz von einem erhaltenen Dokument zu einer Nutzeranfrage bewerten soll. \n
|
297 |
Hier ist das erhaltene Dokument: \n\n {context} \n\n
|
298 |
Hier ist die Nutzeranfrage: {question} \n
|
299 |
Wenn das erhaltene Dokument Keywörter oder semantische Bedeutung in Bezug auf die Nutzeranfrage hat, bewerte es als relevant. \n
|
300 |
+
Gib eine binäre Bewertung von 'ja' oder 'nein' Bewertung, um anzuzeigen ob das Dokuemnt relevant ist zur Nutzeranfrage oder nicht.
|
301 |
+
#grade_prompt = PromptTemplate(input_variables = ["context", "question"],
|
302 |
template = xxx)
|
303 |
|
304 |
"""
|
305 |
# Tool
|
306 |
grade_tool_oai = convert_to_openai_tool(grade)
|
307 |
+
|
308 |
# LLM with tool and enforce invocation
|
309 |
llm_with_tool = model.bind(
|
310 |
tools=[convert_to_openai_tool(grade_tool_oai)],
|
311 |
tool_choice={"type": "function", "function": {"name": "grade"}},
|
312 |
)
|
313 |
+
|
314 |
# Parser
|
315 |
parser_tool = PydanticToolsParser(tools=[grade])
|
316 |
+
|
317 |
# Prompt
|
318 |
prompt = PromptTemplate(
|
319 |
+
template="""Du bist ein Bewerter, der die Relevanz von einem erhaltenen Dokument zu einer Nutzeranfrage bewerten soll. \n
|
320 |
Hier ist das erhaltene Dokument: \n\n {context} \n\n
|
321 |
Hier ist die Nutzeranfrage: {question} \n
|
322 |
Wenn das erhaltene Dokument Keywörter oder semantische Bedeutung in Bezug auf die Nutzeranfrage hat, bewerte es als relevant. \n
|
323 |
+
Gib eine binäre Bewertung von 'ja' oder 'nein' Bewertung, um anzuzeigen ob das Dokuemnt relevant ist zur Nutzeranfrage oder nicht.""",
|
324 |
input_variables=["context", "question"],
|
325 |
)
|
326 |
|
327 |
# Chain
|
328 |
chain = prompt | llm_with_tool | parser_tool
|
329 |
+
|
330 |
# Score
|
331 |
filtered_docs = []
|
332 |
|
333 |
+
score = chain.invoke({"question": question, "context": d.page_content})
|
334 |
+
grade = score[0].binary_score
|
335 |
+
if grade == "ja":
|
336 |
+
print("---Bewertung: Dokument ist relevant---")
|
337 |
+
filtered_docs.append(d)
|
338 |
+
else:
|
339 |
+
print("---Bewertung: Dokument irrelevant---")
|
340 |
+
continue
|
341 |
|
|
|
|
|
|
|
|
|
|
|
|
|
342 |
return filtered_docs
|
343 |
|
344 |
|