チャットボットが単一の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による要約生成や回答生成)に渡すことが可能です。