Ollama LLM とカスタム ツールを使用した Langchain.js の ToolCallingAgentOutputParser エラーの修正

Temp mail SuperHeros
Ollama LLM とカスタム ツールを使用した Langchain.js の ToolCallingAgentOutputParser エラーの修正
Ollama LLM とカスタム ツールを使用した Langchain.js の ToolCallingAgentOutputParser エラーの修正

Langchain.js の ToolCallingAgentOutputParser エラーの理解と修正

Langchain.js v2 を使用する場合、開発者は多くの場合、カスタム ツールや Ollama などの言語モデルを使用して効率的なエージェントを作成することを目指します。ただし、これらのコンポーネントを統合すると、デバッグが困難なエラーが発生する場合があります。

そのようなエラーの 1 つは、「ToolCallingAgentOutputParser の parseResult は ChatGeneration 出力でのみ機能します」です。これは、エージェント フレームワーク内でカスタム ツールを構築するときに発生する可能性があります。エージェントとツールが正しく動作することを確認するには、この問題の根本原因を理解することが重要です。

この記事では、Langchain の createToolCallingAgent と Ollama モデルを使用して、数値入力に 2 を加算するカスタム ツールの簡単な実装について説明します。エラーとそのコンテキストを分析することで、トラブルシューティング方法をより適切に把握できます。

次のセクションでは、コードを説明し、エラーを説明し、この問題に対処する解決策を示します。 Langchain.js を初めて使用する場合でも、経験豊富な場合でも、このガイドはこの問題を効率的に解決するのに役立ちます。

指示 使用例
tool() Langchain.js のこの関数は、操作を実行するカスタム ツールを定義します。この記事では、これを使用して、入力数値に 2 を加算し、ロジックを簡単に呼び出し可能な構造にラップするツールを作成します。
z.object() Zod ライブラリの一部。Langchain でのスキーマ検証に使用されます。これにより、カスタム ツールへの入力が数値であることが保証され、実行中のエラーを防ぐための強力な入力検証が提供されます。
createToolCallingAgent() このコマンドは、ユーザーのクエリに応じて定義されたツールを呼び出すことができるエージェントを作成します。ツールを Ollama のような言語モデルと統合し、会話中にツールを呼び出せるようにすることが重要です。
ChatPromptTemplate.fromMessages() プレースホルダーを含むチャット プロンプト テンプレートを生成するために使用されます。このテンプレートは、エージェントが使用できるさまざまなタイプのメッセージ (システム、人間、プレースホルダー) を整理し、会話フローを改善します。
MessagesPlaceholder チャット履歴やエージェントのスクラッチパッドなどの動的コンテンツのプロンプト テンプレート内のプレースホルダーとして機能します。これにより、実行中に会話コンテキストを動的に挿入できるようになります。
AgentExecutor() このクラスは、エージェントとツールの実行を管理します。この例では、エージェントを通じてクエリを実行し、ツールの出力から結果を収集するのに役立ちます。
await agentExecutor.invoke() エージェントを通じてクエリを実行し、結果を非同期的に待つために使用されます。これは、コードが操作の完了を待ってから次に進むようにするため、言語モデルやツールと対話する場合に非常に重要です。
try-catch このエラー処理構造は、無効な入力タイプを捕捉するためにカスタム ツール内で使用されます。例外をキャッチすることで、実行フローを中断することなく、システムが役立つエラー メッセージを返すことが保証されます。
expect() Chai アサーション ライブラリの Expect() は、カスタム ツールの出力を検証するために単体テストで使用されます。これは、ツールが期待どおりに動作するかどうかをテストするために不可欠です。

Langchain.js でのカスタム ツールとエージェントのエラー処理を理解する

提供されている例では、Langchain.js v2 を使用して、 オラマ 言語モデル。このツールの主な目的は、入力値に 2 を加算するという単純な数学演算を実行することです。このツールは Langchain を使用して構築されています 道具 関数。エージェントによって呼び出すことができる再利用可能な関数を定義します。ツールが正しく動作することを確認するために、入力スキーマが Zod ライブラリで検証され、入力が有効な数値であることが保証されます。これにより、エラーが適切に処理され、無効な入力によるツールの失敗が防止されます。

カスタム ツールは、次のコマンドを使用してエージェントに組み込まれます。 createToolCallingAgent 関数。このコマンドを使用すると、エージェントは必要に応じてツールを呼び出すことができ、エージェントは Ollama モデルを利用します。このモデルは、応答の創造性を制御するために温度などの特定のパラメーターで構成されています。エージェントとツール間のスムーズな対話を促進するために、チャット プロンプト テンプレートが使用されます。このテンプレートは、システム メッセージ、人間による入力、プレースホルダーなど、さまざまな種類のメッセージを定義することで会話を整理します。次のようなプレースホルダー メッセージプレースホルダー、チャット履歴などの要素を含めて、会話を動的にすることができます。

この例で取り上げられる重要な問題の 1 つは、Langchain エージェントの出力解析に関するエラー処理です。 「ToolCallingAgentOutputParser の parseResult は ChatGeneration 出力でのみ機能します」というエラー メッセージは、パーサーが予期する出力の種類と生成される実際の出力の不一致が原因で発生します。このエラーを処理するために、カスタム ツールは堅牢なロジックでラップされ、すべての入力と出力が期待される形式に準拠していることが保証されます。これはさらに、 エージェントエグゼキュータ クラス。エージェントとツールの実行を調整し、クエリとツールの出力が適切に同期されていることを確認します。

最後に、スクリプトは次を使用して非同期実行を実装します。 待つこれにより、システムは他のプロセスをブロックすることなく操作を処理できるようになります。エージェントはツールが結果を返すのを待ってから続行し、応答が正確かつタイムリーであることを保証します。さらに、ツールの機能を検証する単体テストが含まれており、正しい出力が一貫して生成されることを保証します。これらのテストは、ツールの数学的操作を確認するだけでなく、無効な入力がどの程度適切に処理されるかもチェックし、ソリューションの全体的な信頼性を向上させます。このモジュール式でエラーに強い設計により、スクリプトが再利用可能になり、Langchain.js 内のさまざまなアプリケーションで効果的になります。

モジュラーアプローチによる Langchain.js エラーの修正

解決策 1: Langchain.js と Ollama LLM を使用したモジュラー アプローチとエラー処理による JavaScript

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

Langchain.js エージェントのエラー処理の強化

解決策 2: 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);
});

Langchain.js と Ollama LLM の統合におけるエージェントの役割を探る

Langchain.js を使用する場合、統合する エージェント Ollama のようなツールや言語モデルを使用することは、動的アプリケーションを構築する上で重要な側面です。エージェントを使用すると、特定のタスクを実行するカスタム ツールを、より会話的なタスクや生成的なタスクを処理する言語モデルに接続できます。エージェントを使用することで、開発者はモデルが応答を生成するだけでなく、計算やデータ処理を実行するツールを呼び出すワークフローを自動化できます。

この統合における重要なコンポーネントは、 createToolCallingAgent 関数。この機能により、エージェントは必要に応じて特定のツールをトリガーできるため、タスクを正確かつ効率的に完了できます。多くの場合、主な焦点はツール自体の作成にありますが、エージェントのワークフローを管理し、解析エラーを回避する方法を理解することも同様に重要です。 「ToolCallingAgentOutputParser の parseResult は ChatGeneration 出力でのみ動作します」のようなエラーは通常、エージェントの出力が解析システムと互換性がない場合に発生し、エージェントの出力と予期される形式を適切に調整する必要性が強調されます。

次のようなプロンプト テンプレートの使用 チャットプロンプトテンプレート、動的なメッセージとコンテキスト プレースホルダーを許可することで、インタラクションをさらに充実させます。これにより、エージェントはチャット履歴またはエージェントのスクラッチパッドに基づいて応答を調整できます。プロンプト テンプレートを最適化し、エージェントの出力が正しく解析されるようにすることで、多くの一般的なエラーを防止し、Langchain.js アプリケーションの信頼性と効率性を高めることができます。

Langchain.js、エージェント、ツールに関するよくある質問

  1. Langchain.js のエージェントとは何ですか?
  2. エージェントは、ツールおよび言語モデルと対話して、ユーザーのクエリに基づいて特定のタスクを実行するコンポーネントです。それは、 createToolCallingAgent ツールをトリガーする機能。
  3. 「ToolCallingAgentOutputParser の parseResult」エラーを解決するにはどうすればよいですか?
  4. このエラーは、エージェントの出力がパーサーと互換性がない場合に発生します。出力がパーサーが期待するものと一致していることを確認し、 ChatGeneration 出力形式。
  5. の目的は何ですか AgentExecutor?
  6. AgentExecutor エージェントとそのツールの実行を管理し、Langchain.js アプリケーションで複雑なワークフローを実行できるようにします。
  7. どのようにして ChatPromptTemplate 仕事?
  8. ChatPromptTemplate チャット メッセージを構造化された形式で整理し、チャット履歴やエージェントのスクラッチパッドなどの動的なコンテンツを会話フローに挿入できるようにします。
  9. なぜですか Zod ツールで使用されていますか?
  10. Zod は入力検証に使用され、カスタム ツールへの入力が正しいタイプ (数値など) であることを確認し、エラーの可能性を減らします。

Langchain.js のエラー処理に関する最終的な考え方

「ToolCallingAgentOutputParser の parseResult は ChatGeneration 出力でのみ機能します」エラーを解決するには、エージェントの出力とその解析期待値の間で慎重に調整する必要があります。適切なアプローチをとれば、このエラーは回避できます。

Zod などの適切なツールを検証に使用し、Ollama で構築されたエージェントなどのエージェントが入力と出力を正しく処理できるようにすることで、解析の問題が発生することなく、Langchain.js で堅牢なソリューションを作成できます。

Langchain.js エラー解決のソースとリファレンス
  1. 公式 Langchain ドキュメントについて詳しく説明しており、ツールの作成とエージェントの構成についての洞察が得られます。 ラングチェーンのドキュメント 内部。
  2. さらに、入力検証のための Zod の使用法と、Langchain.js でのその応用について説明します。 ゾッドのドキュメント 内部。
  3. Ollama 言語モデルとカスタム エージェント内でのその実装について説明します。 オラマLLM 内部。