この記事で学べること

  • LangChainにおける「Agent」の最新の構造と設計思想
  • 外部ツール(検索API)とLLMを連携させる具体的な実装手順
  • ツール呼び出し(Tool Calling)におけるエラー制御とデバッグ手法

前提条件

  • Python 3.10以上(型ヒントの恩恵を受けるため、古いバージョンは推奨しない)
  • OpenAI APIキー(GPT-4o推奨。安価なモデルでは推論能力不足でエージェントが迷走する)
  • Tavily APIキー(検索ツール用。Google検索よりAPI連携が容易で使い物になる)

Step 1: 環境準備

まずは環境を汚さないよう仮想環境を作り、必要なライブラリをインストールする。LangChainは更新が激しいため、バージョンを固定するか最新を追う覚悟を持つこと。

# 仮想環境の構築
python -m venv venv
source venv/bin/activate  # Windowsの場合は venv\Scripts\activate

# 必要なパッケージのインストール
pip install langchain langchain-openai tavily-python python-dotenv

次に、プロジェクトのルートディレクトリに .env ファイルを作成し、APIキーを設定する。

OPENAI_API_KEY=sk-xxxx...
TAVILY_API_KEY=tvly-xxxx...

Step 2: 基本設定

単なるチャットボットではなく、ツールを使い分ける「エージェント」を構築する。ここでは「検索ツール」を装備したエージェントを定義する。

import os
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain_community.tools.tavily_search import TavilySearchResults
from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain.agents import AgentExecutor, create_tool_calling_agent

load_dotenv()

# 1. ツールの定義
# 検索結果を2件に絞る(トークン節約とノイズ低減のため)
tools = [TavilySearchResults(max_results=2)]

# 2. LLMの初期化
# エージェントには思考の安定性が必要。temperature=0は鉄則だ。
llm = ChatOpenAI(model="gpt-4o", temperature=0)

# 3. プロンプトの構築
# エージェントに「自分が何者か」を理解させる。
prompt = ChatPromptTemplate.from_messages([
    ("system", "あなたはNegi Labの優秀なリサーチアシスタントです。必要に応じて検索ツールを使用し、正確な情報を提供してください。"),
    MessagesPlaceholder(variable_name="chat_history"),
    ("human", "{input}"),
    MessagesPlaceholder(variable_name="intermediate_steps"),
])

# 4. エージェントの作成
agent = create_tool_calling_agent(llm, tools, prompt)

# 5. 実行環境(Executor)の設定
# verbose=Trueにしないと、裏で何が起きているか分からずデバッグが詰む。
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

Step 3: 実行と確認

構築したエージェントに、リアルタイム性が求められる質問を投げてみる。

# 実行例
response = agent_executor.invoke({
    "input": "2024年の最新のAIトレンドについて、主要な3つのトピックを教えてください。",
    "chat_history": []
})

print(f"回答: {response['output']}")

エージェントがツールを選択し、検索結果を要約して回答すれば成功だ。もしツールを使わずに知ったかぶりをするなら、システムプロンプトの厳格さが足りないか、モデルの性能不足だ。

よくあるエラーと対処法

エラー1: OutputParserException (解析エラー)

langchain_core.exceptions.OutputParserException: Could not parse LLM output...

解決策: これはLLMが指定したフォーマット(JSON等)を守らなかった時に発生する。create_react_agentなどの古い手法で起きやすい。最新のcreate_tool_calling_agentを使い、モデルにGPT-4oなどのTool Calling対応モデルを選択することで劇的に減らせる。

エラー2: RateLimitError

openai.RateLimitError: You exceeded your current quota...

解決策: 無料枠や低ティアのAPIキーを使っている場合に頻発する。特にAgentは内部で複数回の推論を回すため、消費が激しい。OpenAIの管理画面でUsageを確認し、クレジットをチャージするか、gpt-4o-miniなど安価なモデルでテストせよ。

まとめと次のステップ

エージェントは「道具を持たせたLLM」だ。しかし、今回の構成はまだ序の口に過ぎない。

  1. LangGraphへの移行: 複雑なループや条件分岐が必要なら、AgentExecutorを卒業し、LangGraphを学習せよ。
  2. 独自のカスタムツール実装: 単なる検索だけでなく、自社のデータベースや特定のAPIを叩く関数をツールとして定義することで、実用性は跳ね上がる。
  3. 評価(Evaluation): エージェントが常に正しいツールを選ぶとは限らない。LangSmithを導入し、挙動を監視・評価する仕組みを構築するのがプロの仕事だ。

📚 さらに学習を深めるためのリソース

この記事の内容をより深く理解するために、以下の書籍・教材がおすすめです:

🔍 Amazonで「LangChain 入門書」を検索 🔍 楽天で検索

※上記リンクはアフィリエイトリンクです。