3 min read

読書: 生成AIのプロンプトエンジニアリング

最近仕事で、LLMを使ったアプリケーション開発に取り組んでいて、プロンプトエンジニアリングの基礎力を身につけるために読んでみた。

Amazon.co.jp: 生成AIのプロンプトエンジニアリング ―信頼できる生成AIの出力を得るための普遍的な入力の原則 : James Phoenix, Mike Taylor, 田村 広平(監訳), 大野 真一朗(監訳), 砂長谷 健(翻訳), 土井 健(翻訳), 大貫 峻平(翻訳), 石山 将成(翻訳): 本
Amazon.co.jp: 生成AIのプロンプトエンジニアリング ―信頼できる生成AIの出力を得るための普遍的な入力の原則 : James Phoenix, Mike Taylor, 田村 広平(監訳), 大野 真一朗(監訳), 砂長谷 健(翻訳), 土井 健(翻訳), 大貫 峻平(翻訳), 石山 将成(翻訳): 本

目次

  • 1章 プロンプトの5つの原則
  • 2章 テキスト生成のための大規模言語モデル入門
  • 3章 LLMによるテキスト生成の標準的な手法
  • 4章 LangChainを用いた高度なテキスト生成手法
  • 5章 FaissとPineconeによるベクトルデータベース
  • 6章 ツールとメモリーを使う自律エージェント
  • 7章 画像生成のための拡散モデル入門
  • 8章 Midjourneyによる画像生成の標準的な手法
  • 9章 Stable Diffusionを用いた高度な画像生成手法
  • 10章 AIを活用したアプリケーションの構築

学び・気づき

LLMの進化のスピードは早く、ある時点で有用だったノウハウが、数ヶ月後にはもう使えなくなっていることも多い。

本書は、LLMがこの先ものすごいスピードで進化していく中でも、きっと変わらない「プロンプトエンジニアリングの原則」を教えてくれる本。本書で紹介されている原則は以下の5つ。

  • 方向性を示す
  • 出力形式を指定する
  • 例を示す
  • 品質を評価する
  • タスクを分割する

たったの5つだけで、とてもシンプルで覚えやすい。

LLMの仕組みや、LLMが世の中に登場するまで 〜 登場後の進化の歴史を、わかりやすく・簡潔に解説する章があるので、なぜこの原則が重要なのか、背景・理由も併せて直感的に理解することができた。

個人的には、本書を読むまで、プロンプトを書くときに「例を示す」意識がとても弱かったので、そこが今後に生きてきそう。プロンプトに例をただ書けばいいってわけでもなくて、例の数が多すぎたり、特手の方向に偏りすぎていたりすると、かえって意図しない結果をLLMが出力することもあるなど、トレードオフについても理解できたのが良かった。

他には、ちょうど自分が今 LLM-as-a-Judge や評価の仕組みについて関心があったり、取り組んだりしているので、「品質を評価する」「多数を分割する」ことの重要性について、このタイミングで理解できたのも良かった。

プロンプトエンジニアリングは不確実性が高い。ちょっとプロンプトを変えただけで、大きく結果が変わることもあるし、プロンプトを変えなくても、LLM側の変化が起因して結果が変わることもある。エージェンティックなアプリケーションのように、複数のプロンプトによるインプットとアウトプットが複雑に絡みながら最終的な結果を生み出すような場合はなおさら不確実だ。

そんな中でも安定した or より良い品質のアプリケーションを継続的に開発しユーザーに提供し続けるためには、アプリケーションの品質を評価し続けられる状況を作ることが大事(これは、LLMを使ったアプリケーションかどうかは関係なく大事)。

まずはプロンプトの単体テストの様な評価ができるように、プロンプトが適切な粒度で分割されていること、つまり単一責任の原則に則って設計する必要がある。そうして、プロンプト単体の品質を担保した上で、複数のプロンプトの組み合わせた、処理の過程や最終的な結果の品質を担保できるように、E2Eテストの様な評価の仕組みを組み上げていく。

こう書くと、アプリケーションの品質担保でやっていたこととあまり変わらないように感じる。だけど、本書を読む前後で、自分の中のプロンプトに対する意識が変わったのが、自分にとっては大きな変化だったかな。

プロンプトは設定ファイルではない。ビジネスロジックが実装された、れっきとしたプログラム / ソースコードだ。

本書を読んで、そんな風に認識できる様になりました。

終わり。