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
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 să adauge declinări de responsabilitate atunci când nu sunt disponibile date de bază.
Procesul de a face acest lucru este cunoscut sub denumirea de Grounding of LLM’s response using Knowledge baze.
Î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 😄
Instalați bibliotecile necesare
pip install openai faiss-cpu numpy python-dotenv
openai
: pentru a interacționa cu modelele și înglobările GPT ale OpenAI.faiss-cpu
: O bibliotecă de Facebook AI pentru căutare eficientă de similaritate, folosită pentru a stoca și a căuta încorporații.numpy
: Pentru operații numerice, inclusiv gestionarea înglobărilor ca vectori.python-dotenv
: Pentru a încărca în siguranță variabilele de mediu (de exemplu, chei API) dintr-un fișier .env
.
Configurați variabilele de mediu
.env
în directorul de proiect. Adăugați cheia dvs. API OpenAI la acest fișier. 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
load_dotenv()
încarcă fișierul .env
, iar os.getenv("OPENAI_API_KEY")
preia cheia API. Această configurare vă păstrează cheia API în siguranță. 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." }
Generați încorporare de text
# 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
# 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
: dimensiunea fiecărei încorporare, necesară pentru inițializarea indexului FAISS.index = faiss.IndexFlatL2(dimension)
: creează un index FAISS care utilizează distanța euclidiană (L2) pentru similitudine.grounding_data
, acest cod generează o încorporare și o adaugă la indexul FAISS.
Funcție de căutare vectorială
# 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
: convertește textul interogării într-un vector de încorporare.FAISS Search
: caută în index cel mai apropiat vector de interogare.Threshold Check
: 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ă.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
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()
Invocați acest fragment folosind
python groundin_llm.py
Raspunsul:
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 :
Iată codul: https://github.com/sundeep110/groundingLLMs
Împământare fericită!!