alexkueck commited on
Commit
a17251c
·
verified ·
1 Parent(s): 99ab8cb

Update utils.py

Browse files
Files changed (1) hide show
  1. utils.py +57 -0
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 = []