AIが自分でツールを呼んで作業を進める構成が実用段階に入りました。
デモは驚くほど簡単に動きますが、業務に載せるときに必ず決めるべきことがあります。
1. 権限をどこまで渡すか
最大の論点です。エージェントに渡すツールは、そのまま攻撃面になります。
読み取り専用 … 検索、参照、集計
書き込みあり … 登録、更新
不可逆 … 削除、送信、決済
不可逆な操作は、原則としてエージェントに渡しません。
渡す場合も「下書きを作るまで」に留め、実行は人が承認します。
TOOLS = {
"search_orders": {"auto": True}, # そのまま実行
"draft_reply": {"auto": True}, # 下書きまで
"send_email": {"auto": False}, # 人の承認が必要
"delete_record": None, # 渡さない
}
2. 何をしたかを追えるようにする
エージェントは判断過程が見えにくいので、後から追える記録が必須です。
class AgentStep(models.Model):
run_id = models.CharField(max_length=32, db_index=True)
step_no = models.IntegerField()
tool = models.CharField(max_length=60)
arguments = models.JSONField()
result_summary = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
「なぜこの結果になったか」を説明できないと、業務では使えません。
問い合わせが来たときに答えられる状態を、最初から作っておきます。
3. 止まる条件を必ず入れる
エージェントは同じ失敗を繰り返すことがあります。
明示的な停止条件が無いと、API 費用だけが増え続けます。
MAX_STEPS = 15
MAX_COST_YEN = 50
MAX_SAME_TOOL_REPEAT = 3
if step_no > MAX_STEPS or spent > MAX_COST_YEN:
stop("上限に到達しました")
if same_tool_count >= MAX_SAME_TOOL_REPEAT:
stop("同じ操作を繰り返しています")
3つ目の「同じツールを繰り返している」検知が、実務では特に効きました。
無限ループの大半はこの形で現れます。
精度を上げる前に、失敗の受け止め方を決める
「精度を上げる」議論に入りがちですが、実務でより重要なのは
失敗したときにどうなるかです。
- 失敗を検知できるか
- 失敗しても被害が出ない範囲に収まっているか
- 人が引き取れる形で止まるか
この3つが成立していれば、精度が完璧でなくても業務に載せられます。
逆にここが無いと、精度がいくら高くても載せられません。
使いどころの見極め
向いているのは、探索と整理の作業です。
- 大量の資料から該当箇所を探す
- 下書きを複数案作る
- 分類・タグ付けの候補を出す
向いていないのは、唯一の正解がある処理です。
それはコードで書いたほうが速く、確実で、安く済みます。
まとめ
- 不可逆な操作は渡さない。渡すなら人の承認を挟む
- 全ステップを記録し、判断過程を説明できるようにする
- 上限(回数・費用・同一操作の繰り返し)を必ず入れる
- 精度より先に「失敗したときの受け止め方」を設計する