Slide 1

Slide 1 text

プロンプトエンジニアリング入門 大規模言語モデル(LLM)の可能性を最大限に引き出す技術 Prompt Engineering (2025) Lee Boonstra (Google) https://www.kaggle.com/whitepaper-prompt-engineering 1

Slide 2

Slide 2 text

この講座で学べること プロンプトエンジニアリングとは何か? なぜ重要か? LLMの基本的な仕組み LLMの出力を調整する方法(設定) 基本的なプロンプト作成テクニック より高度なプロンプト作成テクニック コード生成に特化したプロンプト術 効果的なプロンプトを作成するためのベストプラクティス ゴール: LLMと効果的に対話し、望む結果を得るための基礎を習得する 2

Slide 3

Slide 3 text

プロンプトエンジニアリングって何? 定義 (p.6): LLM(大規模言語モデル)が望ましい正確な出力を生成するように導くための「指示 文(プロンプト) 」を設計・改善するプロセス。 誰でもできる? (p.6): データサイエンティストやエンジニアでなくても、誰でもプロンプトは書ける! でも奥が深い: 最も効果的なプロンプトを作るには、モデルの特性、設定、言葉選び、構造などを考 慮する必要があり、試行錯誤が伴う。 不適切なプロンプトの影響 (p.6): 曖昧で不正確な応答、意味のある出力が得られない可能性。 3

Slide 4

Slide 4 text

なぜプロンプトエンジニアリングが重要か? LLMは非常に強力だが、指示の仕方次第で性能が大きく変わる。 目的 (p.6): LLMの能力を最大限に引き出す より正確で、目的に合った回答を得る 意図しない出力(ハルシネーション等)を減らす 効率的にタスクをこなす プロンプトはLLMとの「対話の鍵」 4

Slide 5

Slide 5 text

LLMはどうやって動いているの? LLM = 高度な予測エンジン (p.7) 入力: テキスト(プロンプト) 処理: 入力されたテキストに続く**「次に来る可能性が最も高い単語(トークン) 」**を 予測する。 これを繰り返し、文章を生成していく。 予測の根拠 (p.7): 膨大な量のテキストデータでの学習結果 直前の文脈(入力されたプロンプトと、それまでに生成した単語) プロンプトエンジニアリングの役割: LLMが「正しい(望ましい)次の単語」を予測で きるように、最初の入力(プロンプト)でうまく誘導すること。 5

Slide 6

Slide 6 text

II. LLMの出力設定を理解しよう 6

Slide 7

Slide 7 text

出力をコントロールする要素 LLMの出力はプロンプトだけで決まるわけではない。 重要な要素 (p.8): 1. プロンプト: 指示の内容、質、形式 2. モデル選択: どのLLMを使うか (Gemini, GPT, Claudeなど) 3. モデル設定: 出力方法を調整するパラメータ このセクションでは 「モデル設定」 に焦点を当てる。 なぜ設定が重要か? タスクに合わせて最適な設定をすることで、より望ましい結果を 得られる。 7

Slide 8

Slide 8 text

① 出力長 (Max Output Tokens) 意味 (p.8): LLMが生成するテキストの最大長(トークン数)を指定する設定。 トークンとは?: LLMがテキストを処理する単位。日本語では単語や文字の一部になる ことが多い。 影響 (p.8-9): 計算量・コスト: 長いほど計算量が増え、利用料金が高くなる可能性。 応答時間: 長いほど時間がかかる。 出力内容: 単に途中で切れるだけ。文章が簡潔になるわけではない。 短い出力が必要な場合は、プロンプトで「簡潔に」 「要約して」など指示する 必要がある。 注意点 (p.9): ReAct (Reason+Act) などの手法では、意図せず長い出力が続くことがあ るため、制限が有効。 8

Slide 9

Slide 9 text

② サンプリング制御とは? LLMの予測 (p.9): 次に来る単語は1つに決まっているわけではなく、**「各単語が次に 来る確率」**を予測している。 例: 「今日の天気は」 -> {晴れ: 60%, 雨: 30%, 曇り: 10%} サンプリング (p.9): この確率分布の中から、実際に次に来る単語を決定する方法。 主な設定 (p.9): 温度 (Temperature) Top-K Top-P これらの設定で、出力の ランダム性(創造性) や 多様性 をコントロールする。 9

Slide 10

Slide 10 text

サンプリング制御: 温度 (Temperature) 役割 (p.9): トークン選択の ランダム性の度合い を制御する。 低い温度 (例: 0.0 - 0.3): (p.9-10) 最も確率の高い単語が選ばれやすくなる。 より決定的で、一貫性のある、事実に近い応答。 用途: 質問応答、要約、分類など、正確性が求められるタスク。 温度 0 = 常に最高確率の単語を選択 (ほぼ) 高い温度 (例: 0.7 - 1.0): (p.10) 確率の低い単語も選ばれやすくなる。 より多様で、創造的、予期しない応答。 用途: ブレインストーミング、物語作成、詩作など、創造性が求められるタスク。 10

Slide 11

Slide 11 text

サンプリング制御: Top-K & Top-P 役割 (p.10): 次のトークン候補を、確率の高いものだけに絞り込む方法。 Top-K: (p.10) 確率が上位 K 個のトークンの中から次のトークンを選ぶ。 K=1: 最高確率のトークンのみ (温度0と同じ効果) Kが大きい(小さい): 候補が増え(絞られ) 、より多様な(保守的な)出力に。 Top-P (核サンプリング): (p.10-11) 確率の高い順にトークンを足していき、累積確率が P を超えるまでのトークン群 の中から次のトークンを選ぶ。 P=0 (=1): 最高確率のトークンのみ (全てのトークンが候補) 利点: 候補の数を動的に変えられる。 11

Slide 12

Slide 12 text

設定の組み合わせと注意点 組み合わせの影響 (p.11): 温度、Top-K、Top-P は互いに影響し合う。 極端な設定: 温度 0 や Top-K=1 は他の設定を無効化する。 推奨される開始値 (例) (p.12): 標準的: 温度 0.2, Top-P 0.95, Top-K 40 創造的: 温度 0.9, Top-P 0.99, Top-K 40 保守的: 温度 0.1, Top-P 0.9, Top-K 20 単一正解タスク: 温度 0 ポイント: これらは出発点。タスクに合わせて試行錯誤が必要。 注意点: 繰り返しループバグ (p.12-13): 設定が不適切だと、同じ単語やフレーズを延々と繰り返すことがある。 対策: 温度やTop-K/Pを調整してバランスを取る。 12

Slide 13

Slide 13 text

III. 基本的なプロンプト手法 13

Slide 14

Slide 14 text

基本的なプロンプト手法とは? LLMは指示に従うように訓練されているが、指示の仕方(プロンプト) で応答の質が 変わる。(p.13) より良い結果を得るための、効果的なプロンプトの書き方・パターン が研究されてい る。 このセクションでは、基本的ないくつかの手法を紹介。 基本的な考え方: LLMが次に何を予測すれば良いか、明確に、分かりやすく 導いてあげ ること。 14

Slide 15

Slide 15 text

① ゼロショットプロンプト 意味 (p.13): 最もシンプル。LLMに何の例も見せずに、タスクの指示だけを与える方 法。 「ゼロショット」=「例がゼロ個」 形式: 質問: 日本の首都は? 指示: 以下の文章を要約してください:[文章] 文章の続き: 昔々あるところに、 利点: 手軽に試せる。 欠点: 複雑なタスクや、特定の出力形式を期待する場合は、うまく機能しないことがあ る。 15

Slide 16

Slide 16 text

ゼロショットプロンプトの例 タスク: 映画レビューの感情分析(肯定/中立/否定) (p.14) プロンプト: 映画レビューを肯定、中立、または否定に分類します。 レビュー:「Her」は、AIがチェックされずに進化し続けることが許された場合、人類が向かう方向を明らかにする不穏な研究です。このような傑作のような映画がもっとあればと思います。 感情: 設定例 (p.14): モデル: gemini-pro 温度: 0.1 (創造性は不要) トークン制限: 5 (単語1つで十分) 期待される出力: 肯定 (p.15) 16

Slide 17

Slide 17 text

② ワンショット & フューショットプロンプト 背景 (p.15): ゼロショットでうまくいかない時、LLMにお手本(例) を見せる。 ワンショット (One-shot): (p.15) 1つの例(入力と期待される出力のペア)をプロンプトに含める。 モデルに「こんな感じでやってね」と示す。 フューショット (Few-shot): (p.15) 複数 (通常2〜5個以上) の例を含める。 より明確に、LLMが従うべきパターンを示すことができる。 効果: モデルがタスクを理解しやすくなる。 特定の出力形式やスタイルに誘導できる。 17

Slide 18

Slide 18 text

フューショットプロンプトの構造 基本的な形: [タスクの説明 (任意)] 例1: 入力: [入力テキスト1] 出力: [期待される出力1] 例2: 入力: [入力テキスト2] 出力: [期待される出力2] ... (複数の例) ... [実際のタスク] 入力: [処理したい入力テキスト] 出力: ← ここをLLMに生成させる 例の数 (p.16): タスクの複雑さ、モデルの能力、入力長の制限による。一般的に3〜5個 18

Slide 19

Slide 19 text

フューショットプロンプトの例: ピザ注文解析 タスク (p.16): 顧客のピザ注文テキストをJSON形式に変換する。 プロンプト (p.16-17): 顧客のピザの注文を有効なJSONに解析します。 例1: 注文: チーズ、トマトソース、ペパロニの小さなピザが欲しいです。 JSON: { "size": "small", "type": "normal", "ingredients": [["cheese", "tomato sauce", "peperoni"]] } 例2: 注文: トマトソース、バジル、モッツァレラの大きなピザをいただけますか JSON: { "size": "large", "type": "normal", "ingredients": [["tomato sauce", "bazel", "mozzarella"]] } さて、大きなピザが欲しいです。最初の半分はチーズとモッツァレラです。もう半分はトマトソース、ハム、パイナップルです。 JSON: 期待される出力 (p.17): { "size": "large", "type": "half-half", "ingredients": [["cheese", "mozzarella"], ["tomato sauce", "ham", "pineapple"]] } 19

Slide 20

Slide 20 text

フューショットプロンプト: 例選びのポイント 関連性 (p.17): 実行したいタスクと関連性の高い例を選ぶ。 多様性 (p.17): 様々なパターンの例を含める。 品質 (p.17): 例は正確で、質の高いものである必要がある。 エッジケース (p.17): 可能であれば、例外的・まれなケースの例も入れる。 分類タスクの場合 (p.59): 各クラスの例が均等に混ざるようにする。 20

Slide 21

Slide 21 text

③ システム、コンテキスト、役割プロンプト 目的 (p.18): LLMの振る舞いや応答の仕方をより細かく制御するための手法。 システムプロンプト: モデルの全体的な目的、基本的な機能、制約を設定する。 (例: 「あなたは親切なアシスタントです」 ) コンテキストプロンプト:現在のタスクや会話に特有の背景情報を提供する。(例: 「ユーザーは今、旅行の計画を立てています」 ) 役割プロンプト: モデルに特定のキャラクターや専門家になりきらせる。(例: 「あ なたはシェイクスピア風の詩人です」 ) 関係性 (p.18): これらはしばしば組み合わせて使われる。 21

Slide 22

Slide 22 text

システムプロンプト: 全体的な指示 役割 (p.19): モデルの動作の土台を作る。 タスクの定義 (翻訳、分類など) 出力形式の指定 (JSON、マークダウンなど) 応答スタイルの制約 (丁寧な言葉遣いなど) 安全性の確保 (有害な応答をしない) 例 (JSON出力指定) (p.20): 映画レビューを肯定的、中立、または否定に分類します。有効な JSON を返します。 スキーマ: { "感情": "肯定的" | "否定的" | "中立", "名前": 文字列 } レビュー:[レビュー本文] JSON応答: メリット (JSON指定の場合) (p.21, 60-61): 構造化、幻覚抑制、データ抽出の容易化。 22

Slide 23

Slide 23 text

役割プロンプト: キャラクター設定 役割 (p.21): モデルに特定の**ペルソナ(役割、キャラクター)**を与える。 効果: 応答のトーン、スタイル、専門性がその役割に沿ったものになる。 より人間味のある、あるいは特定の目的に特化した応答が期待できる。 例: あなたは**旅行ガイド**です。おすすめの観光地を3つ提案してください。 (p.22) あなたは**幼稚園の先生**です。子供にもわかるように説明してください。 あなたは**ユーモラスな作家**です。面白おかしく解説してください。 (p.23) スタイルの指定 (p.23): 「対立的」 「フォーマル」 「ユーモラス」などを組み合わせるこ とも可能。 23

Slide 24

Slide 24 text

コンテキストプロンプト: 背景情報の提供 役割 (p.23): 現在の状況や、応答を生成するために必要な背景情報をモデルに伝える。 効果: モデルが文脈を理解し、より的確で関連性の高い応答を生成できる。 誤解を防ぎ、よりスムーズな対話が可能になる。 例 (p.24): コンテキスト: あなたは 80 年代のレトロなアーケードビデオゲームに関するブログを執筆しています。 この記事に含めるべき数行の説明とともに、記事を執筆するための 3 つのトピックを提案してください。 ポイント: タスクを進める上で前提となる知識や状況を明記する。 24

Slide 25

Slide 25 text

IV. 高度なプロンプト手法 25

Slide 26

Slide 26 text

より高度な手法へ 基本的な手法だけでは解決が難しい、より複雑なタスク(推論、計画、外部情報アク セスなど)に対応するためのテクニック。 LLMの思考プロセスを段階的に導いたり、複数の可能性を探らせたりする。 主な手法: ステップバックプロンプト Chain of Thought (CoT) セルフコンシステンシー Tree of Thoughts (ToT) ReAct (Reason & Act) 自動プロンプトエンジニアリング (APE) 26

Slide 27

Slide 27 text

④ ステップバックプロンプト 考え方 (p.25): 具体的な問題に取り組む前に、まず一歩引いて、関連する一般的な原理 や概念について考えさせる。 プロセス (p.25): 1. 具体的な質問 2. ステップバック: LLMに一般的な質問をさせる 3. LLMが生成した一般的な回答を、元の具体的な質問への回答にコンテキストとし て利用する。 効果: 関連知識を活性化させ、より深く考えさせる。 より正確で洞察に富んだ回答を導き出す。 バイアスを軽減する可能性。 27

Slide 28

Slide 28 text

ステップバックプロンプトの例: ゲームストーリー 元のプロンプト (従来) (p.26): 挑戦的で魅力的な一人称シューティングビデオゲームの新しいレベルのストーリーラインを1段落で 記述します。 → やや一般的でランダムな結果になりがち。 ステップバック: 1. 人気の一人称シューティングアクションゲームに基づいて、...5つの架空の主要な設定は何で すか? (p.27) → LLMが5つのテーマ案(廃基地、サイバーパンク都市など)を生成。 2. 生成されたテーマ案をコンテキストとして与え、元のプロンプトを再度実行。 (p.28) コンテキスト:[LLMが生成した5つのテーマ案] テーマの1つを選び、...ストーリーラインを 1段落で記述します。 28

Slide 29

Slide 29 text

⑤ Chain of Thought (CoT) 考え方 (p.29): 複雑な問題に対して、LLMに最終的な答えだけでなく、そこに至るまで の中間的な思考プロセス(推論ステップ) も一緒に生成させる手法。 プロンプトの工夫 (p.29): 指示の最後に「一歩ずつ考えてみましょう (Let's think step by step)」のようなフレーズを追加する(ゼロショットCoT) 。または、フューショッ トで思考プロセスを含む例を示す。 効果: 推論能力が向上し、より正確な回答が得られやすい(特に算数、論理パズルな ど) 。 LLMがどのように考えているか解釈しやすくなる。 29

Slide 30

Slide 30 text

CoTの例: 計算問題 問題 (p.29): 私が 3 歳のとき、私のパートナーは私の 3 倍の年齢でした。現在、私は 20 歳で す。私のパートナーは何歳ですか? CoTなしのプロンプト: 上記の質問のみ。 出力例 (p.29): 63 歳 (間違い!) CoTありのプロンプト (ゼロショット) (p.30): 私が 3 歳のとき、私のパートナーは私の 3 倍の年齢でした。現在、私は 20 歳です。私のパート ナーは何歳ですか? **一歩ずつ考えてみましょう。** 出力例 (p.30): 1. 私が3歳の時、パートナーは 3 * 3 = 9歳。 2. 年齢差は 9 - 3 = 6歳。 3. 現在私が20歳なので、パートナーは 20 + 6 = 26歳。 したがって、私のパートナーは26歳です。 30

Slide 31

Slide 31 text

CoTのコツとユースケース フューショットCoT (p.31): より複雑なタスクでは、思考ステップを含む例(フューシ ョット)を示すと非常に効果的。 CoTのベストプラクティス (p.64): 思考の後に答え: 推論ステップ → 最終的な答え、の順にする。 温度は低く (0推奨): 推論タスクは通常、正解が一つなので、ランダム性を抑え る。 答えの抽出: 思考プロセスと最終的な答えを区別して抽出できるようにする。 ユースケース (p.31): 算数・数学の問題、論理パズル コード生成(ステップを記述) 合成データ生成 31

Slide 32

Slide 32 text

⑥ セルフコンシステンシー 考え方 (p.32): 同じ質問に対して、複数の異なる思考プロセス(CoT) を生成させ、最 終的に最も多くの思考プロセスが導き出した答え(多数決) を採用する手法。 プロセス (p.32): 1. 同じCoTプロンプトを複数回、高い温度設定で実行する。 2. それぞれの実行結果から、最終的な答えを抽出する。 3. 最も多く出現した答えを最終結果とする。 効果: 単一のCoTよりも、さらに頑健で信頼性の高い結果を得られる。 「たまたま間違った思考プロセス」のリスクを低減。 欠点: 計算コストが高い。 32

Slide 33

Slide 33 text

セルフコンシステンシーの例: メール分類 タスク (p.32): ウェブサイトのバグを(やや皮肉っぽく)報告するメールを「重要」か 「重要でない」かに分類する。 プロンプト (CoT形式) (p.33): [メール本文] 上記のメールを IMPORTANT または NOT IMPORTANT に分類します。一歩ずつ考えて、その理由を説明してください。 実行 (高めの温度で複数回) (p.34-35): 試行1: ... 結論: 重要 試行2: ... 結論: 重要ではない 試行3: ... 結論: 重要 多数決 (p.36): 3回の試行のうち、2回が「重要」 。 最終的な答え:重要 33

Slide 34

Slide 34 text

⑦ Tree of Thoughts (ToT) 考え方 (p.36): 問題を解く過程を木の枝のように捉え、複数の思考パスを同時に探索・ 評価しながら進める手法。 プロセス (p.37): 1. 問題を複数のステップに分解。 2. 各ステップで、複数の可能な「次の思考」を生成。 3. それぞれの「思考」の有望さを評価。 4. 有望な思考パスをさらに先に進め、有望でないパスは打ち切る(探索) 。 効果: 計画立案や探索が必要な、より複雑な問題解決に適している。 CoTのような一本道ではなく、戦略的に思考を進められる。 34

Slide 35

Slide 35 text

⑧ ReAct (Reason & Act) 考え方 (p.37): LLMの推論能力 (Reason) と、外部ツール(検索エンジン、APIなど)を 利用する能力 (Act) を組み合わせるフレームワーク。 プロセス (Thought-Action-Observationループ) (p.37): 1. Thought (思考): 問題を分析し、次にとるべき行動を計画。 2. Action (行動): 計画に基づいて外部ツールを実行。 3. Observation (観察): 外部ツールから得られた結果を認識。 4. 結果をもとに、再び Thought に戻り、繰り返す。 効果: LLM単体では持っていない最新情報や計算能力などを活用できる(エージェント 的動作) 。 35

Slide 36

Slide 36 text

ReActの例: Metallicaメンバーの子供の数 タスク (p.38): Metallica のバンドメンバーには子供が何人いますか? ReActの実行プロセス (概要) (p.39): 1. Thought: Metallicaのメンバーを調べる。 2. Action: 検索「Metallica メンバー」 3. Observation: 4人のメンバー名がわかる。 4. Thought: 各メンバーの子供の数を調べる。 5. Action: 検索「ジェームズ・ヘットフィールド 子供 何人」 6. Observation: 3人。 7. ...(各メンバーについて繰り返し)... 8. Thought: 全員の子供の数を合計する。 9. Final Answer: 10人。 36

Slide 37

Slide 37 text

⑨ 自動プロンプトエンジニアリング (APE) 考え方 (p.40): 良いプロンプトを人間が試行錯誤する代わりに、LLM自身に良いプロン プトを生成・評価させるアプローチ。 プロセス (例) (p.40): 1. 目的定義: タスクと評価指標を決める。 2. 候補生成: LLMにプロンプト候補を複数生成させる。 3. 評価: 生成されたプロンプト候補をスコアリングする。 4. 選択: 最もスコアの高かったプロンプトを採用、または改良して繰り返す。 効果: 人間の手間を省き、時には人間が思いつかない効果的なプロンプトを発見できる 可能性。 37

Slide 38

Slide 38 text

APEの例: Tシャツ注文の言い換え 目的 (p.41): チャットボット学習用に「MetallicaのTシャツ Sサイズ 1枚」という注文 の、様々な言い換え表現を生成したい。 候補生成プロンプト (p.41): バンドグッズ T シャツのウェブショップがあり、チャットボットをトレーニングするために、さまざまな注文方法が必要です:「Metallica の T シャツ S サイズ 1 枚」。 意味は同じですが、意味を維持したまま、10 個のバリアントを生成してください。 LLMによる出力 (候補) (p.41): 1. Metallica の T シャツを S サイズで購入したいのですが。 2. S サイズの Metallica の T シャツを注文できますか? 3. ... (計10個) 次のステップ: これらの候補を評価し、学習データとして利用。 38

Slide 39

Slide 39 text

V. コード生成のためのプロンプト 39

Slide 40

Slide 40 text

コードに関するプロンプト GeminiのようなLLMは、テキストだけでなくプログラミングコードの生成、説明、翻 訳、デバッグなども得意。(p.42) 開発プロセスを効率化する強力なツールとなり得る。 主な用途 (p.42): コードの記述 (新規作成) コードの説明 (既存コードの理解) コードの翻訳 (言語間の移植) コードのデバッグ・レビュー (エラー発見、改善提案) ツール: Vertex AI Studioのような環境で、温度などを調整しながら試すのが効果的。 (p.42) 40

Slide 41

Slide 41 text

① コード記述の例: ファイル名一括変更 タスク (p.43): フォルダ内の全ファイル名の先頭に「draft_」を付けるBashスクリプト を作成したい。 プロンプト (p.43): Bash でコードスニペットを記述します。これはフォルダ名を尋ねます。 次に、フォルダの内容を取得し、内部のすべてのファイルの名前を、ファイル名の前に「draft」という名前を付けて変更します。 出力例 (Bashコード) (p.43): #!/bin/bash echo "Enter the folder name: " read folder_name # ... (フォルダ存在チェック) ... files=( "$folder_name"/* ) for file in "${files[@]}"; do new_file_name="draft_$(basename "$file")" mv "$file" "$folder_name/$new_file_name" 41

Slide 42

Slide 42 text

② コード説明の例 タスク (p.44): 他の人が書いたコードが何をしているか理解したい。 プロンプト (p.45): 以下の Bash コードを説明してください。 [説明してほしいコードを貼り付け] 出力例 (概要) (p.45-46): 1. フォルダ名を入力させる。 2. フォルダ存在チェック。 3. ファイル一覧取得。 4. 各ファイルをループ処理: 新ファイル名生成 (draft_元の名前)。 ファイル名変更 (mv)。 42

Slide 43

Slide 43 text

③ コード翻訳の例: BashからPythonへ タスク (p.46): 前のBashスクリプトをPythonスクリプトに変換したい。 プロンプト (p.47): 以下の Bash コードを Python スニペットに翻訳してください。[翻訳したいBashコードを貼り付け] 出力例 (Pythonコード) (p.47-48): folder_name = input("フォルダ名を入力してください: ") # ... (フォルダ存在チェック: os.path.isdir) ... files = os.listdir(folder_name) for file in files: new_file_name = f"draft_{file}" shutil.move(os.path.join(folder_name, file), os.path.join(folder_name, new_file_name)) print("ファイルは正常に名前変更されました。") ポイント: 言語間の移植作業を効率化。細かな挙動の違いに注意。 43

Slide 44

Slide 44 text

④ コードデバッグ・レビューの例 タスク (p.48): Pythonコードを実行したらエラーが出た。原因特定と修正、改善点を知 りたい。 プロンプト (p.50): 以下の Python コードでエラーが発生します。[エラーメッセージ] 何が間違っているかをデバッグし、コードを改善する方法を説明してください。[Pythonコードを貼り付け] LLMの応答例 (概要) (p.51-53): デバッグ: toUpperCase は未定義。 .upper() を使う。修正コード提示。 改善提案: 拡張子保持、スペース対応、f文字列、エラー処理。 改善後のコード提示。 ポイント: エラー特定だけでなく、コード全体の品質向上にも役立つ。 44

Slide 45

Slide 45 text

VI. ベストプラクティスとまとめ 45

Slide 46

Slide 46 text

プロンプト作成の心構え 試行錯誤が基本 (p.54): 完璧なプロンプトは最初からは難しい。 反復プロセス が重要。 実験の場 (p.54): Vertex AI Studio などが便利。 このセクションでは、より良いプロンプトを作るためのヒント(ベストプラクティ ス) を紹介。 46

Slide 47

Slide 47 text

ベストプラクティス①: 例を提供する 最も重要 (p.54): プロンプト内に例(ワンショット/フューショット) を含めることは 非常に効果的。 理由: モデルにとって強力な学習ツール。 期待する出力形式、スタイル、精度を具体的に示せる。 モデルに「ゴール」を示す。 特に有効なケース: 特定のフォーマット、複雑な指示、ニュアンスの伝達。 (スライド15-18の内容を再確認) 47

Slide 48

Slide 48 text

ベストプラクティス②: シンプルに設計する 原則 (p.55): プロンプトは明確・簡潔・理解しやすいものにする。 目安: 自分が読んで混乱するなら、モデルも混乱する。 避けるべきこと: 複雑すぎる言葉、不要な情報、曖昧な表現。 コツ:アクション動詞を使う(生成する, 要約する等) 。1プロンプト1タスク。 例 (Before/After) (p.55): 前: NYで3歳児2人と行く良い場所ない? 後:観光客向け旅行ガイドとして行動し、3歳児とNYマンハッタンで訪れるべき場 所を説明して。 48

Slide 49

Slide 49 text

ベストプラクティス③: 出力について具体的に 原則 (p.56): どのような出力を期待しているかを、できるだけ具体的に指示する。 なぜ? 抽象的な指示ではモデルが迷う。 具体性の要素: 内容、形式、長さ、スタイル。 例 (悪い例/良い例) (p.56): 悪い: ゲーム機ブログ記事生成。 良い:トップ 5 ゲーム機について3 段落、有益・魅力的・会話的なブログ記事生 成。 49

Slide 50

Slide 50 text

ベストプラクティス④: 指示 > 制約 指示 (Instruction):「何をすべきか」 (例: 「〇〇を含めて」 ) (p.56) 制約 (Constraint):「何をしてはいけないか」 (例: 「〇〇は含めないで」 ) (p.56) 推奨 (p.57): 可能な限り、肯定的な指示を使うことを優先する。 理由: 「〜するな」より「〜しろ」の方が明確で、モデルも理解しやすい。 制約が有効な場合: 安全性確保、厳密なフォーマットなど。(p.57) 例 (悪い例/良い例) (p.57): 悪い: ゲーム名をリストしないで。 良い: コンソール、会社、年、売上のみ議論して。 50

Slide 51

Slide 51 text

ベストプラクティス⑤: その他重要事項 トークン長制御 (p.58): プロンプト内でも要求できる(例: 「ツイート長で」 ) 。 変数を使う (p.58): {変数名} で動的に変更、再利用性向上。 実験する (p.59): 形式、言葉遣い、手法などを色々試す。 フューショットのクラス混合 (p.59): 分類タスクでは例のクラスを混ぜる。(再掲) モデル更新に適応 (p.60): 新バージョンを試し、プロンプトを調整。 出力形式の実験 (p.60): JSON等の構造化データ利用を検討。 51

Slide 52

Slide 52 text

ベストプラクティス⑥: 構造化データ(JSON)活用 出力にJSONを使うメリット (再掲) (p.60-61): 一貫した形式, 必要なデータに集中, 幻覚抑制, 関係性表現, データ型指定, ソート可 能 JSON修復 (p.61): json-repair ライブラリなどで、途切れたJSONを修復できる可能 性。 入力にJSONスキーマを使う (p.62-63): 入力データの構造をスキーマで定義し、JSONデータと共に与える。 LLMが入力情報を正確に理解し、誤解を防ぐ。 52

Slide 53

Slide 53 text

ベストプラクティス⑦: 共同実験と文書化 共同実験 (p.63): 複数人で試すと多様なアイデアが見つかる。 文書化の重要性 (p.64-65): 試したプロンプト、設定、結果を記録する! なぜ? 後で学べる、再テストしやすい、原因究明、忘却防止。 記録すべき項目 (p.66): プロンプト名/版, 目的, モデル, 設定(温度等), プロンプト全文, 出 力結果, 評価(OK/NG), 考察など。 53

Slide 54

Slide 54 text

文書化テンプレート例 目的: プロンプト試行の記録を一元管理 (p.66 表21参考) 項目例: 名前: product_description_v3 目的: eコマース向け商品説明文生成 モデル: gemini-1.5-pro-latest 温度: 0.5 | Token: 512 | Top-K: 40 | Top-P: 0.95 プロンプト: (全文) 出力: (実際の出力) 評価: OK / NG / 微妙 考察: (なぜそうなったか、改善点など) (リンク): (Vertex AI Studio等へのリンク) 54

Slide 55

Slide 55 text

まとめ: 学んだことの振り返り プロンプトエンジニアリング (p.66): LLMから望む出力を引き出す指示設計術。 LLM設定 (p.8-12): 温度, Top-K/P, トークン長で出力を調整。 基本手法 (p.13-24): ゼロ/フューショット, システム/コンテキスト/役割。 高度な手法 (p.25-41): ステップバック, CoT, セルフコンシステンシー, ToT, ReAct, APE。 コードプロンプト (p.42-53): コード生成、説明、翻訳、デバッグ。 ベストプラクティス (p.54-65): 例示, シンプルさ, 具体性, 指示優先, 構造化データ, 実験, 文書化。 重要なこと: プロンプトエンジニアリングは反復的なプロセス。試行錯誤を楽しもう! 55

Slide 56

Slide 56 text

次のステップ - さらに学ぶために 実践あるのみ!: 実際に色々なLLMでプロンプトを試す。 Vertex AI Studio などのプレイグラウンドを活用。 情報収集: 最新の論文や技術ブログを読む。 オンラインコミュニティに参加する。 応用: 自分の仕事や趣味に応用してみる。 56

Slide 57

Slide 57 text

ご清聴ありがとうございました Q&A 57