كيفية إضافة ذاكرة لكل من الوكيل وأدواته في LangChain؟

Kyfyt Adaft Dhakrt Lkl Mn Alwkyl Wadwath Fy Langchain



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

مخطط سريع

ستوضح هذه المشاركة ما يلي:

كيفية إضافة ذاكرة لكل من الوكيل وأدواته في LangChain؟

إن إضافة ذاكرة إلى الوكلاء والأدوات تمكنهم من العمل بشكل أفضل مع القدرة على استخدام سجل الدردشة الخاص بالنموذج. باستخدام الذاكرة، يمكن للوكيل أن يقرر بكفاءة الأداة التي سيتم نشرها ومتى. ويفضل استخدام ' اقرأ الذاكرة فقط ' لكل من الوكلاء والأدوات، لذا لن يتمكنوا من تعديله. للتعرف على عملية إضافة الذاكرة إلى كل من الوكلاء والأدوات في LangChain، اتبع الخطوات المذكورة:







الخطوة 1: تثبيت الأطر

بادئ ذي بدء، قم بتثبيت langchain-experimental الوحدة للحصول على تبعياتها لبناء نماذج وأدوات اللغة للوكيل. LangChain التجريبية هي الوحدة التي تحصل على التبعيات لبناء النماذج التي تستخدم في الغالب للتجارب والاختبارات:



نقطة تثبيت لانجشين - تجريبي



احصل على ال نتائج بحث جوجل وحدات مع تبعيات OpenAI للحصول على الإجابات الأكثر صلة من الإنترنت:





نقطة تثبيت openai جوجل - يبحث - نتائج

الخطوة 2: إعداد البيئات

لبناء النموذج الذي يحصل على الإجابات من الإنترنت، يلزم إعداد البيئات باستخدام OpenAI و SerpAPi المفاتيح:



يستورد أنت
يستورد com.getpass

أنت. تقريبًا [ 'OPENAI_API_KEY' ] = com.getpass. com.getpass ( 'مفتاح واجهة برمجة تطبيقات OpenAI:' )
أنت. تقريبًا [ 'SERPAPI_API_KEY' ] = com.getpass. com.getpass ( 'مفتاح واجهة برمجة تطبيقات Serpapi:' )

الخطوة 3: استيراد المكتبات

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

من لانجشين. عملاء يستورد ZeroShotAgent , أداة , AgentExecutor
من لانجشين. ذاكرة يستورد ذاكرة المخزن المؤقت للمحادثة , قراءة فقطالذاكرة المشتركة
من لانجشين. llms يستورد OpenAI
#احصل على المكتبة ل بناء السلسلة باستخدام LangChain
من لانجشين. السلاسل يستورد LLMChain
من لانجشين. حث يستورد قالب موجه
#احصل على المكتبة ل الحصول على المعلومات من الإنترنت
من لانجشين. خدمات يستورد SerpAPIWrapper

الخطوة 4: إضافة ReadOnlyMemory

قم بتكوين القالب للوكيل للبدء في تنفيذ المهام بمجرد قيام المستخدم بتوفير الإدخال. بعد ذلك قم بإضافة 'ذاكرة المحادثة المؤقتة ()' لتخزين محفوظات الدردشة الخاصة بالنموذج وتهيئة الملف 'اقرأ الذاكرة فقط' للوكلاء وأدواته:

نموذج = '' 'هذه محادثة بين إنسان وروبوت:

{تاريخ الدردشة}
# اضبط البنية لاستخراج الملخص الدقيق والسهل
تلخيص الدردشة لـ {input}:
'
''

اِسْتَدْعَى = قالب موجه ( input_variables = [ 'مدخل' , 'تاريخ الدردشة' ] , نموذج = نموذج )
ذاكرة = ذاكرة المخزن المؤقت للمحادثة ( Memory_key = 'تاريخ الدردشة' )
اقرأ الذاكرة فقط = قراءة فقطالذاكرة المشتركة ( ذاكرة = ذاكرة )
#سلسلة ملخصة لتكامل جميع المكونات ل الحصول على ملخص المحادثة
Summary_chain = LLMChain (
LLM = OpenAI ( ) ,
اِسْتَدْعَى = اِسْتَدْعَى ,
مطول = حقيقي ,
ذاكرة = اقرأ الذاكرة فقط ,
)

الخطوة 5: إعداد الأدوات

الآن، قم بإعداد أدوات مثل البحث والملخص للحصول على الإجابة من الإنترنت مع ملخص الدردشة:

يبحث = SerpAPIWrapper ( )
أدوات = [
أداة (
اسم = 'يبحث' ,
func = يبحث. يجري ,
وصف = 'الردود المناسبة على الاستفسارات المستهدفة حول الأحداث الأخيرة' ,
) ,
أداة (
اسم = 'ملخص' ,
func = Summary_chain. يجري ,
وصف = 'مفيد في تلخيص الدردشة ويجب أن يكون الإدخال في هذه الأداة عبارة عن سلسلة تمثل من سيقرأ هذا الملخص' ,
) ,
]

الخطوة 6: بناء الوكيل

قم بتكوين الوكيل بمجرد أن تصبح الأدوات جاهزة لأداء المهام المطلوبة واستخراج الإجابات من الإنترنت. ال ' بادئة 'يتم تنفيذ المتغير قبل أن يقوم الوكلاء بتعيين أي مهمة للأدوات و' لاحقة 'يتم تنفيذه بعد أن تستخرج الأدوات الإجابة:

بادئة = '' 'قم بإجراء محادثة مع إنسان، وأجب عن الأسئلة التالية بأفضل ما يمكنك من خلال الوصول إلى الأدوات التالية:' ''
لاحقة = '' 'يبدأ!'
#بناء ل الوكيل لبدء استخدام الأدوات أثناء استخدام الذاكرة
{ تاريخ الدردشة }
سؤال : { مدخل }
{ Agent_Scratchpad } '' '

موجه = ZeroShotAgent.create_prompt(
#configure قوالب المطالبة لفهم سياق السؤال
أدوات،
بادئة = بادئة،
لاحقة = لاحقة،
input_variables=['
مدخل '،' تاريخ الدردشة '،' Agent_Scratchpad ']،
)

الطريقة الأولى: استخدام ReadOnlyMemory

بمجرد تعيين الوكيل لتنفيذ الأدوات، يصبح النموذج المزود بـ ReadOnlyMemory هو يفضل طريقة بناء وتنفيذ السلاسل لجلب الإجابات والعملية هي كما يلي:

الخطوة 1: بناء السلسلة

الخطوة الأولى في هذه الطريقة هي بناء السلسلة والمنفذ للملف 'زيرو شوت إيجنت ()' مع حججها. ال 'LLMChain ()' يتم استخدامه لبناء الاتصال بين جميع الدردشات في نموذج اللغة باستخدام وسيطات llm والموجهات. يستخدم الوكيل llm_chain والأدوات والمطول كوسيطة له ويبني agent_chain لتنفيذ كل من الوكلاء وأدواته باستخدام الذاكرة:

llm_chain = LLMChain ( LLM = OpenAI ( درجة حرارة = 0 ) , اِسْتَدْعَى = اِسْتَدْعَى )
عامل = ZeroShotAgent ( llm_chain = llm_chain , أدوات = أدوات , مطول = حقيقي )
agent_chain = AgentExecutor. from_agent_and_tools (
عامل = عامل , أدوات = أدوات , مطول = حقيقي , ذاكرة = ذاكرة
)

الخطوة 2: اختبار السلسلة

اتصل ب agent_chain باستخدام طريقة run() لطرح السؤال من الإنترنت:

agent_chain. يجري ( مدخل = 'ما هو لانجشين' )

قام الوكيل باستخراج الإجابة من الإنترنت باستخدام أدوات البحث:

يمكن للمستخدم طرح سؤال المتابعة غير الواضح لاختبار الذاكرة المرفقة بالوكيل:

agent_chain. يجري ( مدخل = 'من طورها؟' )

استخدم الوكيل الدردشة السابقة لفهم سياق الأسئلة وجلب الإجابات كما هو موضح في لقطة الشاشة التالية:

يستخدم الوكيل أداة (summary_chain) لاستخراج ملخص لجميع الإجابات المستخرجة مسبقًا باستخدام ذاكرة الوكيل:

agent_chain. يجري (
مدخل = 'شكرًا! لخص المحادثة لطفلي البالغ من العمر 5 سنوات'
)

انتاج |
تم عرض ملخص الأسئلة المطروحة مسبقًا لطفل عمره 5 سنوات في لقطة الشاشة التالية:

الخطوة 3: اختبار الذاكرة

قم بطباعة الذاكرة العازلة لاستخراج الدردشات المخزنة فيها باستخدام الكود التالي:

مطبعة ( agent_chain. ذاكرة . متعادل )

وقد تم عرض الدردشات بترتيبها الصحيح دون أي تعديل في المقتطف التالي:

الطريقة الثانية: استخدام نفس الذاكرة لكل من العامل والأدوات

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

الخطوة 1: بناء السلسلة

استخدام الكود الكامل من القالب لبناء الأدوات والسلاسل للوكلاء مع تغيير بسيط حيث لم تتم إضافة ReadOnlyMemory هذه المرة:

نموذج = '' 'هذه محادثة بين إنسان وروبوت:

{تاريخ الدردشة}

اكتب ملخص المحادثة لـ {input}:
'
''
# بناء هيكل الدردشة واجهه المستخدم باستخدام قالب المطالبة عن طريق إضافة الذاكرة مع السلسلة
اِسْتَدْعَى = قالب موجه ( input_variables = [ 'مدخل' , 'تاريخ الدردشة' ] , نموذج = نموذج )
ذاكرة = ذاكرة المخزن المؤقت للمحادثة ( Memory_key = 'تاريخ الدردشة' )
Summary_chain = LLMChain (
LLM = OpenAI ( ) ,
اِسْتَدْعَى = اِسْتَدْعَى ,
مطول = حقيقي ,
ذاكرة = ذاكرة ,
)
# بناء الأدوات ( بحث و تلخيص ) ل تكوين الوكلاء
يبحث = SerpAPIWrapper ( )
أدوات = [
أداة (
اسم = 'يبحث' ,
func = يبحث. يجري ,
وصف = 'الردود المناسبة على الاستفسارات المستهدفة حول الأحداث الأخيرة' ,
) ,
أداة (
اسم = 'ملخص' ,
func = Summary_chain. يجري ,
وصف = 'من المفيد الحصول على ملخص الدردشة وتحتاج إلى إدخال سلسلة لهذه الأداة تمثل من سيقرأ هذا الملخص' ,
) ,
]
#شرح الخطوات ل الوكيل لاستخدام الأدوات لاستخراج المعلومات ل المحادثة
بادئة = '' 'قم بإجراء محادثة مع إنسان، والإجابة على الاستفسارات بأفضل طريقة ممكنة من خلال الوصول إلى الأدوات التالية:' ''
لاحقة = '' 'يبدأ!'
#بناء ل الوكيل لبدء استخدام الأدوات أثناء استخدام الذاكرة
{ تاريخ الدردشة }
سؤال : { مدخل }
{ Agent_Scratchpad } '' '

موجه = ZeroShotAgent.create_prompt(
#configure قوالب المطالبة لفهم سياق السؤال
أدوات،
بادئة = بادئة،
لاحقة = لاحقة،
input_variables=['
مدخل '،' تاريخ الدردشة '،' Agent_Scratchpad ']،
)
#دمج جميع المكونات أثناء بناء الوكيل المنفذ
llm_chain = LLMChain(llm=OpenAI(درجة الحرارة=0)، موجه=مطالبة)
الوكيل = ZeroShotAgent(llm_chain=llm_chain، الأدوات=أدوات، مطول=صحيح)
agent_chain = AgentExecutor.from_agent_and_tools(
الوكيل = الوكيل، الأدوات = الأدوات، المطول = صحيح، الذاكرة = الذاكرة
)

الخطوة 2: اختبار السلسلة

قم بتشغيل الكود التالي:

agent_chain. يجري ( مدخل = 'ما هو لانجشين' )

يتم عرض الإجابة وتخزينها في الذاكرة بنجاح:

اطرح سؤال المتابعة دون إعطاء الكثير من السياق:

agent_chain. يجري ( مدخل = 'من طورها؟' )

يستخدم الوكيل الذاكرة لفهم السؤال عن طريق تحويله ثم طباعة الإجابة:

احصل على ملخص الدردشة باستخدام الذاكرة المرفقة بالوكيل:

agent_chain. يجري (
مدخل = 'شكرًا! لخص المحادثة لطفلي البالغ من العمر 5 سنوات'
)

انتاج |
تم استخراج الملخص بنجاح، وحتى الآن يبدو كل شيء كما هو ولكن التغيير يأتي في الخطوة التالية:

الخطوة 3: اختبار الذاكرة

استخراج رسائل الدردشة من الذاكرة باستخدام الكود التالي:

مطبعة ( agent_chain. ذاكرة . متعادل )

قامت الأداة بتعديل السجل بإضافة سؤال آخر لم يتم طرحه في الأصل. يحدث هذا عندما يفهم النموذج السؤال باستخدام اسأل نفسك سؤال. تعتقد الأداة عن طريق الخطأ أن المستخدم قد طلبها وتتعامل معها كاستعلام منفصل. لذلك فهو يضيف هذا السؤال الإضافي إلى الذاكرة أيضًا والذي يمكن استخدامه بعد ذلك للحصول على سياق المحادثة:

هذا كل شئ حتى الان.

خاتمة

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