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