『LLMのプロンプトエンジニアリング』を読んだ

最近日本語翻訳が発売された書籍『LLMのプロンプトエンジニアリング ―GitHub Copilotを生んだ開発者が教える生成AIアプリケーション開発』を読みました。その感想です。

LLMのプロンプトエンジニアリング
LLMのポテンシャルを最大限活かし、期待通りの精度の高いアウトプットを引き出すためには、LLMの能力や特性を正しく評価、把握し、綿密な設計に基づいたプロンプトを組み立てることが必要です。本書では、まずLLMを理解することから始め、その上で、プロンプトにはどんなことを組み込み、どのような構造にすべきか、本来の意味での「プロンプトエンジニアリング」を行う方法を説明しています。著者たちはGitHub Copilotの開発者であり、その実装過程で得られた貴重な知見や、評価手法、設計上の判断など、通常は表に出てこない開発の裏側も詳しく解説されています。AIアプリケーション開発の実際を知りたい開発者はもちろん、生成AIの可能性と限界を理解したいユーザーにとっても、示唆に富む内容となっています。

どんな人におすすめか

本書は、AIエージェントのフレームワークやライブラリを自作したい、システムの内部構造を詳しく知りたいという人におすすめします。一方で、既存のフレームワークを使ってサービス開発を目指す人には他に適した書籍があるでしょう。

前提知識

事前知識については、私はWeb系エンジニアで機械学習の専門知識はないが、TransformerやGPTの仕組みを大まかに理解しており、OpenAIやClaude、Geminiといった主要なモデルのAPIを用いて生成AI(LLM)アプリケーションを開発できます。

本書は言語モデルそのものの詳細な内部構造には深く踏み込まず、「こういう経緯でTransformerモデルができました」という簡単な説明から解説が始まります。

『Ⅰ部 基礎』はLLMの歴史から

「Ⅰ部 基礎」はLLMの歴史から、LLMアプリケーションとはなんなのかという原理・原則の話です。テキスト補完モデルの生成対象が、会話形式の文書を生成するチャットモデルへと変化しました。次に、チャットモデルが生成するテキストをRLHF(人間のフィードバックによる強化学習)とChatML形式でマークアップして、我々が知るChatGPTのような人間相手に会話できるLLMアプリケーションに生まれ変わります。

技術的には、この会話形式の文書の制約中で現在のエージェントのツール呼び出しなど、すべてのワークフローが実現されていることが分かると、こんな柔軟な仕組みをよく考えたものだと感心します。

LLM とトレーニングデータの関係

本章では「LLMはトレーニング中に見たテキストパターンを入力テキストに応じて再現するもの」という原則が繰り返されます。ここから、使っているモデルがどのようなデータセットで学習されているかを知ることが、LLMを使いこなす近道なのではないかと思いました。

しかし商用モデルはブラックボックスなので中身を知るにはベンダー(プロバイダー)が公開しているベストプラクティスなどのドキュメントを手掛かりにするしかありません。たとえば、私はモデルのアップデートがあった直後には、以下のような提供元サイトを真っ先に確認するようにしています。

OpenAI Cookbook
Open-source examples and guides for building with the OpenAI API. Browse a collection of snippets, advanced techniques and walkthroughs. Share your own examples and guides.
Building with Claude - Anthropic
Claude is a family of [highly performant and intelligent AI models](/en/docs/about-claude/models) built by Anthropic. While Claude is powerful and extensible, it’s also the most trustworthy and reliable AI available. It follows critical protocols, makes fewer mistakes, and is resistant to jailbreaks—allowing [enterprise customers](https://www.anthropic.com/customers) to build the safest AI-powered applications at scale.
GitHub Copilot documentation - GitHub Docs
You can use GitHub Copilot to enhance your productivity and assist as you work on code.

「『Ⅱ部 中心的なテクニック』

「Ⅱ部 中心的なテクニック」はプロンプトエンジニアリングという言葉を聞いた時に思い浮かべそうなテクニックが豊富に解説されているパート。たとえば「回答のためのコンテキストを入れる」「書式をXMLやMarkdownで表現」や「logprob値を取ってモデルの確信度を評価する」など。

前パートの感想でも触れましたが、過渡期なのでこのあたりのベンダーがAPIやSDKで提供する機能を真っ先に使いたい場合にマルチプロバイダ系のラッパーフレームワークを使っていると対応できなくて、やはり直接提供元のモデルに近いツールを使うのがいいなと最近は思っています。最近では、Claude 3.7でExtended Thinking(<thinking />)用の独自パラメータが追加された際に、もどかしさを感じました。

Building with extended thinking - Anthropic

コード生成関連でいうとOpenAI系(GitHub Copilot)とAnthropic系のプロンプトにおけるDiff表現がことなります。GPT-4.1はV4A形式でトレーニングされているのでCopilot Agentがそれに最適化されているとClaudeやGeminiと差が出そうですし。

GPT-4.1 Prompting Guide | OpenAI Cookbook
Open-source examples and guides for building with the OpenAI API. Browse a collection of snippets, advanced techniques and walkthroughs. Share your own examples and guides.

またClineで機能するClaude系のプロンプトはプレーンテキストにXMLで表現したパラメータを埋め込み、レスポンスでパースします。おそらくGeminiもこの方式に適合しているはずです。

これはOpenAIがSDKで想定しているAPIパラメータの受け渡し方式とは異なります。OpenAIのモデルが正規のAPIパラメータ経由での入力に最適化されている場合は、結果が変わってくるでしょう。このような調整が必要かどうかは、モデル開発元が提供するツールを直接使ってみないと分からないのです。

プロンプトエンジニアリングについて

そしてプロンプトエンジニアリングについての認識を改めました。私はこの言葉は「チャットボットに指示を出す文章術」程度の理解だったが、本書の定義は異なりました。

本書のプロンプトエンジニアリングは「LLMの出力をユーザーの問題解決に適合させる技術」という部分にフォーカスしています。そのための手段としてプロンプト(入力トークン)が使われると説明されていました。

先の原則のとおり、モデルのトレーニング過程を知らずして精度向上は難しいです。プロンプトエンジニアリングの目的は、ユーザーの入力をモデルが機能するトレーニングデータに沿ったデータに変換することです(単にデータエンジニアリングという名前でもよいと思いましたが)。

また、LLM自身が学習データの特徴をよく把握しているのを駆使すると、OpenAIが提唱するmeta promptingのように、LLM自身にLLMに与えるプロンプトを生成させるアプローチも存在することを知りました。

Enhance your prompts with meta prompting | OpenAI Cookbook
Open-source examples and guides for building with the OpenAI API. Browse a collection of snippets, advanced techniques and walkthroughs. Share your own examples and guides.

「『Ⅲ部 プロンプト作成のエキスパート』

「Ⅲ部 プロンプト作成のエキスパート」は実践編に立ち入りコード例が出てくる楽しいパートです。会話型エージェントやLLMワークフローなど読者が想像するLLMアプリケーションっぽいものが登場します。LLMにスキーマを渡して呼び出し方法を推論してもらうツールコーリングもでてきますし、会話履歴バッファ管理するコードなども登場します。実際、このようなアプリケーションを開発する時はAI SDKMastraなどのサードパーティを駆使することになりそうですが。

LLMワークフローとエージェント設計

しかし一転「9章 LLMワークフロー」は理論的な話が多く興味深かったです。この章は「AIエージェント」と聞いた時に想像するシステムやアーキテクチャの話になります。

本書では「シンプルなワークフローからはじめよう」という標語のもと大きなタスクをそれぞれ小さなタスクに分解して、それぞれをモジュールとして実装すると良いと解きます。タスクはLLMで制御せずとも順番に決まった順番で実行すればよく、内部実装もLLMを使う使わないをそれぞれ選択してまずはシンプルさを追求して自動化せよという戦略は私の好みとも合致しました。その後の発展的な話題として、LLMのエージェント自身にタスクのオーケストレーションをさせ、より複雑な問題に向かいます。

この説明の中で個人的に興味深かったのは「ワークフローを制御するためにユーザーに会話型エージェントを提供する」という部分です。チャットアシスタントに指示を出してツールを呼び出し、会話で結果を見るという従来のシステムとは出発点が異なり、主従関係が逆だという感想を持ちました。

2025年5月時点の関連アップデート

本書が刊行された2024年11月から2025年5月にかけて、LLM業界であった関連する重要なアップデートを見てみます。

Reasoning/Extended Thinking 系モデルの登場

まずReasoning / Extended Thinking系モデルの登場 (例: 2024年12月5日 OpenAI o1 シリーズ)がありました。これらではプロンプト内で明示的に「ステップバイステップで考えてください」といったCoTを誘導する指示を記載する必要が薄れていることが知られています。

「ステップバイステップで考える」ようにモデルに指示するなど、いくつかのプロンプトエンジニアリングテクニックは、パフォーマンスを向上させない可能性があり(そして、時には阻害する可能性があります)。
https://platform.openai.com/docs/guides/reasoning-best-practices#how-to-prompt-reasoning-models-effectively
https://docs.anthropic.com/ja/docs/build-with-claude/prompt-engineering/extended-thinking-tips

コンテキストウィンドウの拡大

次にGemini 筆頭のロングコンテキストウィンドウ (例: Gemini Proの200万トークン)サポートがあります。本書時点では長大なコンテキストを使用する際のベストプラクティスが多数ありましたが、場合によってはすべてをコンテキストに収めて動作させることが可能になりました。

Long context | Gemini API | Google AI for Developers
Learn about how to get started building with long context (1 million context window) on Gemini 2.0 Flash

エージェント向け API の進化

またAIエージェント・ワークフローに関しても2025年以降のMCPサーバーの動向や、GPT-4.1などのモデルはAgentic workflows向けのトレーニングを重ねておりツール呼び出し性能の向上がみられます。

GPT-4.1は、エージェント的なワークフローを構築するのに最適なモデルです。モデルの訓練においては、多様なエージェント的問題解決の軌跡を提供することに重点を置きました。また、このモデルに対する私たちのエージェントハーネスは、SWE-bench Verifiedにおいて非推論モデルとしては最先端の性能を達成しており、55%の問題を解決しています。
https://cookbook.openai.com/examples/gpt4-1_prompting_guide

OpenAIのResponses APIは、特にo3やo4-miniといったReasoningモデルにおいて、リクエスト間でコンテキストを保持することに向いています。Chat Completion APIがステートレスであるので発展的なアップデートです。AIエージェント向けのAPIで活用することになりそうなので本書Ⅲ部に関連します。

拡散テキストモデル

Google DeepMindから「拡散テキストモデル Gemini Diffusion」が発表されました。本書の前提はTransformerモデルなので自己回帰的に生成しない拡散モデルは根本的にプロンプトエンジニアリングが変化するのではないかと考えています。

Gemini Diffusion
Gemini Diffusion is our state-of-the-art research model exploring what diffusion means for language – and text generation.

しかし本書で解いているのはなぜそのプロンプトがLLMで有効なのか? という点や、アプリケーションレイヤーの問題をモデルレイヤーに変換するためのステップや考え方の部分にあると思うので、無駄にはならないでしょう。

おわりに

『LLMのプロンプトエンジニアリング』では、Transformerベースの言語モデルが現在のAIエージェントまでどのように進化したのか、というのをモデルの外部から入出力を行い監査する第三者からの視点で学べる良書でした。私はエージェント分野のツールを作ったり調べたりするのが好きなので今後その活動に活かして行けたら良いと思っています。AIエージェント開発をしたい同士の皆さんはぜひ本書をお手に取ってみてください。

Amazon.co.jp: LLMのプロンプトエンジニアリング ―GitHub Copilotを生んだ開発者が教える生成AIアプリケーション開発 : John Berryman, Albert Ziegler, 服部 佑樹(翻訳), 佐藤 直生(翻訳): 本
Amazon.co.jp: LLMのプロンプトエンジニアリング ―GitHub Copilotを生んだ開発者が教える生成AIアプリケーション開発 : John Berryman, Albert Ziegler, 服部 佑樹(翻訳), 佐藤 直生(翻訳): 本

Subscribe to laiso

Sign up now to get access to the library of members-only issues.
Jamie Larson
Subscribe