Ce? Dacă solicitați un LLM „sugerați un limbaj de programare excelent pentru învățarea automată” Răspunsul LLM ar fi: „Unul dintre cele mai recomandate limbaje de programare pentru învățarea automată este Python. Python este un nivel înalt...” Ce se întâmplă dacă doriți ca organizația dvs. să furnizeze informații specifice unei organizații verificate, adică să sporească răspunsul cu informații autentice ale organizației? Să facem asta când interacționăm cu LLM De ce? LLM-urile populare, cum ar fi chatGPT de la OpenAI, Google Gemini sunt instruiți pe date disponibile publicului. De multe ori le lipsesc informațiile specifice organizației. Există anumite momente în care organizațiile ar dori să se bazeze pe LLM. Cu toate acestea, ar dori să îmbunătățească răspunsul specific unei anumite organizații sau atunci când nu sunt disponibile date de bază. să adauge declinări de responsabilitate Procesul de a face acest lucru este cunoscut sub denumirea de Grounding of LLM’s response using Knowledge baze. Cum? În timp ce, pot doar să vorbesc despre asta. În calitate de inginer, privind unele fragmente de cod îmi dă încredere. Executarea lor îmi ridică încrederea și, de asemenea, dă fericire. Împărtășirea îmi dă satisfacție 😄 Cod? De ce nu! → Python? Desigur!! Instalați bibliotecile necesare pip install openai faiss-cpu numpy python-dotenv : pentru a interacționa cu modelele și înglobările GPT ale OpenAI. openai : O bibliotecă de Facebook AI pentru căutare eficientă de similaritate, folosită pentru a stoca și a căuta încorporații. faiss-cpu : Pentru operații numerice, inclusiv gestionarea înglobărilor ca vectori. numpy : Pentru a încărca în siguranță variabilele de mediu (de exemplu, chei API) dintr-un fișier . python-dotenv .env Configurați variabilele de mediu Navigați la https://platform.openai.com/settings/organization/api-keys Faceți clic pe „Creați o cheie secretă nouă”, așa cum se arată în imaginea de mai jos. Furnizați detalii, puteți utiliza un cont de serviciu. Furnizați un nume pentru „ID contului de serviciu” și selectați un proiect. Copiați cheia secretă în clipboard Creați un fișier în directorul de proiect. Adăugați cheia dvs. API OpenAI la acest fișier. .env OPENAI_API_KEY=your_openai_api_key_here Acest fișier vă păstrează cheia API în siguranță și separată de cod. Inițializați clientul și încărcați variabilele de mediu încarcă fișierul , iar preia cheia API. Această configurare vă păstrează cheia API în siguranță. load_dotenv() .env os.getenv("OPENAI_API_KEY") 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")) Definiți baza de date/cunoștințe de bază Acest dicționar conține informații de bază pentru subiecte. În realitate, acesta ar putea fi un set de date mai mare sau o bază de date. # 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." } Generați încorporare de text O funcție pentru a genera încorporare pentru un text dat folosind modelul de încorporare OpenAI. Această funcție apelează API-ul OpenAI pentru a obține încorporarea pentru o intrare de text, care este apoi returnată ca o matrice NumPy # 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) Index FAISS și încorporare pentru date de împământare Creați un index FAISS, o structură optimizată pentru căutări rapide de similaritate și populați-o cu încorporarea datelor de bază. # 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")) : dimensiunea fiecărei încorporare, necesară pentru inițializarea indexului FAISS. dimension : creează un index FAISS care utilizează distanța euclidiană (L2) pentru similitudine. index = faiss.IndexFlatL2(dimension) Pentru fiecare intrare în , acest cod generează o încorporare și o adaugă la indexul FAISS. grounding_data Funcție de căutare vectorială Funcția caută în indexul FAISS cea mai asemănătoare intrare de date de împământare la o interogare. # 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 : convertește textul interogării într-un vector de încorporare. Query Embedding : caută în index cel mai apropiat vector de interogare. FAISS Search : Dacă distanța celui mai apropiat vector (D) este sub prag, returnează informațiile de împământare. În caz contrar, indică că nu a fost găsită o împământare fiabilă. Threshold Check Interogați LLM Interogăm LLM folosind API-ul chatgpt și modelul gpt-4 al OpenAI. # 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 Răspuns îmbunătățit Adaugă informații de împământare dacă sunt disponibile sau Adaugă o declinare a răspunderii dacă nu se găsesc informații relevante de împământare. 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.)" Definiți funcția principală Funcția principală combină totul, permițându-vă să introduceți un subiect, să interogați LLM și să verificați dacă răspunsul este aliniat cu datele de bază. # 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() Rezultat Executați scriptul Invocați acest fragment folosind python groundin_llm.py Raspunsul: Explicaţie Dacă observați răspunsul, deși răspunsul de la LLM a fost „Unul dintre cele mai recomandate limbaje de programare pentru învățarea automată…”, răspunsul bazat a fost „Java este grozav, alimentează cea mai mare parte a codului de învățare automată, are un set bogat de biblioteci disponibile”. Acest lucru este posibil folosind biblioteca FAISS a Meta pentru căutarea vectorială bazată pe asemănare. : Proces Mai întâi, recuperați răspunsul LLM. Verificați dacă baza noastră de cunoștințe are informații relevante folosind căutarea vectorială. Dacă există, returnați răspunsul de la „baza de cunoștințe” Dacă nu, returnați răspunsul LLM așa cum este. Iată codul: https://github.com/sundeep110/groundingLLMs Împământare fericită!!