ذاكرة LLM

معظم تطبيقات LLM تحتوي على واجهة محادثة مشابهة لتطبيق WeChat. وظيفة مهمة في عملية الحوار الذكي هي القدرة على الرجوع إلى المعلومات التي تم ذكرها سابقًا في المحادثة، تمامًا مثل عملية الحوار البشرية دون الحاجة إلى تكرار المحتوى السابق. يُعيد البشر تلقائيًا استحضار المعلومات السابقة.

القدرة على تخزين معلومات المحادثة السابقة في حقل LLM عادةً ما تشار إليها باسم "الذاكرة"، تمامًا كما لدى البشر القدرة على التذكر. يغلف LangChain مكونات وظيفة الذاكرة المختلفة، والتي يمكن استخدامها بشكل منفصل أو دمجها بسلاسة في سلسلة.

تحتاج مكونات الذاكرة إلى تنفيذ عمليتين أساسيتين: القراءة والكتابة.

بالنسبة لمكونات مهمة السلسلة المتنوعة لـ LangChain، إذا قمت بتمكين وظيفة الذاكرة، فسيُنفّذ منطقًا مماثلًا للخطوات التالية:

  1. عند استلام إدخال المستخدم الأولي، سيحاول مكون المهمة السلسلية الاستعلام عن المعلومات التاريخية ذات الصلة من مكون الذاكرة، ثم يربط المعلومات التاريخية وإدخال المستخدم في استفسارات ليمررها إلى LLM.
  2. عند استلام المحتوى المُرجَع من LLM، سيُخزّن النتيجة تلقائيًا في مكون الذاكرة ليتم استعلامه بسهولة في المرة القادمة.

يُظهر العملية الخاصة بتنفيذ قدرة الذاكرة في LangChain كما هو مبين في الرسم البياني أدناه: Memory Process

دمج مكونات الذاكرة في النظام

قبل استخدام مكونات الذاكرة، تحتاج إلى النظر في الأسئلتين التاليتين:

  • كيفية تخزين بيانات الرسائل التاريخية
  • كيفية الاستعلام عن بيانات الرسائل التاريخية

التخزين: قائمة رسائل المحادثة

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

الاستعلام: كيفية استعلام رسائل المحادثة التاريخية ذات الصلة

لتنفيذ قدرة الذاكرة في LLM، الأمر الأساسي هو دُمج محتوى الرسائل التاريخية كمعلومات الخلفية في الاستفسارات. وبهذه الطريقة، يمكن لـ LLM الرجوع إلى معلومات الخلفية عند الرد على الأسئلة.

تخزين بيانات الرسائل التاريخية نسبيًا سهل، والجانب الأكثر تحديًا هو كيفية استعلام الرسائل التاريخية ذات الصلة بالمحتوى الحالي. السبب الرئيسي للحاجة إلى استعلام الرسائل التاريخية ذات الصلة بالمحادثة الحالية يرجع إلى الحد الأقصى للرمز في LLM؛ لا يمكننا ضغط كل محتوى المحادثة التاريخية في الاستفسارات لتغذية الذكاء الاصطناعي.

تشمل استراتيجيات الاستعلام عن الرسائل التاريخية المشتركة:

  • الاستعلام فقط عن أحدث N رسائل كرسالة خلفية للاستفسارات
  • استخدام الذكاء الاصطناعي للملخصات الرسائل التاريخية، حيث تكون الملخصات خلفية للاستفسارات
  • الاستفادة من قاعدة بيانات نواقل للاستعلام عن الرسائل التاريخية المماثلة للمحادثة الحالية كخلفية للاستفسارات

مثال على استخدام مكون LangChain

دعنا نلقي نظرة على شكل مكون الذاكرة في LangChain. هنا، سوف نقدم المعرفة الأساسية حول التفاعل مع مكون الذاكرة.

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

from langchain.memory import ConversationBufferMemory

memory = ConversationBufferMemory()
memory.chat_memory.add_user_message("مرحبا!")
memory.chat_memory.add_ai_message("شو أخبارك؟")
  • ملاحظة: يوفر LangChain مكونات الذاكرة المتنوعة باستخدام ميزات مماثلة.

خلاصة

بعد ذلك، دعنا نرى كيفية استخدام مكون الذاكرة في السلسلة. أدناه، سنقدم كيفية استخدام LLM ونموذج الدردشة، ضمن LangChain، لاستخدام مكون الذاكرة.

مثال على استخدام LLM مع مكون الذاكرة

from langchain_openai import OpenAI
from langchain_core.prompts import PromptTemplate
from langchain.chains import LLMChain
from langchain.memory import ConversationBufferMemory

llm = OpenAI(temperature=0)

template = """أنت روبوت محادثات عظيم تخاطب البشر.

المحادثة السابقة:
{chat_history}

سؤال جديد: {question}
إجابة الذكاء الاصطناعي:"""
prompt = PromptTemplate.from_template(template)

memory = ConversationBufferMemory(memory_key="chat_history")
conversation = LLMChain(
    llm=llm,
    prompt=prompt,
    verbose=True,
    memory=memory
)
conversation({"question": "مرحبا"})

مثال على نموذج الدردشة باستخدام مكون الذاكرة

من langchain_openai استيراد ChatOpenAI
من langchain.prompts استيراد (
    ChatPromptTemplate،
    MessagesPlaceholder،
    SystemMessagePromptTemplate،
    HumanMessagePromptTemplate،
)
من langchain.chains استيراد LLMChain
من langchain.memory استيراد ConversationBufferMemory

llm = ChatOpenAI()
prompt = ChatPromptTemplate(
    messages=[
        SystemMessagePromptTemplate.from_template(
            "أنت روبوت دردشة لطيف تتحدث مع إنسان."
        ),
        MessagesPlaceholder(variable_name="chat_history"),
        HumanMessagePromptTemplate.from_template("{question}")
    ]
)
memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)

conversation = LLMChain(
    llm=llm,
    prompt=prompt,
    verbose=True,
    memory=memory
)
conversation({"question": "مرحبًا"})