Heim >Technologie-Peripheriegeräte >KI >Verbesserung von Lappen: Jenseits der Vanille nähert sich
retrieval-augmented Generation (RAG) steigert die Sprachmodelle durch Integration externer Informationsabrufs erheblich. Standardlag, während sie die Reaktionsrelevanz verbessert, stockt häufig in komplexen Abrufsituationen. Dieser Artikel untersucht die Mängel von Basic Rag und präsentiert fortgeschrittene Methoden zur Verbesserung der Genauigkeit und Effizienz.
Betrachten Sie ein einfaches Szenario: relevante Informationen aus mehreren Dokumenten abrufen. Unser Datensatz enthält:
<code>main_document_text = """ Morning Routine (5:30 AM - 9:00 AM) ✅ Wake Up Early - Aim for 6-8 hours of sleep to feel well-rested. ✅ Hydrate First - Drink a glass of water to rehydrate your body. ✅ Morning Stretch or Light Exercise - Do 5-10 minutes of stretching or a short workout to activate your body. ✅ Mindfulness or Meditation - Spend 5-10 minutes practicing mindfulness or deep breathing. ✅ Healthy Breakfast - Eat a balanced meal with protein, healthy fats, and fiber. ✅ Plan Your Day - Set goals, review your schedule, and prioritize tasks. ... """</code>
Ein grundlegendes Lappensystem, wenn er mit:
befragt wirdkann Schwierigkeiten haben, das primäre Dokument aufgrund des Vorhandenseins ähnlicher Wörter in nicht verwandten Dokumenten konsequent abzurufen.
Um die Abrufgenauigkeit zu verbessern und die Abfrageverarbeitung zu vereinfachen, führen wir Helferfunktionen ein. Diese Funktionen erledigen Aufgaben wie die Abfrage der ChatGPT -API, die Berechnung von Dokument -Einbettungen und die Bestimmung der Ähnlichkeitswerte. Dies schafft eine effizientere Lappenpipeline.
Hier sind die Helferfunktionen:
<code># **Imports** import os import json import openai import numpy as np from scipy.spatial.distance import cosine from google.colab import userdata # Set up OpenAI API key os.environ["OPENAI_API_KEY"] = userdata.get('AiTeam')</code>
<code>def query_chatgpt(prompt, model="gpt-4o", response_format=openai.NOT_GIVEN): try: response = client.chat.completions.create( model=model, messages=[{"role": "user", "content": prompt}], temperature=0.0 , # Adjust for more or less creativity response_format=response_format ) return response.choices[0].message.content.strip() except Exception as e: return f"Error: {e}"</code>
<code>def get_embedding(text, model="text-embedding-3-large"): #"text-embedding-ada-002" """Fetches the embedding for a given text using OpenAI's API.""" response = client.embeddings.create( input=[text], model=model ) return response.data[0].embedding</code>
<code>def compute_similarity_metrics(embed1, embed2): """Computes different similarity/distance metrics between two embeddings.""" cosine_sim = 1- cosine(embed1, embed2) # Cosine similarity return cosine_sim</code>
<code>def fetch_similar_docs(query, docs, threshold = .55, top=1): query_em = get_embedding(query) data = [] for d in docs: # Compute and print similarity metrics similarity_results = compute_similarity_metrics(d["embedding"], query_em) if(similarity_results >= threshold): data.append({"id":d["id"], "ref_doc":d.get("ref_doc", ""), "score":similarity_results}) # Sorting by value (second element in each tuple) sorted_data = sorted(data, key=lambda x: x["score"], reverse=True) # Ascending order sorted_data = sorted_data[:min(top, len(sorted_data))] return sorted_data</code>
Wir testen den Basislappen unter Verwendung vordefinierter Abfragen, um die Fähigkeit zu bewerten, das relevanteste Dokument basierend auf semantischer Ähnlichkeit abzurufen. Dies unterstreicht seine Grenzen.
<code>"""# **Testing Vanilla RAG**""" query = "what should I do to stay healthy and productive?" r = fetch_similar_docs(query, docs) print("query = ", query) print("documents = ", r) query = "what are the best practices to stay healthy and productive ?" r = fetch_similar_docs(query, docs) print("query = ", query) print("documents = ", r)</code>
Um den Abrufprozess zu verbessern, führen wir Funktionen ein, die strukturierte Informationen generieren, um das Abrufen von Dokumenten und Abfragen zu verbessern.
Drei wichtige Verbesserungen werden implementiert:
Erstellen von FAQs aus dem Dokument erweitert die Abfragebestimmungsmöglichkeiten. Diese FAQs werden einmal generiert und gespeichert, wodurch der Suchraum ohne wiederkehrende Kosten bereichert wird.
<code>def generate_faq(text): prompt = f''' given the following text: """{text}""" Ask relevant simple atomic questions ONLY (don't answer them) to cover all subjects covered by the text. Return the result as a json list example [q1, q2, q3...] ''' return query_chatgpt(prompt, response_format={ "type": "json_object" })</code>
Eine kurze Zusammenfassung erfasst die Kernideen des Dokuments und verbessert die Effektivität des Abrufs. Die Einbettung des Überblicks wird der Dokumentsammlung hinzugefügt.
<code>def generate_overview(text): prompt = f''' given the following text: """{text}""" Generate an abstract for it that tells in maximum 3 lines what is it about and use high level terms that will capture the main points, Use terms and words that will be most likely used by average person. ''' return query_chatgpt(prompt)</code>
breite Abfragen werden in kleinere, präzisere Sub-Anfragen unterteilt. Diese Unterausfragen werden mit der erweiterten Dokumentsammlung (Originaldokument, FAQs und Übersicht) verglichen. Die Ergebnisse werden für eine verbesserte Relevanz verschmolzen.
<code>main_document_text = """ Morning Routine (5:30 AM - 9:00 AM) ✅ Wake Up Early - Aim for 6-8 hours of sleep to feel well-rested. ✅ Hydrate First - Drink a glass of water to rehydrate your body. ✅ Morning Stretch or Light Exercise - Do 5-10 minutes of stretching or a short workout to activate your body. ✅ Mindfulness or Meditation - Spend 5-10 minutes practicing mindfulness or deep breathing. ✅ Healthy Breakfast - Eat a balanced meal with protein, healthy fats, and fiber. ✅ Plan Your Day - Set goals, review your schedule, and prioritize tasks. ... """</code>
erneutes Erreichen der ersten Abfragen mit diesen Verbesserungen zeigt eine signifikante Verbesserung. Die Abdeckung von Abfragen erzeugt mehrere Unterausfragen, was zu einem erfolgreichen Abrufen sowohl von den FAQs als auch aus dem Originaldokument führt.
<code># **Imports** import os import json import openai import numpy as np from scipy.spatial.distance import cosine from google.colab import userdata # Set up OpenAI API key os.environ["OPENAI_API_KEY"] = userdata.get('AiTeam')</code>
Beispiel für FAQ -Ausgabe:
<code>def query_chatgpt(prompt, model="gpt-4o", response_format=openai.NOT_GIVEN): try: response = client.chat.completions.create( model=model, messages=[{"role": "user", "content": prompt}], temperature=0.0 , # Adjust for more or less creativity response_format=response_format ) return response.choices[0].message.content.strip() except Exception as e: return f"Error: {e}"</code>
Während der Vorverarbeitung (Generierung von FAQs, Übersichten und Einbettungen) fügt dies eine einmalige Kosten pro Dokument zu. Dies spielt die Ineffizienzen eines schlecht optimierten Lappensystems aus: frustrierte Benutzer und erhöhte Abfragekosten beim Abrufen irrelevanter Informationen. Für hochvolumige Systeme ist die Vorverarbeitung eine lohnende Investition.
kombiniertes Dokumentenvorverarbeitung (FAQs und Übersichten) mit Abzersetzung von Abfragen erzeugt ein intelligentes Lag-System, das die Genauigkeit und die Kostenwirksamkeit in Einklang bringt. Dies verbessert die Abrufqualität, reduziert irrelevante Ergebnisse und verbessert die Benutzererfahrung. Zukünftige Forschung kann weitere Optimierungen wie dynamisches Schwellenwert und Verstärkungslernen für die Verfeinerung von Abfragen untersuchen.
Das obige ist der detaillierte Inhalt vonVerbesserung von Lappen: Jenseits der Vanille nähert sich. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!