背景
普段、仕事・プライベートの双方でAIなしでは生きられない世界になってきています。
個人的にはプログラミングだったり、プログラミングのための調査だったり、
役所の手続きだったりダイビングで撮影した写真の整理と投稿だったり
生活に関わるあれやこれやでAIなしだと不便でしょうがないと感じるようになりました。
この記事を書く目的
AIを使っていて思うのは結局自分が分かってないとアウトプットを一定に保つことができないということで、自身の理解を深めるという目的でこの記事を書きます。良い本だと思うので気になった方は是非書籍を購入して読んでみてください。
この記事はLLMのプロンプトエンジニアリングを読んで自分が理解した内容をかいつまんで書いた記事になります。
LLMとは
- 文字列を入力すると統計的に最もありそうな文字列を返す補完エンジン
- 入力をプロンプト、出力を補完またはレスポンスと呼ぶ
LLMと人間の違い
- LLMは決定論的なトークナイザーを使用する
- LLMはトークンという複数文字の塊で読んでいる
- 「トークナイザー」にテキストを入力として渡し、トークン列に変換している
- トークン列は決定論的である
- 人間は単語単位にまとめて読んでいる。目にした文字列と似ている語を推測して読んでいる
- LLMは文字を1つずつゆっくり確認できない
- 人間は文章を読む時、一文字一文字ゆっくり確認することができる
- LLMは単語内の文字を逆転させるような作業が苦手
- LLMは文字を人間とは異なる見方をしてる
- 人間はASCIIで表現された文字図形も視覚的に理解できるがLLMはできない
- LLMは複数のトークンから統計的に最も可能性の高い次の1つのトークンを生成する
- 1つずつトークン予測を行い、その時の予測が前の予測に依存する、自己回帰という仕組みでテキストを作成する
- 生成を行う際LLMは途中で後戻りや修正ができない
- 人間は読み書きをする際に途中で後戻りや修正ができる
トランスフォーマアーキテクチャ
- シーケンス中の各トークンにはミニブレインが1つずつ割り当てられ、それらをまとめたものをトランスフォーマーアーキテクチャと呼ぶ
LLMはトークン生成器
ファインチューニングによってLLMをAIアシスタントとして機能させることができる
チャット形式はアプリケーションの一つ
プロンプトに含めるべきコンテンツ
プロンプトに組み込むべきコンテンツを体系的に整理するポイントとしては
静的なコンテンツと動的なコンテンツに分けること
- 静的なコンテンツ
- LLMに対して求めるタスクを伝えたり、質問を整理したり、正確な手順を示す役割
- 例:「次に読むといい本はどれでしょう?ただし教科書ではなく娯楽用です」
- 動的なコンテンツ
- 尋ねようとしている内容の詳細
- 例:「次に読むべき本を提案していただけますか?ちなみに最後に読んだ本は『白鯨』でした」
- 静的なコンテンツと動的なコンテンツは必ずしも明確に区別できるわけではない
Few-shot プロンプティング
- プロンプトに例を追加する手法
- 例を与えないプロンプトはZero-shotプロンプトと呼ばれる
- Few-shotプロンプティングの欠点
- コンテキストが増えるほど扱いづらくなる
- 出力が例示された情報に偏る
- 誤ったパターンを示唆する可能性がある
RAG(Retrieval Augmented Generation)
- アプリケーションが該当の課題に関連するコンテンツを検索・取得し、それをプロンプトに組み込む
CoT(思考の連鎖)
- Chain-of-Thought Prompting Elicits Reasoning in Large Language Modelsという2022年1月に発表された論文
- CoTの著者は最初にモデルについて推論させ、「それから」モデルに回答させることができれば、正しい答えに到達する可能性が高くなることを示した
- その後、2022年10月に発表された「React: Synergizing Reasoning and Acting in Language Models」では、モデルが何をする必要があるか反復的に考えることによってパフォーマンスが上がることが示された
所感
- この本が書かれてから何年か経っているがその間にLLMも絶えず進化してるのだなと感じました
- LLMは文字を人間とは異なる見方をしてることの例として、書籍では小文字の英文を大文字に変換する際worldsをWORDSに誤って変換するような例が挙げられていたが、ChatGPT5では同じようなことは私がみた範囲では確認できなかった
- LLMは単語内の文字を逆転させるような作業が苦手とあるが、ChatGPT5で「This is a pen」を逆転させてと言ったら、「👉 文字単位で反転するか、単語単位で反転するか、どちらを求めていましたか?」ときいた上で適切な回答が返ってきた。執筆時よりもLLMが進化したようである
- RAGに関してどのLLMでも普通にやっているし、CursorのDocs設定やプロンプトで明示的に指定できる
- 2025年9月現在ClaudeやChatGPTを使っていて、LLMが多段階の推論を行なっているのをよく目にするが、プロンプトも段階的に指示を与えることで回答の精度が上がるのを実感している。個人的にはPREPのフレームワークやPros/Consの比較などのようにテンプレート化できるものはmarkdownで出力形式を指定してしまうのが効率良い気がして好きです
