CoTによるロジック分解:バグ特定精度を最大化するデバッグ支援プロンプト

Tech

{“version”: “1.1”, “focus”: “CoT-driven-Debugging”, “methodology”: “Step-by-step logic decomposition”} 本記事はGeminiの出力をプロンプト工学で整理した業務ドラフト(未検証)です。

CoTによるロジック分解:バグ特定精度を最大化するデバッグ支援プロンプト

【ユースケース定義と課題】 複雑な依存関係を持つコードの論理エラーを特定・修正する。 課題:LLMが即座に修正案を出し、原因の誤認やデグレを引き起こす点。 入出力:[Input] ソースコード + エラーログ / [Output] 思考プロセス + 修正Diff (Markdown形式)

【プロンプト設計のループ】

graph TD
A["設計: 思考ステップの明示化"] --> B["実行: Zero-shot CoTでの出力"]
B --> C["評価: 修正の正確性と破壊的変更の有無"]
C -->|改善: Few-shotでの推論パターン追加| A
  1. 設計: LLMに対し、修正コードを書く前に「現状分析」「仮説構築」「検証」のステップを強制します。

  2. 実行: 実際のバグを含むコードを投入し、思考プロセスの質を確認します。

  3. 評価: 生成されたコードがシンタックスエラーを含まないか、既存機能を壊していないかを検証します。

【プロンプトの実装案】

# Role

あなたはシニアソフトウェアエンジニアとして、複雑なバグの根本原因を特定し、最小限の変更で修正案を提示します。

# Task

提供されたコードとエラーメッセージから、以下の思考プロセス(Chain-of-Thought)を経て修正コードを出力してください。

# Constraints


- 修正案を提示する前に、必ず「## 思考プロセス」のセクションを設けること。

- 修正は元のコードの意図を尊重し、最小限の変更に留めること。

- 出力は [思考プロセス] と [修正コード] の2部構成とする。

# Thinking Steps


1. コードの構造と期待される動作の整理。

2. エラーログや挙動から、バグが発生している具体的な行と理由を特定。

3. 修正によって副作用(サイドエフェクト)が発生しないか検討。

# Example (Few-shot)

[Input]
Code: `def add_user(users, name): users.append(name); return users`
Error: `AttributeError: 'NoneType' object has no attribute 'append'`
[Output]
## 思考プロセス


1. 現状分析: `users`がNoneの場合に`append`を呼び出そうとしてエラーが発生している。

2. 原因特定: 関数呼び出し時に`users`が初期化されていない可能性がある。

3. 修正案: 引数`users`のデフォルト値をNoneにし、関数内でリストとして初期化する。
## 修正コード

```python
def add_user(users=None, name=""):
    if users is None:
        users = []
    users.append(name)
    return users

Input Data

Code: {{PASTE_YOUR_CODE_HERE}}

Error Log: {{PASTE_ERROR_LOG_HERE}}

【評価指標と誤り分析】
LLMは時として、エラーメッセージに関係のないリファクタリングを始めてしまい、本来のバグを見失うことがあります。

| 評価項目 | 採点基準 (1-5) | 失敗パターン |
| :--- | :--- | :--- |
| **原因特定の正確性** | エラーの根本原因を論理的に説明できているか | 表面的なエラー(NoneType等)の指摘に留まる |
| **修正の最小性** | 不要なリファクタリングが含まれていないか | 変数名やスタイルの変更を同時に行う |
| **構文妥当性** | 出力されたコードがそのまま実行可能か | 閉じ括弧の欠落、インデント崩れ |
| **副作用の考慮** | 修正が他の機能に影響を与えないか | 破壊的変更を「改善」として提示する |

【改良後の最適プロンプト】
最新のGemini 1.5 Pro等の長文コンテキストを活用し、プロジェクト全体の依存関係を考慮させるための「検証フェーズ」を追加したプロンプトです。

```text

# Role

System Logic Debugger (Expert level)

# Mission

提供されたソースコードの論理矛盾を解消し、堅牢な修正案を提示せよ。

# Process: Think-Verify-Act

以下の3ステップを順に実行すること。各ステップは明示的に見出しを付けること。

1. **Analysis (分析)**

   - 入力コードのデータフローをトレースせよ。

   - 異常系(Edge cases)において、どの変数が予期せぬ状態になるか特定せよ。

2. **Verification (検証)**

   - 検討した修正案を適用した場合、既存のテストケースや依存箇所にどのような影響が出るか推論せよ。

   - 修正案が「最もシンプルかつ確実」であることを自問自答せよ。

3. **Implementation (実装)**

   - 修正後のコード全体、またはDiff形式で出力せよ。

# Format

## Analysis

...
## Verification

...
## Implementation

```python
...

“`

【まとめ】

  1. 「書く前に考えさせる」を徹底する: Step-by-step指示だけでなく、具体的な思考の切り口(データフロー、異常系等)を指定する。

  2. 出力フォーマットを固定する: ## Analysis などの見出しを強制することで、LLMの推論リソースを構造化された思考に割り振らせる。

  3. Few-shotで粒度を教える: どの程度の修正範囲を求めているかを例示し、過剰なリファクタリングを抑制する。

ライセンス:本記事のテキスト/コードは特記なき限り CC BY 4.0 です。引用の際は出典URL(本ページ)を明記してください。
利用ポリシー もご参照ください。

コメント

タイトルとURLをコピーしました