この記事で学べること
- 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」だ。しかし、今回の構成はまだ序の口に過ぎない。
- LangGraphへの移行: 複雑なループや条件分岐が必要なら、AgentExecutorを卒業し、LangGraphを学習せよ。
- 独自のカスタムツール実装: 単なる検索だけでなく、自社のデータベースや特定のAPIを叩く関数をツールとして定義することで、実用性は跳ね上がる。
- 評価(Evaluation): エージェントが常に正しいツールを選ぶとは限らない。LangSmithを導入し、挙動を監視・評価する仕組みを構築するのがプロの仕事だ。
📚 さらに学習を深めるためのリソース
この記事の内容をより深く理解するために、以下の書籍・教材がおすすめです:
- Python機械学習プログラミング - ML/DLの定番入門書
- PyTorch実践入門 - ディープラーニング実装の決定版
- ChatGPT/LLM超活用術 - プロンプトエンジニアリングの極意
- OpenAI API実践ガイド - API連携アプリ開発
※上記リンクはアフィリエイトリンクです。






