Понимание и исправление ошибок 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 функция continue() используется в модульном тесте для проверки выходных данных специального инструмента. Это важно для проверки того, работает ли инструмент так, как ожидалось. |
Понимание пользовательского инструмента и обработки ошибок агента в Langchain.js
В приведенном примере мы работаем с Langchain.js v2 для создания специального инструмента, который интегрируется с Оллама языковая модель. Основная цель инструмента — выполнить простую математическую операцию: прибавить 2 к входному значению. Инструмент создан с использованием Langchain. инструмент function, определяющая повторно используемые функции, которые может вызывать агент. Чтобы гарантировать правильную работу инструмента, входная схема проверяется с помощью библиотеки Zod, гарантируя, что входные данные являются допустимым числом. Это обеспечивает правильную обработку ошибок и предотвращает сбой инструмента из-за неверных входных данных.
Пользовательский инструмент затем включается в агент с помощью createToolCallingAgent функция. Эта команда позволяет агенту вызывать инструмент, когда это необходимо, и агент работает на основе модели Олламы, которая настроена с использованием определенных параметров, таких как температура, для управления креативностью ответов. Для облегчения взаимодействия между агентом и инструментом используется шаблон подсказки чата. Этот шаблон организует диалог, определяя различные типы сообщений, такие как системные сообщения, вводимые пользователем данные и заполнители. Заполнители, такие как СообщенияЗаполнитель, сделайте разговор динамичным, включая такие элементы, как история чата.
Одной из ключевых проблем, рассматриваемых в этом примере, является обработка ошибок при синтаксическом анализе выходных данных агента Langchain. Сообщение об ошибке «parseResult on ToolCallingAgentOutputParser работает только с выходными данными ChatGeneration» возникает из-за несоответствия между типом выходных данных, ожидаемых анализатором, и фактическим сгенерированным выходным сигналом. Чтобы справиться с этой ошибкой, пользовательский инструмент включает в себя надежную логику, гарантирующую соответствие всех входных и выходных данных ожидаемым форматам. Этим дополнительно управляет АгентИсполнитель класс, который координирует выполнение агента и инструментов, обеспечивая правильную синхронизацию запроса и вывода инструмента.
Наконец, сценарии реализуют асинхронное выполнение, используя ждать, что позволяет системе выполнять операции, не блокируя другие процессы. Прежде чем продолжить, агент ждет, пока инструмент вернет результат, гарантируя, что ответ будет точным и своевременным. Кроме того, включены модульные тесты для проверки функциональности инструмента и обеспечения стабильного получения правильных результатов. Эти тесты не только подтверждают математические операции инструмента, но и проверяют, насколько хорошо он обрабатывает недопустимые входные данные, повышая общую надежность решения. Эта модульная и устойчивая к ошибкам конструкция делает сценарии многоразовыми и эффективными для различных приложений в 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» обычно возникают, когда выходные данные агента несовместимы с системой синтаксического анализа, что подчеркивает необходимость правильного согласования выходных данных агента с ожидаемым форматом.
Использование шаблонов подсказок, таких как ЧатПодсказкаШаблон, еще больше обогащает взаимодействие, позволяя использовать динамические сообщения и заполнители контекста. Это позволяет агенту корректировать свои ответы на основе истории чата или блокнота агента. Оптимизация шаблонов подсказок и обеспечение правильного анализа выходных данных агента могут предотвратить многие распространенные ошибки, делая ваши приложения Langchain.js более надежными и эффективными.
Часто задаваемые вопросы о Langchain.js, агентах и инструментах
- Что такое агент в Langchain.js?
- Агент — это компонент, который взаимодействует с инструментами и языковыми моделями для выполнения конкретных задач на основе запроса пользователя. Он использует createToolCallingAgent функция для запуска инструментов.
- Как устранить ошибку «parseResult on ToolCallingAgentOutputParser»?
- Эта ошибка возникает, когда выходные данные агента несовместимы с анализатором. Убедитесь, что выходные данные соответствуют ожиданиям синтаксического анализатора, и используйте ChatGeneration выходной формат.
- Какова цель AgentExecutor?
- AgentExecutor управляет выполнением агента и его инструментов, позволяя запускать сложные рабочие процессы в приложениях Langchain.js.
- Как ChatPromptTemplate работа?
- ChatPromptTemplate организует сообщения чата в структурированном формате, позволяя вставлять в поток разговора динамический контент, такой как история чата и блокнот агента.
- Почему Zod используется в инструменте?
- Zod используется для проверки входных данных, гарантируя, что входные данные для пользовательского инструмента имеют правильный тип (например, число), что снижает вероятность ошибок.
Заключительные мысли об обработке ошибок в Langchain.js
Решение ошибки «parseResult on ToolCallingAgentOutputParser работает только с выходными данными ChatGeneration» требует тщательного согласования выходных данных вашего агента с ожиданиями синтаксического анализа. При правильном подходе этой ошибки можно избежать.
Используя соответствующие инструменты, такие как Zod, для проверки и гарантируя, что агенты, например, созданные с помощью Ollama, правильно обрабатывают входные и выходные данные, вы можете создавать надежные решения в Langchain.js, не сталкиваясь с проблемами синтаксического анализа.
Источники и ссылки для разрешения ошибок Langchain.js
- Подробно описана в официальной документации Langchain, в которой содержится информация о создании инструментов и настройке агентов. Документация Лангчейн Внутри.
- Далее объясняется использование Zod для проверки ввода и его применение в Langchain.js. Документация Зод Внутри.
- Описывает языковую модель Ollama и ее реализацию в пользовательских агентах. Оллама, LLM Внутри.