Lesson 03 · 計画

エージェントが自身の進行状況を管理できるようにする

「エージェントは自身の進捗状況を追跡でき、私もそれを確認できます。」モデルに独自のリストを作成させ、小さなメカニズムを使用してリストを更新することをモデルに記憶させます。

⏱ 約 10 分 · 📝 3 つのインタラクティブ要素 · 🧑‍💻 出典 shareAI-lab · s03_todo_write.py

構造化された自己計画

Claude コードは、作業中にいくつかの手順を実行する必要があることがよくあります。grep で参照を見つけ、いくつかのファイルを読み取り、コードを変更し、テストを実行します。モデルを「感覚で進める」とすると、最初の数ステップではうまくいきますが、途中で忘れ始め、最後には途中で諦めてしまうことがわかります。

s03 の解決策は、マニフェスト ツールを与えることです。モデルが自動的に調整します。todo ツールはタスク項目をモデルに挿入し、TodoManager は構造を検証し、永続化し、現在のビューを返します。これには 2 つの利点があります。

  • モデルは「何をすべきか」 を明示する必要があります。それを書き出すだけで、モデルの思考が明確になります。
  • 人間は何を考えているかを見ることができます。デバッグ エクスペリエンスが 10 倍向上しました。
# TODO 视图,每一项都是结构化的
[ ] #1: grep "TODO" across src/
[>] #2: read src/app.py and list comments     # 正在做
[ ] #3: generate summary markdown
[ ] #4: write to TODO_LIST.md

(0/4 completed)

厳格なルール: 進行中の処理は一度に 1 つだけです

TodoManager.update() にチェックがあります:

if in_progress_count > 1:
    raise ValueError("Only one task can be in_progress at a time")

厳しいように思えるかもしれませんが、実際にはモデルにとって役立ちます。同時に 3 つの「行為」を許可すると、どこでも戦闘が始まり、どれも完了しません。単一のミッションを強制的に進めると、次のミッションを開く前にそれぞれのミッションを完了する必要があります。

以下のウィジェットを使用すると、モデルとして機能し、さまざまな Todo ペイロードを送信して、どれが検証に合格し、どれが拒否されたかを確認できます。

注意: 3 ラウンド連続で更新がありませんか?それを突く

ToDo ツールが与えられたとしても、モデルは依然としてリストの更新を「忘れる」ことがあります。モデルは多くのことを実行しましたが、in_progress は依然としてアイテム 2 で止まっています。s03 での動きは非常に単純なカウンターです。

rounds_since_todo = 0
while True:
    response = LLM(messages, tools)
    ...
    used_todo = any(b.name == "todo" for b in tool_uses)
    rounds_since_todo = 0 if used_todo else rounds_since_todo + 1
    if rounds_since_todo >= 3:
        results.append({"type":"text", "text":"<reminder>Update your todos.</reminder>"})

カウントが 3 に達したら、次のユーザー メッセージにリマインダーを含めます。それを見たモデルは本能的にtodoを調整します。これは工学的な手段を使って「常に最新情報を更新してください」 というソフトな制約強制的な刺激に変えるというものです。

このルーチンの名前は何ですか?

エージェント設計業界では、これをソフト ナッジを使用した構造化された自己計画と呼びます。モデルに、書き込みが必要な構造化された状態を与え、日和見的なリマインダーで補足します。クロード コードは実際のコードと同様のパターンを使用しますが、より抑制されています (頻度が低く、中立的な表現)。

システムプロンプトに「すべてのステップでtodoを更新する」 とだけ書き込んではどうでしょうか?書くことは可能ですが、 会話が長くなるにつれて、 システムプロンプトの一般的な指示に対するモデルの従順性は低下します。命令を「常に再注入されるリマインダー」に分割すると、はるかに安定します。
Interactive

Widget 1 · カンバン・todoを押して進化させる

[ステップ] をクリックして、モデルがタスクを保留中から進行中、完了までどのようにプッシュするかを確認します。各ラウンドには常に in_progress が 1 つだけ存在することに注意してください。

[ ] pending
[>] in_progress
[x] completed
准备开始…
Interactive

Widget 2 · 検証 · 5 つの todo ペイロードのうちどれが合格しましたか?

モデルが todo ツールを呼び出すときに、項目配列を渡します。 TodoManager は一連の検証を実行します: テキストは空ではない、ステータスは正当、最大 1 つの進行中、合計数 ≤ 20。クリックして各ペイロードが合格か拒否かを決定します。

答对 0 / 5
Interactive

Widget 3 · ナグカウンター ・3ラウンド連続でtodoが更新されなかった場合はどうなりますか?

[次のターン] をクリックして、カウンターがリマインダー注入をトリガーするかどうかを確認します。各ラウンドで「コールする」か「コールしない」がランダムに選択されます。実際のモデルのパフォーマンスもこのように変動します。

rounds_since_todo: 0