Prompty入門
Azure OpenAI Service Dev Dayというイベントの発表にて「Prompty」という面白いプロンプト規格が紹介されていたので、備忘として記事にします。
詳細については以下記事を読めば全てわかりますが、自分の中で大事である部分をピックアップした上で、個人的に感じたメリットデメリットと所感について書こうと思います。
Promptyとは
PromptyとはMicrosoftが作った、プロンプト管理用のテキストフォーマットです。
今までOpenAIをはじめとしたLLMのプロンプトはプロンプトのみで管理され、プロンプトに関連するパラメータ(例えばモデルや最大文字数の設定)はコード内の定数などの別のファイルで管理されることが多く、プロンプトファイルだけでは、どのモデルやパラメータで実行する必要があるかの確認が必要でした。これを.promptyという一つのファイルとして管理することで、そのファイル単体でプロンプト情報を完結させることができ、そのファイル単体でのテストを行うことができます。
ファイルを見た方がイメージがつきやすいと思うので、Promptyのサンプルを確認してみます。
---
---
name: ExamplePrompt
description: コンテキストと対象年齢に基づいて回答を生成するプロンプト
model:
api: chat
configuration:
name: gpt-4o
type: openai
api_key: sk-hoge..
parameters:
max_tokens: 3000
sample:
userAge: 4
context: Zennはエンジニアのための新しい情報共有コミュニティです。 誰かのために、自分のために知見を共有しましょう。
question: Zennって何?
---
system:
あなたは{{userAge}}歳向けのコンテキストの説明用AIアシスタントです。
コンテキストに厳密に基づいて{{userAge}}歳の人向けの回答をしてください。
# Context
コンテキストは以下です。:
{{context}}
user:
{{question}}
このファイルは---
で区切られており、上部がプロンプトに関する設定情報、下部がプロンプトです。
プロンプトは{{hoge}}
のように囲うことで変数指定を行うことが可能です。
つまりこのファイルは変数としてuserAgeとcontextとquestionの二つを持っており、これらに代入することで対象年齢向けのコンテキスト説明エージェントを作ろうとしたプロンプトであることがわかります。
そして設定にはopenaiのgpt-4oを使うことが明示されています。簡易的に試すため、今回はapi_keyも指定していますが、実際に使う場合は環境変数として指定し、ファイルに直接書かない方が良いでしょう。そして、どうやらmax_tokensは3000なので、3000字以上の超長文が出ることは想定してなさそうです。
メリット
Promptyのメリットとしてはこのファイル単体で下記が規定することができる点でしょう。
- どのようなプロンプトなのか
- どのモデルを用いるべきなのか
- どんなパラメータで出力する必要があるのか
上記三項目がPromptyファイル内に指定されていることで、それ単体でプロンプトと想定される実行環境含め規定されているため、どの環境でも設定値をぶらさずにプロンプトのテストをおこなうことができることがメリットと言えます。GithubActionsを用いてこれを実行することで、CICDパイプラインに組み込むことができるでしょう。
デメリット
Promptyの一番のデメリットは「出たばかりの規格なため、対応しているランタイムが少ない」という部分にあります。まず公式が出しているVSCodeの拡張機能を除くと、Prompt flow、Langchain、Semantic Kernelの三つしかありません。もちろんPrompty自体はプロンプト規格でしかないため自分でローダーを作ることも可能ですが、気軽に試そうとした時に簡易的なライブラリで試すことができず、上記三つの大きめのフレームワークに頼ることになってしまうのは大きな弱点といえます。
ただし下記Issueコメントにあるように、PyPIにPromptyパッケージを提出したとのことなのでさらに使いやすい状況にはなるかと思います。
所感
今までプロンプトは変数で管理したりテキストファイルに特定の書式で書くことが一般的だったと認識していますが、promptyという規格に則っていることがファイルの拡張子から明示でき、さらにそこに想定しているモデルやパラメータ、説明を付記できるのは個人的にとても面白い試みだと感じました。
特にLLMの推論時のパラメータは油断すると実行ファイルによってバラバラであることも多いため、プロンプトファイルで指定しまうのは良いなという印象でした。
参考
Discussion