Եթե դուք հուշում եք LLM-ին «առաջարկեք հիանալի ծրագրավորման լեզու մեքենայական ուսուցման համար»
LLM-ների պատասխանը կլինի. «Մեքենայական ուսուցման համար ամենաառաջարկվող ծրագրավորման լեզուներից մեկը Python-ն է: Python-ը բարձր մակարդակի…»
Ի՞նչ անել, եթե ցանկանում եք, որ ձեր կազմակերպությունը տրամադրի հաստատված կազմակերպության հատուկ տեղեկատվություն, այսինքն՝ ուժեղացնեք պատասխանը կազմակերպության վավերական տեղեկություններով:
Եկեք դա իրականացնենք LLM-ի հետ շփվելիս
Հանրաճանաչ LLM-ները, ինչպիսիք են OpenAI-ի chatGPT-ն, Google-ի Gemini-ն, վերապատրաստվում են հանրությանը հասանելի տվյալների վրա: Նրանք հաճախ զուրկ են կազմակերպության կոնկրետ տեղեկատվությանից: Կան որոշակի ժամանակներ, երբ կազմակերպությունները ցանկանում են ապավինել LLM-ներին: Այնուամենայնիվ, կցանկանայի ուժեղացնել որոշակի կազմակերպությանը հատուկ արձագանքը կամ ավելացնել հերքումներ, երբ հիմնավորման տվյալներ չկան:
Դա անելու գործընթացը հայտնի է որպես LLM-ի պատասխանի հիմնավորում՝ օգտագործելով Գիտելիքի հիմքերը:
Մինչդեռ ես կարող եմ պարզապես խոսել այդ մասին:
Քանի որ ինժեները, նայելով որոշ կոդի հատվածներ, ինձ վստահություն է տալիս:
Դրանց կատարումը բարձրացնում է իմ վստահությունը և նաև երջանկություն է տալիս: Կիսվելն ինձ բավականություն է պատճառում 😄
Տեղադրեք անհրաժեշտ գրադարանները
pip install openai faiss-cpu numpy python-dotenv
openai
. OpenAI-ի GPT մոդելների և ներկառուցումների հետ փոխազդելու համար:faiss-cpu
. Գրադարան Facebook AI-ի կողմից արդյունավետ նմանության որոնման համար, որն օգտագործվում է ներկառուցված նյութերը պահելու և որոնելու համար:numpy
. թվային գործողությունների համար, ներառյալ ներկառուցումները որպես վեկտորներ:python-dotenv
. միջավայրի փոփոխականները (օրինակ՝ API ստեղները) .env
ֆայլից ապահով բեռնելու համար:
Սահմանեք շրջակա միջավայրի փոփոխականները
.env
ֆայլ ձեր նախագծի գրացուցակում: Ավելացրեք ձեր OpenAI API բանալին այս ֆայլին: OPENAI_API_KEY=your_openai_api_key_here
Այս ֆայլը պահպանում է ձեր API բանալին ապահով և անջատված կոդից:
Նախաձեռնել հաճախորդի և բեռնել միջավայրի փոփոխականները
load_dotenv()
բեռնում է .env
ֆայլը, իսկ os.getenv("OPENAI_API_KEY")
առբերում է API ստեղնը: Այս կարգավորումն ապահով է պահում ձեր API բանալին: 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." }
Ստեղծեք տեքստային ներկառուցումներ
# 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 ինդեքս և ներկառուցումներ հիմնավորման տվյալների համար
# 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
. յուրաքանչյուր ներկառուցման չափը, որն անհրաժեշտ է FAISS ինդեքսը սկզբնավորելու համար:index = faiss.IndexFlatL2(dimension)
: Ստեղծում է FAISS ինդեքս, որն օգտագործում է Էվկլիդյան հեռավորությունը (L2) նմանության համար:grounding_data
ում յուրաքանչյուր մուտքի համար այս կոդը ստեղծում է ներկառուցում և ավելացնում այն FAISS ինդեքսում:
Վեկտորային որոնման գործառույթ
# 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
. փոխակերպում է հարցման տեքստը ներկառուցվող վեկտորի:FAISS Search
. որոնում է հարցմանը ամենամոտ վեկտորի ինդեքսը:Threshold Check
. Եթե ամենամոտ վեկտորի հեռավորությունը (D) ցածր է շեմից, այն վերադարձնում է հիմնավորման տեղեկատվությունը: Հակառակ դեպքում դա ցույց է տալիս, որ հուսալի հիմնավորում չի հայտնաբերվել:Հարցրեք LLM-ին
Մենք հարցում ենք անում LLM-ին՝ օգտագործելով OpenAI-ի chatgpt api և 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
Ընդլայնված արձագանք
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.)"
Սահմանեք հիմնական գործառույթը
Հիմնական գործառույթը միավորում է ամեն ինչ՝ թույլ տալով մուտքագրել թեմա, հարցումներ կատարել LLM-ում և ստուգել, թե արդյոք պատասխանը համապատասխանում է հիմնավորման տվյալներին:
# 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()
Կանչեք այս հատվածը՝ օգտագործելով
python groundin_llm.py
Պատասխան.
Եթե նկատում եք պատասխանը, չնայած LLM-ի պատասխանը եղել է «Առավել առաջարկվող ծրագրավորման լեզուներից մեկը մեքենայական ուսուցման համար…», հիմնավորված պատասխանը եղել է «Java-ն հիանալի է, այն ապահովում է մեքենայական ուսուցման կոդի մեծ մասը, այն ունի հարուստ շարք: մատչելի գրադարաններ»:
Դա հնարավոր է օգտագործելով Meta-ի FAISS գրադարանը վեկտորի որոնման համար՝ հիմնված նմանության վրա:
Գործընթացը :
Ահա կոդը՝ https://github.com/sundeep110/groundingLLMs
Happy Grounding!!