إذا طلبت من طالب ماجستير في القانون "اقتراح لغة برمجة رائعة للتعلم الآلي"
ستكون استجابة برنامج الماجستير في القانون: "تعتبر لغة بايثون واحدة من أكثر لغات البرمجة الموصى بها للتعلم الآلي. تعد لغة بايثون لغة برمجة عالية المستوى..."
ماذا لو كنت تريد من مؤسستك تقديم معلومات محددة وموثقة عن المؤسسة، أي تعزيز الاستجابة بمعلومات مؤسسية موثوقة؟
دعونا نجعل ذلك يحدث عند التفاعل مع LLM
يتم تدريب برامج LLM الشهيرة مثل ChatGPT من OpenAI وGemini من Google على البيانات المتاحة للجمهور. غالبًا ما تفتقر إلى معلومات خاصة بالمنظمة. هناك أوقات معينة ترغب فيها المنظمات في الاعتماد على برامج LLM. ومع ذلك، قد ترغب في تحسين الاستجابة الخاصة بمنظمة معينة أو إضافة إخلاءات المسؤولية عندما لا تتوفر بيانات أساسية.
وتُعرف هذه العملية باسم تأريض استجابة LLM باستخدام قواعد المعرفة.
في حين أنني أستطيع فقط التحدث عن ذلك.
كمهندس فإن النظر إلى بعض أجزاء التعليمات البرمجية يمنحني الثقة.
إن تنفيذها يزيد من ثقتي ويمنحني السعادة، كما أن المشاركة تمنحني الرضا 😄
تثبيت المكتبات المطلوبة
pip install openai faiss-cpu numpy python-dotenv
openai
: للتفاعل مع نماذج GPT والتضمينات الخاصة بـ OpenAI.faiss-cpu
: مكتبة من الذكاء الاصطناعي الخاص بفيسبوك للبحث عن التشابه بكفاءة، تُستخدم لتخزين عمليات التضمين والبحث عنها.numpy
: للعمليات العددية، بما في ذلك التعامل مع التضمينات كمتجهات.python-dotenv
: لتحميل متغيرات البيئة (على سبيل المثال، مفاتيح API) من ملف .env
بشكل آمن.
إعداد متغيرات البيئة
.env
في دليل المشروع الخاص بك. أضف مفتاح API الخاص بـ OpenAI إلى هذا الملف. 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 باستخدام واجهة برمجة تطبيقات Chatgpt الخاصة بـ OpenAI ونموذج 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 رائعة، فهي تدعم معظم أكواد التعلم الآلي، ولديها مجموعة غنية من المكتبات المتاحة".
من الممكن القيام بذلك باستخدام مكتبة FAISS الخاصة بـ Meta للبحث عن المتجهات استنادًا إلى التشابه.
عملية :
هذا هو الكود: https://github.com/sundeep110/groundingLLMs
تأريض سعيد!!