Wenn Sie einen LLM auffordern: „Schlagen Sie eine großartige Programmiersprache für maschinelles Lernen vor“
Die Antwort von LLMs wäre: „Eine der am meisten empfohlenen Programmiersprachen für maschinelles Lernen ist Python. Python ist eine hochrangige…“
Was wäre, wenn Ihre Organisation verifizierte, organisationsspezifische Informationen bereitstellen soll, also die Antwort mit authentischen Organisationsinformationen verbessern soll?
Lassen Sie es uns im Umgang mit LLM möglich machen
Beliebte LLMs wie chatGPT von OpenAI und Gemini von Google werden mit öffentlich verfügbaren Daten trainiert. Ihnen fehlen oft organisationsspezifische Informationen. Es gibt bestimmte Situationen, in denen Organisationen sich auf LLMs verlassen möchten. Sie möchten jedoch die Antwort speziell für eine bestimmte Organisation verbessern oder Haftungsausschlüsse hinzufügen , wenn keine grundlegenden Daten verfügbar sind.
Dieser Vorgang wird als „Grounding der LLM-Antwort mithilfe von Wissensdatenbanken“ bezeichnet.
Währenddessen kann ich einfach darüber reden.
Als Ingenieur gibt mir das Betrachten einiger Codeausschnitte Zuversicht.
Ihre Umsetzung stärkt mein Selbstvertrauen und macht mich glücklich. Das Teilen gibt mir Befriedigung 😄
Installieren der erforderlichen Bibliotheken
pip install openai faiss-cpu numpy python-dotenv
openai
: Zur Interaktion mit GPT-Modellen und Einbettungen von OpenAI.faiss-cpu
: Eine Bibliothek von Facebook AI für eine effiziente Ähnlichkeitssuche, die zum Speichern und Suchen von Einbettungen verwendet wird.numpy
: Für numerische Operationen, einschließlich der Handhabung von Einbettungen als Vektoren.python-dotenv
: Um Umgebungsvariablen (z. B. API-Schlüssel) sicher aus einer .env
Datei zu laden.
Einrichten von Umgebungsvariablen
.env
Datei in Ihrem Projektverzeichnis. Fügen Sie dieser Datei Ihren OpenAI-API-Schlüssel hinzu. OPENAI_API_KEY=your_openai_api_key_here
Diese Datei bewahrt Ihren API-Schlüssel sicher auf und trennt ihn vom Code.
Client initialisieren und Umgebungsvariablen laden
load_dotenv()
lädt die .env
Datei und os.getenv("OPENAI_API_KEY")
ruft den API-Schlüssel ab. Dieses Setup schützt Ihren API-Schlüssel. import os from openai import OpenAI from dotenv import load_dotenv import faiss import numpy as np # Load environment variables load_dotenv() client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
# Grounding data grounding_data = { "Python": "Python is dynamically typed, which can be a double-edged sword. While it makes coding faster and more flexible, it can lead to runtime errors that might have been caught at compile-time in statically-typed languages.", "LLMs": "Large Language Models (LLMs) are neural networks trained on large text datasets.", "Data Science": "Data Science involves using algorithms, data analysis, and machine learning to understand and interpret data.", "Java": "Java is great, it powers most of the machine learning code, and has a rich set of libraries available." }
Texteinbettungen generieren
# Function to generate embedding for a text def get_embedding(text): response = client.embeddings.create( model="text-embedding-ada-002", input=text ) return np.array(response.data[0].embedding)
FAISS-Index und Einbettungen für Erdungsdaten
# Create FAISS index and populate it with grounding data embeddings dimension = len(get_embedding("test")) # Dimension of embeddings index = faiss.IndexFlatL2(dimension) # L2 distance index for similarity search grounding_embeddings = [] grounding_keys = list(grounding_data.keys()) for key, text in grounding_data.items(): embedding = get_embedding(text) grounding_embeddings.append(embedding) index.add(np.array([embedding]).astype("float32"))
dimension
: Die Größe jeder Einbettung, die zum Initialisieren des FAISS-Index erforderlich ist.index = faiss.IndexFlatL2(dimension)
: Erstellt einen FAISS-Index, der die euklidische Distanz (L2) zur Ähnlichkeit verwendet.grounding_data
generiert dieser Code eine Einbettung und fügt sie dem FAISS-Index hinzu.
Vektorsuchfunktion
# Function to perform vector search on FAISS def vector_search(query_text, threshold=0.8): query_embedding = get_embedding(query_text).astype("float32").reshape(1, -1) D, I = index.search(query_embedding, 1) # Search for the closest vector if I[0][0] != -1 and D[0][0] <= threshold: return grounding_data[grounding_keys[I[0][0]]] else: return None # No similar grounding information available
Query Embedding
: Wandelt den Abfragetext in einen Einbettungsvektor um.FAISS Search
: Durchsucht den Index nach dem Vektor, der der Abfrage am nächsten kommt.Threshold Check
: Wenn die Entfernung (D) des nächstgelegenen Vektors unter dem Schwellenwert liegt, werden die Erdungsinformationen zurückgegeben. Andernfalls wird angezeigt, dass keine zuverlässige Erdung gefunden wurde.Abfragen des LLM
Wir fragen das LLM mithilfe der Chatgpt-API und des GPT-4-Modells von OpenAI ab.
# Query the LLM def query_llm(prompt): response = client.chat.completions.create( model="gpt-4", messages=[ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": prompt} ] ) return response.choices[0].message.content
Verbesserte Reaktion
def enhance_response(topic, llm_response): grounding_info = vector_search(llm_response) if grounding_info: # Check if the LLM's response aligns well with grounding information return f"{llm_response}\n\n(Verified Information: {grounding_info})" else: # Add a disclaimer when no grounding data is available return f"{llm_response}\n\n(Disclaimer: This information could not be verified against known data and may contain inaccuracies.)"
Definieren Sie die Hauptfunktion
Die Hauptfunktion kombiniert alles und ermöglicht Ihnen, ein Thema einzugeben, das LLM abzufragen und zu überprüfen, ob die Antwort mit den Grundlagendaten übereinstimmt.
# Main function to execute the grounding check def main(): topic = input("Enter a topic: ") llm_response = query_llm(f"What can you tell me about {topic}?") grounding_info = vector_search(llm_response, threshold=0.8) print(f"LLM Response: {llm_response}") print(f"Grounding Information: {grounding_info}") if grounding_info != "No grounding information available": print("Response is grounded and reliable.") else: print("Potential hallucination detected. Using grounded information instead.") print(f"Grounded Answer: {grounding_info}") if __name__ == "__main__": main()
Rufen Sie dieses Snippet auf mit
python groundin_llm.py
Die Antwort:
Wenn Sie sich die Antwort ansehen, war die Antwort von LLM zwar „Eine der am meisten empfohlenen Programmiersprachen für maschinelles Lernen …“, die fundierte Antwort war jedoch „Java ist großartig, es treibt den Großteil des Codes für maschinelles Lernen an und verfügt über eine große Anzahl verfügbarer Bibliotheken“.
Dies ist mithilfe der FAISS-Bibliothek von Meta für die auf Ähnlichkeit basierende Vektorsuche möglich.
Verfahren :
Hier ist der Code: https://github.com/sundeep110/groundingLLMs
Viel Spaß beim Erden!!