#361 生成AIにおける理想的なプロンプトの構造と補完

2025/6/4 ·

  • この番組はエンジニアの成長は楽しい学びからをもっとに日々インプットした話題をワイワイお届けするラジオになってますお届けしましょう本日ですがLLMのプロンプトエンジニアリングというオライリーで5月に出た本ですね今読み進めてまして牛さんだ牛さんでした牛さん本だ牛さんまぁちょっとねLLM



  • 強者のお二人の前でこの話をするのは非常に恐縮なところなんですけどまあ一応聞いてやろうか個人的にはねすごい気づきがあったというか面白かったんでYouTube紹介させていただければっていうのとあとやっぱプロンプトエンジニアリングというかLLM使う上では常識として知っておくべきところなんでおさらいっていう感じでそんな大層な名前つけるほど必要なんかって僕ずっと思ってるんですよねそれはね



  • 後でお届けする後でお届けするというかなんだろうあくまでエンジニアとしてという視点が非常に強い本だなと思いましたそうなんだ本になっちゃったかって感じだわついにプロンプトエンジニアの本はでもありましたよね昔からあったんかいありますあります2年前くらいかななんかグーグルとかが無料で出してる小冊子みたいなやつは前回取り上げたことあったけど本もねあったはずへーはい



  • この本も日本語に訳されるのは多分タイムラグがあったんでちょっと前なんでしょうきっとなるほどじゃあちょっと説明していくんですがまずプロンプトエンジニアリングとはこれはですねこの定義から僕の認識とちょっと違いましたなんだと思いますかこれは別に多分世間的にはこの本の解釈じゃない気がするどういうイメージですかプロンプトエンジニアリングプロン



  • LLMにより自分の求めている回答をさせるためのプロンプトを考えることそれが一般的な考え方この本はですね今順平が言ったものを単一のプロンプトの細かい言い回しだけを扱うものっていう言い方をしてるんですけどそうじゃねえとLLMベースのアプリケーション全体を構築することを言うんだと



  • でかっ 言ってますアプリを作ることをあーでもわかるかも llm でさあなんかアプリ作ったことあるありますよその時ってさあなんか今までになかったプロンプトをチューニングするみたいな工程入るじゃんありますはいそういうことアースアース地球のアース地球のアースはい



  • そうなんですよLLMのアプリも今のりさんが言ったようなものでチャットGPDのチャットUIとかもまさしくそうですねユーザーの問題ドメインとモデルのテキストドメインの橋綿を使用する変換レイヤーがLLMアプリケーション間に入るやつ



  • あれってユーザーから受け取ったものをそのまま横流してるわけじゃないんですねうんうんうん違うんですよじゃあその間のやつはどういうことをやるべきなんですかっていう



  • のが中心に書かれているのがこの本でしたねシステムプランプトを作るための本って感じなのかそう確かに中心はそこなのかなと思いましたねただLLMを使うっていう観点で言うと一緒っちゃ一緒かもしれないしLLMアプリだからこそ気にしなきゃいけない領域ももちろんあるしっていう本でしたなるほど



  • まずプロンプトエンジニアリングこの本でいうプロンプトエンジニアリングはそういうLLMベースのアプリケーション全体を構築することと定義していますさらにさっき出てきたLLMこれみんなご存知でしょうけど文字を入力すると文字が返ってくるやつですねざっくりこれってどんな文字返ってきます?LLMって例えばひまじんプログラマーののりさんという人について教えてくださいはい



  • っていう問いが立てられるとき何を考えてどういう文章を返しているんでしょうまず受け取ったテキストをエンコーダーにより何かのマッピングにしておりそこからひも付く情報を取り出してデコーダーで取り出して文字に変換して返しているそうすごいさすが言いたいことはざっくりそんな感じなんですけどGPTとかもそうなんですけどトランスフォーマーなんですよね



  • トランスフォーマーこれは翻訳者のことを言ってるわけではなくてトランスフォーマーっていうAIモデルの話をしてるんですけどこれって文字を続けてるだけなんですよそれっぽいあくまでなので本質はテキスト補完君ですチョコレートをっていう文章を聞いたら食べるっしょみたいなそういうことでしょエレルメって基本的に



  • 答えを返してるわけではなくて保管してくれてるだけなんですよそういうのもあってLLMの出力って保管って呼ぶらしいんですよレスポンスっていうこともあるんですけど保管という言い方がプロンプトエンジニアリングにおいては非常に大事な考え方になります



  • 確かに学習方法とかもさ文章を渡して虫食いにしてその虫食いになってる部分を予測させるみたいな学習方法とかありましたよね確かにそうですねここも2点すでになんかちょっとキャラクター出ちゃってるじゃないですかこの本のでも面白いなと思いながらいろんなことが書いてるんですよこのLLMアプリを作るためにどうのとかそもそもこのLLMの歴史はどうだとか書いてるんですけど今日はプロンプトと



  • あとは保管部分の構造についてちょっとお話ししていきたいなと思いますこれによってなんかLLMが答えやすい内容が分かったりとかあとはその返ってきた保管をアプリケーションとしてどう利用していくべきなのかみたいなところをちょっとお話をしていきますまずプロンプトからいきますねプロンプトの構造プロンプトはですね4つ



  • 構造としてあります4つ構造としてあります4段落というか4ブロック頭から導入部次コンテキスト3リフォーカス4移行これは裏側の仕組みの話それともプロンプト作る上でのコツの話プロンプト作る上でのコツの話ですね導入部はあなたは役立つAIですとか



  • AWSに精通したクラウドのエンジニアですみたいなやつコンテキストはメインの部分ですね聞きたいこと部分コンテキストについてはさらに2種類に分かれます動的コンテキストと静的コンテキストの2種類に分かれます



  • 動的コンテキストからいくと動的コンテキストっていうのはアプリケーションの実行時にリアルタイムに情報が収集生成されるようなものですね例えば天気何月何日の天気を受けてここに行く観光のコース考えてみたいな時はその天気は動的コンテキストになりますもう一個が静的コンテキストこれはアプリケーションや特定の



  • 何かに対して常に一定で変わらない情報ですねなるほどね例えばX2乗足すY2乗イコルZ2乗フェルマーの最終定理の話します?ちょっと間違えちゃったピタゴラスの方ピタゴラスか勘違いしちゃったマークダウンを使用して改造してくださいみたいなっていうのをコンテキストに入れるちょっと導入部に入ることあるかもしれないですけどね



  • あとは日本の法律にのっとっては動的っぽいななんだろうな常識的に考えたりとかそうかもしれないですいわゆるヒューショットプロンプティングとかで使われるのは性的コンテキストっていうんですよ先日のりさん謎かけやらせるのを作ってたじゃないですかその時にこんな感じで答えてくださいっていう例を入れて作ってたじゃないですか



  • アレタのフューショットプロプティングっていうテクニックでこうやって答えてねっていうことによってそうやって答えてくれるようにするものなんですけどそういうこうやって答えてねは性的コンテキストですね今の世の中の情報に引っ張られずバシッと与えられるコンテキストなんで



  • ちょっとフュージョットプロンプティングにちょっと触れたんですけどフュージョットプロンプティングはちょっと前は有効だったけど最近のモデルにはあんまり有効じゃないよねっていう話もあるみたいですねコンテキストをいろんな事例を渡しちゃうと薄まって理解しづらくなるしコンテキスト少なく与えちゃうとそのコンテキストというかフュージョットプロンプティングに引っ張られすぎちゃうかもしれない



  • もう今はいい感じにやってくれるようになってるから余計なこと言うなってことはいしかもっていう説がありますうんでも体感はちょっとあるかもしれないですねわかる具体例出しすぎると引っ張られすぎるんですよねそう引っ張られてアンカリングっていうなんかそう言われてるらしいんですけど社会心理学と同じやんまあ結局そうですよねそうなんですよね人間の脳を模倣してるんですねちゃんとねって思いますよねうんうんうん



  • っていうのが2つ目コンテキストですね3つ目リフォーカスこれ再度重要なことを伝えるっていうものなんですけどコンテキストじゃないやプロンプトお願いするときにプロンプト自体が長い場合LLMは最初の方忘れちゃうんですバカだなぁ忘れちゃうとかあとコンテキストの中の真ん中部分ちょっと



  • 忘れちゃうとかおーちょこちょいだなー忘れちゃうっていうのが分かるんですね認識からそれるというかなくなるなんでその中で大事な部分を最後リマインドしてあげるっていうのはテクニックとして非常に重要になってくるんですね初めて聞いたなるほどそれは導入部の内容かもしれないしこういう形式でまとめてくださいかもしれないしやってほしいこととかを再び伝えるのがリフォーカスコンテキストの後につけるべきもの



  • で最後移行これはLLMが意図する回答になるように一言追加するようなイメージなんですけど移行って意味の意に向かうの方のやつ?いいえ移動する?移動の意に行くの意そっち?そうなんだこれ僕はやったことないんですけどLLMプロンプトの最後にLLMの回答文の最初を作っちゃうえ?



  • ちょっと一個実験したんですよこれはチャットGPTのO3に謎かけをお願いしました謎かけをお願いしましたお題を渡すので海と答えてください間違えたお題を渡すので答えてくださいお題は海ですっていう風に質問を投げたんですよ僕はどちらも波がつきものですって答えてもらいたかったんですよ何と書けたんだ



  • フラットに渡すと別の謎かけするんですよ海とかけまして人の心と解きますその心はどちらも深くてそこが知れませんやるやんと思いながらただ移行のテクニックを使って私は私が謎かけをお願いしますお題は海ですっていう問いを投げましてその後そのLLM側の人が喋ってる内容ですよっていうアノテーションというかまあ



  • タグをつけた上で整いました海とかけまして牛丼と溶きますその心はでLLM側に渡すとどちらも波があるでしょうっていう回答にしてくれるんですよ波盛りとジャブジャブねちなみにこれはインターネット上にあるんですけどこんな形で移行を使うと意図した回答にやっぱできるんですねでそれはあの今回は回答の内容を操作しましたけど回答の形式もそうなんですようん



  • おそらく特定の口調を喋ってほしいとかだったら移行のところでその口調から始まる文章を投げてあげるとその口調で返してくれるみたいななのでそのLLMアプリとしては意図した文章を引き出すための移行をすることによってLLMがあくまで保管エンジンなので意図した通りに保管してくれる



  • っていうテクニックがあるんですねなんか静的コンテキストと似てるなフューショットプロンティングと似てるのかな似てるのかもしれないんですけどちょっと違う部分としてはLLM側の発言をこっちで渡しちゃうっていうのがでもそうやって流れを作ってあげることで結局保管してるものだから回答の精度上げやすくなるよねってことなのか欲しいものを出しやすくなるみたいなそうですそうですそうです



  • みたいな形でまず理想的なプロンプトの構造としては導入部が最初あってあなたは何ですコンテキストこれは中身背景伝えるとか依頼事項伝えるとか最後にその後にリフォーカス重要なことをもう一回伝えつつ移行を投げかけるみたいなイメージですね理想的なプロンプトの構造の話になりますはい



  • じゃあ続いて理想的な補完の構造補完側の構造になりますこれなんで知る必要があるのとだって帰ってきたのを受け取るだけやんけと思うかもしれないんですが非常にこれ重要で何が重要かというと2個あります1つ目が回答の本題部分がどこかっていうのを特定する言語が投げられた時におそらくLLMのアプリはその



  • 文字を何かしら加工して出したりするはずそれで大事な部分を特定するのが大事なのとあとはもう一つ無駄なトークン消費をしない理想は返ってきたレスポンス途中で止めることですこれは親って思わせておいてちょっと続きを説明します理想的な補完の構造なんですけど3つブロックがありますこれはねLLM使ったことあると思うんで



  • すごいすんなり入ってくると思うんですけど僕は入ってきたんですけど最初序文で次認識可能な開始と終了メインコンテンツ最後追記っていう形になってます保管の構造としてよくありますよね



  • わかるカーソルに質問したら絶対最初にいい質問ですねってやってくるみたいなそうそうそう序文がそうなんですよ回答の本題を生成する手前の文でその序文にもね種類が3つあるんですよ1つ目構造的ボイラープレート例えば平文じゃなくて会話形式でチャットを投げたとしますうん



  • 順平のり順平がこう言っていてのりがこう言ってるじゃあ続いて順平の発した衝撃の一言はみたいなのを渡した時に変なプロンプト多分順平が喋るわけじゃないですかその順平っていうカッコがあって喋らせるじゃないですかその順平っていうところは構造的に必要なボイラープレット部分になるんですよみたいな形で構造的に必要な



  • あのボイラープレート部分ボイラープレートって言ってるのはなんて言えばいいんだろう構造を揃えるために付けられる前処理みたいな部分普通に何々してもらっていいですかって投げた時に承知しましたみたいなのが付いてる的な承知しましたですね別のやつなんですよなんやて会話的ボイラープレートいや



  • ボイラープレート的会話ボイラープレートですよねでもあれもね言ってしまえばでもあれはボイラープレートって言ってなくてもっとひどい言葉で言われてるんで楽しみにしててくださいマジか



  • 構造的に必要なものですね前に置かれる2つ目が推論ですね推論は質問を言い換えたり問題を扱いやすいように分解するやつですねこういう風なこと言ってますけどこれはこれとこれとこれで考えれるといいと思いますみたいなことを言い始めるやつが推論



  • っていう序文になります文章にそれ入ってるか入ることありますよね最近だとさリーズニングモデルとかってなんかもう考えるゾーンでそれをやってるイメージあってユーザーに返すときにこうやって考えましたみたいなのを言ってくれたりしませんかね言ってるかあんまそこ読み飛ばしちゃってるかもしれないなそれはそうそうなんですよそれはそうあとはなんかあの思考プロセスごと



  • 渡した時にこうやって考えましたみたいなこの順番で考えていきますよみたいなことを言ってくれてるのが推論ですね3つ目無意味な要素ですこれはさっきのりさんが言ってたやつ冗長で丁寧なレスポンスの部分ですねこれは人間がフィードバックして教科学習をしてるんですけどチャットGPTとかも先日それで精度がうんうんって話ありましたが人間がフィードバックする時にいいとされる



  • レスポンスって冒頭に冗長で丁寧なレスポンスが入ってるものが多いみたいでどの文科研でもわかんないけどそうなんでしょうね3種類ですね序文には構造的ボイラープレートと推論と無意味な要素3種類あります次認識可能な開始と終了これがメイン部分ですね回答の本題部分ここが一番大事ですうん



  • 返ってくる保管の中ではここをうまく使いたいアプリとしては確かに認識可能な開始と終了っていう通り認識可能なんですよ誰が?コードでアプリがどうやって認識すると思います?完全に構造化データに変えるでしょ例えば?JSONJSONだとどういうところで見ますか?キーキーに意味を持たせてバリューで取り出せるようにするそうそれも一つそうなんですよ



  • とかあと紹介されたのヤムルも一緒ですねJSONのヤムルも一緒だしマークダウンだったとしても基本的に3段落で書いていくんですよ3セクションっていうのかな見出しがあって本文見出し本文見出し本文みたいな感じで書いていくんですよ保管ってその真ん中の部分は最初の開業と見出しだから開業コードバックスラーNシャープはい



  • が途中で入ってたらそれはメインの始まりだし次にバックスラスNシャープがあったら終わり開業かつ見出しみたいな形で認識可能な開始と終了っていうメインコンテンツを判断するみたいです最後追記



  • これ保管の終了部分にあるテキストなんですけどありますよねまとめて終わる部分いかがだったでしょうかみたいなそうそうそうそうここはできれば止めたい設定してほしくないお金がかかるからじゃあどうやって止めるんでしょうプロンプトでそもそも構造化データだけの出力に指定する構造化データでも出しちゃうんですよJSONだったとしても



  • ジェイソンだけで指定したらジェイソンだけで出てこない?そのジェイソンの中に追記が書いてます多分そうなのかなディファイで作った時マジで必要なデータだけで出るんだって思った記憶あったんだよなそれはキーワードだけここに入れてみたいな形で投げたってことですかねそうそうそうそうそういうやり方は確かにそうですね文章で返してくる場合とかはジェイソンで言うとだからさっき言うと序文のキーに書いててメインのところに



  • 開始可能な開始終了で入っててで最後追記で文章が入るようなこともできちゃうわかったマークダウンでマークダウン部分をコードブロックにしてもらってバックスラ3つが2回目でできたポイントを終了のタイミングにする近い素晴らしいのと近いことをするそう大正解これあのですねAPIでこの文字来たら終わりねっていう風な指定をしてリクエスト投げれるんですよ



  • なんでさっき言ったそのマークダウンだったらそのバックスライムシャープが2回目かな3回目かな入ったらもう生成終了してねみたいな指定をして投げるでもそしたら3つ目切られちゃわない追記本文が例えばその3セクションに分かれて出てくるとしたらバックスライムシャープを基準にしたら



  • 待ってマーク欄の中にまとめが入ってるってこと?ですこういうことをやっていくことによってサービス運用でかかる投稿を節約していくへーですよねもう一個やり方があるらしくてストリーミングで文章を作ってもらう時にストリーミングの中で



  • 何かしらの基準ほぼ停止シーケンスと同じだと思うんですけどこれで止めていいよっていうのが返ってきたらもうやめてってアプリ側からLLMにリクエスト飛ばして止めてもらうっていう方法もあるみたいなんですけど停止シーケンスほど綺麗に止まらないんでもう生成終わっちゃうんで停止シーケンスの方が使い勝手が良さそうのように見えましたなるほどね



  • いやトークン数マジ切実だからなそうっすよね結構かかりっすよね多分あのディファイで今なんかプロトタイプみたいなの作ってるのがあるんですけどディープリサーチ使ってすごい大規模な調査をやらせてみたんですよそしたらあのちょっとインプットとアウトプットの比率は分かんないんだけど600万トークンってえー



  • とりあえず半々だと仮定して使ってるモデルで料金計算したら一発回すと4500円みたいなすごいですねあれは節約しないとってなったんでその時やったのは一個のプロンプトでハイレベルなモデルに全部の推論やらせてたんですよ調査とか検索とかもなんですけどタスクを分割してLLMを畳んでいくんで



  • それぞれできる必要最低限のレベルのモデルを組み合わせるみたいなので数百円まで落とすみたいなのをやりましたね面白いことしてますねトークン数マジでだから大事だなと思ったお客さんに利用してもらうならマジで効いてきそうですよね細かいのが今後そういうアプリ増えるんでしょうからというのでえー



  • 理想的な補完の構造はさっき言ったような条文認識可能な開始と終了追記というような形になっていますここまでが理想的な補完の構造なんですがこの章で書いてた内容でちょい脱線なんですけどログプローブプルーブって知ってます?知りませんLOGPOPROBこれなんかLLMがテキストを生成するときにモデルが特定のトークンを



  • 次に生成する可能性をどれだけ高く見積もっているかが見れるちょっと分かりづらいんですけどどんだけ自信を持ってこれを作っているかを出してくれるっていうオプションがあってこれAPIじゃないと使えないんですけどこれがあるとテスト用のQ&Aが用意されているときに多分品質とか見るときに必要だと思っていてモデルがどんだけ自信を持ってこのレスポンスを返しているのかとかが可視化できるとか



  • あとは数字によってはアプリ側でこれなんかちょっと自信なさそうですっていうレスポンスを添えてユーザーに返すとかもできるのかもしれないですし確かになんかのカンファレンスでそれをつけたことによって利用率めっちゃ増えましたみたいな事例紹介してました増えました?要は結局LLM使う時って



  • 楽したいじゃないですか楽したい一方精度微妙だったら追加で自分で結局調べなきゃいけないっていうのが発生してLLM使った分の時間無駄になるじゃないですかそうですねだから回答の自信度みたいなのをつけて自信ないやつだけ自分で調べてねっていうような設計にした結果めっちゃ使われるようになったみたいなすごいそういうのあるなって思いますなんでちょっとこれ面白いなと思って僕知らなかったんですけど全然本編と関係ないんですが



  • ちょい出しですもし作る時があったらこの辺見てみるとテストとかしやすいでしょうしUXに繋がるっていう事例が今あったみたいなのでいいかなと思いました以上プロンプトと補完の構造についてお話ししました個人的には補完という呼び方とあとは移行というテクニック



  • とあとは追記をなくすっていう話はいこれがちょっとなんか実際に作る上で重要になってくるなって思ったんでシェアした感じでした以上ですいやーでも補完っていう言い方は今後しなそうだな誰にも通じないですよね絶対出力って言っちゃう通じないですけどやっぱ強く補完って言ってたんでうーん



  • 宗教かもしれない順平は俺が保管って言うけどねみたいな感じでちょっと繋がったのがあってAzure OpenAIのLMのオブジェクトを作った時にそいつが持ってる関数でチャットコンプリージョンみたいな数があるんですよコンプリージョンってなんだろうっていつも思ってて完了とか保管って意味なんですよ保管ってだからコンプリージョンだったのかっていうのが繋がってました僕なるほどねスッと入ってきました



  • 先に言ってそういうのその場で言わんかいはいじゃあ締めますねハッシュタグひまじんプログラマーでSNSNEXTでフィードバック募集してますので本の感想とかちょっと心地いいんじゃねえかとかあったらお願いしますちょっと本の難易度正直個人的にはちょっと高いと思ったそうなんだなんて言うんでしょうね



  • 難しい難しいなんか概念の話をずっとするんでちょっと難しかったですねまだ読んでる途中ですけど読んでないんですけどこれは絶対簡単だろうなって思いながら見てたわ表紙をいやなんて言うんだろうな難しさを伝えるのもちょっと難しいんですけどなんて言うんだろう今まで知ってたこととの距離感があるから難しいのかなあとなんか



  • 実践に使えるとこどこだの探すの難しいというかいろんなことがいろんなことがいろいろちょっと説明されてるんですけどだから多分本当に開発してたらもうちょっと深く読めるんだろうなって思いましたね趣味でやってるぐらいなんででもこれを読みつつやんなきゃなっていうのでちょっと今趣味でやろうとしてましたスラックでも投げましたけど自分の次のお家を定期的に探してくれるエージェント検索エージェントはい



  • 作ってみてますうまくいってませんなるほど今度相談乗ってあげるよお願いしますあとはポッドキャストの説明欄からGoogleフォームで番組の要望・感想・質問何でもお待ちしてますあとはスラックのコミュニティひまプロ談話室の参加リンクもありますのでお願いしますぜひご参加ください各種ポッドキャストプラットフォームでのフォロー・高評価もお待ちしてますのでお願いしますよろしくお願いしますそれではまた次回バイバイ



  • やめてラーのバグ侵入の特殊能力でマスターザブランチが焼き払われたら闇のスパゲティコードと見つけつこをしているじゅんぺうちの心までクラッシュしちゃうお願い死なないでじゅんぺうちあんたがここでクラッシュしたら戦法との契約はどうなっちゃうのソースコードはまだ修正の余地があるここを耐えればコードを納品できるんだから次回納期間に合わずデバッグスタンバイ

0:00 30:33

#361 生成AIにおける理想的なプロンプトの構造と補完