【要約】【AgentCore】Harness の inline_function で人間の承認を挟みたい [Qiita_Trend] | Summary by TechDistill
> Source: Qiita_Trend
Execute Primary Source
// Problem
AgentCoreでエージェントを構築する際、決済や予約などの重要な操作の前に、人間の承認を挟む設計(HITL)が必要となる。しかし、標準の開発ツールである
agentcore devには、この承認プロセスを担うUIが備わっていない。そのため、開発者は以下の技術的な問題に直面する。- ・
inline_functionが呼び出されても、承認を入力する手段がUI上に存在しない。 - ・チャット欄に承認メッセージを打っても、単なるユーザー発言として扱われ、ツール呼び出しの無限ループに陥る。
- ・標準ツールでは、ツール呼び出しによる停止状態から、適切な結果を返して復帰することができない。
// Approach
開発者は標準ツールに頼らず、
boto3を用いて独自の承認フローを実装するアプローチを採用する。具体的には、以下の3つのステップでエージェントの制御を行う。1.
invoke_harnessのレスポンスから、stopReason: "tool_use"による停止を検知する。2.
contentBlockStartやDeltaイベントからtoolUseIdと引数を抽出し、人間に提示する。3.
assistantのtoolUseメッセージとuserのtoolResultをセットにして、同一のruntimeSessionIdへ送り返す。// Result
独自のクライアントを実装することで、WebアプリやSlackボットなど、任意のインターフェース上で安全な承認フローを実現できる。これにより、以下の成果が得られる。
- ・
toolUseとtoolResultをセットで送ることで、セッションの破損を防ぎ、正常な再開が可能になる。 - ・開発者は、エージェントの実行権限をクライアント側で柔軟に制御できる。
- ・フェリー予約エージェントのデモにおいて、承認ボタンを用いたWebコンソールによる制御に成功した。
Senior Engineer Insight
> inline_functionは、サーバーレスな構成でHITLを実現する合理的な設計だ。実行権限をクライアントに委譲し、バックエンドの複雑性を抑えつつ安全性を担保できる。ただし、セッション整合性のために「toolUseとtoolResultのペア送信」が必須となる点は、実装上の落とし穴だ。実戦投入時は、フロントエンドの設計だけでなく、このステート管理の堅牢性を重視すべきである。