--- name: prompt-engineering-helper description: LLMプロンプトの最適化・テスト支援スキル。プロンプトのパフォーマンス評価、改善提案、A/Bテスト、ベストプラクティス適用、再現性検証を行います。 --- # Prompt Engineering Helper Skill LLM(大規模言語モデル)プロンプトの最適化とテストを支援するスキルです。 ## 概要 このスキルは、LLMプロンプトの品質を向上させるための包括的な支援を提供します。プロンプトの分析、改善提案、A/Bテスト、ベストプラクティスの適用、パフォーマンス評価など、プロンプトエンジニアリングに必要な全てのプロセスをサポートします。 ## 主な機能 - **プロンプト分析**: 現在のプロンプトの強み・弱みを評価 - **改善提案**: より効果的なプロンプトへの書き換え案を提示 - **A/Bテスト**: 複数のプロンプトバリエーションを比較評価 - **ベストプラクティス適用**: 業界標準のプロンプト設計パターンを適用 - **再現性検証**: 同じプロンプトで一貫した結果が得られるかテスト - **Few-shot例最適化**: 効果的な例の選定と配置 - **Chain-of-Thought**: 推論プロセスを明示的にするプロンプト設計 - **評価メトリクス**: 明確性、具体性、完全性、安全性などの指標でスコアリング - **トークン最適化**: コストを抑えながら品質を維持 - **マルチモーダル対応**: テキスト、画像、構造化データを含むプロンプト ## プロンプト分析の評価基準 ### 1. 明確性 (Clarity) プロンプトが曖昧さなく明確に意図を伝えているか **Good**: ``` 以下の顧客レビューを分析し、次の情報を抽出してください: 1. 感情(ポジティブ/ネガティブ/中立) 2. 主なトピック(最大3つ) 3. 改善提案(あれば) レビュー: {review_text} 出力形式: { "sentiment": "ポジティブ|ネガティブ|中立", "topics": ["トピック1", "トピック2", "トピック3"], "suggestions": ["提案1", "提案2"] } ``` **Avoid**: ``` このレビューについて分析してください。 ``` ### 2. 具体性 (Specificity) タスクの詳細、制約、期待される出力が明確に定義されているか **Good**: ``` 以下のPythonコードをレビューし、以下の観点で問題点を指摘してください: - セキュリティ脆弱性(SQLインジェクション、XSSなど) - パフォーマンスの問題(N+1クエリ、不要なループなど) - コードスタイル(PEP8違反) 各問題について: 1. 問題の種類 2. 該当する行番号 3. 具体的な改善案 を提示してください。 ``` **Avoid**: ``` このコードをレビューしてください。 ``` ### 3. 完全性 (Completeness) 必要な情報、制約、エッジケースの処理がすべて含まれているか **Good**: ``` 以下の条件でタスク管理アプリのユーザーストーリーを生成してください: 対象ユーザー: フリーランスエンジニア 主な機能: タスク作成、編集、削除、優先度設定、期限管理 制約: - モバイルファーストのデザイン - オフライン対応 - 最大タスク数: 1000件 各ユーザーストーリーは以下の形式で出力: "As a [ユーザータイプ], I want to [アクション] so that [目的]" 10件のユーザーストーリーを生成してください。 ``` **Avoid**: ``` タスク管理アプリのユーザーストーリーを作ってください。 ``` ### 4. コンテキスト提供 (Context) LLMが適切に判断するための背景情報が十分に提供されているか **Good**: ``` あなたは経験豊富なReactコンサルタントです。 クライアントは中規模のECサイト(月間10万PV)を運営しており、 現在のReactアプリケーションのパフォーマンスに課題を抱えています。 以下のコードを分析し、パフォーマンス改善のための具体的な提案を 3つ挙げてください。各提案には以下を含めてください: - 問題点 - 改善案 - 期待される効果 - 実装の難易度(低/中/高) コード: {code} ``` **Avoid**: ``` このReactコードを改善してください。 ``` ### 5. 構造化 (Structure) プロンプトが論理的に構造化され、読みやすいか **Good**: ``` # タスク GitHubリポジトリのREADME.mdを生成してください。 ## 入力情報 - プロジェクト名: {project_name} - 説明: {description} - 主な機能: {features} - 技術スタック: {tech_stack} ## 出力要件 1. プロジェクト概要(2-3文) 2. 主な機能リスト 3. インストール手順 4. 使用例 5. ライセンス情報 ## 制約 - Markdown形式 - 合計文字数: 500-800字 - コードブロックは適切にハイライト ``` **Avoid**: ``` README.mdを作ってください。プロジェクト名は{project_name}で、 説明は{description}です。機能は{features}で技術スタックは{tech_stack}です。 インストール方法と使い方も書いてください。 ``` ## プロンプト改善パターン ### パターン1: Zero-shot → Few-shot **Before (Zero-shot)**: ``` 以下のテキストを英語に翻訳してください: {text} ``` **After (Few-shot)**: ``` 以下の例を参考に、テキストを英語に翻訳してください: 例1: 日本語: 今日は良い天気ですね。 英語: It's nice weather today. 例2: 日本語: 会議は午後3時に始まります。 英語: The meeting starts at 3 PM. 例3: 日本語: このプロジェクトは順調に進んでいます。 英語: This project is progressing smoothly. 翻訳してください: {text} ``` ### パターン2: 曖昧 → 具体的 **Before**: ``` このデータを分析してください。 ``` **After**: ``` 以下のCSVデータを分析し、次の情報を抽出してください: 1. 基本統計量(平均、中央値、標準偏差) 2. 外れ値の検出(±3σ) 3. 欠損値の数とパーセンテージ 4. カテゴリ変数の分布 出力形式: JSON { "statistics": {...}, "outliers": [...], "missing_values": {...}, "categorical_distribution": {...} } データ: {csv_data} ``` ### パターン3: 単一ステップ → Chain-of-Thought **Before**: ``` この数学の問題を解いてください: {problem} ``` **After**: ``` 以下の数学の問題を、ステップバイステップで解いてください: 問題: {problem} 解答手順: 1. 問題の理解: 何を求められているか明確にする 2. 既知の情報と未知の情報を整理 3. 適用できる公式や定理を特定 4. 計算プロセスを段階的に記述 5. 答えを検証 最終的な答えは以下の形式で出力: 答え: [数値] [単位] ``` ### パターン4: 無制約 → 制約付き **Before**: ``` ブログ記事を書いてください。 テーマ: {topic} ``` **After**: ``` 以下の制約に従って、ブログ記事を執筆してください: テーマ: {topic} 対象読者: 初心者エンジニア(経験1-2年) 文体: カジュアルだが専門的 文字数: 1500-2000字 構成: 1. 導入(問題提起): 200字 2. 本文(解決策・説明): 1000字 3. 具体例・コード: 500字 4. まとめ: 300字 含めるべき要素: - 実践的なコード例 - 初心者が陥りやすい落とし穴 - 参考リンク(2-3個) 避けるべき要素: - 過度に専門的な用語(必要な場合は説明を追加) - 古い情報(2020年以前の技術) ``` ### パターン5: 出力形式の明示 **Before**: ``` このJSON APIレスポンスからエラー情報を抽出してください。 {api_response} ``` **After**: ``` 以下のJSON APIレスポンスからエラー情報を抽出し、 指定した形式で出力してください: 入力: {api_response} 出力形式(TypeScript型定義): interface ErrorInfo { statusCode: number; errorType: string; message: string; timestamp: string; affectedFields?: string[]; } 出力例: { "statusCode": 400, "errorType": "ValidationError", "message": "Invalid email format", "timestamp": "2024-11-22T10:30:00Z", "affectedFields": ["email"] } 抽出してください: ``` ## A/Bテスト機能 ### 使い方 ``` 以下の2つのプロンプトを比較評価してください: プロンプトA: 「この文章を要約してください。」 プロンプトB: 「以下の文章を3つの箇条書きで要約してください。各箇条書きは1文で簡潔に。」 評価基準: - 明確性 - 具体性 - 再現性 - 出力の品質 テストケース: 3つの異なる入力文章 ``` ### 評価レポート例 ``` ## A/Bテスト結果 ### プロンプトA スコア: 65/100 - 明確性: 6/10(タスクが曖昧) - 具体性: 5/10(要約の形式が不明確) - 再現性: 7/10(比較的一貫した結果) - 出力の品質: 6/10(要約の長さが不安定) ### プロンプトB スコア: 88/100 - 明確性: 9/10(タスクが明確) - 具体性: 9/10(形式が詳細に指定) - 再現性: 9/10(非常に一貫した結果) - 出力の品質: 8/10(期待通りの出力) ### 推奨 プロンプトBを採用することを推奨します。 理由: 具体的な制約により、出力が安定し、品質が向上。 ``` ## ベストプラクティス集 ### 1. Role Prompting(役割設定) ``` あなたは10年の経験を持つシニアPythonエンジニアです。 コードレビューの専門家として、以下のコードを評価してください。 ``` ### 2. 出力形式の厳密な指定 ``` 必ず以下のJSON形式で出力してください。 他のテキストは一切含めないでください: { "summary": "要約文", "key_points": ["ポイント1", "ポイント2"], "confidence": 0.85 } ``` ### 3. ステップバイステップ指示 ``` 以下の手順で分析を実行してください: ステップ1: データの前処理 - 欠損値を確認 - 外れ値を検出 ステップ2: 探索的データ分析 - 各変数の分布を確認 - 相関関係を分析 ステップ3: 結果の要約 - 主要な発見を3つ挙げる - 推奨アクションを提示 ``` ### 4. エッジケースの処理 ``` 以下の入力に対して、適切に処理してください: エッジケース: - 入力が空文字列の場合 → "入力が空です"と返す - 入力が1000文字を超える場合 → 最初の1000文字のみ処理 - 無効な形式の場合 → エラーメッセージを返す 通常ケース: {normal_processing_instructions} ``` ### 5. 温度パラメータの推奨値 ``` タスクの種類に応じた推奨設定: 創造的タスク(アイデア生成、ストーリー執筆): - temperature: 0.7-0.9 - top_p: 0.9 分析的タスク(コードレビュー、データ分析): - temperature: 0.1-0.3 - top_p: 0.1 翻訳・要約タスク: - temperature: 0.3-0.5 - top_p: 0.5 ``` ## トークン最適化 ### 冗長なプロンプトの圧縮 **Before (150 tokens)**: ``` あなたは非常に経験豊富で優秀なソフトウェアエンジニアです。 長年にわたってさまざまなプロジェクトに携わってきました。 以下のコードを丁寧にレビューしてください。 問題点があれば指摘し、改善案を提示してください。 できるだけ詳しく説明をお願いします。 ``` **After (45 tokens)**: ``` 経験豊富なエンジニアとして、以下のコードをレビューし、 問題点と改善案を提示してください。 ``` ### システムメッセージの活用 **Before**: ``` [ユーザーメッセージ] あなたはPythonの専門家です。以下のコードを... ``` **After**: ``` [システムメッセージ] You are a Python expert. [ユーザーメッセージ] 以下のコードを... ``` ## 使用例 ### 基本的な使い方 ``` 以下のプロンプトを分析し、改善案を提示してください: 現在のプロンプト: 「このコードを直してください。」 期待する出力: - 明確性、具体性、完全性のスコア - 改善されたプロンプト - 改善のポイント ``` ### Few-shot例の最適化 ``` 以下のFew-shot例を評価し、より効果的な例を提案してください: タスク: 感情分析 現在の例: 1. "良い" → ポジティブ 2. "悪い" → ネガティブ 3. "普通" → 中立 改善してください。 ``` ### プロンプトテンプレート生成 ``` 以下のタスク用のプロンプトテンプレートを生成してください: タスク: コードレビュー 対象言語: TypeScript 重点項目: セキュリティ、パフォーマンス、型安全性 要件: - 変数部分を{variable_name}で表現 - 評価基準を明確に - 出力形式を指定 ``` ### マルチステップタスクのプロンプト設計 ``` 複数のLLM呼び出しが必要なタスクのプロンプトチェーンを設計してください: 最終目標: ブログ記事の自動生成 ステップ: 1. トピック案の生成 2. アウトラインの作成 3. 各セクションの執筆 4. 編集・校正 各ステップのプロンプトを設計してください。 ``` ## 評価メトリクス詳細 ### 明確性スコア (0-10) - 10: タスクが完全に明確、曖昧さゼロ - 7-9: ほぼ明確だが、若干の曖昧さあり - 4-6: やや曖昧、解釈の余地あり - 1-3: 非常に曖昧、意図が不明確 - 0: 全く不明確 ### 具体性スコア (0-10) - 10: すべての詳細、制約、形式が明記 - 7-9: 主要な詳細が記載、一部省略 - 4-6: 基本的な情報のみ - 1-3: ほとんど詳細なし - 0: 全く具体性なし ### 完全性スコア (0-10) - 10: すべての必要情報、エッジケース対応含む - 7-9: 主要な情報は揃っている - 4-6: 基本情報のみ、一部欠落 - 1-3: 多くの情報が欠落 - 0: ほとんど情報なし ### 再現性スコア (0-10) - 10: 同じ入力で常に同じ出力 - 7-9: ほぼ一貫した出力 - 4-6: 時々異なる出力 - 1-3: 頻繁に異なる出力 - 0: 全く一貫性なし ## 高度な使用例 ### システムプロンプトの最適化 ``` 以下のシステムプロンプトを最適化してください: 現在: 「あなたはAIアシスタントです。ユーザーの質問に答えてください。」 要件: - タスクの専門性を明示 - 制約・ガイドラインを追加 - 出力形式のデフォルトを設定 - トーンとスタイルを定義 ``` ### プロンプトチェーンの設計 ``` 以下の複雑なタスクをプロンプトチェーンに分解してください: タスク: GitHubリポジトリの包括的な分析レポート生成 必要な分析: 1. コード品質評価 2. セキュリティ脆弱性検出 3. パフォーマンスボトルネック分析 4. アーキテクチャ評価 5. ドキュメント品質評価 各ステップのプロンプトと、ステップ間のデータ受け渡しを設計してください。 ``` ### コンテキスト長の最適化 ``` 以下の長いコンテキストを含むプロンプトを最適化してください: 現在のコンテキスト: 10,000トークン(長文ドキュメント全体) 要件: - コンテキストを5,000トークン以下に圧縮 - 重要情報は保持 - 必要に応じてRAG(Retrieval-Augmented Generation)を提案 ``` ## トラブルシューティング ### 問題: 出力が不安定 **解決策**: 1. 温度パラメータを下げる(0.0-0.2) 2. Few-shot例を追加 3. 出力形式を厳密に指定 4. システムプロンプトで一貫性を強調 ### 問題: プロンプトが長すぎる **解決策**: 1. システムメッセージに共通部分を移動 2. 冗長な表現を削除 3. 必要最小限の例のみ使用 4. テンプレート化して再利用 ### 問題: 意図しない出力 **解決策**: 1. プロンプトの曖昧さを排除 2. 出力形式を明示的に指定 3. 除外すべき内容を明記 4. Few-shot例で期待する出力を示す ### 問題: LLMが指示に従わない **解決策**: 1. 指示を箇条書きで明確に 2. 重要な指示を強調(**太字**、UPPERCASE) 3. 役割設定を明確に 4. Few-shot例で正しい動作を示す ## ベストプラクティス要約 1. **明確性**: タスクを曖昧さなく記述 2. **具体性**: 詳細、制約、形式を明記 3. **構造化**: 論理的に整理されたプロンプト 4. **Few-shot**: 効果的な例を2-5個提供 5. **Chain-of-Thought**: 複雑なタスクはステップ分割 6. **出力形式**: 厳密に指定(JSON、Markdown等) 7. **エッジケース**: 異常系の処理を明記 8. **役割設定**: 適切なペルソナを定義 9. **トークン最適化**: 簡潔だが完全な表現 10. **テスト**: 複数の入力で一貫性を検証 ## バージョン情報 - スキルバージョン: 1.0.0 - 最終更新: 2025-11-22 - 対応LLM: Claude, GPT-4, Gemini等 --- ## 使用例まとめ ### シンプルな改善 ``` このプロンプトを改善してください: 「コードを書いてください。」 ``` ### 詳細な分析 ``` 以下のプロンプトを詳細に分析してください: プロンプト: {your_prompt} 分析項目: - 明確性スコア(理由付き) - 具体性スコア(理由付き) - 完全性スコア(理由付き) - 改善点リスト - 改善されたプロンプト ``` ### A/Bテスト ``` プロンプトA と プロンプトB を比較評価してください。 テストケース: {test_cases} 評価レポートを生成してください。 ``` このスキルで、プロンプトエンジニアリングを体系的に改善しましょう!