Update utils.py
Browse files
utils.py
CHANGED
@@ -404,6 +404,63 @@ def rag_chain(llm, prompt, retriever):
|
|
404 |
|
405 |
return result
|
406 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
407 |
|
408 |
def extract_document_info(documents):
|
409 |
extracted_info = []
|
|
|
404 |
|
405 |
return result
|
406 |
|
407 |
+
################################################################################
|
408 |
+
#langchain nutzen, um prompt an llm zu leiten, aber vorher in der VektorDB suchen, um passende splits zum Prompt hinzuzufüge
|
409 |
+
#hier aber mit API-URl zu einem llm auf dem HF Hub
|
410 |
+
def rag_chain2(prompt, retriever):
|
411 |
+
#Langgraph nutzen für ein wenig mehr Intelligenz beim Dokumente suchen
|
412 |
+
relevant_docs=[]
|
413 |
+
most_relevant_docs=[]
|
414 |
+
relevant_docs = retriever.get_relevant_documents(prompt)
|
415 |
+
extracted_docs = extract_document_info(relevant_docs)
|
416 |
+
|
417 |
+
if (len(extracted_docs)>0):
|
418 |
+
#llm_chain = LLMChain(llm = llm, prompt = RAG_CHAIN_PROMPT)
|
419 |
+
#result = llm_chain.run({"context": relevant_docs, "question": prompt})
|
420 |
+
# Erstelle ein PromptTemplate mit Platzhaltern für Kontext und Frage
|
421 |
+
#RAG_CHAIN_PROMPT = PromptTemplate(template="Context: {context}\n\nQuestion: {question}\n\nAnswer:")
|
422 |
+
|
423 |
+
# Inahlte Abrufen der relevanten Dokumente
|
424 |
+
doc_contents = [doc["content"] for doc in extracted_docs]
|
425 |
+
|
426 |
+
#Berechne die Ähnlichkeiten und finde das relevanteste Dokument
|
427 |
+
question_embedding = embedder_modell.encode(prompt, convert_to_tensor=True)
|
428 |
+
doc_embeddings = embedder_modell.encode(doc_contents, convert_to_tensor=True)
|
429 |
+
similarity_scores = util.pytorch_cos_sim(question_embedding, doc_embeddings)
|
430 |
+
most_relevant_doc_indices = similarity_scores.argsort(descending=True).squeeze().tolist()
|
431 |
+
|
432 |
+
#Erstelle eine Liste der relevantesten Dokumente
|
433 |
+
most_relevant_docs = [extracted_docs[i] for i in most_relevant_doc_indices]
|
434 |
+
|
435 |
+
#Kombiniere die Inhalte aller relevanten Dokumente
|
436 |
+
combined_content = " ".join([doc["content"] for doc in most_relevant_docs])
|
437 |
+
|
438 |
+
#Formuliere die Eingabe für das Generierungsmodell
|
439 |
+
input_text = f"frage: {prompt} kontext: {combined_content}"
|
440 |
+
|
441 |
+
answer = query({"inputs": input_text,})
|
442 |
+
|
443 |
+
# Erstelle das Ergebnis-Dictionary
|
444 |
+
result = {
|
445 |
+
"answer": answer,
|
446 |
+
"relevant_docs": most_relevant_docs
|
447 |
+
}
|
448 |
+
|
449 |
+
else:
|
450 |
+
# keine relevanten Dokumente gefunden
|
451 |
+
result = {
|
452 |
+
"answer": "Keine relevanten Dokumente gefunden",
|
453 |
+
"relevant_docs": most_relevant_docs
|
454 |
+
}
|
455 |
+
|
456 |
+
return result
|
457 |
+
|
458 |
+
|
459 |
+
def query(payload):
|
460 |
+
response = requests.post(API_URL, headers=headers, json=payload)
|
461 |
+
return response.json()
|
462 |
+
|
463 |
+
|
464 |
|
465 |
def extract_document_info(documents):
|
466 |
extracted_info = []
|