言語を切り替える
テーマを切り替える

プロンプトエンジニアリング実践編:テクニックからメソドロジーへ

先週、画面上の17回目のテスト結果を見つめて、かなりfrustratedな気分でした。

同じプロンプト「このコードの性能ボトルネックを分析し、最適化提案をください」——月曜の午前、Claudeは詳細で専門的な回答をしていました。しかし金曜の午後には、曖昧なナンセンスばかり返ってきました。別のモデルに切り替えて試したら、ChatGPTがコードを直接修正してしまい、修正が必要かどうかも聞かず、なぜ修正するのかも説明なし。

正直、この落とし穴に何度も引っかかってきました。AI支援コーディングでもAgentアプリケーション構築でも、プロンプトの効果は常に「まあまあ」と「完全に失敗」の間で揺れ動いています。後になって一つの問題を認識しました:散らばったテクニックでプロンプトを組み立てていたけど、本当のメソドロジーを構築することを考えたことがなかったのです。

ええ、この記事はこのことを明確にしたいと思っています。「いくつかのテクニックを知っている」から「体系的メソドロジーを掌握する」への移行。三層プロンプト技術フレームワーク、Chain-of-ThoughtとReActの原理、DSPyという自動最適化ツール、そしてClaudeとChatGPTでどう異なるプロンプトを書くべきかを話しましょう。最後に、実行可能な評価方法を共有します——結局、プロンプトの効果が良いかどうかわからない状態で最適化を語るのは盲目的な推測に過ぎません。

なぜ「テクニック」から「メソドロジー」への移行が必要か

これらの「テクニック」を聞いたことがあるかもしれません:AIに「一歩一歩考えてください」と言う、いくつかの例を追加して模倣させる、「あなたは専門家です」と役割を設定する…これらのテクニックは確かに有用ですが、問題は——効果があまり不安定です。

経験駆動アプローチの限界

2023年から2024年まで、大部分のプロンプト技術は経験駆動でした。経験駆動とは何か?基本的に「試して見る」——いくつかの言葉を変え、実行し、効果が良ければ使う、悪ければ再変更。このアプローチにはいくつかの明らかな痛点があります:

**予測不可能な結果。**同じプロンプトでもモデルを切り替えると失敗する可能性があります。同じモデルでも、異なる時間に呼び出すと、出力品質が大きく異なることがあります。多くの人(自分を含めて)が何時間もプロンプトを調整し、昨日の良いバージョンが今日使えなくなったことに気づいたのを見てきました。

**再現と伝承が難しい。**良いプロンプトを調整しましたが、同僚が使うと結果が異なります。なぜ?プロンプトには自分が気づかなかった暗黙のコンテキストが含まれている可能性があります——前にこのモデルと何を話したか、自分の書き方習慣など。これらは文書化できず、他の人は再現できません。

**評価標準が欠如。**プロンプトが良いかどうか?大部分は感覚で判断。「この出力はまあまあ見える」——この判断はあまり主観的です。定量化指標なしでは、体系的最適化は不可能です。

89%
初回理解正確率
来源: ある金融科技公司が3C公式を採用後のテストデータ

興味深いデータがあります:体系的プロンプト方法を採用する前(彼らは「3C公式」—Context、Constraint、Contentと呼んでいます)、ある金融科技公司の初回理解正確率は61%だけでした。体系的フレームワークを採用後、この数字は89%に上昇しました。これは小さな改善ではなく、質的飛躍です。

2025-2026年の移行

2025年から、プロンプトエンジニアリングは移行を経験しています——「手動パラメータ調整」から「体系的エンジニアリング」へ。この移行には三つの重要な突破があります:

**モジュール設計。**プロンプトを再利用可能なコンポーネントに分解し、コードを書くように組み立てる。毎回長いプロンプトを最初から書く必要がなく、いくつかの標準モジュールを組み合わせる。利点:コンポーネントは個別にテスト・最適化可能、全体安定性が大幅に向上。

**自動最適化。**フレームワークが手動調整ではなくプロンプト最適化を支援。DSPyはこの分野で最も代表的なフレームワーク——タスクと評価基準を定義すると、最適なプロンプト構成を見つけるために自動反復。核心理念:「Programming, not prompting」。

**標準化評価。**定量化指標とテストフレームワークにより、プロンプト効果を客観的に測定可能。DeepEval、Promptfooなどのツールが評価维度を提供:正確性、一貫性、安全性、コスト効率。評価は感覚ではなくデータで判断。

正直、これら三つのことが私の作業スタイルを完全に変えました。以前はプロンプト調整が「運頼み」でしたが、今はエンジニアリングのように——設計、テスト、反復、データサポートがあります。これが「テクニック」から「メソドロジー」への核心移行です。

三層プロンプト技術フレームワーク

プロンプト技術を三層で理解すると、より明確になります。基礎層、推理層、システム層——各層が異なるタイプの問題を解決します。

基礎層:モデルに理解させる

この層は最も基本的な問題を解決:どうモデルに期待するものを出力させるか。

Zero-shot、ゼロサンプルプロンプト、例を一切与えず、直接モデルにタスク完了させる。例えば:

マイクロサービスアーキテクチャとは何かを説明してください。

この方法は簡単直接、簡単なタスクや常識問題に適用。しかし複雑なタスクや特定フォーマットが必要な出力では、Zero-shot結果は不安定。

Few-shot、少数サンプルプロンプト、モデルに2-5の例を与えて学習。例えば、活発なスタイルで製品説明を書きたい場合:

以下の例スタイルに基づいて新製品の説明を書いてください:

例1:
製品:ワイヤレスBluetoothイヤホン
説明:耳上の小宇宙、音質がライブコンサートのように明確、バッテリー寿命が大陸間フライトに同行可能なほど強力。

例2:
製品:携帯コーヒーマシーン
説明:カフェをバックパックに詰め込み、いつでもどこでもハンドクラフトプレミアムコーヒーを楽しむ、コーヒー粉も精密制御可能。

今「スマート保温杯」の製品説明を書いてください。

モデルは例スタイルを模倣して書きます。Few-shotの鍵:例は期待する出力スタイルと一致、数量は多すぎない(2-5で十分)、しかし品質は高い必要。

Role Prompting、役割プロンプト、モデルに身份を設定。この方法は出力スタイルと専門性を制約:

あなたは10年経験のバックエンドアーキテクトで、性能最適化とシステム設計を専門とします。
このコードの性能問題を分析し、具体的ボトルネックを指摘し最適化提案をください。
コード:[コードを貼り付け]

役割を設定後、モデルは専門的視点から思考する傾向があり、出力もより構造化。しかし役割設定は具体的必要——「あなたは専門家です」はあまり曖昧、どの領域の専門家、どのような経験を明確に。

構造化出力、モデルに特定フォーマット(JSON、Markdown、表など)で出力要求。このテクニックはデータ抽出や下游システム接続時に特に有用:

以下のテキストから製品情報を抽出し、JSONフォーマットで出力:
{
  "product_name": "製品名",
  "price": "価格",
  "features": ["特性リスト"]
}

テキスト:[テキストを貼り付け]

構造化制約は出力の可用性を大幅に向上、後処理作業を減少。

推理層:モデルに「思考」させる

この層はモデルが理解するだけでなく、複雑推理を実行可能にします。

Chain-of-Thought (CoT)、思考の連鎖、モデルに推理過程を表示させる。このテクニックの核心:モデルに直接答えを出すのではなく、まずどう思考したかを明確に説明させる。

Wei等人が2022年に発表した論文は、CoTが複雑推理タスクの正確率を显著に向上することを証明。原理はかなり簡単——複雑問題は多ステップ推理が必要、モデルにこれらのステップを書き出すことで、「思考バッファ」を与え、間違いが少なくなる。

最も簡単なCoT使用法はプロンプト末尾に一行追加:

この問題を一歩一歩考えてから、答えを出してください。

またはFew-shot CoTを使用、推理過程を含む例を表示:

問題:小明は5個の苹果を持って、小红に2個渡して、木から3個摘み取った。小明は今何個の苹果を持っている?
推理過程:小明は最初5個の苹果を持っていた。小红に2個渡した後、残り5-2=3個。木から3個摘み取った後、3+3=6個持っている。
答え:6個の苹果。

今同じ方法で解決してください:
問題:籠に12個の草莓があり、小明は4個食べ、小红が籠に6個追加した。籠には今何個の草莓がある?

ReAct、推理+行動ループ、モデルが思考しながら操作を実行。このフレームワークの流れ:Thought(次のステップを思考)→ Action(アクション実行)→ Observation(結果観察)→ 再思考次のラウンド。外部ツール呼び出しや情報検索が必要なシーンに特に適用。

あなたは検索可能な助手です。以下のフォーマットで質問に答えてください:

Thought: [今何が必要]
Action: search("[検索内容]")
Observation: [検索結果]
... (答えが見つかるまでループ)
Final Answer: [最終答え]

質問:2024年奥斯卡最佳影片はどの映画?

ReActはAgent開発に特に重要——Agentの核心は「思考-行動-フィードバック」ループ、ReActは標準テンプレートを提供。

Self-Consistency、自己一貫性、モデルに同じ問題を複数回推理させ、投票で最も信頼できる答えを選択。この方法は高正確度が必要なシーンで有用、しかしコストは高め(複数回モデル呼び出し)。

Tree of Thoughts (ToT)、思考のツリー、モデルに複数推理パスを探索させ、最適な一つを選択。複雑決定問題に適用、創意提案生成や戦略計画など。

システム層:エンジニアリングプロンプト管理

この層は単一技術ではなく、プロンプト管理をエンジニアリング体系に変える。

モジュールプロンプト。複雑プロンプトを複数の再利用可能モジュールに分解。例えば、Agentのプロンプトは:役割設定モジュール、タスク定義モジュール、出力制約モジュール、ツール呼び出しモジュールに分解可能。各モジュール独立管理、組み合わせ時柔軟設定。

自動最適化。DSPyのようなフレームワークを使用、手動でプロンプトパラメータ調整不要。タスク署名と評価指標を定義すると、フレームワークが自動反復最適化。これは後で詳細説明。

標準化評価。評価体系を構築:テストセット準備、評価指標定義、批量テスト実行、各反復のスコア変化記録。これでプロンプト最適化はデータサポートがあり、感覚基盤ではなく。

三層フレームワークの用途は判断支援:現在の問題はどの層に属するか、どの技術を使用するか。簡単タスクは基礎層、複雑推理は推理層、システム構築はシステム層。

Chain-of-Thought 思考の連鎖深層解析

Chain-of-Thoughtテクニックは、別途詳細説明する価値があります。現在最も成熟した推理強化技術であり、使用障壁も低い——複雑フレームワークコード不要、プロンプトにいくつかの言葉を追加だけ。

Zero-shot CoT vs Few-shot CoT

二つの使用方法、それぞれ適用シーンがあります。

Zero-shot CoT、例を追加せず、一行の誘導語だけ。最も古典的のはこの行:

Let's think step by step.

または日本語版:

この問題を一歩一歩考えてください。

この方法は簡単、低コスト、大部分シーンに適用。研究は、この一行だけ追加しても、複雑推理タスク正確率が20-40%向上できることを発見。

Few-shot CoT、推理過程を含む例を追加。例は完全に「問題→推理過程→答え」フォーマットを表示必要:

問題:店が100件の商品を仕入れ、各件コスト20元。1日目30件を35元で販売。2日目50件を30元で販売。3日目残商品をクリアランスで15元で全販売。総利益は何元?

推理過程:
1. 総コスト計算:100件 × 20元 = 2000元
2. 1日目収入:30件 × 35元 = 1050元
3. 2日目収入:50件 × 30元 = 1500元
4. 3日目残:100-30-50=20件、収入:20件 × 15元 = 300元
5. 総収入:1050+1500+300 = 2850元
6. 紝利益:2850-2000 = 850元

答え:850元

今同じ方法で解決してください:
問題:会社に200人の従業員、平均月給8000元。年初に30人解雇、解雇補償各人2ヶ月給料。解雇後50人の新従業員を招聘、試用期間月給6000元、試用期間3ヶ月。この年の給料支出変化は?

Few-shot CoTの利点はモデルに特定推理フォーマットと思考スタイルを誘導可能。しかし高品質例を書く時間が必要——低品質例はモデルを误导可能性。

どのタイミングでどちらを使用?

  • 簡単タスク、推理パス明確:Zero-shot CoT、一行誘導だけで十分
  • 複雑タスク、特定推理フォーマット必要:Few-shot CoT、いくつか良い例を与える
  • 強力モデル能力(Claude 4など):Zero-shot CoTで通常十分
  • 平均モデル能力、高精度要求:Few-shot CoTがより安定

CoT適用シーン

すべてのタスクがCoT必要ではない。最適シーンは:

数学推理と論理分析。これらタスクは多ステップ計算や論理推導必要、CoTはモデルがステップを飛ばさず、詳細を遗漏させない。

# CoTなしの出力可能性:
"答えは850元。"(直接結果に飛び、中間計算エラー可能性)

# CoTありの出力:
"一歩一歩計算しましょう..."
各ステップを詳細に表示。

多ステップタスク計画。モデルにプロジェクト計画を書く、システムアーキテクチャ設計など。CoTはモデルがまずタスク分解、次に徐々に展開可能。

コード生成問題分析。モデルにまず要求分析、次にソリューション設計、次にコード書く、直接コード吐き出ではなく。

以下のステップでユーザ認証システムを実装してください:

ステップ1:要求分析、核心機能ポイントをリスト
ステップ2:データモデルとインタフェース設計
ステップ3:具体的実装コード提供
ステップ4:テスト方案説明

要求:[要求説明]

CoT変種

Auto-CoT、自動推理連鎖生成。原理はモデル自身が例の推理過程を生成、次にFew-shot例として使用。手動例書き作業を省略可能。しかしAuto-CoT品質はモデル最初の推理過程生成品質に依存——最初生成が間違いなら、後続推理も間違い続く。

CoD (Chain of Debate)、辩论連鎖。二つのモデル役割が同じ問題で辩论、互いの推理を質疑、最終的に統合答え。この方法は複雑問題、開放問題で良い効果、しかしコスト高、時間長。

CoT使用注意点

いくつかの pitfalls に遭遇しました:

推理を過度強制しない。簡単問題はCoT必要なし。「北京の人口は何人」と問う、CoT追加反而出力が冗長、推理エラー可能性。判断基準:タスクは多ステップ推理必要か?

例はタスクとマッチ必要。Few-shot例が数学問題でも、タスク実際は論理推理なら、モデルは数学推理方法で論理問題解決可能性——効果不良。例タイプはタスクと一致必要。

推理ステップは長すぎない。CoTは正確率向上可能、しかし推理過程が長すぎ(十数ステップ)場合、中間エラー可能性。特に複雑問題の場合、段階処理を考慮:まずモデルに問題分解、次に各サブ問題を別々処理。

総体として、CoTは最も実用的推理強化技術。二つの使用方法(Zero-shotとFew-shot)を掌握、必要タイミングと不必要タイミングを明確判断すると、プロンプト効果が明显に向上。

ReAct フレームワーク:推理と行動の結合

ReActはReasoning + Actingの略称。思考と行動を結合し、モデルが動的にツール呼び出し、情報取得、決定可能。CoTがモデルに「明確に思考」させると、ReActはモデルに「思考しながら行動」させる。

Thought → Action → Observation ループ

ReActの核心はループ構造:

Thought(思考)→ Action(行動)→ Observation(観察)→ Thought → ...

各ループサイクルが問題解決を進めます。検索強化Q&Aの例:

タスク:2024年诺贝尔物理学賞受賞者の研究領域を查询。

モデル実行過程:

Thought: まず2024年诺贝尔物理学賞受賞者が誰かを確認必要。
Action: search("2024 Nobel Prize in Physics winners")
Observation: [検索結果] 2024年诺贝尔物理学賞はJohn HopfieldとGeoffrey Hintonに授与、人工神经网络領域への貢献を表彰。

Thought: 受賞者が誰かわかった、彼らの研究領域をさらに確認必要。
Action: search("John Hopfield research field")
Observation: [検索結果] John Hopfieldは物理学者、Hopfieldネットワークモデルを提案...

Thought: 十分な情報を得た、質問に答え可能。
Final Answer: 2024年诺贝尔物理学賞受賞者John HopfieldとGeoffrey Hintonの研究領域は人工神经网络...

このループメカニズムはモデルが推理過程で「情報を補充」可能——未知の事に遭遇、瞎猜ではなく、アクティブに検索。これはCoTと明確に異なる:CoTはモデル内部知識のみ使用、ReActは外部ツール呼び出しで新情報取得可能。

ReAct vs CoT:关键区别

维度CoTReAct
情報源モデル内部知識内部知識 + 外部ツール
推理方法純思考思考 + 行動交互
適用シーン既に十分情報あり検索、ツール呼び出し必要
実装複雑度简单(プロンプト変更)複雑(ツール統合必要)
コスト一回呼び出し複数回呼び出し可能性

CoTはモデル既に十分知識あるシーンに適用——数学推理、論理分析など。ReActはリアルタイム情報必要シーンに適用——現在事件回答、データベース查询、API呼び出しなど。

ReAct プロンプト構造

標準ReActプロンプトはこれら部分を含む:

あなたはツール使用可能な智能助手です。以下のフォーマットでタスク完了:

利用可能ツール:
- search(query): インターネット検索で情報取得
- database_query(sql): データベース查询
- calculate(expression): 数学計算実行

フォーマット:
Thought: [思考過程、今何が必要を分析]
Action: [ツール名とパラメータ、如 search("查询内容")]
Observation: [ツール実行結果、自動填入]
... (Thought-Action-Observation多ラウンド可能)
Final Answer: [最終答え]

開始!

タスク:[具体的タスク]

关键点:

利用可能ツール定義。モデルが使用可能ツール、どう呼び出しを知る必要。ツール定義は具体的必要、名、パラメータフォーマット、戻りタイプ含む。

出力フォーマット規定。Thought、Action、Observationフォーマットは明確必要、システムがモデル出力解析、ツール呼び出し実行、結果をモデルに戻す可能。

終了条件。モデルが十分情報得た後Final Answer出力、無限ループではなく。

ReAct は Agent 開発での応用

ReActは現代Agentアーキテクチャの基礎パターンの一つ。AI Agent構築——カスタマサービスボット、データ分析助手、自動化運用システム——おそらくReAct概念使用。

実際プロジェクトでは、ReAct実装はこの簡単プロンプトより複雑。必要:

  1. ツール登録システム:ツールインタフェース、パラメータ校验、権限制御定義
  2. 実行エンジン:モデルAction出力解析、対応ツール呼び出し、結果フォーマットして戻す
  3. ループ制御:最大ループ回数、タイムアウトメカニズム設定、無限ループ防止
  4. エラー処理:ツール呼び出し失敗時、モデルに何が発生したか伝え、策略調整させる

ReAct 使用注意点

モデルは十分強力必要。ReActは多ラウンド対話でコンテキスト保持、合理的行動決定必要モデル。弱いモデルはランダムツール呼び出し、タスク目標偏离傾向。ClaudeとGPT-4シリーズモデルはReAct效果良好。

ツール定義は明確必要。モデルがツール機能を知らない場合、呼び出しない、または正しく呼び出し可能性。各ツール説明はAPIドキュメントのように詳細必要。

ツール過度依存回避。モデル内部にある情報、毎回ツール呼び出し不要。プロンプトに判断逻辑追加可能:「内部知識十分回答可能場合、直接Final Answer出力、ツール呼び出し不要。」

コスト制御。ReActは複数ツール呼び出し触发可能性、API費用高め。複雑タスクはReAct、簡単タスクは普通プロンプトがより経済。

ReActはプロンプトを「静的スクリプト」から「動的プログラム」に変換、AIが真に行動して問題解決可能。これは「対話式AI」から「行動式AI」への关键ステップ。

DSPy:プロンプトを自動最適化させる

前述のCoT、ReActはすべて手動プロンプト書き必要。しかし一つのフレームワークが異なる——DSPy、核心理念:「Programming, not prompting」。意味:プログラミング方法でタスク定義、フレームワーク自動でプロンプト生成最適化。

DSPyとは

DSPyはStanford NLPグループ開発のフレームワーク。プロンプトエンジニアリングをプログラミングパラダイムに変換:タスク入出力構造(Signature)定義、適切モジュール(Module)選択、最適化器(Optimizer)設定、フレームワークは自動反復で最適プロンプト構成を見つける。

このアプローチの利点:

より可靠。手動書きプロンプトは遗漏、フォーマット誤、制約不明確可能性。DSPyの宣言式定義はより厳密。

より保守可能。プロンプトがコードに変、版本管理、単体テスト、継続反復可能。

より移植可能。モデル切り替え時プロンプト再調整不要——フレームワークは新モデル特性に自動適応。

DSPy核心コンポーネント

Signature(タスク署名):タスク入出力構造定義。

import dspy

class QuestionAnswer(dspy.Signature):
    """質問に答え、詳細説明を与える"""
    question = dspy.InputField(desc="ユーザの質問")
    answer = dspy.OutputField(desc="詳細答え、推理過程を含む")

Signatureは関数インタフェース定義のように——入力は何、出力は何、各フィールド何要求を指定。具体的プロンプトテキスト書き不要、構造定義だけ。

Module(モジュール):特定プロンプト技術を封装する再利用可能コンポーネント。

# 最基礎モジュール:直接予測
qa_basic = dspy.Predict(QuestionAnswer)

# 思考連鎖追加モジュール
qa_cot = dspy.ChainOfThought(QuestionAnswer)

# ReAct追加モジュール(ツール設定必要)
qa_react = dspy.ReAct(QuestionAnswer, tools=[search_tool, calculator_tool])

モジュールはプロンプト技術を封装。CoT使用したい場合、ChainOfThoughtモジュール選択だけ、「一歩一歩考えてください」誘導語書き不要。フレームワークはモジュールタイプに基づいて対応プロンプト自動生成。

Optimizer(最適化器):プロンプト構成自動最適化。

from dspy.teleprompt import BootstrapFewShot

# 訓練データ準備
trainset = [
    dspy.Example(question="再帰とは何か?", answer="再帰は関数が自身を呼び出す..."),
    dspy.Example(question="バブルソートを説明", answer="バブルソートは相邻要素比較で..."),
]

# 最適化器設定
optimizer = BootstrapFewShot(max_bootstrapped_demos=3)

# モジュール最適化
qa_optimized = optimizer.compile(qa_cot, trainset=trainset)

最適化器は自動Few-shot例生成、プロンプト構造調整、反復で最適構成を見つける。訓練データと評価基準を与えると、パラメータ調整——機械学習訓練過程に似る、しかし調整はプロンプトではなくモデル重み。

完全DSPy例

プログラミング質問に答えるQAシステムを書く:

import dspy

# 1. Signature定義
class CodeQA(dspy.Signature):
    """プログラミング関連質問に答え、明確説明と例を与える"""
    question = dspy.InputField(desc="プログラミング関連質問")
    answer = dspy.OutputField(desc="詳細答え、概念説明とコード例を含む")

# 2. 言語モデル設定
lm = dspy.LM("claude-3-5-sonnet-20241022", api_key="your_key")
dspy.settings.configure(lm=lm)

# 3. モジュール作成(ChainOfThoughtで推理能力追加)
qa = dspy.ChainOfThought(CodeQA)

# 4. 直接呼び出し
result = qa(question="Pythonでデコレータどう実装?")
print(result.answer)

この例で、プロンプトテキスト一切書きなし。ChainOfThoughtモジュールは思考連鎖誘導含むプロンプト自動生成。出力answerは推理過程と詳細説明を含む。

効果最適化したい場合、訓練データと最適化器追加可能:

# 5. 訓練データ準備
train_examples = [
    dspy.Example(
        question="REST APIとは何か?",
        answer="REST APIはネットワークアプリケーションインタフェース設計スタイル..."
    ),
    dspy.Example(
        question="Gitのブランチ概念を説明",
        answer="Gitブランチは主線開発から独立作業線を分離可能..."
    ),
]

# 6. 評価関数定義
def evaluate_answer(example, pred):
    """答えにキーワード含む、長さ合理かチェック"""
    keywords = example.question.lower().split()
    has_keywords = sum(1 for k in keywords if k in pred.answer.lower()) >= 2
    length_ok = len(pred.answer) > 100
    return has_keywords and length_ok

# 7. 最適化
optimizer = BootstrapFewShot(metric=evaluate_answer, max_bootstrapped_demos=4)
qa_optimized = optimizer.compile(qa, trainset=train_examples)

# 8. 最適化後モジュール使用
result = qa_optimized(question="Pythonでデコレータどう実装?")

最適化器は訓練データに基づいて、自動Few-shot例生成、プロンプトフォーマット調整、出力品質向上。全過程手動プロンプト調整不要。

DSPy使用タイミングと手動プロンプト書きタイミング

DSPyは万能ではない。あるシーンはフレームワーク適用、あるシーンは手動書き適合。

DSPy適用シーン

  • AIアプリケーションシステム構築(同一タイププロンプト複数回再利用必要)
  • タスク構造明確(入出力標準化定義可能)
  • 訓練データあり(最適化使用可能)
  • 跨モデル移行必要(異なるモデル異なる表現可能性、フレームワーク自動適応)
  • プロジェクト複雑度高(プロンプト数量多、手動管理混乱)

手動プロンプト適用シーン

  • 一回使用(一回書き一回使用、再利用不要)
  • タスク構造曖昧(入出力標準化困難)
  • 訓練データなし(最適化不能)
  • 快速原型検証(快速試錯必要、フレームワーク設定時間不想)
  • 简单タスク(Zero-shotで解決、フレームワーク不要)

経験:プロジェクト級アプリケーション、长期保守必要システムに、DSPy ROI高。初期設定時間必要、しかし後続反復效率大幅向上。一回タスク、简单查询、手動プロンプト書きが直接。

DSPy使用注意点

評価指標は重要。最適化器は評価関数に依存。評価基準不合理場合、最適化方向可能誤。時間をかけて良い評価指標設計必要。

訓練データ品質。BootstrapFewShotは訓練データに基づいて例生成。データ品質低、生成例も低、反而効果影響。

過度最適化しない。最適化反復回数多不一定更好。ある時最適化器は訓練データに「過剰適合」、新問題で反而表現低下。合理的反復回数上限設定。

DSPyはプロンプトエンジニアリング新方向を代表——手動パラメータ調整から自動最適化へ。体系的AIアプリケーション構築したい開発者にとって、これは掌握価値あるツール。

Claude vs ChatGPT:差別化ベストプラクティス

ClaudeとChatGPTは現在二つの最主流大規模モデル。多くの人問う:同じプロンプト、二つのモデル出力が異なるのはなぜ?どう別々最適化?ここで彼らの差異と针对ベストプラクティスを話しましょう。

モデル特性对比

まず关键差異点:

维度ClaudeChatGPT (GPT-4シリーズ)
コンテキスト長200K tokens128K tokens
構造化出力優秀表現、XML/JSON偏好良好表現、明確フォーマット制約必要
推理スタイルより厳密、ステップ明確より柔軟、時々跳跃
コード生成高品質、詳細説明高品質、創意強
創意性比較保守より創意、スタイル多様
日本語表現自然流暢自然流暢
多ラウンド対話コンテキスト保持強コンテキスト保持強

これら差異は绝对ではない、異なる版本、異なるタスクで変化。しかし総体として、Claudeは厳密推理と構造化出力に偏り、ChatGPTは柔軟創意と快速応答に偏り。

Claude ベストプラクティス

1. XMLタグで構造化制約

ClaudeはXMLタグフォーマット理解が特别好。内容をタグで包むと、出力品質向上:

以下コードの性能問題を分析:

<code>
function processData(data) {
  let result = [];
  for (let i = 0; i &lt; data.length; i++) {
    result.push(transform(data[i]));
  }
  return result;
}
</code>

以下フォーマットで分析結果出力:

<analysis>
[性能問題分析]
</analysis>

<suggestions>
[最適化提案]
</suggestions>

XMLタグ利点はモデルに入力内容と出力フォーマット明確区別可能。Claudeはタグ構造に厳密出力、分析を提案に混ぜない。

2. 役割+制約+例パターン

Claudeは役割設定と制約に非常に认真応答。完全プロンプト構造:

役割設定:
あなたは8年Javaバックエンド経験の资深性能最適化エンジニア。性能ボトルネック識別と実行可能最適化方案提供を専門とします。

タスク制約:
- 分析時具体的性能ボトルネック指摘(曖昧に「最適化可能」と言わない)
- 提案にコード修正例含む必要
- ある最適化にリスクある場合、明確説明

出力例:
<analysis>
問題:ループ中で頻繁オブジェクト作成、メモリ圧力可能性。
位置:3-5行のforループ。
</analysis>
<suggestions>
提案1:配列サイズ予割当使用。
コード:let result = new Array(data.length);
リスク:明確リスクなし。
</suggestions>

今以下コードを分析:
[コードを貼り付け]

この構造はClaudeに:誰か、何する、出力何様子を知らせる。出力は期待によりマッチ。

3. 長コンテキストで詳細分析利用

Claudeの200Kコンテキストは長ドキュメント、複雑コード処理に適用。完全ファイル直接貼り付け、切断 worry なし:

以下完全コードファイルを分析、すべて可能な性能問題を見つけ:

完全コード:
<code>
[全ファイルを貼り付け、数百行コード]
</code>

モジュール別に分析、各モジュールの性能問題と最適化提案指摘。

ChatGPTの128Kも大部分シーンで十分、しかし超長ドキュメントClaudeが優位。

ChatGPT ベストプラクティス

1. 明確出力フォーマット制約

ChatGPTは柔軟偏り、時々出力フォーマット変化。明確制約必要:

コード性能問題を分析、出力フォーマットは必ず以下:

## 性能問題分析
- 問題1:[具体的説明]
- 問題2:[具体的説明]

## 最適化提案
| 問題 | 提案 | コード例 |
|-----|-----|---------|
| [問題1] | [提案] | [コード] |

コード:
[コードを貼り付け]

Markdownフォーマット(## タイトル、| 表)で出力制約、ChatGPT厳密従う。

2. 温度パラメータ調整

ChatGPTのtemperatureパラメータは出力創造性影響。temperature = 0より決定性、一貫性強;temperature = 0.7-1より創意、多様性高。

# 決定性出力(コード生成、データ分析適用)
response = client.chat.completions.create(
    model="gpt-4",
    messages=[{"role": "user", "content": prompt}],
    temperature=0
)

# 創意出力(文案書き、創意設計適用)
response = client.chat.completions.create(
    model="gpt-4",
    messages=[{"role": "user", "content": prompt}],
    temperature=0.8
)

Claude APIも類似パラメータ制御あり、しかしChatGPT温度效果より明显。

3. ステップ別誘導

ChatGPT時々ステップ飛び、直接結果出す。複雑タスク、ステップ別誘導可能:

以下タスクを完成、ステップ別進行:

ステップ1:まずコードの主要機能モジュールリスト
ステップ2:各モジュールの性能特性分析
ステップ3:性能ボトルネック見つけ
ステップ4:最適化方案提供

まずステップ1完成。

モデル一歩一歩出力誘導、ステップ飛びエラー回避可能。

同一タスクの異なるプロンプト書き方

例:モデルにテキストから製品情報抽出させる。

Claude版本

以下テキストから製品情報抽出:

<text>
[製品紹介テキスト]
</text>

出力フォーマット:
<product_info>
<name>[製品名]</name>
<price>[価格]</price>
<features>
<feature>[特性1]</feature>
<feature>[特性2]</feature>
</features>
</product_info>

ChatGPT版本

テキストから製品情報抽出、JSONフォーマット出力。

テキスト:
[製品紹介テキスト]

出力フォーマット例:
{
  "name": "製品名",
  "price": "価格",
  "features": ["特性1", "特性2"]
}

このJSON構造厳密従う、他フィールド追加しない。

差異:ClaudeはXML使用がより安定、ChatGPTはJSON+明確フォーマット制約がより効果。

選択提案

  • 厳密推理、構造化出力必要:Claude優先
  • 創意出力、快速原型必要:ChatGPT優先
  • 長ドキュメント、完全コードファイル処理:Claude優先(200Kコンテキスト)
  • コード生成、技術Q&A:両方優秀、スタイル少し異なる
  • 文案書き、創意設計:ChatGPT優先(温度上げる)

実際プロジェクトで、タスクタイプに基づいてモデル選択、または両モデル同時使用で効果对比可能。両モデルプロンプト書き確實针对性最適化必要——モデル特徴誤使用、効果大幅悪化可能性。

プロンプト評価と反復メソドロジー

前章で多くプロンプト技術を話しました。しかし一つの問題未解決:プロンプト効果が良いかどうかどう知る?評価なし、最適化は盲摸象。ここでプロンプト評価体系と反復メソドロジーを話しましょう。

評価维度:四つの核心指標

良いプロンプトは四つの维度で標準達成必要:

正確性。出力内容は正確か?この维度最も重要、評価方法も最难。客観タスク(数学計算、事実查询)では、正確性評価は相対簡単——出力答えと正確答え对比。主観タスク(創意書き、方案設計)では、正確性は「期待マッチか」になり、評価より複雑。

評価方法例:

  • 数学問題:計算結果と正確答え对比
  • コード生成:コード実行、テスト通過チェック
  • Q&A:答えが正確情報ポイント含むチェック
  • 文案:人工評価、または关键指標对比(長さ、キーワード覆盖)

一貫性。同一プロンプト複数回呼び出し、出力品質は安定か?低一貫性プロンプトは今日働く、明日失敗、本番環境不適。

評価方法:同一タスク10回実行、出力品質波動範囲統計。波動大すぎ、一貫性問題あり。

安全性。出力は有害内容、隐私漏洩、偏見発言含むか?この维度は特定シーンで重要(カスタマサービスシステム、内容レビューなど)。

評価方法:敏感語検出、隐私情報検出ルール設計、または専門安全評価ツール使用。

コスト効率。プロンプトのToken消費は合理か?長すぎプロンプトはコスト高、短すぎプロンプトは効果悪。平衡点見つける必要。

評価方法:各呼び出しのToken数記録、平均コスト計算。異なるプロンプト版本のコスト効果对比。

評価ツール

いくつか主流プロンプト評価ツール:

DeepEval。开源プロンプト評価フレームワーク、多種評価指標提供(正確性、一貫性、関連性など)。批量テストと自動評価適用。

from deepeval import evaluate
from deepeval.metrics import AnswerRelevancyMetric, FaithfulnessMetric

metrics = [
    AnswerRelevancyMetric(threshold=0.7),
    FaithfulnessMetric(threshold=0.8)
]

evaluate(test_cases, metrics)

Promptfoo。CLIツール、批量テストプロンプト、異なるモデル出力对比、評価報告生成可能。快速プロンプト効果検証適用。

promptfoo eval --prompts my_prompt.txt --providers openai:gpt-4 --tests test_cases.yaml

OpenAI Evals。OpenAI公式評価フレームワーク、主にモデル能力評価、プロンプトテストも使用可能。

これらツール共通特徴:テストセット定義 → 批量実行 → 自動スコアリング → 報告生成。ツール使用手動テストより效率大幅高。

A/Bテスト流程

プロンプト改善時、A/Bテストは科学方法。流程大致:

ステップ1:テストセット準備。20-50典型タスクサンプル収集、異なるシーン覆盖。テストセットは多様必要、簡単タスクだけ不可。

ステップ2:評価指標定義。タスクタイプに基づいて指標選択。Q&Aタスクは「答え正確率+情報カバー率」、コード生成は「通過率+コード品質スコア」。

ステップ3:基準テスト実行。現在プロンプトでテストセット一回実行、各指標スコア記録。このスコアは最適化起点。

ステップ4:改善版本設計。基準テスト問題点に基づいて、プロンプト改善方案設計。正確性低場合CoT追加;一貫性悪場合、厳密フォーマット制約追加。

ステップ5:对比テスト。改善版本で同じテストセット実行、指標変化对比。改善版本スコア高場合、新版本採用。

ステップ6:反復ループ。改善效果不明显場合、原因分析、次ラウンド改善設計。達標まで反復。

簡化版テスト記録表:

版本正確性一貫性Tokenコスト主要改善点
v165%大波動(±20%)850基準版本
v278%中波動(±10%)920CoT誘導追加
v382%小波動(±5%)1050Few-shot例追加
v485%小波動(±3%)1050例品質最適化

各改善はデータ記録必要、これで最適化過程追跡可能。

プロンプト版本管理

プロンプトもコード、版本管理必要。提案:

版本编号。各プロンプト版本编号(v1, v2, v3…)、変更時間と主要変化記録。

变更記録。各変更記録必要:何変更、何故変更、テスト結果どう。

## プロンプト版本記録

### v3 (2026-04-15)
変更:3つのFew-shot例追加、出力フォーマット制約最適化
原因:v2一貫性テスト大波動、出力フォーマット不安定
テスト:正確率78%から82%へ向上、一貫性波動±10%から±5%へ低下

### v2 (2026-04-10)
変更:CoT誘導語「一歩一歩考えてください」追加
原因:v1正確率低、複雑推理タスクエラー多
テスト:正確率65%から78%へ向上

### v1 (2026-04-05)
原版、特殊最適化なし
テスト:正確率65%、一貫性波動±20%

保存方法。プロンプトファイルとテストデータ一緒、追跡便利。Git管理使用、または専門プロンプト管理ツール。

反復最適化关键点

同時に多く変更しない。各改善は一変数だけ調整、これでどの変更有效判断可能。CoT追加とFew-shot追加は同時に行わない——まずCoT追加テスト、次にFew-shot追加テスト。

コスト変化关注。ある時正確率向上、しかしTokenコスト倍増。コスト效果衡量必要、正確率高ければ良いではない。

失敗試行記録。すべて変更が效果向上できるではない。失敗試行も記録、後で重複エラー回避。

最適化目標設定。無限最適化しない。目標設定(正確率80%など)、達標後反復停止。過度最適化時間浪費、边际效益递减。

評価と反復はプロンプトエンジニアリングの「收尾」环节。評価なし、プロンプト良悪不明;反復なし、継続改善不能。これら二环节追加で、プロンプトエンジニアリング真に完全エンジニアリング流程になる。

結論

多く話した後、核心は実は一つ:プロンプトエンジニアリングは「玄学」から「エンジニアリング」に移行中。

三層技術フレームワークはどの技術使用判断支援——基礎層は「モデルに理解させる」問題解決、推理層は「モデルに思考させる」問題解決、システム層は「プロンプト管理可能」問題解決。CoTとReActは現在最も実用推理強化技術、DSPyは自動最適化新方向代表。ClaudeとChatGPT書き方は针对性調整必要——XMLタグClaude制約、明確フォーマット+温度パラメータChatGPT誘導。評価体系はメソドロジー最後のピース、評価なし科学最適化なし。

次にいくつかのこと可能:

現存プロンプト审视。三層フレームワークと对比、プロンプトがどの層に属するか見る?明確問題点ありか(效果不安定、コスト高すぎ、出力フォーマット乱)?

DSPy一回試す。プロジェクトがフレームワーク管理適用場合、简单DSPyモジュール設定、自動最適化效果感受。

評価標準構築。テストセット準備、いくつかの关键指標定義、プロンプト基準テスト一回実行。データあり、最適化方向あり。

プロンプトエンジニアリング確實反復練習必要。しかしメソドロジーあり、少なくとも「感覚で盲調整」ではなくなる。この記事が体系的思考フレームワーク構築支援希望。質問歓迎。


参考資料

FAQ

Zero-shot CoTとFew-shot CoTの違いは何?どのタイミングでどちら使用?
Zero-shot CoTは誘導語一行追加だけ(「一歩一歩考えて」)、簡単タスクやモデル能力強時適用。Few-shot CoTは推理過程含む例書き必要、複雑タスクや特定推理フォーマット必要時適用。判断基準:タスクは多ステップ推理必要か、モデル能力十分か、高品質例書き時間あるか。
DSPyは手動プロンプト書きと比べて何の优势?
DSPyの三大優勢:

• より可靠:宣言式定義は手動プロンプトより厳密、遗漏とフォーマットエラー減少
• より保守可能:プロンプトがコードに変、版本管理、単体テスト、継続反復可能
• より移植可能:モデル切り替え時フレームワーク自動適応、プロンプト再調整不要

適用シーン:プロジェクト級アプリケーション、タスク構造明確、訓練データあり、长期保守必要システム。
ClaudeとChatGPTのプロンプト書き方はどう異なる?
ClaudeはXMLタグ構造化制約偏好、役割設定と制約に认真応答、長ドキュメント分析適用(200Kコンテキスト)。ChatGPTは明確出力フォーマット制約必要(Markdown/JSON)、温度パラメータ調整で創意制御可能、柔軟快速応答偏り。关键テクニック:ClaudeはXML使用、ChatGPTはJSON+フォーマット制約使用。
プロンプト效果良悪どう評価?
四つの核心维度:

• 正確性:出力内容は正確か
• 一貫性:複数回呼び出し品質は安定か
• 安全性:有害内容或隐私漏洩含むか
• コスト効率:Token消費は合理か

推奨ツール:DeepEval(批量テスト)、Promptfoo(快速検証)、OpenAI Evals。評価は定量化指標必要、感覚だけで判断不可。
ReActフレームワークとCoTの違いは何?それぞれ何のシーン適用?
CoTはモデル内部知識のみ使用で純思考推理、数学、論理分析など既に十分情報あるシーン適用。ReActは思考と行動結合、外部ツール呼び出しで情報取得可能、リアルタイム情報必要、データベース查询、API呼び出しシーン適用。実装複雑度:CoTはプロンプト変更だけ、ReActはツール統合システム必要。
プロンプト最適化時A/Bテストどう実施?
標準流程:

• ステップ1:20-50典型タスクテストセット準備
• ステップ2:評価指標定義(正確率、カバー率など)
• ステップ3:基準テスト実行スコア記録
• ステップ4:改善版本設計
• ステップ5:对比テスト指標変化見る
• ステップ6:達標まで反復ループ

关键原則:毎回一変数だけ変更、失敗試行記録、最適化目標上限設定。

18 min read · 公開日: 2026年4月17日 · 更新日: 2026年4月18日

関連記事

コメント

GitHubアカウントでログインしてコメントできます