Langchain.js ToolCallingAgentOutputParser kļūdas labošana, izmantojot Ollama LLM un pielāgoto rīku

Temp mail SuperHeros
Langchain.js ToolCallingAgentOutputParser kļūdas labošana, izmantojot Ollama LLM un pielāgoto rīku
Langchain.js ToolCallingAgentOutputParser kļūdas labošana, izmantojot Ollama LLM un pielāgoto rīku

ToolCallingAgentOutputParser kļūdu izpratne un labošana failā Langchain.js

Strādājot ar Langchain.js v2, izstrādātāju mērķis bieži ir izveidot efektīvus aģentus, izmantojot pielāgotus rīkus un valodu modeļus, piemēram, Ollama. Tomēr šo komponentu integrēšana dažkārt var izraisīt kļūdas, kuras ir grūti atkļūdot.

Viena no šādām kļūdām ir “parseResult on ToolCallingAgentOutputParser darbojas tikai ChatGeneration izvadē”, kas var rasties, veidojot pielāgotu rīku aģenta sistēmā. Lai nodrošinātu aģenta un instrumenta pareizu darbību, ir ļoti svarīgi izprast šīs problēmas galveno cēloni.

Šajā rakstā ir apskatīta vienkārša pielāgota rīka ieviešana, kas skaitļa ievadei pievieno 2, izmantojot Langchain CreateToolCallingAgent un Ollama modeli. Analizējot kļūdu un tās kontekstu, mēs varam labāk saprast, kā to novērst.

Nākamajās sadaļās tiks parādīts kods, izskaidrota kļūda un sniegti risinājumi šīs problēmas risināšanai. Neatkarīgi no tā, vai esat iesācējs vai pieredzējis Langchain.js, šī rokasgrāmata palīdzēs jums efektīvi tikt galā ar šo problēmu.

Pavēli Lietošanas piemērs
tool() Šī funkcija no Langchain.js definē pielāgotu rīku, kas veic darbību. Šajā rakstā tas tiek izmantots, lai izveidotu rīku, kas ievades numuram pievieno 2, iekļaujot loģiku viegli izsaucamā struktūrā.
z.object() Daļa no Zod bibliotēkas, ko izmanto shēmas validācijai programmā Langchain. Tas nodrošina, ka pielāgotā rīka ievade ir skaitlis, nodrošinot spēcīgu ievades validāciju, lai novērstu kļūdas izpildes laikā.
createToolCallingAgent() Šī komanda izveido aģentu, kas var izsaukt definētos rīkus, atbildot uz lietotāja vaicājumiem. Tas ir galvenais, lai integrētu rīkus ar valodas modeļiem, piemēram, Ollama, ļaujot izsaukt rīkus sarunas laikā.
ChatPromptTemplate.fromMessages() Izmanto, lai ģenerētu tērzēšanas uzvednes veidni ar vietturi. Šī veidne organizē dažāda veida ziņojumus (sistēmu, cilvēku, vietturi), ko aģents var izmantot, uzlabojot sarunu plūsmu.
MessagesPlaceholder Darbojas kā vietturis uzvednes veidnē dinamiskam saturam, piemēram, tērzēšanas vēsturei vai aģenta scratchpad. Tas ļauj izpildes laikā dinamiski ievadīt sarunas kontekstu.
AgentExecutor() Šī klase pārvalda aģentu un rīku izpildi. Piemērā tas palīdz izpildīt vaicājumu caur aģentu un apkopot rezultātu no rīka izvades.
await agentExecutor.invoke() Izmanto, lai palaistu vaicājumu caur aģentu un asinhroni gaidītu rezultātu. Tas ir ļoti svarīgi, lai mijiedarbotos ar valodas modeļiem un rīkiem, jo ​​​​tas nodrošina, ka kods gaida, līdz darbība tiks pabeigta, pirms turpināt darbu.
try-catch Šī kļūdu apstrādes struktūra tiek izmantota pielāgotajā rīkā, lai uztvertu nederīgus ievades veidus. Notverot izņēmumus, tā nodrošina, ka sistēma atgriež noderīgus kļūdu ziņojumus, nepārkāpjot izpildes plūsmu.
expect() No Chai apgalvojumu bibliotēkas vienību testā tiek izmantots expect(), lai pārbaudītu pielāgotā rīka izvadi. Tas ir svarīgi, lai pārbaudītu, vai rīks darbojas, kā paredzēts.

Izpratne par pielāgoto rīku un aģentu kļūdu apstrādi programmā Langchain.js

Norādītajā piemērā mēs strādājam ar Langchain.js v2, lai izveidotu pielāgotu rīku, kas integrējas ar Ollama valodas modelis. Rīka galvenais mērķis ir veikt vienkāršu matemātisku darbību: ievades vērtībai pievienot 2. Rīks ir izveidots, izmantojot Langchain's rīks funkcija, kas definē atkārtoti lietojamas funkcijas, kuras aģents var izsaukt. Lai nodrošinātu rīka pareizu darbību, ievades shēma tiek pārbaudīta ar Zod bibliotēku, garantējot, ka ievadītais skaitlis ir derīgs. Tas nodrošina pareizu kļūdu apstrādi un novērš rīka atteici nederīgu ievades dēļ.

Pēc tam pielāgotais rīks tiek iekļauts aģentā, izmantojot CreateToolCallingAgent funkciju. Šī komanda ļauj aģentam izsaukt rīku, kad nepieciešams, un aģentu darbina Ollama modelis, kas ir konfigurēts ar īpašiem parametriem, piemēram, temperatūru, lai kontrolētu atbilžu radošumu. Lai veicinātu vienmērīgu mijiedarbību starp aģentu un rīku, tiek izmantota tērzēšanas uzvednes veidne. Šī veidne organizē sarunu, definējot dažāda veida ziņojumus, piemēram, sistēmas ziņojumus, cilvēka ievadi un vietturus. Vietturi, piemēram, MessagesPlaceholder, ļauj sarunai būt dinamiskai, iekļaujot tādus elementus kā tērzēšanas vēsture.

Viena no galvenajām problēmām, kas aplūkota šajā piemērā, ir kļūdu apstrāde saistībā ar Langchain aģenta izvades parsēšanu. Kļūdas ziņojums "parseResult on ToolCallingAgentOutputParser darbojas tikai ChatGeneration izvadē" izriet no neatbilstības starp parsētāja sagaidāmo izvades veidu un faktisko ģenerēto izvadi. Lai novērstu šo kļūdu, pielāgotais rīks ir ietīts ar spēcīgu loģiku, nodrošinot, ka visas ievades un izvades atbilst paredzētajiem formātiem. To tālāk pārvalda Aģents Izpildītājs klase, kas koordinē aģenta un rīku izpildi, pārliecinoties, ka vaicājums un rīka izvade ir pareizi sinhronizēti.

Visbeidzot, skripti īsteno asinhrono izpildi, izmantojot gaidīt, ļaujot sistēmai veikt darbības, nebloķējot citus procesus. Pirms turpināt, aģents gaida, līdz rīks atgriezīs rezultātu, nodrošinot, ka atbilde ir gan precīza, gan savlaicīga. Turklāt ir iekļauti vienību testi, lai apstiprinātu rīka funkcionalitāti, nodrošinot, ka tas konsekventi rada pareizo rezultātu. Šie testi ne tikai apstiprina rīka matemātisko darbību, bet arī pārbauda, ​​cik labi tas apstrādā nederīgu ievadi, uzlabojot risinājuma vispārējo uzticamību. Šis modulārais un kļūdām izturīgais dizains padara skriptus atkārtoti lietojamus un efektīvus dažādām lietojumprogrammām programmā Langchain.js.

Kļūdas Langchain.js labošana, izmantojot modulāro pieeju

1. risinājums: JavaScript ar modulāru pieeju un kļūdu apstrādi, izmantojot Langchain.js un 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 });

Uzlabota kļūdu apstrāde aģentam Langchain.js

2. risinājums: kļūdu apstrāde ar vienību testiem, lai apstiprinātu pielāgotā rīka izvadi 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);
});

Aģentu lomas izpēte Langchain.js un Ollama LLM integrācijā

Strādājot ar Langchain.js, integrējot aģenti ar tādiem rīkiem un valodas modeļiem kā Ollama ir būtisks dinamisku lietojumprogrammu veidošanas aspekts. Aģents ļauj savienot pielāgotu rīku, kas veic konkrētus uzdevumus, ar valodas modeli, kas apstrādā sarunvalodas vai ģeneratīvākus uzdevumus. Izmantojot aģentus, izstrādātāji var automatizēt darbplūsmas, kurās modelis ne tikai ģenerē atbildes, bet arī izsauc rīkus, lai veiktu aprēķinus vai datu apstrādi.

Šīs integrācijas galvenā sastāvdaļa ir CreateToolCallingAgent funkciju. Šī funkcija ļauj aģentam vajadzības gadījumā aktivizēt konkrētus rīkus, nodrošinot, ka uzdevumi tiek izpildīti precīzi un efektīvi. Lai gan bieži galvenā uzmanība tiek pievērsta paša rīka izveidei, vienlīdz svarīgi ir saprast, kā pārvaldīt aģenta darbplūsmu un izvairīties no parsēšanas kļūdām. Kļūdas, piemēram, “parseResult on ToolCallingAgentOutputParser darbojas tikai ChatGeneration izvadē”, parasti rodas, ja aģenta izvade nav saderīga ar parsēšanas sistēmu, uzsverot nepieciešamību pareizi saskaņot aģenta izvadi un paredzēto formātu.

Uzvedņu veidņu izmantošana, piemēram, ChatPromptTemplate, vēl vairāk bagātina mijiedarbību, atļaujot dinamiskus ziņojumus un konteksta vietturus. Tādējādi aģents var pielāgot savas atbildes, pamatojoties uz tērzēšanas vēsturi vai aģenta bloknotu. Optimizējot uzvednes veidnes un nodrošinot, ka aģenta izvadi tiek pareizi parsēti, var novērst daudzas izplatītas kļūdas, padarot jūsu Langchain.js lietojumprogrammas uzticamākas un efektīvākas.

Bieži uzdotie jautājumi par Langchain.js, aģentiem un rīkiem

  1. Kas ir aģents vietnē Langchain.js?
  2. Aģents ir komponents, kas mijiedarbojas ar rīkiem un valodu modeļiem, lai veiktu konkrētus uzdevumus, pamatojoties uz lietotāja vaicājumu. Tas izmanto createToolCallingAgent rīku iedarbināšanas funkcija.
  3. Kā novērst kļūdu “parseResult on ToolCallingAgentOutputParser”?
  4. Šī kļūda rodas, ja aģenta izvade nav saderīga ar parsētāju. Pārliecinieties, vai izvade atbilst parsētāja sagaidāmajam, un izmantojiet a ChatGeneration izvades formāts.
  5. Kāds ir mērķis AgentExecutor?
  6. The AgentExecutor pārvalda aģenta un tā rīku izpildi, ļaujot palaist sarežģītas darbplūsmas lietojumprogrammās Langchain.js.
  7. Kā dara ChatPromptTemplate strādāt?
  8. ChatPromptTemplate organizē tērzēšanas ziņojumus strukturētā formātā, ļaujot sarunas plūsmā ievietot dinamisku saturu, piemēram, tērzēšanas vēsturi un aģenta bloknotu.
  9. Kāpēc ir Zod izmanto rīkā?
  10. Zod tiek izmantots ievades validācijai, nodrošinot, ka pielāgotā rīka ievade ir pareiza veida (piemēram, cipars), kas samazina kļūdu iespējamību.

Pēdējās domas par kļūdu apstrādi vietnē Langchain.js

Lai atrisinātu kļūdu “parseResult on ToolCallingAgentOutputParser darbojas tikai ChatGeneration izvadē”, ir rūpīgi jāsaskaņo jūsu aģenta izvade un tā parsēšanas gaidas. Ar pareizo pieeju no šīs kļūdas var izvairīties.

Izmantojot atbilstošus rīkus, piemēram, Zod, apstiprināšanai un nodrošinot, ka aģenti, piemēram, tie, kas izveidoti ar Ollama, pareizi apstrādā ievades un izvades, varat izveidot stabilus risinājumus programmā Langchain.js, neradot parsēšanas problēmas.

Langchain.js kļūdu risināšanas avoti un atsauces
  1. Ir izstrādāta oficiālā Langchain dokumentācija, kas sniedz ieskatu rīku izveidē un aģentu konfigurācijās. Langchain dokumentācija Iekšā.
  2. Tālāk ir izskaidrota Zod izmantošana ievades validācijai un tās pielietošana Langchain.js. Zod dokumentācija Iekšā.
  3. Apraksta Ollama valodas modeli un tā ieviešanu pielāgotajos aģentos. Ollama LLM Iekšā.