Zrozumienie i naprawienie błędów ToolCallingAgentOutputParser w Langchain.js
Pracując z Langchain.js v2, programiści często dążą do stworzenia wydajnych agentów przy użyciu niestandardowych narzędzi i modeli językowych, takich jak Ollama. Jednak integracja tych komponentów może czasami prowadzić do błędów trudnych do debugowania.
Jednym z takich błędów jest „parseResult on ToolCallingAgentOutputParser działa tylko na danych wyjściowych ChatGeneration”, który może wystąpić podczas tworzenia niestandardowego narzędzia w środowisku agenta. Zrozumienie pierwotnej przyczyny tego problemu ma kluczowe znaczenie dla zapewnienia prawidłowego działania agenta i narzędzia.
W tym artykule omówiono prostą implementację niestandardowego narzędzia, które dodaje 2 do wprowadzanej liczby, przy użyciu metody createToolCallingAgent firmy Langchain i modelu Ollama. Analizując błąd i jego kontekst, możemy lepiej zrozumieć, jak go rozwiązać.
Poniższe sekcje przeprowadzą Cię przez kod, wyjaśnią błąd i przedstawią rozwiązania tego problemu. Niezależnie od tego, czy jesteś nowym użytkownikiem Langchain.js, czy doświadczonym, ten przewodnik pomoże Ci skutecznie pokonać ten problem.
Rozkaz | Przykład użycia |
---|---|
tool() | Ta funkcja z Langchain.js definiuje niestandardowe narzędzie, które wykonuje operację. W tym artykule użyto go do stworzenia narzędzia, które dodaje 2 do liczby wejściowej, opakowując logikę w łatwą do wywołania strukturę. |
z.object() | Część biblioteki Zod, używana do walidacji schematów w Langchain. Dzięki temu dane wejściowe do narzędzia niestandardowego będą liczbą, co zapewnia silną weryfikację danych wejściowych i zapobiega błędom podczas wykonywania. |
createToolCallingAgent() | To polecenie tworzy agenta, który może wywoływać zdefiniowane narzędzia w odpowiedzi na zapytania użytkowników. Jest to klucz do integracji narzędzi z modelami językowymi, takimi jak Ollama, umożliwiając wywoływanie narzędzi podczas rozmowy. |
ChatPromptTemplate.fromMessages() | Służy do generowania szablonu podpowiedzi czatu z symbolami zastępczymi. Ten szablon organizuje różne typy wiadomości (systemowe, ludzkie, symbole zastępcze), z których może korzystać agent, usprawniając przepływ konwersacji. |
MessagesPlaceholder | Działa jako element zastępczy w szablonie podpowiedzi dla zawartości dynamicznej, takiej jak historia czatów lub notatnik agenta. Umożliwia to dynamiczne wstrzykiwanie kontekstu konwersacji podczas wykonywania. |
AgentExecutor() | Ta klasa zarządza wykonywaniem agentów i narzędzi. W przykładzie pomaga to w przeprowadzeniu zapytania przez agenta i zebraniu wyniku z wyjścia narzędzia. |
await agentExecutor.invoke() | Służy do uruchamiania zapytania za pośrednictwem agenta i asynchronicznego oczekiwania na wynik. Ma to kluczowe znaczenie dla interakcji z modelami i narzędziami językowymi, ponieważ gwarantuje, że kod będzie czekał na zakończenie operacji, zanim przejdzie dalej. |
try-catch | Ta struktura obsługi błędów jest używana w narzędziu niestandardowym do wychwytywania nieprawidłowych typów danych wejściowych. Wychwytując wyjątki, gwarantuje, że system zwróci pomocne komunikaty o błędach bez zakłócania przebiegu wykonywania. |
expect() | Z biblioteki asercji Chai funkcja oczekiwana() jest używana w teście jednostkowym w celu sprawdzenia danych wyjściowych niestandardowego narzędzia. Jest to niezbędne do sprawdzenia, czy narzędzie działa zgodnie z oczekiwaniami. |
Zrozumienie obsługi błędów narzędzia niestandardowego i agenta w Langchain.js
W podanym przykładzie pracujemy z Langchain.js v2, aby stworzyć niestandardowe narzędzie, które integruje się z Ollama model języka. Głównym celem narzędzia jest wykonanie prostej operacji matematycznej: dodanie 2 do wartości wejściowej. Narzędzie zbudowane jest przy użyciu Langchaina narzędzie funkcja, która definiuje funkcje wielokrotnego użytku, które może wywołać agent. Aby mieć pewność, że narzędzie działa poprawnie, schemat wejściowy jest sprawdzany za pomocą biblioteki Zod, co gwarantuje, że wprowadzone dane są poprawną liczbą. Zapewnia to prawidłową obsługę błędów i zapobiega awariom narzędzia z powodu nieprawidłowych danych wejściowych.
Niestandardowe narzędzie jest następnie włączane do agenta za pomocą utwórzToolCallingAgent funkcjonować. To polecenie umożliwia agentowi wywołanie narzędzia w razie potrzeby, a agent działa w oparciu o model Ollama, w którym skonfigurowano określone parametry, takie jak temperatura, w celu kontrolowania kreatywności odpowiedzi. Aby ułatwić płynną interakcję pomiędzy agentem a narzędziem, zastosowano szablon podpowiedzi czatu. Ten szablon organizuje konwersację, definiując różne typy wiadomości, takie jak wiadomości systemowe, informacje wprowadzane przez człowieka i symbole zastępcze. Elementy zastępcze, takie jak Symbol zastępczy Wiadomości, pozwól, aby rozmowa była dynamiczna i uwzględniała takie elementy, jak historia czatów.
Jednym z kluczowych problemów poruszonych w tym przykładzie jest obsługa błędów związanych z analizą wyników agenta Langchain. Komunikat o błędzie „parseResult on ToolCallingAgentOutputParser działa tylko na wynikach ChatGeneration” wynika z niezgodności pomiędzy typem wyniku oczekiwanym przez parser a rzeczywistym wygenerowanym wyjściem. Aby obsłużyć ten błąd, niestandardowe narzędzie jest wyposażone w solidną logikę, która zapewnia, że wszystkie dane wejściowe i wyjściowe są zgodne z oczekiwanymi formatami. Jest to dalej zarządzane przez Wykonawca agenta class, która koordynuje wykonanie agenta i narzędzi, upewniając się, że zapytanie i dane wyjściowe narzędzia są odpowiednio zsynchronizowane.
Na koniec skrypty implementują wykonanie asynchroniczne za pomocą czekać na, pozwalając systemowi na obsługę operacji bez blokowania innych procesów. Agent czeka, aż narzędzie zwróci wynik, zanim przejdzie dalej, upewniając się, że odpowiedź jest zarówno dokładna, jak i terminowa. Dodatkowo dostępne są testy jednostkowe w celu sprawdzenia funkcjonalności narzędzia i zapewnienia, że stale generuje ono prawidłowe dane wyjściowe. Testy te nie tylko potwierdzają matematyczne działanie narzędzia, ale także sprawdzają, jak dobrze radzi sobie ono z nieprawidłowymi danymi wejściowymi, poprawiając ogólną niezawodność rozwiązania. Ta modułowa i odporna na błędy konstrukcja sprawia, że skrypty nadają się do wielokrotnego użytku i są skuteczne w różnych zastosowaniach w Langchain.js.
Naprawianie błędu Langchain.js przy użyciu podejścia modułowego
Rozwiązanie 1: JavaScript z podejściem modułowym i obsługą błędów przy użyciu Langchain.js i 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 });
Ulepszona obsługa błędów dla agenta Langchain.js
Rozwiązanie 2: Obsługa błędów za pomocą testów jednostkowych w celu sprawdzenia wyników niestandardowego narzędzia w 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);
});
Odkrywanie roli agentów w integracji Langchain.js i Ollama LLM
Podczas pracy z Langchain.js, integracja agenci z narzędziami i modelami językowymi, takimi jak Ollama, jest krytycznym aspektem tworzenia dynamicznych aplikacji. Agent umożliwia połączenie niestandardowego narzędzia, które wykonuje określone zadania, z modelem językowym, który obsługuje bardziej konwersacyjne lub generatywne zadania. Korzystając z agentów, programiści mogą automatyzować przepływy pracy, w których model nie tylko generuje odpowiedzi, ale także wywołuje narzędzia do wykonywania obliczeń lub przetwarzania danych.
Kluczowym elementem tej integracji jest utwórzToolCallingAgent funkcjonować. Ta funkcja umożliwia agentowi uruchomienie określonych narzędzi, gdy jest to konieczne, zapewniając dokładne i wydajne wykonywanie zadań. Chociaż główny nacisk kładziony jest często na stworzenie samego narzędzia, równie ważne jest zrozumienie, jak zarządzać przepływem pracy agenta i unikać błędów analizy. Błędy takie jak „parseResult on ToolCallingAgentOutputParser działa tylko na wynikach ChatGeneration” zwykle pojawiają się, gdy dane wyjściowe agenta nie są kompatybilne z systemem analizowania, co uwydatnia potrzebę odpowiedniego wyrównania wyników agenta z oczekiwanym formatem.
Stosowanie szablonów podpowiedzi, np Szablon ChatPrompt, dodatkowo wzbogaca interakcję, umożliwiając dynamiczne komunikaty i elementy zastępcze kontekstu. Dzięki temu agent może dostosować swoje odpowiedzi na podstawie historii rozmów lub notatnika agenta. Optymalizacja szablonów podpowiedzi i zapewnienie prawidłowej analizy wyników agenta może zapobiec wielu typowym błędom, dzięki czemu aplikacje Langchain.js będą bardziej niezawodne i wydajne.
Często zadawane pytania dotyczące Langchain.js, agentów i narzędzi
- Kim jest agent w Langchain.js?
- Agent to komponent, który wchodzi w interakcję z narzędziami i modelami językowymi w celu wykonywania określonych zadań na podstawie zapytania użytkownika. Używa createToolCallingAgent funkcja wyzwalania narzędzi.
- Jak rozwiązać błąd „parseResult on ToolCallingAgentOutputParser”?
- Ten błąd występuje, gdy dane wyjściowe agenta są niezgodne z analizatorem składni. Upewnij się, że dane wyjściowe odpowiadają oczekiwaniom parsera i użyj a ChatGeneration format wyjściowy.
- Jaki jest cel AgentExecutor?
- The AgentExecutor zarządza wykonaniem agenta i jego narzędzi, umożliwiając uruchamianie skomplikowanych przepływów pracy w aplikacjach Langchain.js.
- Jak to się dzieje ChatPromptTemplate praca?
- ChatPromptTemplate organizuje wiadomości czatu w ustrukturyzowanym formacie, umożliwiając wstawianie do przebiegu konwersacji dynamicznych treści, takich jak historia czatów i notatnik agenta.
- Dlaczego Zod użyte w narzędziu?
- Zod służy do sprawdzania poprawności danych wejściowych, zapewniając, że dane wejściowe do narzędzia niestandardowego są prawidłowego typu (np. liczba), co zmniejsza ryzyko błędów.
Końcowe przemyślenia na temat obsługi błędów w Langchain.js
Rozwiązanie błędu „parseResult on ToolCallingAgentOutputParser działa tylko na danych wyjściowych ChatGeneration” wymaga dokładnego dopasowania wyników działania agenta do jego oczekiwań dotyczących analizy. Przy właściwym podejściu można uniknąć tego błędu.
Używając odpowiednich narzędzi, takich jak Zod, do sprawdzania poprawności i upewniania się, że agenci, np. zbudowani z Ollamą, poprawnie obsługują wejścia i wyjścia, możesz tworzyć niezawodne rozwiązania w Langchain.js bez napotykania problemów z analizą.
Źródła i odniesienia dotyczące rozwiązywania błędów Langchain.js
- Opracowuje oficjalną dokumentację Langchain, która zapewnia wgląd w tworzenie narzędzi i konfiguracje agentów. Dokumentacja Langchaina Wewnątrz.
- Dalej wyjaśnia użycie Zoda do sprawdzania poprawności danych wejściowych i jego zastosowanie w Langchain.js. Dokumentacja Zoda Wewnątrz.
- Opisuje model języka Ollama i jego implementację w agentach niestandardowych. Ollama spółka z ograniczoną odpowiedzialnością Wewnątrz.