本記事は 2025年4月11日 に更新された「Secure “Human in the Loop” Interactions for AI Agents」を機械翻訳した記事です。
AI エージェントがあなたの代わりに複雑なタスクを行なってくれる世界を想像してみてください。家計管理、自宅エネルギー消費の最適化、あるいはグローバルサプライチェーンの物流調整といったタスクです。効率の向上、データに基づいた意思決定、退屈なプロセスの自動化など、その恩恵の可能性は計り知れません。しかし、エージェントに 重要な 操作を実行させる場合についてはどう思われますか? AI エージェントがユーザーの確認なしに、自動的に大量の株を購入したり、資金を送金したり、機密性の高い記録を更新したりしても問題ないでしょうか?
ほとんどの方がそういった重要な決定には関与したいと考えるでしょう。AI には判断を代替させるのではなく、能力を 強化 してもらいたいのです。特に、リスクの高い操作が関わる場合はそうです。そのため、エージェントのワークフローを妨げたり、使いにくいユーザー体験を生み出したりすることなく、AI エージェントが機密性の高い操作を実行する 前に、どのようにして人による確認を行うかが課題です。従来の同期的な認可方法は、非常に手間がかかってしまうことがあります。
AI エージェントとは?
少し立ち止まって「AI エージェント」の意味を定義しましょう。基本的に、AI エージェントとは、環境を認識し、認識に基づいて意思決定を行い、特定の目標を達成するために行動を起こす自律的なエンティティです。AIを搭載した頭脳を持つソフトウェアロボットのように考えてください。
すでに、さまざまな分野で AI エージェントが登場しています。:
- 金融: 自動取引ボットや不正検出
- ヘルスケア: 診断ツール、個人に合わせた治療の推奨
- IoT: スマートホームコントローラー、自動化された産業プロセス
- サイバーセキュリティ: 脅威検出および対応
AI エージェントの将来的な可能性は非常に大きいです。産業に革命を起こし、パーソナライズされた体験を作り、全く新しいビジネスモデルを生み出す可能性があります。しかし、可能性には責任も伴います。雇用の喪失、倫理的な考慮事項、セキュリティリスクに関する懸念に対処する必要があります。だからこそ、責任ある AI 開発と人による確認が非常に重要なのです。
非同期ユーザー確認
では、AI エージェントの速度を落とさずに、どのようにしてユーザーをループに参加させればいいでしょうか? その答えは、非同期ユーザー認可 にあります。
非同期ユーザー認可は、認可リクエストと実際の操作を分離します。即時の承認を要求する代わりに、AI エージェントは認可をリクエストし、応答を待つ間に他の作業を続けることができます。主に以下のような利点があります。:
- ノンブロッキング: AI エージェントはユーザーの確認を待っている間も、他のタスクの処理や環境の監視を続けることができます。
- ユーザー体験の向上: ユーザーはすぐに返信することを強制されることなく、都合の良いときに操作を認可できます。例えば、スマートフォンに株取引の承認を求める通知が届き、時間があるときに 1 回タップするだけで承認できることを想像してみてください。
- セキュリティの強化: 非同期認可は、許可していない操作に対する追加の保護レイヤーを提供します。AI エージェントが侵害されたとしても、ユーザーの明確な承認なしに機密性の高い操作を実行することはできません。
フロー図を以下に示します。:
図の内容を見てみましょう。:
- AI エージェントは機密性の高い操作 (例: 株の購入) を実行する必要があります。
- 行いたい操作を指定して、認可サーバーに認可リクエストを送信します。
- 認可サーバーはユーザーに (例: プッシュ通知、メール、SMS 経由で) 通知し、リクエストを承認または拒否するように求めます。
- ユーザーはリクエストを確認し、決定を下します。
- 認可サーバーは、ユーザーの決定を AI エージェントに通知します。
- AI エージェントは、認可が与えられた場合にのみ操作を実行します。
CIBA の登場: 非同期認可のための標準
さて、「素晴らしいが、実際にどうやって実装するのか?」と思うかもしれません。そこで CIBA (Client Initiated Backchannel Authentication) が登場します。
CIBA は、非同期認可のための標準化されたプロトコル です。AI エージェントが従来のブラウザーでのリダイレクトに頼ることなく、ユーザーに認可をリクエストするための、安全で相互運用可能な方法を提供します。
CIBA を、AI エージェントと認可サーバーが安全かつ効率的に通信するために使用できる共通言語と考えてください。CIBA は以下のような機能を提供します。:
- バックチャネル通信: AI エージェントと認可サーバーは、安全な API 呼び出しを使用して直接通信します。扱いにくく安全でない可能性のあるブラウザーでのリダイレクトが不要になります。
- ユーザーのデバイスへ通知: 認可サーバーは、プッシュ通知、SMS、またはその他のチャネルを使用して、あらゆるユーザーのデバイス (例: スマートフォン、タブレット、デスクトップ) に通知できます。
- 標準化されたプロトコル: CIBA は明確に定義された標準であり、さまざまな AI エージェントと認可サーバー間の相互運用性を実現します。これにより、互換性の問題を心配することなく、CIBA 準拠の AI エージェントを任意の CIBA 準拠の認可サーバーと組み合わせて使用できます。
詳細については、CIBA フローについての Auth0 のドキュメント を確認ください。
JavaScript で CIBA を使用した AI エージェントの例
LangChain を使った AI エージェントで、操作の認可を CIBA を用いてリクエストする簡単な JavaScript の例を見てみましょう。これは単純化された例ですが、コンセプトの概要を確認できると思います。
注: この例は、CIBA 準拠の認可サーバーがあることを前提としています。Auth for GenAI の使用を検討してください。AI エージェントで非同期ユーザー確認を実装するために必要なプラットフォームと SDK を提供し、スムーズな体験を実現しています。
import { Auth0AI, Auth0State } from "@auth0/ai-langchain"; // Auth0 AI for LangChain をインスタンス化 const auth0AI = new Auth0AI(); /** * Auth0 AI で CIBA フローを設定します。 */ const ciba = auth0AI.withCIBA({ audience: process.env["AUDIENCE"], config: { onResumeInvoke: "conditional-tool-call-example", scheduler: async (input) => { // カスタムスケジューラー await SchedulerClient().schedule(input.cibaGraphId, { input }); }, }, }); // State Annotation を定義 const StateAnnotation = Annotation.Root({ ...MessagesAnnotation.spec, ...Auth0State.spec, data: Annotation<ToolCallExampleType>(), }); // CIBA 保護を備えた新しい State Graph を定義 const stateGraph = ciba.registerNodes( new StateGraph(StateAnnotation) .addNode("checkCondition", checkCondition) .addNode("notifyUser", notifyUser) .addNode("stopScheduler", stopScheduler) .addNode( "tools", new ToolNode([ ciba.protectTool(tradeTool, { onApproveGoTo: "tools", onRejectGoTo: "stopScheduler", scope: "example:trade", binding_message: async (_) => { return `Do you want to call example? ${_.toolProperty}`; }, }), ]) ) .addEdge(START, "checkCondition") .addEdge("tools", "stopScheduler") .addEdge("stopScheduler", "notifyUser") .addConditionalEdges("checkCondition", ciba.withAuth(shouldContinue)) ); const checkpointer = new MemorySaver(); const store = new InMemoryStore(); // State Graph をコンパイル export const graph = stateGraph.compile({ checkpointer, store, });
コードを見ていきましょう。:
- Auth0AI for LangChain をインスタンス化し、CIBA フローの設定します。
- グラフに必要な CIBA フロー固有の annotation を含む全ての State Annotation を定義します。
- グラフは
StateGraph
をciba.registerNodes
でラップして作成することで、グラフで CIBA 機能が有効になります。 - グラフに複数のノードを定義します。各ノードはグラフ内のステップまたはツールを表します。
protectTool
メソッドを通じて CIBA で保護する特別なToolNode
も追加します。- このメソッドには、リクエストがユーザーによって承認または拒否された際にジャンプする先のグラフ内のノード、認可が必要なスコープと紐付けるメッセージをパラメータとして指定します。
今後のブログ記事で LangGraph や他のフレームワークを使用して、複雑なワークフローシナリオでユーザーの非同期確認を実装する方法について、コードサンプルとステップバイステップのガイダンスを共有する予定です。
まとめ
AI エージェントが普及するにつれて、責任ある倫理的な運用を実施することが重要になります。CIBA のような標準に基づいた非同期ユーザー認可は、AI システムの効率と自律性を犠牲にすることなく、人がプロセスに介在するための強力なメカニズムを提供します。
非同期認可を採用することで、強力かつ責任ある AI システムを構築し、人が重要な場面での制御を維持できます。AI が私たちの能力を強化し、より良い意思決定を支援してくれる未来を協力して築きましょう。
また、非同期ユーザー確認、きめ細かなアクセス制御、非同期認証、ユーザーに代わって API を呼び出すなどの機能を含む、AI アプリケーションの認証と認可についてさらに学ぶためには、Auth for GenAI を確認ください。
AI の未来は開発者の肩にかかっています。責任ある開発を進めましょう。お読みいただきありがとうございました。
About the author

Juan Cruz Martinez
Staff Developer Advocate