Update utils.py
Browse files
utils.py
CHANGED
@@ -280,7 +280,7 @@ def document_storage_chroma(splits):
|
|
280 |
return vectorstore, retriever
|
281 |
|
282 |
#Dokumente, die vom Retriever rausgesucht wurden auf Relevanz untersuchen
|
283 |
-
def grade_documents_direct(
|
284 |
print("---CHECK RELEVANCE---")
|
285 |
# Data model
|
286 |
class grade(BaseModel):
|
@@ -317,33 +317,21 @@ def grade_documents_direct(state):
|
|
317 |
|
318 |
# Score
|
319 |
filtered_docs = []
|
320 |
-
|
321 |
-
search = "nein" # Default do not opt for re-questioning to supplement retrieval
|
322 |
for d in documents:
|
323 |
score = chain.invoke({"question": question, "context": d.page_content})
|
324 |
grade = score[0].binary_score
|
325 |
if grade == "ja":
|
326 |
-
#search = "nein" # mind. ein relevantes Dokument -> keine Websuche nötig
|
327 |
print("---Bewertung: Dokument ist relevant---")
|
328 |
-
anzahl_relevant = anzahl_relevant +1
|
329 |
filtered_docs.append(d)
|
330 |
else:
|
331 |
print("---Bewertung: Dokument irrelevant---")
|
332 |
-
search = "ja" # mind ein Dokument irrelevant -> Frage umformulieren
|
333 |
continue
|
334 |
-
#wenn mehrheit der Dokumente relevant -> generieren starten damit
|
335 |
-
if (anzahl_relevant>= len(documents)/2):
|
336 |
-
search = "nein"
|
337 |
-
print("second trial grade_docs:.....................")
|
338 |
-
print(second_trial)
|
339 |
return filtered_docs
|
340 |
|
341 |
|
342 |
def transform_query_direct(query):
|
343 |
print("---TRANSFORM QUERY---")
|
344 |
-
state_dict = state["keys"]
|
345 |
-
question = state_dict["question"]
|
346 |
-
documents = state_dict["documents"]
|
347 |
|
348 |
# Create a prompt template with format instructions and the query
|
349 |
prompt = PromptTemplate(
|
@@ -365,7 +353,7 @@ def transform_query_direct(query):
|
|
365 |
better_question = chain.invoke({"question": question})
|
366 |
second_trial="ja"
|
367 |
|
368 |
-
return
|
369 |
|
370 |
|
371 |
###############################################
|
@@ -384,8 +372,30 @@ def llm_chain2(llm, prompt):
|
|
384 |
return result
|
385 |
#############################################
|
386 |
#langchain nutzen, um prompt an llm zu leiten, aber vorher in der VektorDB suchen, um passende splits zum Prompt hinzuzufügen
|
387 |
-
def rag_chain(llm, prompt,
|
388 |
#Langgraph nutzen für ein wenig mehr Intelligenz beim Dokumente suchen
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
389 |
workflow = StateGraph(GraphState)
|
390 |
|
391 |
# Define the nodes
|
@@ -431,6 +441,7 @@ def rag_chain(llm, prompt, vectorstore, retriever):
|
|
431 |
|
432 |
# Final generation
|
433 |
return value['keys']['generation']
|
|
|
434 |
|
435 |
############################################
|
436 |
# rag_chain Alternative für RAg mit Bild-Upload, da hier das llm so nicht genutzt werden kann und der prompt mit den RAG Erweiterungen anders übergeben wird
|
|
|
280 |
return vectorstore, retriever
|
281 |
|
282 |
#Dokumente, die vom Retriever rausgesucht wurden auf Relevanz untersuchen
|
283 |
+
def grade_documents_direct(documents):
|
284 |
print("---CHECK RELEVANCE---")
|
285 |
# Data model
|
286 |
class grade(BaseModel):
|
|
|
317 |
|
318 |
# Score
|
319 |
filtered_docs = []
|
320 |
+
|
|
|
321 |
for d in documents:
|
322 |
score = chain.invoke({"question": question, "context": d.page_content})
|
323 |
grade = score[0].binary_score
|
324 |
if grade == "ja":
|
|
|
325 |
print("---Bewertung: Dokument ist relevant---")
|
|
|
326 |
filtered_docs.append(d)
|
327 |
else:
|
328 |
print("---Bewertung: Dokument irrelevant---")
|
|
|
329 |
continue
|
|
|
|
|
|
|
|
|
|
|
330 |
return filtered_docs
|
331 |
|
332 |
|
333 |
def transform_query_direct(query):
|
334 |
print("---TRANSFORM QUERY---")
|
|
|
|
|
|
|
335 |
|
336 |
# Create a prompt template with format instructions and the query
|
337 |
prompt = PromptTemplate(
|
|
|
353 |
better_question = chain.invoke({"question": question})
|
354 |
second_trial="ja"
|
355 |
|
356 |
+
return better_question
|
357 |
|
358 |
|
359 |
###############################################
|
|
|
372 |
return result
|
373 |
#############################################
|
374 |
#langchain nutzen, um prompt an llm zu leiten, aber vorher in der VektorDB suchen, um passende splits zum Prompt hinzuzufügen
|
375 |
+
def rag_chain(llm, prompt, retriever):
|
376 |
#Langgraph nutzen für ein wenig mehr Intelligenz beim Dokumente suchen
|
377 |
+
relevant_docs = retriever.get_relevant_documents(prompt)
|
378 |
+
filtered_docs = grade_documents_direct(relevant_docs)
|
379 |
+
neu_prompt=prompt
|
380 |
+
if (len(filtered_docs)<2): #frage neu formulieren
|
381 |
+
neu_prompt = transform_query_direct(prompt)
|
382 |
+
relevant_docs = retriever.get_relevant_documents(neu_prompt)
|
383 |
+
filtered_docs = grade_documents_direct(relevant_docs)
|
384 |
+
|
385 |
+
if (len(filtered_docs)>0):
|
386 |
+
# Chain
|
387 |
+
rag_chain = prompt | llm | StrOutputParser()
|
388 |
+
# Run
|
389 |
+
result = rag_chain.invoke({"context": documents, "question": neu_prompt})
|
390 |
+
else:
|
391 |
+
#Normale Abfrage, da keine relevanten Dokumente gefunden
|
392 |
+
llm_chain = LLMChain(llm = llm, prompt = LLM_CHAIN_PROMPT)
|
393 |
+
result = llm_chain.run({"question": neu_prompt})
|
394 |
+
return result
|
395 |
+
|
396 |
+
|
397 |
+
|
398 |
+
"""
|
399 |
workflow = StateGraph(GraphState)
|
400 |
|
401 |
# Define the nodes
|
|
|
441 |
|
442 |
# Final generation
|
443 |
return value['keys']['generation']
|
444 |
+
"""
|
445 |
|
446 |
############################################
|
447 |
# rag_chain Alternative für RAg mit Bild-Upload, da hier das llm so nicht genutzt werden kann und der prompt mit den RAG Erweiterungen anders übergeben wird
|