LangGraph で拡張可能なチャットボットを構築:外部ツール連携の実装

チャットボットが単一のLLM応答に依存せず、動的に外部情報を取得できるようにするためには、検索機能などのツールをグラフに統合する必要があります。本セクションでは、LangGraph のノード間で検索結果を活用するためのツール呼び出し機構を実装します。

前提条件

Tavily API キー(tvly-... 形式)を事前に取得し、環境変数として利用可能にしてください。

1. ツールライブラリの導入

Python 環境

pip install -U langchain-tavily

TypeScript/JavaScript 環境

# npm
npm install @langchain/tavily
# pnpm
pnpm add @langchain/tavily

2. 認証情報の設定

Python

import os
os.environ["TAVILY_API_KEY"] = "tvly-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

TypeScript

process.env.TAVILY_API_KEY = "tvly-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";

3. 検索ツールの定義と実行

検索結果を最大2件返すように設定した Tavily 検索インスタンスを作成し、ツールリストに登録します。

Python

from langchain_tavily import TavilySearch

search_engine = TavilySearch(max_results=2)
available_tools = [search_engine]

result = search_engine.invoke("LangGraphにおけるノードとは何か?")

実行例の戻り値(一部省略):

{
  "query": "LangGraphにおけるノードとは何か?",
  "results": [
    {
      "title": "LangGraph 入門:状態を持つグラフの設計",
      "url": "https://example.com/langgraph-nodes",
      "content": "LangGraph のノードは、状態を更新・伝搬する処理単位であり、各ノードは入力状態を受け取り、変換後の状態を出力する。..."
    },
    {
      "title": "LangGraph のアーキテクチャとエッジ制御",
      "url": "https://example.com/langgraph-edges",
      "content": "条件付きエッジにより、ノードの実行順序を状態に基づいて動的に決定可能。..."
    }
  ]
}

TypeScript

import { TavilySearch } from "@langchain/tavily";

const searcher = new TavilySearch({ maxResults: 2 });
const toolset = [searcher];

const response = await searcher.invoke({
  query: "LangGraphにおけるノードとは何か?"
});

このように、ツールは LangGraph 内の任意のノードから呼び出せ、検索結果を後続の処理(例:LLMによる要約生成や回答生成)に渡すことが可能です。

タグ: langgraph tavily LangChain tool-calling stateful-llm

7月8日 19:57 投稿