私のコーディングエージェントがタスクを完了した。なぜスレッドが切れてしまったのか?

コーディングエージェントにおける最悪のバグは、クラッシュではありません。

それは、最初のタスクは成功したのに、次のメッセージを送った瞬間にエージェントが記憶喪失になったように感じられるときです。タスクを依頼し、エージェントがそれを完了する。その後、「ボタンを緑色にして」と伝えると……。

あなたにとっては同じ会話の続きです。しかしシステムにとっては、タスクの完了はセッションの終了を意味することがよくあります。そのため、システムはゼロからやり直し始めてしまうのです。

CliGateを構築している際、私は3つの異なるレイヤーを混同していることに気づきました:

これらは別物です。

会話 (Conversation) は、対話を続けるための長期的な空間です。 ランタイムセッション (Runtime session) は、その会話における作業スレッドです。 ターン (Turn) は、そのセッション内で行われる単一の実行です。

タスクが完了したときに終了すべきなのは、ターンだけです。セッションはアクティブなまま維持されなければなりません。

壊れたフローは以下の通りです: ユーザーがタスクを依頼する -> ランタイムセッションが開始される -> タスクが完了する -> 会話によってアクティブなセッションがクリアされる -> 次のフォローアップで全く新しいセッションが開始される。

これにより、次のような短いフォローアップができなくなります:

システムが即座にセッションを切り離してしまうと、すべてを説明し直さなければなりません。エージェントは機能していても、会話が不自然に感じられてしまうのです。

私は、モデルに対して以下のルールを明示することでこれを解決しました:

タスクの完了を「セッションの死」として扱うのをやめました。この小さな変更が、製品全体の体験を向上させます。

CliGateでは、以下の条件の場合にのみ新しいセッションが開始されます:

これは人間の思考プロセスと一致しています。ユーザーは、一つのチャットタブが継続的な一つのスレッドとして機能することを期待しています。これは、TelegramやFeishuのようなモバイルアプリにおいて極めて重要です。

新しいロジックはシンプルです:

これにより、エージェントは単なるコマンド実行器ではなく、同僚のように感じられるようになります。

コーディングエージェントを構築しているなら、これを覚えておいてください: 会話 (Conversation) は永続的な単位である。 ランタイムセッション (Runtime session) は再利用可能なワーカーである。 ターン (Turn) は、成功または失敗時に終了するものである。

これら3つのレイヤーを分離しましょう。そうすることで、フォローアップがようやく会話のように自然に感じられるようになります。

出典: https://dev.to/codekingai/my-coding-agent-finished-the-task-why-did-the-thread-die-2jk2

オプションの学習コミュニティ: https://t.me/GyaanSetuAi