LangChain Agents
4.9312 評価0 収集
ツール概要:
LangChainのエージェントフレームワーク。AIモデルにツールへのアクセスを提供し、複雑なタスクを自律的に解決できるようにします。
収録日時:
2025/5/18
月間訪問:
120,000
AIエージェント
LangChain Agentsとは?
LangChain Agentsとは
LangChain Agentsは、LangChainフレームワークの一部として提供される、大規模言語モデル(LLM)を使用した自律型エージェントを構築するためのツールセットです。これらのエージェントは、与えられた目標に基づいて推論し、外部ツールを使用して、複雑なタスクを自律的に解決することができます。
主な特徴
- ツール使用能力: エージェントは検索、計算、APIアクセスなど様々なツールを使用可能
- 推論エンジン: ReAct、ReflexionなどのプロンプトフレームワークによるLLMの推論能力強化
- 柔軟なアーキテクチャ: 様々なLLM(OpenAI、Anthropic、Hugging Faceなど)と互換性あり
- メモリシステム: 会話履歴や重要情報を記憶する機能
- エージェントタイプ: 単一ステップ、マルチステップ、プランと実行など様々なエージェントタイプ
- ツールキット: 特定のドメイン向けに最適化されたツールセット
- エコシステム: 広範なLangChainエコシステムとの統合
主なエージェントタイプ
- MRKL (Modular Reasoning, Knowledge and Language): 複数のモジュールを組み合わせて推論するエージェント
- ReAct (Reasoning + Acting): 推論と行動を交互に行うエージェント
- Plan-and-Execute Agent: 計画を立ててから実行するエージェント
- OpenAI Function Agent: OpenAIのFunction Callingを活用したエージェント
- XML Agent: XMLフォーマットを使用して構造化された出力を生成するエージェント
ユースケース
- 情報検索と分析: ウェブ検索、データベースクエリ、情報統合
- データ処理: データの取得、変換、分析、可視化
- タスク自動化: スケジュール管理、予約、リマインダー設定
- カスタマーサポート: 質問応答、トラブルシューティング、情報提供
- 研究支援: 文献調査、情報収集、仮説検証
- コンテンツ作成: 記事執筆、コード生成、クリエイティブ作業
LangChain Agentsは、特に複数のツールやデータソースを組み合わせる必要がある複雑なタスクや、ユーザーの意図に基づいて適切なツールを選択する必要があるタスクに適しています。
LangChain Agentsの使い方
LangChain Agentsの使い方
インストール
pip install langchain langchain-openai
基本的な使用例
from langchain_openai import ChatOpenAI
from langchain.agents import AgentType, initialize_agent, load_tools
from langchain.agents.agent_toolkits import create_python_agent
from langchain.tools.python.tool import PythonREPLTool
# LLMの初期化
llm = ChatOpenAI(model="gpt-4", temperature=0)
# 基本ツールの読み込み
tools = load_tools(["llm-math", "wikipedia"], llm=llm)
# エージェントの初期化
agent = initialize_agent(
tools,
llm,
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
verbose=True,
handle_parsing_errors=True
)
# エージェントの実行
response = agent.invoke({"input": "2019年のノーベル物理学賞受賞者は誰ですか?また、受賞理由を簡単に説明してください。"})
print(response["output"])
様々なエージェントタイプ
ReActエージェント
from langchain.agents import AgentType
# ReActエージェントの初期化
react_agent = initialize_agent(
tools,
llm,
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
verbose=True
)
OpenAI Functionsエージェント
from langchain.agents import AgentType
# OpenAI Functionsエージェントの初期化
functions_agent = initialize_agent(
tools,
llm,
agent=AgentType.OPENAI_FUNCTIONS,
verbose=True
)
Plan-and-Executeエージェント
from langchain.agents import AgentExecutor
from langchain.agents.plan_and_execute.agent import PlanAndExecuteAgentExecutor
from langchain.agents.plan_and_execute.planners import load_chat_planner
from langchain.agents.plan_and_execute.executors import load_agent_executor
# プランナーとエグゼキューターの初期化
planner = load_chat_planner(llm)
executor = load_agent_executor(llm, tools, verbose=True)
# Plan-and-Executeエージェントの初期化
plan_agent = PlanAndExecuteAgentExecutor(
planner=planner,
executor=executor,
verbose=True
)
# エージェントの実行
response = plan_agent.invoke({"input": "東京と大阪の人口を調べて、その差を計算してください。"})
カスタムツールの作成
from langchain.tools import BaseTool, StructuredTool, tool
from typing import Optional, Type
from pydantic import BaseModel, Field
# デコレータを使用した簡単なツール作成
@tool
def search_weather(location: str) -> str:
"""指定された場所の天気を検索します。"""
# 実際には天気APIを呼び出す処理を実装
return f"{location}の天気は晴れです。気温は25度です。"
# Pydanticモデルを使用した構造化ツール
class CalculatorInput(BaseModel):
operation: str = Field(description="実行する数学演算(加算、減算、乗算、除算)")
a: float = Field(description="最初の数値")
b: float = Field(description="2番目の数値")
class Calculator(BaseTool):
name = "calculator"
description = "数学的な計算を実行するツール"
args_schema: Type[BaseModel] = CalculatorInput
def _run(self, operation: str, a: float, b: float) -> float:
if operation == "加算":
return a + b
elif operation == "減算":
return a - b
elif operation == "乗算":
return a * b
elif operation == "除算":
return a / b
else:
raise ValueError(f"サポートされていない演算: {operation}")
def _arun(self, operation: str, a: float, b: float):
raise NotImplementedError("このツールは非同期実行をサポートしていません")
# カスタムツールをエージェントに追加
tools = load_tools(["wikipedia"])
tools.extend([search_weather, Calculator()])
agent = initialize_agent(
tools,
llm,
agent=AgentType.OPENAI_FUNCTIONS,
verbose=True
)
メモリの追加
from langchain.memory import ConversationBufferMemory
# メモリの初期化
memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)
# メモリを持つエージェントの初期化
agent = initialize_agent(
tools,
llm,
agent=AgentType.OPENAI_FUNCTIONS,
memory=memory,
verbose=True
)
# 会話の実行
agent.invoke({"input": "私の名前は田中です。"})
agent.invoke({"input": "私の名前は何ですか?"})
ベストプラクティス
- 適切なエージェントタイプの選択: タスクの性質に合わせて最適なエージェントタイプを選択
- エラーハンドリング:
handle_parsing_errors=True
を設定して、エージェントのエラーを適切に処理 - ツールの説明: ツールの説明は明確かつ詳細に記述し、LLMが適切に選択できるようにする
- 入力検証: ユーザー入力やツールの入出力を適切に検証し、エラーを防止
- モデル選択: 複雑なタスクにはGPT-4などの高性能モデルを使用
- デバッグ:
verbose=True
を設定して、エージェントの思考プロセスを確認 - コンテキスト管理: 長い会話ではメモリを適切に管理し、コンテキストウィンドウの制限に注意
