2つのAIタスクが同じマウスを奪い合っていた話

並列化されたエージェントのデモは、2つのタスクが同じマウスを使おうとするまでは素晴らしく見える。

あるタスクはサイトにログインし、別のタスクはブラウザを開く。3つ目のタスクは単純な質問に答えようとする。すると突然、システムが間違った場所をクリックしたり、エラーを報告したりする。これは知能の問題ではない。リソースの問題なのだ。

CliGateを構築する過程で、デスクトップ自動化に関する手痛い教訓を得た。

コードのタスクは並列実行できる。ランタイムセッションが動作している間に、天気を調べることができる。バックグラウンドでの要約処理が何かをブロックする必要はない。

しかし、デスクトップは異なる。キーボード、マウス、画面はそれぞれ1つずつしかない。もし2つのエージェントがその操作領域を自分たちのものだと思い込んだら、互いに作業を妨害し合ってしまう。

最初に思いついたのは、新しいタスクが届いたときに古いタスクをキャンセルすることだった。だが、それは間違いだった。

「どこまで進んだ?」と尋ねるユーザーのために、ログインフローを終了させてはならない。天気を尋ねるユーザーのために、デスクトップタスクを停止させてはならない。最悪のバグは、エージェントが別の実行中のプロセスを検知し、誤って自分自身をキャンセルしてしまうときに発生する。

並行処理をプロンプトの問題として扱うのをやめなければならなかった。リソースの問題として扱う必要があったのだ。

私は3つの新しいルールを設定した:

  • 独立したタスクは並列で実行する。
  • デスクトップを必要とするタスクはキューに入れる。
  • キャンセルはユーザーが求めたときのみ行う。

CliGateでは、デスクトップ入力はリース(貸与)のように機能する。あるタスクがマウスを使用している場合、そのタスクがリースを保持している。他のタスクは待機しなければならない。

新しいロジックは以下のフローに従う:

  • 新しいタスクが届く。
  • デスクトップを必要とするか?
  • いいえ、なら並列で実行する。
  • はい、かつデスクトップが空いているなら、使用権を取得する。
  • はい、かつデスクトップが使用中なら、キューに入れる。
  • ユーザーが停止を命じたときのみキャンセルする。

この変更により、混乱を招く失敗が予測可能な挙動へと変わった。クリックを再試行してさらなる干渉を引き起こす代わりに、アシスタントは今や真実を伝える:「デスクトップは使用中です。私はキューに入っており、空き次第開始します」。

また、自己キャンセルを防ぐためのルールも追加した。エージェントは、自身の実行中のプロセスをキャンセルの対象としてリストアップしてはならない。

AIツールの構築は、賢明になりすぎようとすると失敗することが多い。ユーザーが必要としているのは魔法ではない。シンプルなロジックだ:

  • タスクが衝突しないなら、実行させる。
  • 物理リソースを巡って衝突するなら、キューに入れる。
  • ユーザーがステータスを尋ねたら、それを提示する。
  • ユーザーが停止と言ったら、停止する。

もしあなたのAIがデスクトップを操作するのであれば、このことを覚えておいてほしい。タスクの並列化は問題ないが、物理リソースには所有権が必要だ。

出典: https://dev.to/codekingai/my-two-ai-tasks-kept-fighting-for-the-same-mouse-1hij