Odpravljanje napake Langchain.js ToolCallingAgentOutputParser z Ollama LLM in orodjem po meri

Odpravljanje napake Langchain.js ToolCallingAgentOutputParser z Ollama LLM in orodjem po meri
Langchain

Razumevanje in odpravljanje napak ToolCallingAgentOutputParser v Langchain.js

Pri delu z Langchain.js v2 si razvijalci pogosto prizadevajo ustvariti učinkovite agente z uporabo prilagojenih orodij in jezikovnih modelov, kot je Ollama. Vendar lahko integracija teh komponent včasih povzroči napake, ki jih je težko odpraviti.

Ena taka napaka je "parseResult na ToolCallingAgentOutputParser deluje samo na izhodu ChatGeneration", do katere lahko pride pri izdelavi orodja po meri znotraj okvira agenta. Razumevanje temeljnega vzroka te težave je ključnega pomena za zagotovitev pravilnega delovanja agenta in orodja.

Ta članek raziskuje preprosto implementacijo orodja po meri, ki vnesenemu številu doda 2 z uporabo CreateToolCallingAgent podjetja Langchain in modela Ollama. Z analizo napake in njenega konteksta lahko bolje razumemo, kako jo odpraviti.

Naslednji razdelki vas bodo vodili skozi kodo, razložili napako in ponudili rešitve za odpravo te težave. Ne glede na to, ali ste šele začeli uporabljati Langchain.js ali imate izkušnje, vam bo ta vodnik pomagal učinkovito premagati to težavo.

Ukaz Primer uporabe
tool() Ta funkcija iz Langchain.js definira orodje po meri, ki izvede operacijo. V tem članku se uporablja za ustvarjanje orodja, ki vhodnemu številu doda 2 in ovije logiko v strukturo, ki jo je enostavno priklicati.
z.object() Del knjižnice Zod, ki se uporablja za validacijo sheme v Langchainu. To zagotavlja, da je vnos v orodje po meri številka, kar zagotavlja močno validacijo vnosa za preprečevanje napak med izvajanjem.
createToolCallingAgent() Ta ukaz ustvari agenta, ki lahko kliče definirana orodja kot odgovor na uporabniške poizvedbe. Ključno je pri integraciji orodij z jezikovnimi modeli, kot je Ollama, kar omogoča priklic orodij med pogovorom.
ChatPromptTemplate.fromMessages() Uporablja se za ustvarjanje predloge poziva za klepet z ogradami. Ta predloga organizira različne vrste sporočil (sistemska, človeška, nadomestna sporočila), ki jih uporabi agent, s čimer se izboljša njegov tok pogovora.
MessagesPlaceholder Deluje kot nadomestni znak v predlogi poziva za dinamično vsebino, kot je zgodovina klepetov ali beležka agenta. To omogoča dinamično vstavljanje konteksta pogovora med izvajanjem.
AgentExecutor() Ta razred upravlja izvajanje agentov in orodij. V primeru pomaga pri izvajanju poizvedbe prek agenta in zbiranju rezultatov iz izhoda orodja.
await agentExecutor.invoke() Uporablja se za izvajanje poizvedbe prek agenta in asinhrono čakanje na rezultat. To je ključnega pomena za interakcijo z jezikovnimi modeli in orodji, saj zagotavlja, da koda čaka na dokončanje operacije, preden nadaljuje.
try-catch Ta struktura za obravnavanje napak se uporablja v orodju po meri za prestrezanje neveljavnih vrst vnosa. Z lovljenjem izjem zagotavlja, da sistem vrne koristna sporočila o napakah, ne da bi prekinil tok izvajanja.
expect() Iz knjižnice trditev Chai se za preverjanje izhoda orodja po meri v testu enote uporablja expect(). Bistvenega pomena je za testiranje, ali orodje deluje po pričakovanjih.

Razumevanje orodja po meri in obravnavanja napak agenta v Langchain.js

V navedenem primeru delamo z Langchain.js v2, da ustvarimo orodje po meri, ki se integrira z jezikovni model. Glavni namen orodja je izvesti preprosto matematično operacijo: dodati 2 vhodni vrednosti. Orodje je zgrajeno z uporabo Langchaina funkcijo, ki definira funkcije za večkratno uporabo, ki jih lahko prikliče agent. Za zagotovitev pravilnega delovanja orodja je vnosna shema potrjena s knjižnico Zod, kar zagotavlja, da je vnos veljavna številka. To zagotavlja pravilno obravnavanje napak in preprečuje, da bi orodje odpovedalo zaradi neveljavnih vnosov.

Orodje po meri se nato vključi v agenta z uporabo funkcijo. Ta ukaz agentu omogoča, da po potrebi pokliče orodje, agenta pa poganja model Ollama, ki je konfiguriran s posebnimi parametri, kot je temperatura, za nadzor ustvarjalnosti odzivov. Za lažjo interakcijo med agentom in orodjem se uporablja predloga poziva za klepet. Ta predloga organizira pogovor tako, da definira različne vrste sporočil, kot so sistemska sporočila, človeški vnos in ograda. Oznake mesta, kot je npr , omogočajo dinamičnost pogovora z vključenimi elementi, kot je zgodovina klepeta.

Eno ključnih vprašanj, obravnavanih v tem primeru, je obravnavanje napak pri razčlenjevanju izhodnih podatkov posrednika Langchain. Sporočilo o napaki »parseResult na ToolCallingAgentOutputParser deluje samo na izhodu ChatGeneration« izhaja iz neujemanja med vrsto izhoda, ki ga pričakuje razčlenjevalnik, in dejanskim ustvarjenim izhodom. Za obravnavo te napake je orodje po meri ovito v robustno logiko, ki zagotavlja, da so vsi vhodi in izhodi v skladu s pričakovanimi formati. To nadalje upravlja razred, ki usklajuje izvajanje agenta in orodij ter skrbi, da sta poizvedba in izhod orodja pravilno sinhronizirana.

Končno, skripti izvajajo asinhrono izvajanje z uporabo , kar sistemu omogoča upravljanje operacij brez blokiranja drugih procesov. Agent počaka, da orodje vrne rezultat, preden nadaljuje, s čimer zagotovi, da je odgovor natančen in pravočasen. Poleg tega so vključeni testi enot za potrditev funkcionalnosti orodja, ki zagotavljajo, da dosledno ustvarja pravilne rezultate. Ti testi ne potrjujejo samo matematičnega delovanja orodja, ampak tudi preverijo, kako dobro obravnava neveljavne vnose, kar izboljša splošno zanesljivost rešitve. Zaradi te modularne zasnove, ki je odporna na napake, so skripti ponovno uporabni in učinkoviti za različne aplikacije znotraj Langchain.js.

Odpravljanje napake Langchain.js z modularnim pristopom

1. rešitev: JavaScript z modularnim pristopom in obravnavanjem napak z uporabo Langchain.js in 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 });

Izboljšano obravnavanje napak za agenta Langchain.js

2. rešitev: obravnavanje napak s testi enote za preverjanje izhoda orodja po meri v 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);
});

Raziskovanje vloge agentov pri integraciji Langchain.js in Ollama LLM

Pri delu z Langchain.js je integracija z orodji in jezikovnimi modeli, kot je Ollama, je kritičen vidik gradnje dinamičnih aplikacij. Agent vam omogoča, da povežete orodje po meri, ki izvaja določene naloge, z jezikovnim modelom, ki obravnava bolj pogovorne ali generativne naloge. Z uporabo agentov lahko razvijalci avtomatizirajo poteke dela, kjer model ne samo generira odzive, temveč tudi prikliče orodja za izvajanje izračunov ali obdelavo podatkov.

Ključna komponenta te integracije je funkcijo. Ta funkcija agentu omogoča sprožitev določenih orodij, kadar je to potrebno, s čimer zagotovi natančno in učinkovito dokončanje nalog. Medtem ko je glavni poudarek pogosto na ustvarjanju samega orodja, je enako pomembno razumevanje, kako upravljati potek dela agenta in se izogniti napakam pri razčlenjevanju. Napake, kot je »parseResult on ToolCallingAgentOutputParser deluje samo na izhodu ChatGeneration«, se običajno pojavijo, ko izhod agenta ni združljiv s sistemom za razčlenjevanje, kar poudarja potrebo po pravilni uskladitvi med izhodom agenta in pričakovano obliko.

Uporaba promptnih predlog, kot je npr , dodatno obogati interakcijo z omogočanjem dinamičnih sporočil in kontekstnih ograd. To omogoča agentu, da prilagodi svoje odgovore na podlagi zgodovine klepetov ali agentove beležke. Optimiziranje predlog pozivov in zagotavljanje, da so izhodi posrednika pravilno razčlenjeni, lahko prepreči veliko pogostih napak, zaradi česar bodo vaše aplikacije Langchain.js bolj zanesljive in učinkovite.

  1. Kaj je agent v Langchain.js?
  2. Agent je komponenta, ki sodeluje z orodji in jezikovnimi modeli za izvajanje določenih nalog na podlagi uporabniške poizvedbe. Uporablja funkcijo za sprožitev orodij.
  3. Kako odpravite napako »parseResult on ToolCallingAgentOutputParser«?
  4. Ta napaka se pojavi, ko agentov izhod ni združljiv z razčlenjevalnikom. Zagotovite, da se izhod ujema s tem, kar pričakuje razčlenjevalnik, in uporabite a izhodni format.
  5. Kakšen je namen ?
  6. The upravlja izvajanje agenta in njegovih orodij, kar vam omogoča zagon kompleksnih delovnih tokov v aplikacijah Langchain.js.
  7. Kako delo?
  8. organizira sporočila klepeta v strukturiranem formatu, kar omogoča vstavljanje dinamične vsebine, kot sta zgodovina klepeta in beležka agenta, v tok pogovora.
  9. Zakaj je uporabljen v orodju?
  10. se uporablja za preverjanje vnosa, ki zagotavlja, da je vnos v orodje po meri pravilne vrste (npr. številka), kar zmanjša možnosti napak.

Reševanje napake »parseResult on ToolCallingAgentOutputParser deluje samo na izhodu ChatGeneration« zahteva natančno uskladitev med izhodom vašega agenta in njegovimi pričakovanji pri razčlenjevanju. S pravilnim pristopom se je tej napaki mogoče izogniti.

Z uporabo ustreznih orodij, kot je Zod, za preverjanje in zagotavljanjem, da agenti, kot so tisti, zgrajeni z Ollamo, pravilno obravnavajo vnose in izhode, lahko ustvarite robustne rešitve v Langchain.js, ne da bi pri tem naleteli na težave pri razčlenjevanju.

  1. Razkriva uradno dokumentacijo Langchain, ki ponuja vpogled v ustvarjanje orodij in konfiguracije agentov. Langchain dokumentacija V notranjosti.
  2. Nadalje pojasnjuje uporabo Zoda za preverjanje vnosa in njegovo uporabo v Langchain.js. Zod dokumentacija V notranjosti.
  3. Opisuje jezikovni model Ollama in njegovo implementacijo znotraj agentov po meri. Ollama LLM V notranjosti.