LangChain: Open Agent Platform
https://github.com/langchain-ai/open-agent-platform/
目次
- はじめに
- OAPにおけるAIエージェントとは
- 初めてのエージェントセットアップ
- 認証設定
- RAGによるエージェント強化
- MCPによる機能拡張
- カスタムエージェントの構築
- 応用トピックとベストプラクティス
- まとめと今後の展望
はじめに
Open Agent Platform(以下OAP)は、AIテクノロジーを民主化する重要な一歩となるプラットフォームです。プログラミングの深い知識がなくても、非技術者がAIエージェントを構築、プロトタイプ化、展開できるように設計された「市民開発者(Citizen Developer)」向けプラットフォームとなっています。これらのエージェントは様々なタスクを実行し、異なるツール、データソース、さらには他のエージェントと接続することが可能です。
現在のAI環境において、AIの能力は劇的に進歩していますが、これらの能力をカスタマイズして展開するには、通常、技術的な専門知識が必要という課題があります。OAPはこの課題に対応し、洗練されたAIエージェントを作成および構成するためのアクセスしやすいインターフェースを提供することで、AIの活用パラダイムを変革します。
OAPにおけるAIエージェントとは
OAPのエコシステムでは、「エージェント」とは以下のことができるAI駆動のエンティティを指します:
- ユーザーのリクエストと自然言語指示を処理する
- 様々なツールとデータソースにアクセスする
- コンテキストと入力に基づいて決定を下す
- ユーザーに代わってアクションを実行する
- 結果を理解しやすい形式で伝える
エージェントは、一般的なAIチャットボットよりも高度な存在です。チャットボットが単に会話を行うだけなのに対し、エージェントは積極的にタスクを実行し、データを分析し、他のシステムと連携します。料理人がレシピに従って料理を作るように、エージェントは指示に従って複雑なタスクを実行するのです。
OAPは特に2つの事前構築されたエージェントをサポートしています:
- Tools Agent:様々な外部ツールやサービスと対話するように設計されています
- Supervisor Agent:複雑なワークフロー用に複数のエージェントを管理・調整します
初めてのエージェントセットアップ
OAPでの旅は、エージェントの展開と構成から始まります。プラットフォームはニーズに合わせてカスタマイズできる事前構築されたエージェントを提供しています。
初期セットアップ手順
セットアッププロセスは比較的シンプルで、以下の手順で進めます:
具体的なステップは次のとおりです:
- GitHub からエージェントリポジトリをクローンする
- README の指示に従って設定を行う
- エージェントを LangGraph Platform にデプロイする
- OAP インスタンスの環境変数を設定する
設定の基本
OAPインスタンスにエージェントを接続するための設定は、次のようなJSONオブジェクトの集合で表現されます:
{
"id": "デプロイメントのプロジェクトID",
"tenantId": "LangSmithアカウントのテナントID",
"deploymentUrl": "デプロイメントのAPI URL",
"name": "デプロイメントのカスタム名",
"isDefault": "デフォルトデプロイメントかどうか",
"defaultGraphId": "デフォルトグラフのグラフID"
}
これらの設定値は、デプロイされた各エージェントの /info
エンドポイントにGETリクエストを送ることで取得できます。そして、project_id
の値をid
に、tenant_id
をtenantId
にコピーします。
設定が完了したら、これらのJSONオブジェクトを単一のフラット配列に文字列化し、環境変数 NEXT_PUBLIC_DEPLOYMENTS
に設定します。
例えば、ローカルデプロイメントの場合、この環境変数は次のようになります:
NEXT_PUBLIC_DEPLOYMENTS=[{"id":"bf63dc89-1de7-4a65-8336-af9ecda479d6","deploymentUrl":"http://localhost:2024","tenantId":"42d732b3-1324-4226-9fe9-513044dceb58","name":"Local deployment","isDefault":true,"defaultGraphId":"agent"}]
認証設定
OAPはデフォルトでSupabase認証を使用するように設定されています。Supabase認証を設定するプロセスは以下の通りです:
Supabase認証のセットアップ
- まず、新しいSupabaseプロジェクトを作成します
- 作成後、以下の環境変数を設定します:
NEXT_PUBLIC_SUPABASE_URL="<あなたのSupabase URL>" NEXT_PUBLIC_SUPABASE_ANON_KEY="<あなたのSupabase匿名キー>"
- SupabaseプロジェクトでGoogle認証を有効にします(または必要に応じてアプリからGoogle認証のUIコードを削除します)
LangGraph サーバー認証
事前構築されたLangGraphエージェントはカスタム認証を実装しているため、リクエスト時にLangSmith APIキーを指定する必要はありません。代わりに、ユーザーのSupabaseアクセストークン(JWTトークン)をリクエストのAuthorizationヘッダーで渡します。
LangGraphサーバーの認証ミドルウェア内で、このトークンを抽出してSupabaseで検証します。検証に成功すると、ユーザーIDが返され、各ユーザーが自分自身のエージェントとスレッドにのみアクセスできることを確認するために使用されます。
RAGによるエージェント強化
RAG(Retrieval-Augmented Generation、検索拡張生成)は、エージェントがドキュメントやその他の知識ソースにアクセスして処理できるようにする強力な技術です。OAPはRAGを直接サポートしており、クエリに応答する際に関連情報を取得できるようにします。
RAGサーバーのセットアップ
OAPでRAGを設定するには:
-
LangConnectのRAGサーバーのインスタンスをデプロイします
- LangConnectはLangChainのRAG統合(ベクトルストア、ドキュメントローダー、インデックス作成APIなど)の上に構築されたオープンソースの管理検索サービスです
- RAGアプリケーション用のコレクションやドキュメントを管理するAPIサーバーを素早く立ち上げることができます
-
NEXT_PUBLIC_RAG_API_URL
環境変数を設定します- ローカル開発の場合:
NEXT_PUBLIC_RAG_API_URL="http://localhost:8080"
- ローカル開発の場合:
-
OAPウェブインターフェースの
/rag
ページにアクセスして最初のコレクションを作成し、ドキュメントをアップロードします -
エージェント作成/編集時にコレクションを選択します
- これにより、エージェントはRAGサーバーにリクエストを行い、ユーザーのクエリに関連するドキュメントを取得するツールにアクセスできるようになります
RAGの認証
RAGサーバーへの認証は、Supabase JWTを使用して行われます。リクエストのAuthorization
ヘッダーでSupabase JWTを渡し、LangConnect RAGサーバー内でこのトークンを抽出して検証します。検証に成功すると、ユーザーIDが返され、各ユーザーが自分のコレクションにのみアクセスできるようになります。
MCPによる機能拡張
MCP(Multi-Channel Platform)サーバーを使用すると、エージェントが外部ツールやサービスにアクセスできるようになります。これにより、エージェントの能力が単純な会話を超えて、アクションの実行や外部からの情報取得にまで拡張されます。
OAPは現在、ストリーミング可能なHTTPリクエストをサポートするMCPサーバーとの接続のみをサポートしています。2025年5月10日現在、これをサポートするMCPサーバーは多くないため、デモアプリケーションはArcadeのMCPサーバーに接続されています。
MCPサーバーの統合
OAPは2つの方法でMCPサーバーへの接続をサポートしています:
1. 認証が必要なサーバー
認証が必要なMCPサーバーに接続するには:
-
NEXT_PUBLIC_MCP_AUTH_REQUIRED=true
を設定します - すべてのリクエストはウェブアプリのAPIルート (
/api/oap_mcp
) を通して転送されます - プロキシルート内では、Supabase JWTを使用してMCPサーバーと認証し、MCPアクセストークンと交換します
- このアクセストークンは、ユーザーに代わってMCPサーバーにリクエストを行う際に使用されます
2. 認証が不要なサーバー
認証が不要なMCPサーバーに接続するには:
-
NEXT_PUBLIC_MCP_SERVER_URL
環境変数にMCPサーバーのURLを設定します -
NEXT_PUBLIC_MCP_AUTH_REQUIRED
が設定されていない場合、クライアントから直接MCPサーバーを呼び出します
MCPサーバーURL変更時の対応
MCPサーバーのURLを変更する場合、すべてのエージェントを更新する必要があります。このリポジトリには、それを行うためのスクリプトが含まれています:
# `apps/web` ディレクトリ内にいることを確認
# cd apps/web
# TSXを介してスクリプトを実行
npx tsx scripts/update-agents-mcp-url.ts
このスクリプトは、リストされたすべてのデプロイメントからすべてのエージェントをフェッチし、MCPサーバーをサポートしているかどうかを確認し、必要に応じてURLを更新します。
カスタムエージェントの構築
OAPの最も強力な機能の1つは、特定のニーズに合わせたカスタムエージェントを作成できることです。これらのエージェントはLangGraph Platformで構築され、OAPのインターフェースから設定できます。
エージェント設定のタイプ
OAPでカスタムエージェントを構築するには、現在3種類の設定フィールドがあります:
- 一般エージェント設定:モデル名、システムプロンプト、温度などの一般的な設定
- MCPツール設定:エージェントにアクセス権を与えるMCPサーバーとツールを定義する設定
- RAG設定:エージェントにアクセス権を与えるRAGサーバーとコレクション名を定義する設定
カスタマイズ可能なUIフィールド
OAPは様々なフィールドタイプを提供しています:
- テキストフィールド:一般的なテキスト入力用
- テキストエリア:プロンプトなどの長いテキスト用
- 数値:最小/最大設定付きの数値用
- ブール値:true/false設定用
- スライダー:調整可能な数値範囲(温度など)用
- 選択:事前定義されたオプションから選択するため
- JSON:構造化データ入力用
カスタムエージェントを構築する場合、これらのフィールドタイプを使用して直感的な設定インターフェースを作成できます。例えば、Pythonでモデル選択のための選択フィールドを次のように定義できます:
model_name: Optional[str] = Field(
default="anthropic:claude-3-7-sonnet-latest",
metadata={
"x_oap_ui_config": {
"type": "select",
"default": "anthropic:claude-3-7-sonnet-latest",
"description": "すべての生成で使用するモデル",
"options": [
{
"label": "Claude 3.7 Sonnet",
"value": "anthropic:claude-3-7-sonnet-latest",
},
{
"label": "GPT 4o",
"value": "openai:gpt-4o",
},
],
}
}
)
TypeScriptでは以下のように記述します:
export const GraphConfiguration = z.object({
modelName: z
.string()
.optional()
.langgraph.metadata({
x_oap_ui_config: {
type: "select",
default: "anthropic/claude-3-7-sonnet-latest",
description: "すべての生成で使用するモデル",
options: [
{
label: "Claude 3.7 Sonnet",
value: "anthropic/claude-3-7-sonnet-latest",
},
{
label: "GPT 4o",
value: "openai/gpt-4o",
}
],
},
}),
});
応用トピックとベストプラクティス
OAPを最大限に活用するには、以下の高度な設定オプションとベストプラクティスを考慮してください。
認証オプション
OAPは柔軟な認証オプションを提供しています:
- デフォルトのSupabase認証:Google認証付きで簡単にセットアップ
-
LangSmith APIキー認証:エージェントへの簡素化されたアクセス
-
NEXT_PUBLIC_USE_LANGSMITH_AUTH=true
を設定し、LANGSMITH_API_KEY
を環境変数に設定します
-
- カスタム認証:既存の認証システムとの統合
完全なOAPワークフロー
非表示フィールド
UIに表示すべきでない機密設定の場合、エージェント設定で非表示フィールドを使用できます。これは、フィールドメタデータの x_oap_ui_config
タイプを hidden
に設定することで実現できます。
# Python
hidden_field: Optional[str] = Field(
metadata={
"x_oap_ui_config": {
"type": "hidden",
}
}
)
// TypeScript
export const GraphConfiguration = z.object({
hidden_field: z
.string()
.optional()
.langgraph.metadata({
x_oap_ui_config: {
type: "hidden",
},
}),
});
これによってフィールドはUIから隠されますが、ネットワークリクエストを検査することで見つけることができるため、機密情報には使用しないでください。
まとめと今後の展望
Open Agent Platformは、AI技術の民主化において重要な一歩を表しています。プログラミングの専門知識がない人でも、強力なAIエージェントを作成、カスタマイズ、デプロイできるようになりました。
OAPの主な利点には以下があります:
- アクセシビリティ 🧑💼:技術者以外のユーザーがAIエージェントを構築できます
- 柔軟性 🔄:様々なツール、データソース、他のエージェントとの接続が可能です
- カスタマイズ性 🛠️:直感的なUIを通じてエージェントの振る舞いを調整できます
- 拡張性 📈:RAGとMCP統合により、エージェントの機能を拡張できます
AI技術が進化し続ける中、OAPのようなツールは、より多くの人々がAIの可能性を探求し、その恩恵を受けることを可能にするでしょう。これらのツールは、AIの民主化というビジョンに向けた重要な一歩であり、AIの未来はコード行を書く少数の専門家だけでなく、様々な背景と視点を持つ多くのユーザーによって形作られるようになります。
参考資料
本記事は一般的な情報提供を目的としており、特定のシステム環境での動作を保証するものではありません。実装前には最新の公式ドキュメントを参照することを推奨します。