コンテンツにスキップ

ゴール意図ルーター

チャットチャネルでエージェントに実際の仕事を頼むと、いまはそれに気づいて、追跡可能なゴールに変えることを提案します——ただし裏で勝手にゴールを作ることは決してありません。ボタンを押すのは常にあなたです。

これまで、自律ゴール(エージェントが受け入れ基準に向かって作業し、行き詰まったら人間へエスカレーションするループ)を開始できるのはダッシュボードだけでした。どのチャットチャネルでも、明示的な/goalコマンドでなければ、すべて通常の会話として扱われていました。そのため「今四半期の請求書をまとめてレポートにしてメールで送って」——明らかに質問ではなく仕事の依頼——のようなメッセージも、ただのチャット返信で終わり、何も追跡されませんでした。

ゴール意図ルーターはこのギャップを埋めます。届いたメッセージを1件ずつ読み、タスクの委任らしいかどうかを判定し、該当すれば小さなメニューで返信します:ゴールにする、まず考える(承認を待つ計画を生成する)、あるいはそのまま雑談を続ける。ゴールの作成はトークンを消費し、自走するループを開始してしまうため、ルーターは決して自動では実行しません——ヒットしても、あなたが確認するための提案が生成されるだけです。この確認ステップがあるおかげで、誤判定のコストは低く抑えられます:最悪でも、あなたが読み流す1通の余計なメッセージで済みます。

3つの層を、コストが低い順に——知識ルーターと同じ形です:

  1. ハード除外(コストゼロ)。 コマンド、極端に短いメッセージ、質問、インジェクションスキャンのヒット、そして大部分が引用返信であるメッセージは、そのまま通常のチャットへ通過します。
  2. シグナルスコア(LLM不要)。 決定論的なテーブルが、委任を示す動詞・成果物を示す名詞・複数ステップの言い回し・期限に加点し、疑問符・雑談マーカー・短い相槌に減点します。スコアが高ければ即座にゴールを提案し、明らかに低ければチャットのままです。
  3. グレーゾーン(小型モデル)。 中間のスコアは、言語モデルに1つのYes/No質問を投げます:これは複数ステップを要する仕事の委任か?ローカル推論バックエンドが設定されていればオンデバイスで動作しクラウドコストはゼロ、設定されていなければエージェントがどのみち生成する予定だった返信にこの判定を組み込むため、これも追加コストはかかりません。いずれの場合も、モデルが利用できない、または回答をパースできない場合、ルーターはfail-openでチャットのままとなり、あなたへの返信をブロックすることは決してありません。

Telegram、Discord、Slack、LINEでは、提案に3つのボタン——ゴールにする(建立目標)/まず考える(想一想)/雑談のまま(只是聊聊)——が付きます。それ以外のチャネルではテキストメニューで、123のいずれかで返信します。「建立目標」を選ぶと、自分で/goalと打つのとまったく同じ経路を通るため、アクセスチェックと承認ゲートはすべてそのまま適用されます。「想一想」を選ぶと計画が生成され、作業が始まる前にゴールは承認待ちとして保留されます。それ以外の返信、または10分間の無応答は、提案を静かに取り下げます。

ボタンを押す、/goalと打つ、ダッシュボードを使う——どの経路も最終的には1つの作成パスに合流するため、受け入れ基準はどの場合も作成の瞬間に同じように凍結されます。

agent.tomlでエージェントごとに(またはconfig.tomlでグローバルに)、[goal_intent]セクション配下で設定します:

キー デフォルト 意味
enabled true マスタースイッチ。すべてのヒットが確認待ちでゲートされるため、オンのままにしておいて安全です。
mode "auto" auto(ローカルモデルがあればそれを使用、なければ返信に組み込む)、localreply_tagoffのいずれか。
t_goal 65 このスコア以上でメッセージは即座にゴールを提案します。
t_gray 30 このスコア未満でメッセージはチャットのままです。両者の間はグレーゾーンへ進みます。
cooldown_minutes 30 同じ会話内で提案と提案の間に空ける最小間隔。
daily_cap 20 エージェントごとの、UTC1日あたりの提案上限。
suggest_ttl_minutes 10 保留中の提案があなたの返信を待つ時間。

ルーターはアクセスゲートと引き継ぎ割り込みの後に実行されるため、メッセージに許可される範囲を広げることは決してありません——もともと手動で辿れたはずの経路へのショートカットを提供しているだけです。