إصلاح خطأ ToolCallingAgentOutputParser الخاص بـ Langchain.js باستخدام Ollama LLM وأداة مخصصة

Temp mail SuperHeros
إصلاح خطأ ToolCallingAgentOutputParser الخاص بـ Langchain.js باستخدام Ollama LLM وأداة مخصصة
إصلاح خطأ ToolCallingAgentOutputParser الخاص بـ Langchain.js باستخدام Ollama LLM وأداة مخصصة

فهم وإصلاح أخطاء ToolCallingAgentOutputParser في Langchain.js

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

أحد هذه الأخطاء هو أن "parseResult on ToolCallingAgentOutputParser يعمل فقط على إخراج ChatGeneration"، والذي يمكن أن يحدث عند إنشاء أداة مخصصة داخل إطار عمل الوكيل. يعد فهم السبب الجذري لهذه المشكلة أمرًا بالغ الأهمية لضمان عمل الوكيل والأداة بشكل صحيح.

تستكشف هذه المقالة تنفيذًا بسيطًا لأداة مخصصة تضيف 2 إلى إدخال الأرقام، باستخدام createToolCallingAgent الخاص بـ Langchain ونموذج Ollama. من خلال تحليل الخطأ وسياقه، يمكننا فهم كيفية استكشاف الأخطاء وإصلاحها بشكل أفضل.

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

يأمر مثال للاستخدام
tool() تحدد هذه الوظيفة من Langchain.js أداة مخصصة تنفذ عملية ما. في هذه المقالة، يتم استخدامه لإنشاء أداة تضيف 2 إلى رقم الإدخال، وتغليف المنطق في بنية يمكن الاتصال بها بسهولة.
z.object() جزء من مكتبة Zod، يُستخدم للتحقق من صحة المخطط في Langchain. وهذا يضمن أن يكون الإدخال في الأداة المخصصة رقمًا، مما يوفر التحقق القوي من صحة الإدخال لمنع الأخطاء أثناء التنفيذ.
createToolCallingAgent() يقوم هذا الأمر بإنشاء وكيل يمكنه استدعاء الأدوات المحددة استجابةً لاستفسارات المستخدم. إنه أمر أساسي لدمج الأدوات مع نماذج اللغة مثل Ollama، مما يجعل من الممكن استدعاء الأدوات أثناء المحادثة.
ChatPromptTemplate.fromMessages() يُستخدم لإنشاء قالب مطالبة للدردشة باستخدام العناصر النائبة. ينظم هذا القالب أنواعًا مختلفة من الرسائل (النظام، والرسائل البشرية، والعناصر النائبة) ليستخدمها الوكيل، مما يؤدي إلى تحسين تدفق المحادثة.
MessagesPlaceholder يعمل كعنصر نائب في قالب المطالبة للمحتوى الديناميكي، مثل سجل الدردشة أو لوحة مسودة الوكيل. يسمح هذا بإدخال سياق المحادثة ديناميكيًا أثناء التنفيذ.
AgentExecutor() تدير هذه الفئة تنفيذ الوكلاء والأدوات. في المثال، يساعد في تشغيل الاستعلام من خلال الوكيل وجمع النتيجة من مخرجات الأداة.
await agentExecutor.invoke() يستخدم لتشغيل الاستعلام من خلال الوكيل وانتظار النتيجة بشكل غير متزامن. يعد هذا أمرًا بالغ الأهمية للتفاعل مع نماذج وأدوات اللغة، لأنه يضمن انتظار الكود حتى تكتمل العملية قبل المضي قدمًا.
try-catch يتم استخدام بنية معالجة الأخطاء هذه ضمن الأداة المخصصة لاكتشاف أنواع الإدخال غير الصالحة. ومن خلال التقاط الاستثناءات، فإنه يضمن أن يقوم النظام بإرجاع رسائل خطأ مفيدة دون انقطاع تدفق التنفيذ.
expect() من مكتبة تأكيد Chai، يتم استخدام توقع () في اختبار الوحدة للتحقق من مخرجات الأداة المخصصة. من الضروري اختبار ما إذا كانت الأداة تعمل كما هو متوقع.

فهم الأداة المخصصة ومعالجة أخطاء الوكيل في Langchain.js

في المثال المقدم، نحن نعمل مع Langchain.js v2 لإنشاء أداة مخصصة تتكامل مع أولاما نموذج اللغة. الغرض الرئيسي من الأداة هو إجراء عملية حسابية بسيطة: إضافة 2 إلى قيمة الإدخال. تم تصميم الأداة باستخدام Langchain أداة الوظيفة، والتي تحدد الوظائف القابلة لإعادة الاستخدام والتي يمكن استدعاؤها بواسطة الوكيل. للتأكد من أن الأداة تعمل بشكل صحيح، يتم التحقق من صحة مخطط الإدخال من خلال مكتبة Zod، مما يضمن أن الإدخال هو رقم صالح. وهذا يضمن معالجة الأخطاء بشكل صحيح ويمنع الأداة من الفشل بسبب المدخلات غير الصالحة.

يتم بعد ذلك دمج الأداة المخصصة في وكيل باستخدام createToolCallingAgent وظيفة. يسمح هذا الأمر للوكيل باستدعاء الأداة عند الحاجة، ويتم تشغيل الوكيل بواسطة نموذج Ollama، الذي تم تكوينه بمعلمات محددة مثل درجة الحرارة للتحكم في إبداع الاستجابات. لتسهيل التفاعل السلس بين الوكيل والأداة، يتم استخدام قالب مطالبة الدردشة. ينظم هذا القالب المحادثة عن طريق تحديد أنواع مختلفة من الرسائل، مثل رسائل النظام والمدخلات البشرية والعناصر النائبة. العناصر النائبة، مثل الرسائل النائب، السماح للمحادثة بأن تكون ديناميكية، مع تضمين عناصر مثل سجل الدردشة.

إحدى المشكلات الرئيسية التي تم تناولها في هذا المثال هي معالجة الأخطاء حول تحليل مخرجات وكيل Langchain. رسالة الخطأ "parseResult on ToolCallingAgentOutputParser يعمل فقط على إخراج ChatGeneration" تنبع من عدم التطابق بين نوع الإخراج المتوقع بواسطة المحلل اللغوي والإخراج الفعلي الذي تم إنشاؤه. لمعالجة هذا الخطأ، يتم تغليف الأداة المخصصة بمنطق قوي، مما يضمن توافق جميع المدخلات والمخرجات مع التنسيقات المتوقعة. تتم إدارة هذا أيضًا بواسطة AgentExecutor فئة، التي تنسق تنفيذ الوكيل والأدوات، مع التأكد من مزامنة الاستعلام ومخرجات الأداة بشكل صحيح.

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

إصلاح خطأ Langchain.js باستخدام النهج المعياري

الحل 1: JavaScript مع النهج المعياري ومعالجة الأخطاء باستخدام Langchain.js وOllama LLM

import { tool } from "@langchain/core/tools";
import { z } from "zod";
import { Ollama } from "@langchain/ollama";
import { ChatPromptTemplate } from "@langchain/core/prompts";
import { createToolCallingAgent } from "langchain/agents";
import { AgentExecutor } from "langchain/agents";
// Initialize LLM with Ollama
const llm = new Ollama({
    model: "llama3",
    temperature: 0.7,
});
// Custom tool to add 2 to the input number
const magicTool = tool(
    async (input) => {
        return input + 2;
    },
    {
        name: "magic_function",
        description: "Applies a magic function to an input",
        schema: z.object({ input: z.number() }),
    };
);
const tools = [magicTool];
// Setup ChatPromptTemplate with placeholders
const prompt = ChatPromptTemplate.fromMessages([
    ["system", "You are a helpful assistant called iHelp"],
    ["placeholder", "{chat_history}"],
    ["human", "{input}"],
    ["placeholder", "{agent_scratchpad}"],
]);
// Agent configuration
const agent = createToolCallingAgent({ llm, tools, prompt });
// Execute agent query
const agentExecutor = new AgentExecutor({ agent, tools });
const query = "What is the value of magic_function(3)?";
await agentExecutor.invoke({ input: query });

معالجة محسنة للأخطاء لعامل Langchain.js

الحل 2: معالجة الأخطاء باستخدام اختبارات الوحدة للتحقق من صحة مخرجات الأداة المخصصة في Langchain.js

import { tool } from "@langchain/core/tools";
import { z } from "zod";
import { Ollama } from "@langchain/ollama";
import { createToolCallingAgent } from "langchain/agents";
import { AgentExecutor } from "langchain/agents";
// Initialize LLM with Ollama
const llm = new Ollama({ model: "llama3", temperature: 0.7 });
// Custom tool with added error handling
const magicTool = tool(
    async (input) => {
        try {
            if (typeof input !== "number") throw new Error("Invalid input type!");
            return input + 2;
        } catch (err) {
            return err.message;
        }
    },
    {
        name: "magic_function",
        description: "Adds 2 to input and handles errors",
        schema: z.object({ input: z.number() }),
    }
);
const tools = [magicTool];
// Agent and execution
const agent = createToolCallingAgent({ llm, tools });
const agentExecutor = new AgentExecutor({ agent, tools });
const query = "magic_function('abc')"; // Test with invalid input
await agentExecutor.invoke({ input: query });
// Unit test example
import { expect } from "chai";
it("should return 5 when input is 3", async () => {
    const result = await magicTool(3);
    expect(result).to.equal(5);
});

استكشاف دور الوكلاء في تكامل Langchain.js وOllama LLM

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

العنصر الرئيسي في هذا التكامل هو createToolCallingAgent وظيفة. تتيح هذه الوظيفة للوكيل تشغيل أدوات محددة عند الضرورة، مما يضمن إكمال المهام بدقة وكفاءة. في حين أن التركيز الأساسي غالبًا ما يكون على إنشاء الأداة نفسها، فإن فهم كيفية إدارة سير عمل الوكيل وتجنب أخطاء التحليل له نفس القدر من الأهمية. تحدث أخطاء مثل "parseResult on ToolCallingAgentOutputParser يعمل فقط على مخرجات ChatGeneration" عادةً عندما لا يكون مخرجات الوكيل متوافقة مع نظام التحليل، مما يسلط الضوء على الحاجة إلى المحاذاة المناسبة بين مخرجات الوكيل والتنسيق المتوقع.

استخدام قوالب سريعة، مثل ChatPromptTemplate، مما يزيد من إثراء التفاعل من خلال السماح بالرسائل الديناميكية والعناصر النائبة للسياق. يتيح ذلك للوكيل تعديل استجاباته بناءً على سجل الدردشة أو لوحة اللمس الخاصة بالوكيل. يمكن أن يؤدي تحسين قوالب المطالبة والتأكد من تحليل مخرجات الوكيل بشكل صحيح إلى منع العديد من الأخطاء الشائعة، مما يجعل تطبيقات Langchain.js الخاصة بك أكثر موثوقية وكفاءة.

الأسئلة المتداولة حول Langchain.js والوكلاء والأدوات

  1. ما هو الوكيل في Langchain.js؟
  2. الوكيل هو مكون يتفاعل مع الأدوات ونماذج اللغة لتنفيذ مهام محددة بناءً على استعلام المستخدم. يستخدم createToolCallingAgent وظيفة لتحريك الأدوات.
  3. كيف يمكنك حل الخطأ "parseResult on ToolCallingAgentOutputParser"؟
  4. يحدث هذا الخطأ عندما يكون إخراج الوكيل غير متوافق مع المحلل اللغوي. تأكد من أن الإخراج يطابق ما يتوقعه المحلل اللغوي واستخدم ملف ChatGeneration تنسيق الإخراج.
  5. ما هو الغرض من AgentExecutor؟
  6. ال AgentExecutor يدير تنفيذ الوكيل وأدواته، مما يسمح لك بتشغيل مهام سير العمل المعقدة في تطبيقات Langchain.js.
  7. كيف ChatPromptTemplate عمل؟
  8. ChatPromptTemplate ينظم رسائل الدردشة بتنسيق منظم، مما يسمح بإدراج المحتوى الديناميكي مثل سجل الدردشة ولوحة مسودة الوكيل في تدفق المحادثة.
  9. لماذا Zod المستخدمة في الأداة؟
  10. Zod يتم استخدامه للتحقق من صحة الإدخال، مما يضمن أن الإدخال إلى الأداة المخصصة من النوع الصحيح (على سبيل المثال، رقم)، مما يقلل من فرص حدوث أخطاء.

الأفكار النهائية حول معالجة الأخطاء في Langchain.js

يتطلب حل الخطأ "parseResult on ToolCallingAgentOutputParser يعمل فقط على إخراج ChatGeneration" محاذاة دقيقة بين مخرجات الوكيل الخاص بك وتوقعات التحليل الخاصة به. مع النهج الصحيح، يمكن تجنب هذا الخطأ.

باستخدام الأدوات المناسبة مثل Zod للتحقق من الصحة والتأكد من أن الوكلاء، مثل تلك التي تم إنشاؤها باستخدام Ollama، يتعاملون مع المدخلات والمخرجات بشكل صحيح، يمكنك إنشاء حلول قوية في Langchain.js دون مواجهة مشكلات التحليل.

المصادر والمراجع لحل أخطاء Langchain.js
  1. يشرح بالتفصيل وثائق Langchain الرسمية، التي توفر رؤى حول إنشاء الأداة وتكوينات الوكيل. وثائق لانجشين داخل.
  2. يشرح أيضًا استخدام Zod للتحقق من صحة الإدخال وتطبيقه في Langchain.js. توثيق زود داخل.
  3. يصف نموذج لغة Ollama وتنفيذه ضمن الوكلاء المخصصين. أولاما إل إل إم داخل.