LLMのプロンプトエンジニアリング ― GitHub Copilotを生んだ開発者が教える生成AIアプリケーション開発 読書メモ

📒

June 28, 2025

prompt-engineering

llm

ai

chatgpt

claude

reading-notes

はじめに

プライベートでLLMを使って文章を洗練させる機会が多くなり、そもそも今後のLLMの重要性はおさまるどころか世界を獲る勢いであり、一旦効率的なプロンプトについて学んでおいたほうがいいと思ったので『LLMのプロンプトエンジニアリング ―GitHub Copilotを生んだ開発者が教える生成AIアプリケーション』を買いました。

この本の良さはなんといっても著者が実際に GitHub Copilot の生みの親という権威性!!内容に説得力があります。

また、歴史の外観やLLMの簡単な仕組みみたいな抽象的なことから、超実践的なテクニックまで例をつけて紹介してくれています。

内容は大変勉強になりましたし、今後活かせそうだなと思える技術に溢れていました。

一方で、AI企業各社が出しているプロンプトガイドライン1にしか書かれていない内容もあったりしたので、本書だけでなく自分がよく使用しているLLMモデルに関するガイダンスも読んでおいたほうが良いと思いました。

とはいえ、本書単体でも学ぶことが多かったので一読されるのはとてもおすすめです!

また本書使ったAI作業についての振り返りなどができたらいいなーと思っています。

以下は読書メモです。

Chapter 1: プロンプトエンジニアリングの世界

LLMの本質

プロンプトエンジニアリングの洗練度レベル

  1. チャットアプリケーション:会話スレッドをChatML形式のMarkdownでラップ
  2. モデル入力の修正・拡張:音声活用、別タブ情報参照、ステートフルなやり取り
  3. API連携:実世界とのつながり、情報読み取り、インターネットアセット作成・変更
  4. エージェント機能:広範な目標に対して独自判断を下すLLM

Chapter 2: LLMを理解する

基本的な考え方

ハルシネーション対策

トークン化の理解

3つの重要な違い

  1. 決定論的トークナイザーghostg oh stに分解。誤字を簡単に見分けられるが、LLMは誤字に強い耐性を持つ
  2. 文字の逐次確認不可:文法的処理(反転など)が困難。対策は「大量リスト生成→ユーザーが絞り込み」
  3. 大文字小文字の扱いgone(1トークン)vs GONE(「G」「ONE」の2トークン)

自己回帰の特性と限界

Temperature制御

Chapter 3: チャット形式への移行

アライメントの重要性

アライメントのプロセス

  1. SFT(教師ありファインチューニング):数万件の人手による模範対話データでトレーニング
  2. 報酬モデル:品質を表す数値スコアを出力、人間の主観的「よさ」を反映
  3. PPO強化学習:報酬追求の「抜け道」を防ぐ特殊アルゴリズム

ChatML(Chat Markup Language)

Chapter 4: LLMアプリケーションの設計

プロンプトが満たすべき4つの水準

1. 赤ずきんの法則

2. 必要情報の完全包含

3. 有用な補完生成の条件づけ

4. 確実な停止機能

重要な概念と手法

RAG(検索拡張生成)

思考の連鎖(CoT)プロンプティング

適切な文体の使用

Chapter 5: プロンプトのコンテンツ

静的コンテンツ vs 動的コンテンツ

静的コンテンツ

動的コンテンツ

明確化の重要性

Few-shotプロンプティング

3つの欠点

  1. コンテキストウィンドウ超過:例の過多による制限突破
  2. アンカリングバイアス:例示情報への過度な偏り
  3. 誤ったパターン示唆:不適切な例による誤学習

動的コンテンツの特徴

チェーホフの銃の誤謬

階層的要約

Chapter 6: プロンプトの組み立て

基本原則

コンテキスト内学習の特性

対策

推奨ドキュメント形式

スニペットフォーマット化のポイント

プロンプト要素間の関係

Chapter 7: モデルの制御

補完構造の制御

序文の3つの種類

  1. 構造的ボイラープレート:プロンプトと補完の間のテキスト
  2. 推論:思考の連鎖(CoT)など、モデルが考えるプロセス
  3. 無意味な要素:RLHFモデルが生成する丁寧だが冗長なテキスト

認識可能な開始と終了

logprob(対数確率)の詳細活用

3つの主要用途

  1. 補完品質評価

    • 各トークン選択の信頼度を数値化
    • テキスト全体のlogprob合計で「正しさ」の信頼度推定
    • 自信がない部分の特定→より良いLLMや追加コンテキストの判断材料
  2. 分類タスクへの応用

    • LLMを分類に利用
    • logprobで分類確実性のキャリブレーション(調整)
  3. プロンプト重要ポイントの理解

    • echo=trueパラメータでプロンプトのlogprob取得
    • タイプミスや予期せぬ部分、情報密度の高い部分を検出

モデル選択の基準(重要度順)

  1. 知能:複雑推論や正確回答の要件
  2. スピード:待ち時間の許容度
  3. コスト:推論実行費用
  4. 使いやすさ:デプロイ、管理の容易さ
  5. 機能:チャット、ツール利用、logprob、マルチモダリティサポート
  6. 特別要件:非商用、オープンソース、データ所在地、ロギング等

ファインチューニングの詳細

2つの主要アプローチ

  1. 完全ファインチューニング/継続的事前トレーニング

    • 全パラメータ調整
    • 新しい事実や領域の学習が可能
  2. LoRA(低ランク適応)

    • パラメータ効率の良いファインチューニング
    • 既存テクニックの使い方を教えるのに適している
    • より高速で効率的
    • 特定スタイルや専門分野特化LLM育成に最適

重要な注意点

Chapter 8: 会話型エージェント

ツールの概念と実装

ツールの定義方法

ツール設計のベストプラクティス

危険なツールの安全対策

高度な推論テクニック

CoT(思考の連鎖)の発展形

ReAct(推論とアクション)

ReActの5つの思考ステップ
  1. タスク目標分解、アクションプラン作成
  2. 常識知識の注入
  3. 観察からの有用詳細抽出
  4. 進捗追跡、アクションプラン推進
  5. 例外処理、アクション方針調整

ReAct超越のアプローチ

会話型エージェントの構造

Chapter 9: LLMワークフロー

基本コンセプト

ワークフロー構築の5ステップ

1. 目標定義

2. タスク指定

3. タスク実装

4. ワークフロー実装

5. ワークフロー最適化

高度なLLMワークフロー

Chapter 10: LLMアプリケーションの評価

評価の2つのカテゴリ

オフライン評価

目的:新機能をユーザー提供「前」のテスト

サンプルスイート
サンプル発見方法
  1. 既存例マイニング:人間が解決した過去記録
  2. アプリケーション生成:ユーザー使用で蓄積されるデータ
  3. 合成・創作:LLMに例を生成させる
解決策評価の3アプローチ
  1. 判断基準(Gold Standard)との一致

    • 既知正解との比較
    • 部分一致メトリクス:重要側面のみ比較
  2. 機能テスト

    • 補完が「機能する」か確認(コードコンパイル、JSONパース等)
  3. LLMアセスメント

    • LLM自体に品質評価させる
    • 重要注意第三者採点と思わせるプロンプト設計
    • SOMAアセスメント
      • Specific questions(具体的質問)
      • Ordinal scale(順序尺度)
      • Multiple aspects(複数側面)
      • Anchoring(アンカリング)

オンライン評価

目的:実ユーザー利用状況からのフィードバック取得

A/Bテスト
5種類のメトリクス
  1. 直接フィードバック:Good/Badボタン、アンケート
  2. 機能の正確性:試行したことの成功度
  3. ユーザー受け入れ:提案への従順度(クリック率等)
    • GitHub Copilot例:コード補完「受け入れ率」が生産性向上と強相関
  4. 達成された影響:提案の最終的利点(マーケティングメール→販売等)
  5. 付随的メトリクス:待ち時間、会談時間、エラー率等

評価の重要性

Chapter 11: 未来を見据えて

歴史的視点

本書の核心となる教訓

1. LLMの本質理解

2. LLMへの共感と理解

Footnotes

  1. 例えばAnthropic の Claudeならこのあたり:Claude 4 プロンプトエンジニアリングのベストプラクティス - Anthropic