Article

【Python】LangChain create_agentでAIエージェントを作ってみた|使い方・Tool・LangGraphとの違い

LangChainを使ってAIエージェントを開発しようと調べていると、最近よく見かけるのが

from langchain.agents import create_agent

というコードです。

create_agentを使うと、LLMに単純な質問をして回答してもらうだけではなく、

AI自身が「どのツールを使うべきか」を判断し、ツールを実行して、その結果をもとに回答するAIエージェント

を比較的少ないコードで作れます。

現在のLangChain 1.0では、create_agentがエージェントを構築する標準的な方法として位置づけられています。以前よく使われていたlanggraph.prebuilt.create_react_agentよりシンプルなインターフェースになっています。

今回はPythonで実際にLangChain create_agentを使い、簡単なAIエージェントを作りながら、

  • create_agentとは何なのか
  • 普通のLLM呼び出しとの違い
  • Toolをどうやって使うのか
  • LangGraphとの違い
  • RAGとどう組み合わせるのか

まで解説します。

LangChainのcreate_agentとは?

create_agentは、LangChainでAIエージェントを作成するためのAPIです。

基本形はかなりシンプルです。

from langchain.agents import create_agent

agent = create_agent(
    model="openai:gpt-5.5",
    tools=tools
)

LangChain公式ドキュメントでも、モデルとToolを指定するだけのこの形式が基本形として紹介されています。

重要なのは、

tools=tools

の部分です。

普通のLLMであれば、

ユーザー
↓
LLM
↓
回答

という流れになります。

一方、AIエージェントの場合は、

ユーザー
↓
LLM
↓
必要なToolを判断
↓
Toolを実行
↓
実行結果をLLMへ返す
↓
LLMが回答

という処理ができます。

つまり、

「回答するAI」から「判断して処理を実行するAI」へ拡張する仕組み

と考えると分かりやすいです。

LangChainではToolをcreate_agentに渡すことで、エージェントから利用できるようにします。

create_agentを使ってAIエージェントを作ってみる

今回は分かりやすい例として、

サービスの料金を調べて回答するAIエージェント

を作ってみます。

ユーザーが、

「ホームページ制作はいくらですか?」

と質問すると、AIエージェントが料金検索Toolを実行し、その結果をもとに回答する仕組みです。

LangChainをインストールする

まずLangChainをインストールします。

pip install -U langchain langchain-openai

LangChain公式のQuickstartでも、

pip install -U langchain

が基本的なインストール方法として案内されています。

OpenAIを利用する場合は、環境変数にAPIキーも設定しておきます。

export OPENAI_API_KEY="YOUR_API_KEY"

Toolを作成する

続いて、AIエージェントから呼び出すToolを作ります。

from langchain.tools import tool


@tool
def get_service_price(service_name: str) -> str:
    """サービス名から料金を取得します。"""

    prices = {
        "ホームページ制作": "初期費用8万円",
        "予約システム": "初期費用8万円",
        "在庫管理システム": "要件に応じて個別見積もり",
    }

    return prices.get(
        service_name,
        "該当するサービスが見つかりませんでした。"
    )

ここでは非常に単純なPython関数ですが、@toolを付けています。

これによって、この関数をAIエージェントが利用できるToolとして扱えるようになります。

実際のシステムでは、この部分を

データベース検索
Google Drive検索
社内API
商品DB
在庫DB
予約DB
CRM
Web検索
RAG

などに置き換えることができます。

ここがAIエージェントの面白いところです。

create_agentでエージェントを作る

それでは、先ほど作ったToolをcreate_agentへ渡します。

from langchain.agents import create_agent

agent = create_agent(
    model="openai:gpt-5.5",

    tools=[
        get_service_price
    ],

    system_prompt="""
    あなたはシステム開発会社の見積もり担当AIです。

    サービス料金について質問された場合は、
    get_service_priceを利用してください。

    Toolから取得していない料金を
    推測して回答してはいけません。
    """
)

かなり少ないコードですが、これだけで

Toolを利用できるAIエージェント

を作れます。

create_agentにはmodeltoolssystem_promptなどを指定できます。LangChain公式でも、この構成が基本的なエージェント設定として紹介されています。

AIエージェントを実行する

作成したエージェントはinvoke()で実行できます。

result = agent.invoke(
    {
        "messages": [
            {
                "role": "user",
                "content": "ホームページ制作はいくらですか?"
            }
        ]
    }
)

print(result["messages"][-1].content)

create_agentで作成したエージェントに対してmessagesを渡してinvoke()する形式は、LangChainの公式ドキュメントでも使用されています。

例えば、

ホームページ制作はいくらですか?

と聞かれた場合、エージェントは質問だけを見て適当に金額を生成するのではありません。

概念的には、

ユーザー
「ホームページ制作はいくらですか?」
        ↓
AI
「料金について聞かれている」
        ↓
get_service_priceを使う
        ↓
get_service_price("ホームページ制作")
        ↓
「初期費用8万円」
        ↓
AI
「ホームページ制作は初期費用8万円です」

という動きをします。

ここが通常のChatGPT APIなどを単純に呼び出す場合との大きな違いです。

なぜこれが「AIエージェント」なのか?

通常のLLMアプリケーションでも、PythonからOpenAIなどのAPIを呼び出すことはできます。

例えば、

response = model.invoke(
    "ホームページ制作はいくらですか?"
)

というだけなら、LLMに質問しているだけです。

一方create_agentでは、

「何をするべきか」をLLMが判断できます。

今回なら、

料金質問
↓
料金Tool

ですが、Toolを増やせば、

料金を知りたい
→ 見積もりTool

過去案件を知りたい
→ RAG検索Tool

予約状況を知りたい
→ 予約DB検索Tool

メールを送りたい
→ メール送信Tool

といった振り分けが可能になります。

ユーザーの質問ごとに、

「どの処理を実行するか」

をこちらで完全にif文として固定しなくても、LLMに判断させられるのがAIエージェントの大きな特徴です。

create_agentとLangGraphは何が違う?

LangChainを調べていると、

create_agent
LangGraph

の両方が出てくるため、最初は違いが分かりにくいと思います。

ざっくり整理すると、

create_agent
→ 高レベルなAPI

LangGraph
→ より低レベルで細かく制御する仕組み

と考えると分かりやすいです。

実際、LangChainのエージェントはLangGraphの上に構築されており、create_agentも内部ではLangGraphのランタイム上で動作します。

例えば、

agent = create_agent(
    model=model,
    tools=tools
)

と書くだけで、内部では概念的に、

START
 ↓
LLM
 ↓
Toolを使う?
 ├─ YES → Tool実行 → LLMへ戻る
 └─ NO  → END

というようなエージェントのループが動きます。

自分でLangGraphを使う場合、この処理フローをより細かく設計できます。

そのため、まずAIエージェントを作ってみたい場合はcreate_agent、複雑な業務フローを明示的に制御したい場合はLangGraph、という使い分けが分かりやすいでしょう。

create_react_agentではなくcreate_agentを使う?

LangChainやLangGraphについて検索すると、

create_react_agent()

を使った記事も多数見つかります。

しかし現在のLangChain 1.0では、

from langchain.agents import create_agent

が標準的なエージェント作成方法になっています。

また、LangGraph側のcreate_react_agentについても、現在の公式リファレンスではcreate_agentを利用する方向が案内されています。

そのため、新しくLangChainでAIエージェントを作る場合は、まずcreate_agentから理解した方がよさそうです。

create_agentとRAGを組み合わせると何ができる?

create_agent単体でも便利ですが、業務システムで特に重要になるのがRAGとの組み合わせです。

例えば、見積もりAIを作る場合、

Google Drive
├─ ホームページ制作の見積もりルール
├─ 予約システムの見積もりルール
├─ 在庫管理システムの見積もりルール
└─ 過去の見積もり

などをナレッジとして登録しておきます。

そして、

ユーザー
「ブルーベリー農園向けの予約システムを作りたい」
↓
AIエージェント
↓
予約システムの見積もりルールを検索
↓
必要なヒアリング項目を確認
↓
不足情報を質問
↓
見積もり計算
↓
見積もり提示

という流れを作ることができます。

ここで重要なのは、

RAGとAIエージェントは役割が違う

という点です。

RAGは、

必要な情報を検索する仕組み

です。

AIエージェントは、

次に何をするべきか判断する仕組み

です。

したがって、

create_agent
    ↓
RAG検索Tool
    ↓
見積もり計算Tool
    ↓
必要なら追加質問
    ↓
最終回答

という構成にすると、単純なRAGチャットボットよりも複雑な業務へ対応できます。

会話内容を記憶させることもできる

見積もりAIなどでは、1回の質問だけで処理が終わらないケースがあります。

例えば、

AI:
どのようなシステムをご希望ですか?

ユーザー:
予約システムです。

AI:
決済機能は必要ですか?

ユーザー:
必要です。

という会話です。

この場合、

「必要です」

という発言だけをLLMに渡しても意味が分かりません。

そのため過去の会話を保持する必要があります。

LangChainのcreate_agentではcheckpointerを設定することで、同じthread内の会話履歴を保持できます。公式ドキュメントでもInMemorySaverを使用した例が紹介されています。

例えば、

from langgraph.checkpoint.memory import InMemorySaver

agent = create_agent(
    model="openai:gpt-5.5",
    tools=[get_service_price],
    checkpointer=InMemorySaver()
)

といった構成です。

本番環境では、永続化方法まで含めて設計する必要があります。

構造化された結果を返すこともできる

業務システムでは、

見積金額:100000円
納期:30日
サービス:予約システム

のようなデータを、文章ではなくプログラムから扱える形式で取得したいことがあります。

create_agentではresponse_formatを使って構造化出力を指定できます。LangChainは指定されたスキーマに基づいて結果を検証し、structured_responseとして取得できる仕組みを提供しています。

例えばPydanticを利用して、

from pydantic import BaseModel


class Estimate(BaseModel):
    service_name: str
    price: int
    description: str

というスキーマを作り、

agent = create_agent(
    model="openai:gpt-5.5",
    tools=[get_service_price],
    response_format=Estimate
)

とすれば、

result["structured_response"]

から構造化された結果を取得できます。

WebシステムやAPIへ組み込む場合には非常に便利な機能です。

create_agentは何に使える?

今回作った料金検索AIはかなり単純ですが、Toolを変えるだけでさまざまなAIエージェントを作れます。

例えば企業向けなら、

AI見積もり
社内問い合わせ
カスタマーサポート
営業支援
予約受付
在庫確認
データ分析
メール作成・送信
CRM操作
社内文書検索

といった用途が考えられます。

特に、

「質問に回答するだけではなく、その後に何らかの処理を実行したい業務」

はAIエージェントと相性があります。

create_agentを使ってみた感想

実際にLangChain create_agentの仕組みを見ると、AIエージェント自体の基本構造はそれほど複雑ではありません。

最低限なら、

agent = create_agent(
    model="openai:gpt-5.5",
    tools=[tool]
)

だけでもエージェントを作れます。

しかし、本当に難しいのはここからです。

実務で使う場合には、

どのToolを用意するのか
どの情報をRAGで検索するのか
何をLLMに判断させるのか
何をプログラム側で制御するのか
誤操作をどう防ぐのか
会話状態をどう管理するのか
どこで人間に確認を求めるのか

といった設計が重要になります。

create_agentはAIエージェント開発を簡単に始めるための入口であり、実務ではその上にTool、RAG、Memory、Middleware、データベースなどを組み合わせていくことになります。

まとめ:LangChain create_agentなら少ないコードでAIエージェントを作れる

今回はPythonでLangChainのcreate_agentを使ってAIエージェントを作ってみました。

create_agentを利用すると、

LLM
+
Tool
+
system prompt

という比較的シンプルな構成からAIエージェントを作れます。

さらに、

RAG
データベース
外部API
Memory
Structured Output
Middleware
Human in the Loop

などを組み合わせれば、本格的な業務AIエージェントへ拡張できます。

LangChain 1.0ではcreate_agentがエージェント構築の標準的な入口になっているため、これからLangChainでAIエージェント開発を始めるのであれば、まず理解しておきたいAPIの一つです。

「LangChainを勉強したいけれど、何から作ればいいのか分からない」という場合は、まず今回のように1つだけToolを用意して、

ユーザーの質問
↓
AIが判断
↓
Toolを実行
↓
Toolの結果から回答

という最小構成を動かしてみると、AIエージェントの仕組みを理解しやすいでしょう。

Contact

お問い合わせ

システム導入、Webアプリ開発、AI導入、業務委託での開発支援などのご相談を受け付けています。

要件が固まっていなくても大丈夫です。使う方・運用する方の視点で整理し、分かりやすく進めます。

まずはお気軽にお問い合わせください。