「LLMは単なるテキスト補完エンジン」- プロンプトエンジニアリングの本質を理解する

目次

はじめに

LLMアプリケーション開発で必要な知識とは何でしょうか。O'Reillyの「LLMのプロンプトエンジニアリング」は、LLMの本質を「ドキュメント補完エンジン」として捉え、実践的なアプリケーション構築まで解説しています。

開発業務への生成AI適用や、生成AI活用アプリケーションの提案材料を探していたところ、本書は期待以上の収穫をもたらしてくれました。LLMの本質的な理解と実践的な設計手法の両方を学べた点が特に有益でした。

LLMの本質を理解する

本書で最も印象的だったのは、LLMを「統計的に最も自然な文書の続きを生成するエンジン」として捉える視点です。

あるプロンプトがどんな補完を生み出すか知りたい場合、「合理的な人間ならどう応答するか」を想像するのではなく、「このプロンプトではじまるドキュメントは、どのような流れで続く可能性があるか」を考えるべきなのです。

——p.20 2章 LLMを理解する

この理解により、LLMの振る舞いを予測し、効果的に活用できるようになります。人間の思考とは根本的に異なる処理をしているという認識が、適切な活用方法につながります。

ハルシネーションは「検証するしかない」

ハルシネーションの対処法も実用的でした。

「モデルの視点ではほかの補完と区別がつかないので、『勝手に作り話しないで』は意味がない」という指摘は重要です。対策は「検証する」だけ。シンプルですが、これが現実的なアプローチです。

トークナイザーの重要性

人間は文字から単語への変換を曖昧に行えますが、LLMは決定論的なトークナイザーを使います。この違いにより、LLMは大文字小文字の変換や単語内の文字操作が苦手になります。仕組みを理解することで、LLMの限界も見えてきます。

実践的な設計手法

プロンプトの構造設計

「無関心の谷」という概念は、実務で活用できる知見です。プロンプトの中間部に配置された情報は活用されにくいという特性を理解し、重要な情報を冒頭と末尾に配置します。

「赤ずきんの原則」も印象的でした。トレーニングデータから外れないようにすることの重要性を、童話になぞらえて説明しています。プロンプトをトレーニングセット中のドキュメントに近い形式にすることで、結果が予測しやすくなります。

Markdownでプロンプトを書く理由

本書では、プロンプトをMarkdownで書くことを推奨しています。その理由は:

  1. インターネット上に多く存在し、LLMがよく知っている
  2. インデントが問題にならない
  3. 階層構造を表現でき、プロンプトを明確なセクションに分けやすい
  4. ハイパーリンク機能でモデルがリンクを含めた出力をしやすくなる

これらは実践的で納得感のある理由です。

会話型エージェントからワークフローへ

第9章で紹介されるShopify店舗の例は秀逸です。一見、会話型エージェントで実現できそうなタスクも、実際には複雑すぎて適切に処理できません。

本書は「基本的なLLMワークフローで済むならば、常にそうする」というアドバイスを提供しています。高度な柔軟性が必要な場合のみ「荒野に足を踏み入れる」という表現も的確です。

複雑なタスクを分解して専門化したワークフローを構築する。これは、優れたソフトウェア設計にも通じる考え方です。

GitHub Copilotから学ぶ評価の重要性

「GitHub Copilotがやった絶対に正しかったことの1つは、GitHub Copilotのコードベースを『評価』のコードから書き始めたこと」と本書では指摘されています。

この事実は、LLMアプリケーション開発における評価の重要性を物語っています。変更が改善かリグレッションかを判断する仕組みがなければ、品質の向上は望めません。

また、評価の具体的な方法は、LLMアプリケーション開発に限らず、業務でのプロンプト有効性測定にも活用できる考え方です。

SOMAアセスメント

本書で紹介されるSOMAアセスメント(明確な質問、順序尺度の回答、複数の側面のカバー)は、LLMの出力を評価する実践的な手法です。特に「LLMにLLM自身の成果物を採点させていると思わせない」という注意点は、見落としがちですが重要です。

本書から得た最大の学び

LLMアプリケーションは「変換レイヤー」

本書では、LLMアプリケーションを「変換レイヤー」として捉えています。実世界のニーズをLLMが処理できるテキストに変換し、LLMが提供するデータを実世界のニーズに対応する情報やアクションに変換する仕組みです。

この視点は、アプリケーション設計の指針となります。プロンプトエンジニアリングは、この変換の設計そのものです。

プロンプトエンジニアリングは「脚本作成」

ユーザーから見えない裏側で、どのような「脚本」を書くか。コンテキストの検索、スニペット化、優先順位付け、そしてプロンプトの組み立て。これらすべてが、優れたLLMアプリケーションを支えています。

ドキュメント補完だけで「ほぼなんでもできる」

「ドキュメント補完しかできないが、それだけでほぼなんでもできる可能性を秘めている」

この逆説的な表現に、LLMの可能性と限界が凝縮されています。シンプルな能力の組み合わせで複雑なタスクを実現する。これは、優れたソフトウェア設計の基本原則にも通じる思想です。

まとめ

本書は、LLMの可能性に浮かれることなく、その本質と限界を理解した上で、実践的なアプリケーションを構築するための確かな指針を示してくれます。

特に印象的だったのは、理論と実践のバランスの良さです。LLMの本質的な理解から始まり、具体的な設計手法、評価方法まで、体系的に学べる構成になっています。

本書で紹介される設計思想や実践的なアプローチは、既存の開発知識と組み合わせることで、より強力なツールとなります。

LLMアプリケーション開発に携わるエンジニアはもちろん、業務でLLMを活用するすべての方に本書を推薦します。アプリケーション開発に携わっていなくても、LLMの本質を理解することで、日常業務でのLLM活用が劇的に改善されるはずです。

本書の主な教訓を、著者は次のように要約しています:

本書の主な教訓を要約すると、以下の2つになります。

  1. LLMは学習時に見たテキストを模倣する、単なる補完エンジンにすぎません。
  2. LLMに共感し、その思考方法を理解する必要があります。

——p.246 11章 未来を見据えて

この2つの教訓こそが、LLMを効果的に活用するための出発点です。「LLMは単なるテキスト補完エンジン」という理解から始まる、実践的なプロンプトエンジニアリングの世界がそこにあります。