はじめに:ゼロショット生成から「反復型エージェント」へ
従来のLLM利用は「巨大なプロンプトを1回投げて、1回で完璧な回答を期待する(ゼロショット)」アプローチが主流でした。
しかし、人間が複雑なタスクを行う際、誰も下書きなしの一発書きで完璧な成果物を作ることはありません。まず計画を立て、ツールで調査し、ドラフトを書き、セルフチェックして修正します。
この人間の思考・改善プロセスをソフトウェアアーキテクチャとして定式化したものが「Agentic Workflow」です。
1. Agentic Workflowの4大デザインパターン
【1. Planning (計画立案)】
・ゴールを分解し、実行可能なサブタスクのDAG(有向非巡回グラフ)を作成。
│
▼
【2. Tool Use (ツール実行)】
・Web検索、DBクエリ、シェルコマンドなどの外部ツールを自律呼び出し。
│
▼
【3. Reflection (自己検証・批評)】
・生成したコードに対してテストを実行、または別の批評モデルが品質を評価。
│
▼ (NG判定の場合、エラー内容をフィードバック)
【4. Multi-Agent Collaboration (協調・修正)】
・設計役、実装役、テスター役の異なるペルソナが協調して修正を反復。
2. Reflection(自己反省)の実装例
def generate_code_with_reflection(task_desc: str, max_iterations=3):
current_code = call_llm(f"以下のタスクを実装するPythonコードを書いてください: {task_desc}")
for i in range(max_iterations):
# 1. 実際にテストを実行
test_result = run_pytest(current_code)
if test_result["passed"]:
print(f"成功: イテレーション {i+1} 回目でテスト合格")
return current_code
# 2. エラーログを批評プロンプトに渡して修正
feedback_prompt = f"""
以下のコードを実行したところ、テストでエラーが発生しました。
【現在のコード】
{current_code}
【エラー出力】
{test_result['stderr']}
エラーの原因を分析し、修正した完全なコードを出力してください。
"""
current_code = call_llm(feedback_prompt)
return current_code
単発のモデル性能(パラメータ数)に頼るよりも、この反復ループを組み込む方が、タスク達成率が劇的に向上することが研究でも実証されています。