Solucionar el error ToolCallingAgentOutputParser de Langchain.js con Ollama LLM y una herramienta personalizada

Temp mail SuperHeros
Solucionar el error ToolCallingAgentOutputParser de Langchain.js con Ollama LLM y una herramienta personalizada
Solucionar el error ToolCallingAgentOutputParser de Langchain.js con Ollama LLM y una herramienta personalizada

Comprensión y corrección de errores de ToolCallingAgentOutputParser en Langchain.js

Cuando trabajan con Langchain.js v2, los desarrolladores suelen intentar crear agentes eficientes utilizando herramientas personalizadas y modelos de lenguaje como Ollama. Sin embargo, la integración de estos componentes a veces puede provocar errores difíciles de depurar.

Uno de esos errores es "parseResult en ToolCallingAgentOutputParser solo funciona en la salida de ChatGeneration", que puede ocurrir al crear una herramienta personalizada dentro del marco del agente. Comprender la causa raíz de este problema es fundamental para garantizar que el agente y la herramienta funcionen correctamente.

Este artículo explora una implementación simple de una herramienta personalizada que suma 2 a una entrada numérica, utilizando createToolCallingAgent de Langchain y el modelo Ollama. Al analizar el error y su contexto, podemos comprender mejor cómo solucionarlo.

Las siguientes secciones lo guiarán a través del código, explicarán el error y brindarán soluciones para abordar este problema. Ya sea que sea nuevo en Langchain.js o tenga experiencia, esta guía lo ayudará a superar este problema de manera eficiente.

Dominio Ejemplo de uso
tool() Esta función de Langchain.js define una herramienta personalizada que realiza una operación. En este artículo, se utiliza para crear una herramienta que suma 2 a un número de entrada, envolviendo la lógica en una estructura fácilmente invocable.
z.object() Una parte de la biblioteca Zod, utilizada para la validación de esquemas en Langchain. Esto garantiza que la entrada a la herramienta personalizada sea un número, lo que proporciona una sólida validación de entrada para evitar errores durante la ejecución.
createToolCallingAgent() Este comando crea un agente que puede llamar a las herramientas definidas en respuesta a las consultas de los usuarios. Es clave para integrar herramientas con modelos de lenguaje como Ollama, lo que permite invocar herramientas durante la conversación.
ChatPromptTemplate.fromMessages() Se utiliza para generar una plantilla de mensaje de chat con marcadores de posición. Esta plantilla organiza diferentes tipos de mensajes (sistema, humanos, marcadores de posición) para que los utilice el agente, mejorando su flujo conversacional.
MessagesPlaceholder Actúa como marcador de posición en la plantilla de mensajes para contenido dinámico, como el historial de chat o el bloc de notas del agente. Esto permite que el contexto de la conversación se inyecte dinámicamente durante la ejecución.
AgentExecutor() Esta clase gestiona la ejecución de agentes y herramientas. En el ejemplo, ayuda a ejecutar la consulta a través del agente y recopilar el resultado de la salida de la herramienta.
await agentExecutor.invoke() Se utiliza para ejecutar la consulta a través del agente y esperar el resultado de forma asincrónica. Esto es crucial para interactuar con modelos y herramientas de lenguaje, ya que garantiza que el código espere a que se complete la operación antes de continuar.
try-catch Esta estructura de manejo de errores se utiliza dentro de la herramienta personalizada para detectar tipos de entrada no válidos. Al detectar excepciones, garantiza que el sistema devuelva mensajes de error útiles sin interrumpir el flujo de ejecución.
expect() De la biblioteca de aserciones de Chai, expect() se usa en la prueba unitaria para verificar el resultado de la herramienta personalizada. Es esencial para probar si la herramienta funciona como se esperaba.

Comprensión de la herramienta personalizada y el manejo de errores del agente en Langchain.js

En el ejemplo proporcionado, estamos trabajando con Langchain.js v2 para crear una herramienta personalizada que se integra con el Ollama modelo de lenguaje. El objetivo principal de la herramienta es realizar una operación matemática simple: sumar 2 al valor de entrada. La herramienta está construida utilizando Langchain. herramienta función, que define funciones reutilizables que pueden ser invocadas por un agente. Para garantizar que la herramienta funcione correctamente, el esquema de entrada se valida con la biblioteca Zod, garantizando que la entrada sea un número válido. Esto garantiza un manejo adecuado de los errores y evita que la herramienta falle debido a entradas no válidas.

Luego, la herramienta personalizada se incorpora a un agente utilizando el crearToolCallingAgent función. Este comando permite al agente llamar a la herramienta cuando sea necesario, y el agente funciona con el modelo Ollama, que está configurado con parámetros específicos como la temperatura para controlar la creatividad de las respuestas. Para facilitar una interacción fluida entre el agente y la herramienta, se utiliza una plantilla de mensaje de chat. Esta plantilla organiza la conversación definiendo diferentes tipos de mensajes, como mensajes del sistema, aportaciones humanas y marcadores de posición. Los marcadores de posición, como MensajesMarcador de posición, permite que la conversación sea dinámica, incluyendo elementos como el historial de chat.

Una de las cuestiones clave abordadas en este ejemplo es el manejo de errores en torno al análisis de salida del agente Langchain. El mensaje de error "parseResult en ToolCallingAgentOutputParser solo funciona en la salida de ChatGeneration" se debe a una falta de coincidencia entre el tipo de salida esperada por el analizador y la salida real generada. Para manejar este error, la herramienta personalizada está envuelta en una lógica sólida, lo que garantiza que todas las entradas y salidas se ajusten a los formatos esperados. Esto es gestionado además por el AgenteEjecutor clase, que coordina la ejecución del agente y las herramientas, asegurándose de que la consulta y la salida de la herramienta estén sincronizadas correctamente.

Finalmente, los scripts implementan la ejecución asincrónica usando esperar, permitiendo que el sistema maneje operaciones sin bloquear otros procesos. El agente espera a que la herramienta devuelva su resultado antes de continuar, asegurando que la respuesta sea precisa y oportuna. Además, se incluyen pruebas unitarias para validar la funcionalidad de la herramienta, asegurando que produzca consistentemente el resultado correcto. Estas pruebas no solo confirman el funcionamiento matemático de la herramienta, sino que también verifican qué tan bien maneja entradas no válidas, mejorando la confiabilidad general de la solución. Este diseño modular y resistente a errores hace que los scripts sean reutilizables y efectivos para diversas aplicaciones dentro de Langchain.js.

Solucionar el error Langchain.js con un enfoque modular

Solución 1: JavaScript con enfoque modular y manejo de errores usando Langchain.js y 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 });

Manejo de errores mejorado para el agente Langchain.js

Solución 2: Manejo de errores con pruebas unitarias para validar el resultado de la herramienta personalizada en 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);
});

Explorando el papel de los agentes en la integración de Langchain.js y Ollama LLM

Al trabajar con Langchain.js, integrar agentes con herramientas y modelos de lenguaje como Ollama es un aspecto crítico en la creación de aplicaciones dinámicas. Un agente le permite conectar una herramienta personalizada, que realiza tareas específicas, a un modelo de lenguaje, que maneja tareas más conversacionales o generativas. Al utilizar agentes, los desarrolladores pueden automatizar flujos de trabajo donde un modelo no solo genera respuestas sino que también invoca herramientas para realizar cálculos o procesamiento de datos.

El componente clave de esta integración es la crearToolCallingAgent función. Esta función permite al agente activar herramientas específicas cuando sea necesario, asegurando que las tareas se completen de manera precisa y eficiente. Si bien el enfoque principal suele ser la creación de la herramienta en sí, es igualmente importante comprender cómo administrar el flujo de trabajo del agente y evitar errores de análisis. Errores como "parseResult en ToolCallingAgentOutputParser solo funciona en la salida de ChatGeneration" generalmente ocurren cuando la salida del agente no es compatible con el sistema de análisis, lo que resalta la necesidad de una alineación adecuada entre la salida del agente y el formato esperado.

El uso de plantillas de avisos, como Plantilla de solicitud de chat, enriquece aún más la interacción al permitir mensajes dinámicos y marcadores de posición de contexto. Esto permite al agente ajustar sus respuestas según el historial de chat o el bloc de notas del agente. Optimizar las plantillas de mensajes y garantizar que los resultados del agente se analicen correctamente puede evitar muchos errores comunes, lo que hace que sus aplicaciones Langchain.js sean más confiables y eficientes.

Preguntas frecuentes sobre Langchain.js, agentes y herramientas

  1. ¿Qué es un agente en Langchain.js?
  2. Un agente es un componente que interactúa con herramientas y modelos de lenguaje para realizar tareas específicas basadas en una consulta de usuario. Utiliza el createToolCallingAgent función para activar herramientas.
  3. ¿Cómo se resuelve el error "parseResult on ToolCallingAgentOutputParser"?
  4. Este error ocurre cuando la salida del agente es incompatible con el analizador. Asegúrese de que la salida coincida con lo que espera el analizador y utilice un ChatGeneration formato de salida.
  5. ¿Cuál es el propósito de la AgentExecutor?
  6. El AgentExecutor gestiona la ejecución del agente y sus herramientas, lo que le permite ejecutar flujos de trabajo complejos en aplicaciones Langchain.js.
  7. ¿Cómo ChatPromptTemplate ¿trabajar?
  8. ChatPromptTemplate organiza los mensajes de chat en un formato estructurado, lo que permite insertar contenido dinámico, como el historial de chat y el bloc de notas del agente, en el flujo de la conversación.
  9. ¿Por qué es Zod utilizado en la herramienta?
  10. Zod se utiliza para la validación de entradas, lo que garantiza que la entrada a la herramienta personalizada sea del tipo correcto (por ejemplo, un número), lo que reduce las posibilidades de errores.

Reflexiones finales sobre el manejo de errores en Langchain.js

Resolver el error "parseResult en ToolCallingAgentOutputParser solo funciona en la salida de ChatGeneration" requiere una alineación cuidadosa entre la salida de su agente y sus expectativas de análisis. Con el enfoque correcto, este error se puede evitar.

Al utilizar herramientas adecuadas como Zod para la validación y garantizar que los agentes, como los creados con Ollama, manejen las entradas y salidas correctamente, puede crear soluciones sólidas en Langchain.js sin encontrar problemas de análisis.

Fuentes y referencias para la resolución de errores de Langchain.js
  1. Desarrolla la documentación oficial de Langchain, que proporciona información sobre la creación de herramientas y las configuraciones de agentes. Documentación de Langchain Adentro.
  2. Explica con más detalle el uso de Zod para la validación de entradas y su aplicación en Langchain.js. Documentación Zod Adentro.
  3. Describe el modelo de lenguaje Ollama y su implementación dentro de agentes personalizados. Ollama LLM Adentro.