私のコーディングエージェントは、作業ではなくセッションを記憶していた

コーディングエージェントは、スレッドを維持していても、忘れっぽいと感じることがあります。

CliGateを構築している際に、この問題に直面しました。セッションの継続性は修正しましたが、繰り返しのタスクは依然として遅すぎました。

エージェントは会話は覚えていましたが、作業の内容を覚えていなかったのです。

セッションの継続性は、一つの問題を解決します。それは、次のようなフォローアップのコマンドに役立ちます:

  • continue(続けて)
  • do the same for this file(このファイルでも同じことをして)
  • retry that(それをやり直して)

それは有用です。しかし、数日後にワークフローを繰り返す場合には役に立ちません。

エージェントには、前回の実行を成功させた要因を思い出す必要があります。以下のことを知っておく必要があります:

  • どのボタンが機能するか
  • どのステップが行き止まりか
  • どのフィールドに特別な処理が必要か
  • 常に適用したいルールは何か

初回の実行は最もコストがかかります。エージェントが探索を行い、プロンプトに含まれていない詳細を見つけ出すのがその時だからです。

私が修正を行う前、これらの詳細は生のログの中にしか存在していませんでした。エージェントには履歴がありましたが、再利用可能なメモリはありませんでした。毎回、すべてを再発見しなければならなかったのです。

それは知能ではありません。同じデバッグコストを二度支払っているだけです。

間違ったアプローチは、より多くの履歴を保存して、モデルがそれを使ってくれることを期待することです。それはノイズを生みます。

私は代わりに、より小規模で再利用可能なメモリレイヤーを構築しました。以下の点に焦点を当てました:

  • procedures(手順)
  • facts(事実)
  • directives(指示)
  • references(参照)

起こったことすべてを保存しようとするのをやめました。記憶しておくべきことを保存するようにしたのです。

現在、アシスタントはファイルベースのメモリレイヤーを使用して、以下を呼び出します:

  • 手順(procedure):最適なステップと既知の行き止まり
  • 事実(fact):URLや特定の構成
  • 指示(directive):物事をどのように進めてほしいか
  • 参照(reference):ドキュメントの場所

これが人間の働き方です。

インターフェースは変わり、ボタンの位置も移動するため、過去の完璧な再現を求めているわけではありません。私がエージェントに求めているのは以下の通りです:

  1. 既知の最適な手順を思い出す
  2. まずそれを試す
  3. 各ステップを検証する
  4. 失敗した場合は探索に立ち戻る
  5. 成功した後にメモリを更新する

これにより、壊れやすい自動化が、有用な運用メモリへと変わります。

また、常設のルールを会話履歴から分離しました。「常に中国語で返信する」や「本番データには触れない」といったルールは、セッションのコンテキストではありません。それらは運用ルールです。

これらを分離したことで、アシスタントの挙動は予測可能になりました。タスクの途中でユーザーの好みを再発見する必要がなくなったのです。

繰り返しのタスクは短縮されました。毎回空のモデルから始める必要がないため、アシスタントの動きが速くなりました。

継続的なスレッドと、学習するシステムを混同してはいけません。

セッションは会話を維持します。 メモリは有用な教訓を維持します。

コーディングエージェントを構築しているなら、自問してみてください。あなたのシステムはスレッドを覚えているのか、それとも成功した手順を覚えているのか?

Source: https://dev.to/codekingai/my-coding-agent-remembered-sessions-not-work-that-was-the-bug-2fig