「Prompty」を試す
ちょうど試していたDapr Agentsで使用されていたので気になった。
GitHubレポジトリ
Prompty
Prompty は、LLM プロンプトのためのアセットクラスおよびフォーマットであり、開発者のための可観測性、理解しやすさ、移植性を向上させるよう設計されています。主な目的は、開発者の内側ループを加速することです。
このリポジトリには以下が含まれています:
- Prompty言語仕様
- ドキュメント サイト(ライブサイトは prompty.ai をご覧ください)
- (今後さらに追加予定)
この Visual Studio Code 拡張機能は、VS Code 内で直感的なプロンプトプレイグラウンドを提供し、プロンプトエンジニアリングプロセスを効率化します。Prompty 拡張機能は Visual Studio Code Marketplace で見つけることができます。
Promptyとは?
仕様
Prompty は、プロンプトとその実行を単一のアセットに標準化します。
referred from https://github.com/microsoft/promptyVSCode拡張機能の特徴
クイック作成
VS Code のエクスプローラーで右クリックし、「New Prompty」を選択することで、基本的な prompty を迅速に作成できます。
referred from https://github.com/microsoft/promptyプレビュー
Markdown に類似した形式でプロンプトをプレビューでき、入力中に動的なテンプレートレンダリングが行われ、モデルに送信されるプロンプトを確認することができます。
referred from https://github.com/microsoft/promptyモデル構成の定義と切替
- VS Code 内で直接モデル構成を定義できます。
- 異なるモデル構成間を迅速に切り替えることができます。
referred from https://github.com/microsoft/prompty
referred from https://github.com/microsoft/prompty- VS Code の設定を使用して、以下のレベルでモデル構成を定義できます:
- 複数の prompty ファイルで使用するユーザーレベル。
- Git を介してチームメンバーと共有するためのワークスペースレベル。
referred from https://github.com/microsoft/prompty- セキュリティ強化のため、Azure Active Directory 認証の使用を強く推奨します。
api_key
は空のままにして AAD 認証をトリガーしてください。- OpenAI もサポートされています。キーは VSCode の設定に保存するか、
${env:xxx}
を使用して環境変数から API キーを読み込むことができます。
- 環境変数は、prompty ファイルと同じフォルダーにある
.env
ファイル、またはワークスペースのルートフォルダーに配置できます。- または、システム変数に指定することも可能です。キーの安全性については OpenAI's Guide に従い、コントロールパネル/zsh/bash 経由で設定し、VS Code を再起動して新しい値を読み込んでください。
クイック実行
F5 キーを押すか、上部の Run ボタンをクリックします。出力ウィンドウは2つあります:
- Prompty Output は簡潔な表示を行います。
referred from https://github.com/microsoft/prompty- Prompty Output (Verbose) は送受信された詳細なリクエストを表示します。
referred from https://github.com/microsoft/promptyオーケストレーター統合
Prompty は、以下のような人気のあるオーケストレーションフレームワークでサポートされています:
.prompty
ファイルを右クリックすることで、統合スニペットを迅速に生成できます。
referred from https://github.com/microsoft/prompty
ドキュメンテーション
まずはVS Codeで拡張を有効にする。
適当なフォルダを開いて、エクスプローラ上で右クリック→「New Prompty」
basic.prompty
というファイルが作成される。
中身はこんな感じ。
---
name: ExamplePrompt
description: A prompt that uses context to ground an incoming question
authors:
- Seth Juarez
model:
api: chat
configuration:
type: azure_openai
azure_endpoint: ${env:AZURE_OPENAI_ENDPOINT}
azure_deployment: <your-deployment>
parameters:
max_tokens: 3000
sample:
firstName: Seth
context: >
The Alpine Explorer Tent boasts a detachable divider for privacy,
numerous mesh windows and adjustable vents for ventilation, and
a waterproof design. It even has a built-in gear loft for storing
your outdoor essentials. In short, it's a blend of privacy, comfort,
and convenience, making it your second home in the heart of nature!
question: What can you tell me about your tents?
---
system:
You are an AI assistant who helps people find information. As the assistant,
you answer questions briefly, succinctly, and in a personable manner using
markdown and even add some personal flair with appropriate emojis.
# Customer
You are helping {{firstName}} to find answers to their questions.
Use their name to address them in your responses.
# Context
Use the following context to provide a more personalized response to {{firstName}}:
{{context}}
user:
{{question}}
まるっと日本語に翻訳して、サンプルはAzure OpenAIになっていたので、これをOpenAIに変更した。コンテキストの文章は以下を使用。
---
name: ExamplePrompt
description: 入力された質問の根拠となるコンテキストを利用するプロンプト
authors:
- kun432
model:
api: chat
configuration:
type: openai
name: gpt-4o-mini
parameters:
max_tokens: 2048
temperature: 0.3
sample:
firstName: kun432
context: >
オグリキャップ(欧字名:Oguri Cap、1985年3月27日 - 2010年7月3日)は、日本の競走馬、種牡馬。
1987年5月に岐阜県の地方競馬・笠松競馬場でデビュー。8連勝、重賞5勝を含む12戦10勝を記録した後、
1988年1月に中央競馬へ移籍し、重賞12勝(うちGI4勝)を記録した。1988年度のJRA賞最優秀4歳牡馬、
1989年度のJRA賞特別賞、1990年度のJRA賞最優秀5歳以上牡馬および年度代表馬。1991年、JRA顕彰馬
に選出。愛称は「オグリ」「芦毛の怪物」など多数。「スーパー・スター」と評された。
中央競馬時代はスーパークリーク、イナリワンの二頭とともに「平成三強」と総称され、自身と騎手である
武豊の活躍を中心として起こった第二次競馬ブーム期において、第一次競馬ブームの立役者とされる
ハイセイコーに比肩するとも評される高い人気を得た。その人気は競馬ファンのみならず一般の大衆にも
波及し、社会現象を巻き起こした。日本競馬史上において、特に人気を博した競走馬の一頭である。
question: オグリキャップの愛称は?
---
system:
あなたは、人々が情報を見つけるのを手助けする AI アシスタントです。アシスタントとして、
質問に対し、簡潔かつ明瞭、そして親しみやすい方法で markdown を使用し、適切な絵文字を交えて個性的に回答します。
# Customer
あなたは、{{firstName}} が質問に対する答えを見つけるのを手伝います。
返答には必ず彼らの名前を使用してください。
# Context
以下のコンテキストを使用して、{{firstName}} に対してよりパーソナライズされた回答を提供してください:
{{context}}
user:
{{question}}
APIキーは色々書いてあるが、.env
にとりあえず記載しておけば良い様子。
OPENAI_API_KEY="XXXXXXXXXX"
実行してみる。右上の再生アイコンをクリック。
こんな感じで出力にエラーが出て、設定画面が開く。
2025-03-31 22:28:56.968 [info] Missing prompty configuration setting: MissingOpenAIAPIKey. Your setting is {"name":"gpt-4o-mini","type":"openai","api_version":"2023-12-01-preview","azure_deployment":""}
単に.envだけじゃダメみたい。で、promptyファイルにAPIキーを直接書けば動くのは動く、のだけども、YAMLスペック的にはapi_key
というのはOpenAI定義には存在しない様子なので、あまり望ましくなさそう。ということで、settings.jsonを開いてみるとこうなっている。
なるほど、これが接続定義になっているのか。環境変数は${env:環境変数}
で呼び出せる様子。というか、さっきも言ったけどPromptyのYAMLスペックにはapi_key
って定義されてないけどね・・・
で、上記はユーザの設定画面で、こういうのはワークスペースで共有管理したいよね。ということで、ワークスペースの設定ファイル.vscode/settings.json
に設定を記載する。ミニマムだとこんな感じ。
{
"prompty.modelConfigurations": [
{
"name": "default",
"type": "openai",
"api_key": "${env:OPENAI_API_KEY}"
}
]
}
設定上はdefault
というのが必ず必要になるみたい。じゃないとエラーになる。
再度実行してみると以下のように応答が返ってきている。
で、結果の表示方式は2つある。上のは"Prompty Output"という標準で、もう一つ"Prompty Output (Verbose)"を選択すると、レスポンスの中身が詳細に見れる。
でこれをアプリケーションから読み込みたい場合、現時点では以下の3つのフレームワーク対応している。
- Prompt flow
- LangChain
- Semantic Kernel
Promptyファイルを右クリックすると、各フレームワークごとにコードスニペットを生成することができる。
LangChainの場合だとこんな感じ。
フレームワークに依存しないパッケージになってないのかなー?と思ったら、あった。
抜粋だけど、こんな感じで読み込めるみたい。
pip install prompty[openai]
import prompty
import prompty.openai
response = prompty.execute("./basic.prompty")
print(response)
とりあえずコードとか見てる限りは
- OpenAI
- AzureOpenAI
- Azure AI Model Inference API
のみの対応に見える。OpenAI対応なら互換APIもまあいけるとは思うけども。
まとめ
プロンプトやモデルなどの設定をアセットして管理したいというのは確かにある・・・のだが、Promptyが果たしてそれに対する回答なのかは正直わからない。とりあえず情報があまりない、ように思える。
といいつつ、自分はGitHub上のコンテンツを見てたけど、公式ドキュメントのほうがもっといろいろ情報はありそう。特にGuidesのところとかを見ると、トレーシングについても書かれている。
もう少し自分は様子見したい感じ。