"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > جزء LangChain الاستفادة من الذاكرة والتخزين في LangChain: دليل شامل

جزء LangChain الاستفادة من الذاكرة والتخزين في LangChain: دليل شامل

تم النشر بتاريخ 2024-08-25
تصفح:439

LangChain Part  Leveraging Memory and Storage in LangChain: A Comprehensive Guide

LangChain الجزء 4 - الاستفادة من الذاكرة والتخزين في LangChain: دليل شامل

يمكن العثور على الكود هنا: GitHub - jamesbmour/blog_tutorials:

في عالم الذكاء الاصطناعي للمحادثة ونماذج اللغة الذي يتطور باستمرار، يعد الحفاظ على السياق وإدارة تدفق المعلومات بكفاءة مكونات حاسمة لبناء تطبيقات ذكية. يوفر LangChain، وهو إطار عمل قوي مصمم للعمل مع نماذج اللغات الكبيرة (LLMs)، أدوات قوية لإدارة الذاكرة واستمرارية البيانات، مما يتيح إنشاء أنظمة تدرك السياق.

في هذا الدليل، سنتعمق في الفروق الدقيقة في الاستفادة من الذاكرة والتخزين في LangChain لإنشاء تطبيقات أكثر ذكاءً وأكثر استجابة.

1. العمل مع الذاكرة في LangChain

تسمح إدارة الذاكرة في LangChain للتطبيقات بالاحتفاظ بالسياق، مما يجعل التفاعلات أكثر تماسكًا وملاءمة للسياق. دعونا نستكشف أنواع الذاكرة المختلفة وحالات استخدامها.

1.1. أنواع الذاكرة

يوفر 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({}))

1.2. اختيار نوع الذاكرة المناسب لحالة الاستخدام الخاصة بك

يعتمد اختيار نوع الذاكرة المناسب على عدة عوامل:

  • المدة والتعقيد: تستفيد الجلسات القصيرة من الاحتفاظ بالسياق التفصيلي باستخدام ConversationBufferMemory، بينما قد تتطلب التفاعلات طويلة المدى التلخيص عبر ConversationSummaryMemory.
  • التفاصيل مقابل النظرة العامة: تحديد ما إذا كان سجل التفاعل التفصيلي أو الملخصات عالية المستوى أكثر قيمة لتطبيقك.
  • الأداء: ضع في اعتبارك المفاضلة بين حجم الذاكرة وسرعة الاسترجاع.

حالات الاستخدام:

  • الذاكرة المؤقتة للمحادثة: مثالية لدعم العملاء السريع أو التفاعلات على شكل الأسئلة الشائعة.
  • ذاكرة ملخص المحادثة: الأنسب للارتباطات طويلة المدى مثل إدارة المشروع أو التفاعلات المستمرة مع العملاء.

1.3. دمج الذاكرة في السلاسل والوكلاء

يمكن دمج الذاكرة بسلاسة في سلاسل 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 لتذكر التفاعلات السابقة، مما يتيح المزيد من المحادثات الطبيعية.

2. استمرار واسترجاع البيانات

يضمن التخزين المستمر الحفاظ على سجل المحادثة وسياقها عبر الجلسات، مما يتيح الاستمرارية في التفاعلات.

2.1. تخزين تاريخ المحادثة وحالتها

للاستمرار الأساسي، يمكنك استخدام التخزين المستند إلى الملفات مع 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)

تسمح لك هذه الطريقة بالاحتفاظ بسجل المحادثات بتنسيق بسيط يمكن للإنسان قراءته.

2.2. التكامل مع قواعد البيانات وأنظمة التخزين

لتخزين أكثر قابلية للتطوير وكفاءة، يوصى بالتكامل مع قواعد البيانات مثل 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({}))

3 تحسين استخدام الذاكرة والأداء

لضمان بقاء تطبيقك مستجيبًا، ضع في اعتبارك استراتيجيات التحسين التالية:

  • هياكل بيانات فعالة: استخدم بنيات مثل deque لإدارة المخازن المؤقتة ذات الحجم الثابت.
  • استراتيجيات التخزين المؤقت: تقليل استعلامات قاعدة البيانات عن طريق تنفيذ التخزين المؤقت للبيانات التي يتم الوصول إليها بشكل متكرر.
  • تقليم البيانات: تقليم أو تلخيص البيانات القديمة بانتظام للحفاظ على حجم ذاكرة يمكن التحكم فيه.

إليك مثال لفئة الذاكرة ذات التخزين المؤقت الأساسي:

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

بيان الافراج يتم استنساخ هذه المقالة على: https://dev.to/jamesbmour/langchain-bart-4-leveraging-memory-and-storage-in-langchain-a-commrensue-h4mm؟1 إذا كان هناك أي انتهاك ، فيرجى الاتصال بـ [email protected] لحذفه.
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3