グーグルも注目、プロンプトエンジニアリングの最前線、「Prompt Poet」が示す可能性
Prompt Poetの強み、YAMLとJinja2を活用した構造
Prompt Poetの強みは、YAMLとJinja2という2つの技術を巧みに組み合わせた点にある。これらは一見難しそうに見えるが、実際はかなりシンプルなものだ。 まず、YAMLは「構造化されたデータを書くための方法」と考えるとわかりやすい。買い物リストを作るときを想像すると、普通なら、以下のようにただ項目を列挙するだけかもしれない。 通常の買い物リスト 買い物リスト: – 牛乳 – パン – 卵 – りんご – 洗剤 しかし、YAMLを使うと、それぞれの項目にカテゴリーをつけたり、数量を指定したりすることが簡単にできるのだ。情報を整理して書くための「フォーマット」とも言える。 YAMLを使った構造化された買い物リスト 買い物リスト: 食料品: 乳製品: – 商品: 牛乳 数量: 1 単位: リットル パン類: – 商品: 食パン 数量: 1 種類: 全粒粉 卵: – 商品: 卵 数量: 1 単位: パック 備考: 有機卵を選ぶ 果物: – 商品: りんご 数量: 5 単位: 個 種類: ふじ 日用品: 洗剤: – 商品: 洗濯洗剤 数量: 1 種類: 液体 サイズ: 1リットル 一方、Jinja2は「テンプレートを作るための道具」と考えることができる。たとえば、年賀状を大量に作る時のことを考えてみてほしい。基本的な文面は同じだが、宛名や一部の文章を変えたいことがある。Jinja2は、そういった「穴埋め」や「条件に応じた文章の変更」を可能にするもので、1つの雛形から多様なバリエーションを生み出せるツールとなる。 Jinja2を使用した基本的な年賀状のテンプレート事例 謹賀新年 {{ recipient_name }} 様 旧年中は大変お世話になりました。 本年もどうぞよろしくお願いいたします。 令和{{ japanese_year }}年 元旦 {{ sender_name }} ※このテンプレートでは、{{ }} で囲まれた部分が変数となっており、実際に使用する際にこれらの変数に値が代入される Prompt Poetは、これらの技術を組み合わせることで、複雑なAIとのプロンプトを簡単に作れるようにしている。もう一度、事例を用いて解説したい。たとえば、顧客対応AIを作るケースの場合、Pythonのみの既存アプローチと、YAMLとJinja2を活用したPrompt Poetのアプローチでは以下のような違いが出る。 従来の方法では、このようにプロンプトを書く必要がある: #######python prompt = f””” あなたは{shop_name}の接客AIです。 お客様の名前は{customer_name}です。 最近の購入履歴: {‘, ‘.join(purchase_history)} お客様の質問: {customer_question} 丁寧に回答してください。 “”” ####### これに対し、Prompt Poet(YAMLとJinja2)を使うと、このように書ける: #######yaml – name: system_instruction content: | あなたは{{ shop_name }}の接客AIです。 お客様の名前は{{ customer_name }}です。 – name: purchase_history content: | 最近の購入履歴: {% for item in purchase_history %} – {{ item }} {% endfor %} – name: customer_question content: | お客様の質問: {{ customer_question }} 丁寧に回答してください。 ####### 何度か見てきたようにPrompt Poetのコードの方が構造化されて、見やすくなっているはず。このような構造化により、プロンプトの作成や編集が格段に簡単になる。プログラミングの専門知識がなくても、各部分が何を意味しているかが分かりやすく、必要な箇所を変更するのも容易だ。また、一度作ったテンプレートの一部を他のプロンプトで再利用することも簡単になる。 こうした特徴により、Prompt Poetは複雑なAIシステムの設計を、より多くの人々が参加できる創造的な作業に変えている。プログラマーだけでなく、マーケターや顧客サービス担当者など、様々な専門家がAIシステムの改善に直接貢献できるようになることが期待される。 プロンプトエンジニアリング技術の向上により、AIモデルの精度はどのように変わるのか、さらなる発展に期待したい。
文:細谷元(Livit)