この記事で学べること

  • LangChainにおける「エージェント」の基本構造とツールの持たせ方
  • 最新の create_tool_calling_agent を使用した実装手順
  • 外部検索ツール(Tavily)と連携し、最新情報を取得するエージェントの作成

前提条件

  • Python 3.9以上がインストールされていること
  • OpenAI APIキー(gpt-4o などのモデルが利用可能なもの)
  • Tavily APIキー(Web検索用。無料枠あり)

Step 1: 環境準備

まずは必要なライブラリをインストールする。中途半端なバージョンだと依存関係で死ぬから、一気に最新版を入れておけ。

# ライブラリのインストール
pip install -U langchain langchain-openai langchain-community python-dotenv tavily-python

# プロジェクトディレクトリに移動
mkdir my-agent-lab && cd my-agent-lab
touch .env agent.py

次に、.env ファイルにAPIキーを記述する。これを忘れてコードに直書きするような素人は、この先読み進める必要はない。

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

Step 2: 基本設定

エージェントに「道具(Tools)」を定義し、思考エンジンとなるLLMを設定する。今回はWeb検索ツールを装備させる。

import os
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain_community.tools.tavily_search import TavilyAnswer
from langchain import hub
from langchain.agents import AgentExecutor, create_tool_calling_agent

# 環境変数の読み込み
load_dotenv()

# 1. LLMの定義(賢いモデルを使わないとエージェントは迷走する)
llm = ChatOpenAI(model="gpt-4o", temperature=0)

# 2. ツールの準備
tools = [TavilyAnswer()]

# 3. プロンプトの取得(公式のリポジトリから定番のものを引っ張る)
prompt = hub.pull("hwchase17/openai-functions-agent")

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

# 5. 実行環境(Executor)の作成
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

Step 3: 実行と確認

実際にエージェントを動かしてみる。verbose=True に設定しているから、エージェントがどう「考えて」ツールを選んだかが出力されるはずだ。

# agent.py の末尾に追記
def main():
    query = "現在の日本の総理大臣は誰?また、その人物の最近の大きなニュースを1つ教えて。"
    print(f"質問: {query}")

    response = agent_executor.invoke({"input": query})

    print("\n--- 最終回答 ---")
    print(response["output"])

if __name__ == "__main__":
    main()

実行コマンド:

python agent.py

ログに Invoking: tavily_search_api_answer と出れば成功だ。LLMが自分の知識外だと判断し、ツールを自律的に使った証拠だ。

よくあるエラーと対処法

エラー1: AuthenticationError

openai.AuthenticationError: Error code: 401 - {'message': 'Incorrect API key provided...'}

解決策: .env ファイルが読み込まれていないか、キーが間違っている。os.getenv("OPENAI_API_KEY") が正しく値を取得できているか確認しろ。

エラー2: OutputParserException

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

解決策: temperature が高すぎるとエージェントが勝手なフォーマットで喋り出し、解析に失敗する。エージェントを動かすときは temperature=0 が鉄則だ。

まとめと次のステップ

「エージェント」とは、単なるチャットボットではない。LLMが「自らツールを選ぶ判断力」を持った状態を指す。今回の構成は基本中の基本だが、これを応用すれば「DBからデータを抜く」「ファイルを操作する」「自社APIを叩く」といった複雑なタスクも自動化できる。

次は、LangGraph を使って、より複雑なワークフローや状態管理(State Management)を備えたエージェント構築に挑戦してみるといい。単発の実行だけでは限界があることにすぐ気づくはずだ。



関連商品をチェック

Amazonで「Python 機械学習 本」を検索 楽天で「Python 機械学習 本」を検索

※上記リンクはアフィリエイトリンクです。購入により当サイトに収益が発生する場合があります。