Build 2024 のいくつかのセッションで取り上げていた Prompty が良さそうです。先日の Azure Travelers 勉強会 の LT でも紹介しましたが、ブログにもまとめておきます。
gooner.hateblo.jp
Prompty とは
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: https://<your-endpoint>.openai.azure.com 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}}
{{ }} で囲まれた firstName、context、question は変数になっており、アプリケーションへ組み込む際には値を引き渡すことができます。
Azure AI Studio などのプレイグラウンドでプロンプトを試行錯誤するなら、VS Code 拡張機能をインストールしてローカルで Prompty を使ったほうが便利です。
marketplace.visualstudio.com
VS Code から .prompty 拡張子のファイルを実行できるようになります。
接続先の LLM 資格情報は、settingsjson に定義します。Microsoft Entra ID で認証することもできます。
{ "prompty.modelConfigurations": [ { "name": "default", "type": "azure_openai", "api_version": "2023-12-01-preview", "azure_endpoint": "https://xxx.openai.azure.com/", "azure_deployment": "gpt-35-turbo-16k", "api_key": "xxx", }, { "name": "gpt-3.5-turbo", "type": "openai", "api_key": "", "organization": "" } ], }
アプリケーションへの組み込み
Prompty は、Prompt flow、Langchain、Semantic Kernel とも統合されているので、ソースコードに文字列でプロンプトをハードコーディングする必要がなくなります。
assistant.prompty というファイルを作成し、プロンプトを定義しておきます。
--- name: AssistantPrompt description: AI assistant のサンプルプロンプトです。 model: api: chat configuration: type: azure_openai azure_deployment: gpt-4o parameters: max_tokens: 3000 temperature: 0.7 sample: question: Microsoft Azure とは? --- system: You are an AI assistant that helps people find information. user: {{question}}
Semantic Kernel の場合、下記のようなコードで assistant.prompty からプロンプトを読み込んで実行できます。
#pragma warning disable SKEXP0040 using Microsoft.Extensions.Configuration; using Microsoft.SemanticKernel; using prompty_console_app; var settings = new ConfigurationBuilder() .AddUserSecrets<Program>() .Build() .GetSection(nameof(AzureOpenAISettings)).Get<AzureOpenAISettings>() ?? throw new NullReferenceException(); var builder = Kernel.CreateBuilder(); builder.AddAzureOpenAIChatCompletion(settings.DeploymentName, settings.Endpoint, settings.ApiKey); var kernel = builder.Build(); var prompty = kernel.CreateFunctionFromPromptyFile("assistant.prompty"); while (true) { Console.Write("You: "); var text = Console.ReadLine(); if (string.IsNullOrWhiteSpace(text)) { break; } Console.WriteLine("Assistant:"); await foreach (var result in kernel.InvokeStreamingAsync<string>(prompty, new() { ["question"] = text })) { Console.Write(result); } Console.WriteLine(""); }
このコードを実行すると、AOAI を使った簡単なチャットができます。
また、評価用プロンプトを Prompty にしておいて、使いまわしても良さそうです。
learn.microsoft.com
まとめ
Prompty を使うと、生成 AI アプリケーション開発のプロンプト管理が捗りそうです。
Langchain などのオーケストレーターだけでなく、AOAI の標準ライブラリでも対応してほしいですね。
まだ発表されたばかりのプロダクトなので、今後のアップデートに期待したいです。
今回のサンプルアプリは、こちらで公開しています。
github.com