Raha manasa LLM ianao "manolotra fiteny fandaharana tsara ho an'ny fianarana milina"
Ny valintenin'ny LLM dia hoe: "Ny iray amin'ireo fiteny fandaharana atolotra indrindra amin'ny fianarana milina dia Python. Python dia avo lenta…”
Ahoana raha tianao ny orinasanao hanome fampahalalana manokana momba ny fikambanana, izany hoe manatsara ny valiny amin'ny fampahalalana momba ny fikambanana tena izy?
Andeha isika hanao izany rehefa mifandray amin'ny LLM
LLM malaza toa ny OpenAI's chatGPT, Google's Gemini dia voaofana amin'ny angona azo ampahibemaso. Matetika izy ireo no tsy manana fampahalalana manokana momba ny fandaminana. Misy fotoana izay tian'ny fikambanana hiantehitra amin'ny LLM. Na izany aza, te-hanatsara ny valin-kafatra manokana ho an'ny fikambanana iray manokana na hampiditra fanavakavahana rehefa tsy misy angona fototra.
Ny dingan'ny fanaovana izany dia fantatra amin'ny anarana hoe Grounding of LLM's responses using Knowledge bases.
Na izany aza, afaka miresaka momba izany fotsiny aho.
Amin'ny maha injeniera mijery sombin-kaody sasany dia manome ahy fahatokisana.
Mampitombo ny fahatokisako ny fanatanterahana azy ireo ary manome fahasambarana koa. Ny fizarana dia manome fahafaham-po ahy 😄
Mametraka tranomboky ilaina
pip install openai faiss-cpu numpy python-dotenv
openai
: Mifanerasera amin'ny maodely GPT an'ny OpenAI sy ny embeddings.faiss-cpu
: Tranomboky avy amin'ny Facebook AI ho an'ny fikarohana fitoviana mahomby, ampiasaina amin'ny fitahirizana sy fikarohana ireo embeddings.numpy
: Ho an'ny fampandehanana isa, ao anatin'izany ny fikarakarana ny embeddings ho vectors.python-dotenv
: Mametraka ny fari-piainan'ny tontolo iainana (oh: lakilen'ny API) avy amin'ny rakitra .env
azo antoka.
Amboary ny fari-piainana manodidina
.env
ao amin'ny lahatahiry tetikasanao. Ampio ny fanalahidinao OpenAI API amin'ity rakitra ity. OPENAI_API_KEY=your_openai_api_key_here
Ity rakitra ity dia mitazona ny fanalahidin'ny API anao ho azo antoka ary misaraka amin'ny kaody.
Atombohy ny fari-piainan'ny mpanjifa sy enta-mavesatra
load_dotenv()
dia mitondra ny rakitra .env
, ary os.getenv("OPENAI_API_KEY")
dia maka ny lakile API. Ity fananganana ity dia mitazona ny fanalahidin'ny API ho azo antoka. 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." }
Mamorona Text Embeddings
# 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)
Fanondroana sy fametahana FAISS ho an'ny angona fototra
# 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
: Ny haben'ny embedding tsirairay, ilaina mba hanombohana ny tondro FAISS.index = faiss.IndexFlatL2(dimension)
: Mamorona tondro FAISS izay mampiasa halavirana Euclidean (L2) mba hitovitovy.grounding_data
, ity kaody ity dia miteraka fametahana ary manampy azy amin'ny tondro FAISS.
Vector fikarohana asa
# 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
: Mamadika ny lahatsoratry ny fanontaniana ho lasa vector embed.FAISS Search
: Mikaroka ny tondro ho an'ny vector akaiky indrindra amin'ny fangatahana.Threshold Check
: Raha eo ambanin'ny tokonam-baravarana ny halaviran'ny vector akaiky indrindra (D) dia mamerina ny fampahalalana fototra. Raha tsy izany, dia midika izany fa tsy misy fototra azo antoka hita.Anontanio ny LLM
Manontany ny LLM izahay amin'ny fampiasana ny modely OpenAI chatgpt api sy gpt-4.
# 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
Valiny nohatsaraina
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.)"
Farito ny tena asa
Ny asa lehibe dia manambatra ny zava-drehetra, ahafahanao mampiditra lohahevitra iray, manontany ny LLM, ary manamarina raha mifanaraka amin'ny angon-drakitra fototra ny valiny.
# 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()
Antsoy ity snippet ity amin'ny fampiasana
python groundin_llm.py
Ny valiny:
Raha tsikaritrareo ny valiny, na dia ny valin'ny LLM aza dia "Iray amin'ireo tenim-pandaharana tsara indrindra ho an'ny fianarana milina ...", ny valinteny mifototra dia hoe "Lehibe ny Java, manome hery ny ankamaroan'ny kaody fianarana Machine, manana andian-tsarimihetsika manankarena izy io. trano famakiam-boky misy”.
Azo atao izany amin'ny alàlan'ny famakiam-boky FAISS an'ny Meta ho an'ny fikarohana vector mifototra amin'ny fitoviana.
Dingana :
Ity ny kaody: https://github.com/sundeep110/groundingLLMs
Happy Grounding!!