14. LLMの出力に「終了条件」を組み込むためのプロンプト設計

処理の終了判断が曖昧なことによる無限ループ

エージェントが「十分な情報が得られた」という判断基準を持たない場合、処理は永遠に続行しようとします。これは、単なる無限ループというだけでなく、リソースの浪費や、最終的なアウトプットの品質低下を招きます。この「いつ止まるか」の制御が、実用的なシステム設計の鍵となります。

終了条件の定義:ゴールベースの思考の強制

終了条件をプロンプトに組み込むとは、LLMに対して「このタスクのゴールはXであり、Xが達成されたら、それ以上の思考やアクションは不要である」という制約を課すことです。これは、単なる「〜をしてください」という指示ではなく、「〜が達成されたら、この形式で終了してください」という明確な終了シグナルを要求することに相当します。

終了条件を組み込むための3つのテクニック

終了条件をプロンプトに組み込むには、以下の3つのアプローチを組み合わせることが最も効果的です。

  1. 1. 終了条件の明示 (Explicit Termination Criteria):最も直接的な方法です。プロンプトの最後に「以下のいずれかの条件が満たされたら、思考を停止し、最終結果のみを出力せよ」と記述します。例:「もし、抽出したキーワードが3つ以上見つかった場合、それ以上の分析は不要とし、結果のみを出力してください。」
  2. 2. 構造化された終了シグナル (Structured Exit Signal):LLMに、終了時に特定のタグやキーワード(例:、`[DONE]`)を強制的に出力させることを要求します。これは、後続のコード(スクリプト)がこのタグを検出することで、処理を安全に停止させるための「目印」となります。
  3. 3. 成功の定義の明確化 (Success Definition):ゴールを「達成した状態」として定義し、その状態を達成したことを示すための「最終成果物」の形式を定義します。これにより、LLMは「ゴール達成」という状態に到達するまで、思考を続ける動機付けがされます。

終了条件の検証とテストの重要性

この終了条件の設計は、単なるプロンプトの記述以上の工数を必要とします。必ず、以下のテストケースを用意し、検証する必要があります。

  • 成功ケースのテスト: 意図通りに終了するケース。
  • 失敗ケースのテスト: 必要な情報が欠落しているケース(→ 終了せず、不足情報を報告する)。
  • 無限ループ耐性テスト: 意図的にループを引き起こすような曖昧な入力を与え、システムが規定の回数で安全に停止するかを検証する。

まとめ:終了条件は「ガードレール」である

終了条件の定義は、単なる「終了の合図」ではなく、システム全体の「安全装置(ガードレール)」です。これをプロンプトの最重要制約として扱うことで、エージェントの自律性を保ちつつ、制御可能な範囲に留めることが可能になります。