De ToolCallingAgentOutputParser-fout van Langchain.js repareren met Ollama LLM en een aangepaste tool

Temp mail SuperHeros
De ToolCallingAgentOutputParser-fout van Langchain.js repareren met Ollama LLM en een aangepaste tool
De ToolCallingAgentOutputParser-fout van Langchain.js repareren met Ollama LLM en een aangepaste tool

ToolCallingAgentOutputParser-fouten in Langchain.js begrijpen en oplossen

Bij het werken met Langchain.js v2 streven ontwikkelaars er vaak naar efficiënte agenten te creëren met behulp van aangepaste tools en taalmodellen zoals Ollama. De integratie van deze componenten kan echter soms leiden tot fouten die moeilijk te debuggen zijn.

Eén zo'n fout is de "parseResult on ToolCallingAgentOutputParser werkt alleen op ChatGeneration-uitvoer", die kan optreden bij het bouwen van een aangepaste tool binnen het agentframework. Het begrijpen van de hoofdoorzaak van dit probleem is van cruciaal belang om ervoor te zorgen dat de agent en tool correct werken.

Dit artikel onderzoekt een eenvoudige implementatie van een aangepaste tool die 2 optelt bij een getalinvoer, met behulp van Langchain's createToolCallingAgent en het Ollama-model. Door de fout en de context ervan te analyseren, kunnen we beter begrijpen hoe we deze kunnen oplossen.

In de volgende secties wordt u door de code geleid, wordt de fout uitgelegd en worden oplossingen geboden om dit probleem op te lossen. Of u nu nieuw bent bij Langchain.js of ervaren bent, deze handleiding helpt u dit probleem efficiënt te omzeilen.

Commando Voorbeeld van gebruik
tool() Deze functie van Langchain.js definieert een aangepaste tool die een bewerking uitvoert. In dit artikel wordt het gebruikt om een ​​tool te maken die 2 optelt bij een invoergetal, waardoor de logica in een gemakkelijk opvraagbare structuur wordt verpakt.
z.object() Een onderdeel van de Zod-bibliotheek, gebruikt voor schemavalidatie in Langchain. Dit zorgt ervoor dat de invoer voor de aangepaste tool een getal is, wat een sterke invoervalidatie oplevert om fouten tijdens de uitvoering te voorkomen.
createToolCallingAgent() Met deze opdracht wordt een agent gemaakt die de gedefinieerde tools kan aanroepen als antwoord op vragen van gebruikers. Het is essentieel om tools te integreren met taalmodellen zoals Ollama, waardoor het mogelijk wordt om tijdens gesprekken tools te gebruiken.
ChatPromptTemplate.fromMessages() Wordt gebruikt om een ​​chatpromptsjabloon met tijdelijke aanduidingen te genereren. Deze sjabloon organiseert verschillende soorten berichten (systeem, mens, tijdelijke aanduidingen) die de agent kan gebruiken, waardoor de gespreksstroom wordt verbeterd.
MessagesPlaceholder Fungeert als tijdelijke aanduiding in de promptsjabloon voor dynamische inhoud, zoals chatgeschiedenis of agentkladblok. Hierdoor kan de gesprekscontext tijdens de uitvoering dynamisch worden geïnjecteerd.
AgentExecutor() Deze klasse beheert de uitvoering van agenten en tools. In het voorbeeld helpt het bij het uitvoeren van de query via de agent en het verzamelen van het resultaat uit de uitvoer van het hulpprogramma.
await agentExecutor.invoke() Wordt gebruikt om de query via de agent uit te voeren en asynchroon op het resultaat te wachten. Dit is cruciaal voor de interactie met taalmodellen en tools, omdat het ervoor zorgt dat de code wacht tot de bewerking is voltooid voordat hij verder gaat.
try-catch Deze foutafhandelingsstructuur wordt binnen de aangepaste tool gebruikt om ongeldige invoertypen op te sporen. Door uitzonderingen op te vangen, zorgt het ervoor dat het systeem nuttige foutmeldingen retourneert zonder de uitvoeringsstroom te onderbreken.
expect() Vanuit de Chai-bevestigingsbibliotheek wordt verwacht() gebruikt in de unit-test om de uitvoer van het aangepaste hulpmiddel te verifiëren. Het is essentieel om te testen of de tool presteert zoals verwacht.

Inzicht in de aangepaste tool en agentfoutafhandeling in Langchain.js

In het gegeven voorbeeld werken we met Langchain.js v2 om een ​​aangepaste tool te maken die kan worden geïntegreerd met de Ollama taalmodel. Het belangrijkste doel van de tool is het uitvoeren van een eenvoudige wiskundige bewerking: het optellen van 2 bij de invoerwaarde. De tool is gebouwd met behulp van Langchain's hulpmiddel function, die herbruikbare functies definieert die door een agent kunnen worden aangeroepen. Om ervoor te zorgen dat de tool correct werkt, wordt het invoerschema gevalideerd met de Zod-bibliotheek, waardoor wordt gegarandeerd dat de invoer een geldig getal is. Dit zorgt voor een goede foutafhandeling en voorkomt dat de tool faalt vanwege ongeldige invoer.

De aangepaste tool wordt vervolgens opgenomen in een agent met behulp van de createToolCallingAgent functie. Met dit commando kan de agent de tool oproepen wanneer dat nodig is, en de agent wordt aangedreven door het Ollama-model, dat is geconfigureerd met specifieke parameters zoals temperatuur om de creativiteit van de reacties te controleren. Om een ​​soepele interactie tussen de agent en de tool te vergemakkelijken, wordt een chatprompt-sjabloon gebruikt. Deze sjabloon organiseert het gesprek door verschillende soorten berichten te definiëren, zoals systeemberichten, menselijke input en tijdelijke aanduidingen. De tijdelijke aanduidingen, zoals BerichtenPlaceholder, zorg ervoor dat het gesprek dynamisch is, waarbij elementen zoals de chatgeschiedenis worden opgenomen.

Een van de belangrijkste problemen die in dit voorbeeld aan de orde komen, is de foutafhandeling rond de uitvoerparsering van de Langchain-agent. De foutmelding "parseResult on ToolCallingAgentOutputParser werkt alleen op ChatGeneration-uitvoer" komt voort uit een discrepantie tussen het type uitvoer dat door de parser wordt verwacht en de feitelijk gegenereerde uitvoer. Om deze fout op te lossen, is de aangepaste tool verpakt in robuuste logica, waardoor wordt gegarandeerd dat alle invoer en uitvoer voldoen aan de verwachte formaten. Dit wordt verder beheerd door de AgentUitvoerder class, die de uitvoering van de agent en tools coördineert en ervoor zorgt dat de query- en tooluitvoer correct worden gesynchroniseerd.

Ten slotte implementeren de scripts asynchrone uitvoering met behulp van wachten, waardoor het systeem bewerkingen kan uitvoeren zonder andere processen te blokkeren. De agent wacht tot de tool het resultaat retourneert voordat hij verder gaat, zodat de reactie zowel accuraat als tijdig is. Bovendien zijn er unit-tests opgenomen om de functionaliteit van de tool te valideren, zodat deze consistent de juiste uitvoer produceert. Deze tests bevestigen niet alleen de wiskundige werking van de tool, maar controleren ook hoe goed deze omgaat met ongeldige invoer, waardoor de algehele betrouwbaarheid van de oplossing wordt verbeterd. Dit modulaire en foutbestendige ontwerp maakt de scripts herbruikbaar en effectief voor verschillende toepassingen binnen Langchain.js.

De Langchain.js-fout oplossen met een modulaire aanpak

Oplossing 1: JavaScript met modulaire aanpak en foutafhandeling met behulp van Langchain.js en 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 });

Verbeterde foutafhandeling voor Langchain.js Agent

Oplossing 2: foutafhandeling bij unit-tests om de uitvoer van de aangepaste tool in Langchain.js te valideren

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);
});

Onderzoek naar de rol van agenten in de integratie van Langchain.js en Ollama LLM

Bij het werken met Langchain.js, integreren agenten met tools en taalmodellen zoals Ollama is een cruciaal aspect bij het bouwen van dynamische applicaties. Met een agent kunt u een aangepaste tool, die specifieke taken uitvoert, koppelen aan een taalmodel dat meer conversatie- of generatieve taken afhandelt. Door agents te gebruiken kunnen ontwikkelaars workflows automatiseren waarbij een model niet alleen reacties genereert, maar ook tools aanroept om berekeningen of gegevensverwerking uit te voeren.

Het belangrijkste onderdeel van deze integratie is de createToolCallingAgent functie. Met deze functie kan de agent specifieke tools activeren wanneer dat nodig is, zodat taken nauwkeurig en efficiënt worden uitgevoerd. Hoewel de primaire focus vaak ligt op het maken van de tool zelf, is het net zo belangrijk om te begrijpen hoe u de workflow van de agent kunt beheren en parseerfouten kunt voorkomen. Fouten zoals "parseResult on ToolCallingAgentOutputParser werkt alleen op ChatGeneration-uitvoer" treden meestal op wanneer de uitvoer van de agent niet compatibel is met het parseersysteem, wat de noodzaak benadrukt van een goede afstemming tussen de uitvoer van de agent en het verwachte formaat.

Het gebruik van promptsjablonen, zoals ChatPrompt-sjabloon, verrijkt de interactie verder door dynamische berichten en tijdelijke aanduidingen voor context toe te staan. Hierdoor kan de agent zijn antwoorden aanpassen op basis van de chatgeschiedenis of het kladblok van de agent. Door de promptsjablonen te optimaliseren en ervoor te zorgen dat de uitvoer van de agent correct wordt geparseerd, kunnen veel veelvoorkomende fouten worden voorkomen, waardoor uw Langchain.js-applicaties betrouwbaarder en efficiënter worden.

Veelgestelde vragen over Langchain.js, agenten en tools

  1. Wat is een agent in Langchain.js?
  2. Een agent is een component die samenwerkt met tools en taalmodellen om specifieke taken uit te voeren op basis van een gebruikersquery. Het maakt gebruik van de createToolCallingAgent functie om tools te activeren.
  3. Hoe los je de fout 'parseResult on ToolCallingAgentOutputParser' op?
  4. Deze fout treedt op wanneer de uitvoer van de agent incompatibel is met de parser. Zorg ervoor dat de uitvoer overeenkomt met wat de parser verwacht en gebruik een ChatGeneration uitvoerformaat.
  5. Wat is het doel van de AgentExecutor?
  6. De AgentExecutor beheert de uitvoering van de agent en zijn tools, waardoor u complexe workflows kunt uitvoeren in Langchain.js-applicaties.
  7. Hoe werkt ChatPromptTemplate werk?
  8. ChatPromptTemplate Organiseert chatberichten in een gestructureerd formaat, waardoor dynamische inhoud zoals chatgeschiedenis en kladblok voor agenten in de gespreksstroom kan worden ingevoegd.
  9. Waarom is Zod gebruikt in het instrument?
  10. Zod wordt gebruikt voor invoervalidatie, waardoor wordt gegarandeerd dat de invoer naar de aangepaste tool van het juiste type is (bijvoorbeeld een getal), waardoor de kans op fouten wordt verkleind.

Laatste gedachten over foutafhandeling in Langchain.js

Het oplossen van de fout 'parseResult on ToolCallingAgentOutputParser werkt alleen op ChatGeneration-uitvoer' vereist een zorgvuldige afstemming tussen de uitvoer van uw agent en de parseringsverwachtingen. Met de juiste aanpak kan deze fout worden vermeden.

Door geschikte tools zoals Zod te gebruiken voor validatie en ervoor te zorgen dat agenten, zoals die gebouwd met Ollama, invoer en uitvoer correct verwerken, kunt u robuuste oplossingen creëren in Langchain.js zonder dat u problemen ondervindt bij het parseren.

Bronnen en referenties voor foutresolutie van Langchain.js
  1. Bouwt voort op de officiële Langchain-documentatie, die inzicht biedt in het maken van tools en agentconfiguraties. Langchain-documentatie Binnen.
  2. Verder wordt het gebruik van Zod voor invoervalidatie en de toepassing ervan in Langchain.js uitgelegd. Zod-documentatie Binnen.
  3. Beschrijft het Ollama-taalmodel en de implementatie ervan binnen aangepaste agenten. Ollama LLM Binnen.