複数のAIに役割を持たせて、順番に仕事を引き継がせたい。最近この相談が増えています。個々の処理は生成AIで書けるのに、業務フローとして毎日回り続ける形にできず止まっている、というケースがほとんどです。
先日、4役のAIがタスクを受け渡すデモを実際に作って動かしました。そこで分かった「最初に決めておく4つのこと」をまとめます。
■1. 役割ではなく「入力と出力の契約」を決める
「リサーチ担当」「まとめ担当」と役割名を決めただけでは、バトンは落ちます。決めるべきは、各AIが受け取るキーと返すキーです。
たとえばリサーチAIは topic と audience を受け取り、findings を返す。まとめAIは topic、audience、findings を受け取り、summary を返す。この対応が崩れていると、次のAIは受け取ったデータを扱えません。
デモでは定義ファイルに入出力のキーを書き、実行前に入力を、完了前に出力を検査しています。契約を満たさない場合はその場で失敗として記録します。あとから「なぜか途中で止まっていた」を防ぐためです。
■2. AI同士を直接呼び合わせず、キューを1つ置く
AがBを呼び、BがCを呼ぶ形にすると、途中で失敗したときにどこまで進んだのか分からなくなります。代わりに、タスクの置き場を1つだけ作ります。
デモではSQLiteのテーブルを1つ用意し、各タスクに「未処理/処理中/完了/失敗」と担当ステージを持たせました。各AIは自分の担当ステージの未処理タスクだけを取り、終わったら次のステージに渡して未処理に戻します。これだけで、途中から再開できる、同時に動かしても二重処理しない、今どこで詰まっているかが一目で分かるの3つが手に入ります。
■3. 定期実行はAIの外側に置く
「毎朝9時に動かす」処理をAIの中に持たせると、AIが止まったときにスケジュールごと止まります。デモでは全ステージを順番に1回ずつ流す入口を1つ作り、その入口をWindowsのタスクスケジューラやcronから叩く形にしました。
もう一つ実務的な話をすると、CLI型のAIを自動実行するときは、標準入力を閉じておくことと、作業ディレクトリとサンドボックスの指定を明示することが大事です。これを忘れると、対話待ちで止まったまま気づかない、という事故が起きます。
■4. 失敗を前提に作る
AIは失敗します。APIが混雑する、出力の形式が崩れる、入力が足りない。大事なのは、1件の失敗で全体を止めないことと、失敗したと分かることです。
デモでは、失敗したタスクをリトライ回数つきで記録し、上限を超えたら失敗として確定させて通知します。実際に必須項目が欠けたタスクを流したところ、3回試行したのち失敗となり、通知ログに理由が残りました。同じバッチの他の5件は最後まで完走しています。
■ダッシュボードに出すべき4つの数字
・本日の完了件数
・失敗の件数(要対応)
・「処理中」のまま30分以上動いていないタスクの数
・直近の実行履歴(いつ、どのAIが、どのタスクを、成功か失敗か)
特に3つ目です。エラーで落ちた場合は記録が残りますが、途中で固まった場合は何も起きません。時間で見張らないと気づけません。
■AIを1人増やすときにかかる手間
定義ファイルに1ブロック足すだけ、という状態にしておくのが理想です。デモでは、役割名、担当順序、入出力のキー、プロンプト、次の担当、リトライ上限を書けば増やせる形にしました。
■まとめ
AIエージェントの仕組みで難しいのは、AIの賢さではなく、受け渡し、再開、失敗の扱いという地味な部分です。逆に言えば、この4つを最初に決めておけば、あとからAIの数を増やすのも、モデルを差し替えるのも難しくありません。
実際に動かしたデモ(4役の連携、実行履歴、ダッシュボード、失敗時の通知)は、プロフィールのポートフォリオに公開しています。構築は「AIエージェント業務フローをCodexで構築します」(39,000円・10日)で承っています。回したい業務の流れを一言いただければ、実現できる形を整理してお返しします。