يمكن العثور على الكود هنا: GitHub - jamesbmour/blog_tutorials:
في عالم الذكاء الاصطناعي للمحادثة ونماذج اللغة الذي يتطور باستمرار، يعد الحفاظ على السياق وإدارة تدفق المعلومات بكفاءة مكونات حاسمة لبناء تطبيقات ذكية. يوفر LangChain، وهو إطار عمل قوي مصمم للعمل مع نماذج اللغات الكبيرة (LLMs)، أدوات قوية لإدارة الذاكرة واستمرارية البيانات، مما يتيح إنشاء أنظمة تدرك السياق.
في هذا الدليل، سنتعمق في الفروق الدقيقة في الاستفادة من الذاكرة والتخزين في LangChain لإنشاء تطبيقات أكثر ذكاءً وأكثر استجابة.
تسمح إدارة الذاكرة في LangChain للتطبيقات بالاحتفاظ بالسياق، مما يجعل التفاعلات أكثر تماسكًا وملاءمة للسياق. دعونا نستكشف أنواع الذاكرة المختلفة وحالات استخدامها.
يوفر LangChain أنواعًا مختلفة من الذاكرة لمعالجة سيناريوهات مختلفة. وسنركز هنا على نوعين رئيسيين:
الذاكرة المؤقتة للمحادثة
يعد هذا النوع من الذاكرة مثاليًا للاحتفاظ بالسياق على المدى القصير، والتقاط وتذكر التفاعلات الأخيرة في المحادثة.
from langchain.memory import ConversationBufferMemory memory = ConversationBufferMemory() memory.save_context({"input": "Hi, I'm Alice"}, {"output": "Hello Alice, how can I help you today?"}) memory.save_context({"input": "What's the weather like?"}, {"output": "I'm sorry, I don't have real-time weather information. Is there anything else I can help you with?"}) print(memory.load_memory_variables({}))
ذاكرة ملخص المحادثة
للمحادثات الطويلة، ذاكرة ملخص المحادثة هي خيار رائع. وهو يلخص النقاط الرئيسية، ويحافظ على السياق دون تفاصيل كثيرة.
from langchain.memory import ConversationSummaryMemory from langchain.llms import Ollama llm = Ollama(model='phi3',temperature=0) memory = ConversationSummaryMemory(llm=llm) memory.save_context({"input": "Hi, I'm Alice"}, {"output": "Hello Alice, how can I help you today?"}) memory.save_context({"input": "I'm looking for a good Italian restaurant"}, {"output": "Great! I'd be happy to help you find a good Italian restaurant. Do you have any specific preferences or requirements, such as location, price range, or specific dishes you're interested in?"}) print(memory.load_memory_variables({}))
يعتمد اختيار نوع الذاكرة المناسب على عدة عوامل:
حالات الاستخدام:
يمكن دمج الذاكرة بسلاسة في سلاسل LangChain ووكلاءها لتعزيز قدرات المحادثة.
from langchain.chains import ConversationChain from langchain.memory import ConversationBufferMemory # llm = OpenAI(temperature=0) memory = ConversationBufferMemory() conversation = ConversationChain( llm=llm, memory=memory, verbose=True ) conversation.predict(input="Hi, I'm Alice") conversation.predict(input="What's my name?")
يوضح هذا المثال كيف يمكن استخدام ConversationBufferMemory لتذكر التفاعلات السابقة، مما يتيح المزيد من المحادثات الطبيعية.
يضمن التخزين المستمر الحفاظ على سجل المحادثة وسياقها عبر الجلسات، مما يتيح الاستمرارية في التفاعلات.
للاستمرار الأساسي، يمكنك استخدام التخزين المستند إلى الملفات مع JSON:
import json class PersistentMemory: def __init__(self, file_path): self.file_path = file_path self.load_memory() def load_memory(self): try: with open(self.file_path, 'r') as f: self.chat_memory = json.load(f) except FileNotFoundError: self.chat_memory = {'messages': []} def save_memory(self): with open(self.file_path, 'w') as f: json.dump({'messages': self.chat_memory['messages']}, f) # Usage memory = PersistentMemory(file_path='conversation_history.json') print(memory.chat_memory)
تسمح لك هذه الطريقة بالاحتفاظ بسجل المحادثات بتنسيق بسيط يمكن للإنسان قراءته.
لتخزين أكثر قابلية للتطوير وكفاءة، يوصى بالتكامل مع قواعد البيانات مثل SQLite:
import sqlite3 class SQLiteMemory: def __init__(self, db_path): self.db_path = db_path self.conn = sqlite3.connect(db_path) self.create_table() def create_table(self): cursor = self.conn.cursor() cursor.execute(''' CREATE TABLE IF NOT EXISTS conversations (id INTEGER PRIMARY KEY, input TEXT, output TEXT) ''') self.conn.commit() def save_context(self, inputs, outputs): cursor = self.conn.cursor() cursor.execute('INSERT INTO conversations (input, output) VALUES (?, ?)', (inputs['input'], outputs['output'])) self.conn.commit() def load_memory_variables(self, inputs): cursor = self.conn.cursor() cursor.execute('SELECT input, output FROM conversations ORDER BY id DESC LIMIT 10') rows = cursor.fetchall() history = "\\n".join([f"Human: {row[0]}\\nAI: {row[1]}" for row in reversed(rows)]) return {"history": history } # Usage memory = SQLiteMemory('conversation_history.db') print(memory.load_memory_variables({}))
لضمان بقاء تطبيقك مستجيبًا، ضع في اعتبارك استراتيجيات التحسين التالية:
إليك مثال لفئة الذاكرة ذات التخزين المؤقت الأساسي:
import time class CachedSQLiteMemory(SQLiteMemory): def __init__(self, db_path, cache_ttl=60): super().__init__(db_path) self.cache = None self.cache_time = 0 self.cache_ttl = cache_ttl def load_memory_variables(self, inputs): current_time = time.time() if self.cache is None or (current_time - self.cache_time) > self.cache_ttl: var = self.cache self.cache = super().load_memory_variables(inputs) self.cache_time = current_time return self.cache memory = CachedSQLiteMemory('conversation_history.db', cache_ttl=30)
يقوم هذا التنفيذ بتخزين نتائج استعلامات قاعدة البيانات مؤقتًا لفترة محددة، مما يقلل الحمل على قاعدة البيانات ويحسن أداء التطبيقات التي تصل إلى بيانات الذاكرة بشكل متكرر.
تعد الإدارة الفعالة للذاكرة حجر الزاوية في بناء تطبيقات الذكاء الاصطناعي للمحادثة الذكية والمدركة للسياق. يوفر LangChain إطارًا مرنًا وقويًا لإدارة الذاكرة، مما يسمح للمطورين بتخصيص أنواع الذاكرة لحالات استخدام محددة، وتنفيذ حلول تخزين مستمرة، وتحسين الأداء للتطبيقات واسعة النطاق.
من خلال اختيار نوع الذاكرة المناسب، ودمج التخزين المستمر، والاستفادة من التقنيات المتقدمة مثل فئات الذاكرة المخصصة واستراتيجيات التخزين المؤقت، يمكنك إنشاء أنظمة ذكاء اصطناعي متطورة تحافظ على السياق، وتحسن تجربة المستخدم، وتعمل بكفاءة حتى مع الحجم والتعقيد من التفاعلات تنمو.
باستخدام هذه الأدوات والتقنيات المتاحة لك، أنت مجهز جيدًا لتسخير الإمكانات الكاملة لـ LangChain في إنشاء تطبيقات الذكاء الاصطناعي سريعة الاستجابة وذكية وواعية بالسياق. سواء كنت تقوم بتطوير روبوتات دعم العملاء، أو المساعدين الافتراضيين، أو أنظمة المحادثة المعقدة، فإن إتقان الذاكرة والتخزين في LangChain سيكون عاملاً رئيسيًا في نجاحك.
إذا كنت ترغب في دعم كتاباتي أو شراء بيرة لي:
https://buymeacoffee.com/bmours
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3