POML(Prompt Orchestration Markup Language)は、Microsoftが開発した新しいマークアップ言語で、大規模言語モデル(LLM)用の高度なプロンプトのエンジニアリングで遭遇する課題に対処するために特別に設計されている。POMLは、HTMLに似た構造化された構文とCSSに似たスタイルシステムを提供することで、プロンプトの内容をプレゼンテーションから分離する。この設計により、プロンプトの可読性、保守性、再利用性が向上するだけでなく、 開発者は専用のタグを通してテキスト、テーブル、画像などの複数の外部データソースを シームレスに埋め込むことができる。さらに、複雑なプロンプトを動的に生成するための変数、ループ、および条件判定をサポートする組み込みのテンプレートエンジンを備えている。POML は、開発者が複雑な LLM アプリケーションをより効率的に構築およびテストできるように、VS Code プラグインおよび多言語 SDK を含む開発ツールも提供している。
機能一覧
- 構造化マークアップ構文(SMG)HTMLのようなタグ(例えば
<role>
,<task>
,<example>
)を使ってキュー・ワードを整理し、可読性と再利用性を高めるモジュール設計を可能にしている。 - 多様化するデータ処理:: 採用
<document>
,<table>
,<img>
など、外部データを直接埋め込んだり参照したり、フォーマットをカスタマイズできる特殊なコンポーネントがある。 - コンテンツとスタイルの分離CSSのようなスタイルシステム。
<stylesheet>
またはインライン属性により、コアロジックを変更することなく出力形式(冗長度、構文形式など)を調整することができます。 - 内蔵テンプレートエンジン:: の使用をサポートする。
{{ }}
変数、for
サイクル、if
条件付き判定と<let>
データ駆動型キューワードの動的生成のための変数定義。 - 豊富な開発ツールシンタックスハイライト、オートコンプリート、リアルタイムプレビュー、エラー診断をサポートするVisual Studio Codeプラグインを提供します。
- 多言語SDKNode.js(JavaScript/TypeScript)とPythonのソフトウェア開発キットを提供し、既存のワークフローやLLMフレームワークへの統合を容易にします。
ヘルプの使用
POMLは、マークアップ言語、開発ツール、SDKを提供することで、複雑なキューの作成、テスト、保守のプロセスを簡素化します。以下では、POMLのインストール方法と使用方法について詳しく説明します。
1.インストール
POMLにはさまざまなインストール方法があり、開発者は作業環境に応じて最適な方法を選択できる。
Visual Studio Codeプラグイン
プラグインは開発を強化するための豊富な機能を提供するので、これを始めるには最もお勧めの方法だ。
- Visual Studio Codeを開く。
- 左側のアクティビティバーにある「拡張機能」アイコンをクリックします。
- 検索ボックスに「POML」と入力する。
- 正式にリリースされたプラグインを探し、「インストール」をクリックします。
プラグインをインストールすると、シンタックスハイライト、コード自動補完、ホバー・ドキュメント・プロンプト、ライブ・プレビュー、エラーチェックが利用できるようになる。
Node.js (NPM)
あなたのプロジェクトがNode.js環境に基づいている場合、POMLのJavaScript/TypeScriptライブラリをnpm経由でインストールすることができます。
npm install pomljs
Python (PyPI)
Python開発者のために、POMLライブラリはpip経由でインストールできる。
pip install poml
クローンしたGitHubリポジトリからローカル開発インストールを行う場合は、以下のコマンドを使用できます:
pip install -e .
2.LLMモデルの設定
VS Codeプラグインでプロンプトの単語をテストするには、使用するBig Language Model APIを設定する必要があります。
- VS Codeのメニューバーから
文件 > 首选项 > 设置
設定画面を開く。 - 検索ボックスに "POML "と入力し、該当する設定項目を探します。
- お使いのモデルプロバイダ(OpenAI、Azure、Googleなど)に応じて、以下の情報を設定します:
- モデル・プロバイダーモデルプロバイダーを選択してください。
- APIキーAPIキーを入力してください。
- エンドポイントURLモデルのAPIエンドポイントのアドレスを記入する。
また、この設定情報を直接settings.json
ドキュメンテーション
3.最初のPOML文書の作成
POMLの構文は非常に直感的で、HTMLに似ている。以下は基本的な例で、次のように保存する。example.poml
ドキュメンテーション
<poml>
<role>你是一位耐心的老师,正在向一个10岁的孩子解释概念。</role>
<task>参考提供的图片,解释光合作用的概念。</task>
<img src="photosynthesis_diagram.png" alt="光合作用示意图" />
<output-format>
让解释保持简单、有趣,并且不超过100个字。
开头请说“你好,未来的科学家!”。
</output-format>
</poml>
コードの説明
<poml>
すべてのコンテンツのルートタグ。<role>
LLMに期待される役割を定義する。<task>
LLMが完了する必要のある具体的なタスクについて説明する。<img>
文脈の参照として画像を埋め込む。src
属性はローカル画像ファイルのパスを指す。<output-format>
出力コンテンツのフォーマット要件を明示的に指定する。
4.コア・シンタックスと機能操作
データの埋め込み
POMLの最も強力な特徴のひとつは、異なるタイプのデータを簡単に統合できることだ。
- (さんぷ使用
<document>
タグは外部テキストファイルに埋め込まれる。
<document src="./report.txt" />
- ひょうけいしき使用
<table>
タブはテーブルデータを直接定義することも、CSVファイルを参照することもできます。
<table src="./data.csv" />
テンプレートエンジン
POMLには、キューワードのコンテンツを動的に生成するテンプレート機能が組み込まれています。
- バリアント使用
<let>
変数を定義し{{ }}
テキストで使用する。
<let name="concept">光合作用</let>
<task>请解释什么是{{concept}}。</task>
- サイクル使用
for
属性はデータを走査する。
<let name="topics" type="json">["光合作用", "细胞呼吸", "基因遗传"]</let>
<task>
请依次解释以下概念:
<for each="item" in="topics">- {{item}}
</for>
</task>
- 条件付き判定使用
if
属性を使って、条件に応じて異なるコンテンツを生成することができる。
<let name="is_simple" type="boolean">true</let>
<if condition="is_simple">
<task>请用简单的语言解释这个概念。</task>
</if>
スタイライゼーション
とおす<stylesheet>
タグは、CSSと同じようにキュー・ワードの「スタイル」を定義し、コンテンツとフォーマットを分離します。これにより、LLMによって異なる書式の好みに対応することができます。
<stylesheet>
task {
format: "markdown";
verbosity: "high";
}
</stylesheet>
<task>解释黑洞的形成过程。</task>
この例では<task>
タグの内容は、スタイルシートによって定義された非常に詳細なMarkdownフォーマットでLLMに表示される。
アプリケーションシナリオ
- 複雑な対話インテリジェンスの構築
接客ボットやパーソナルアシスタントを開発する場合、複数の対話ラウンド、外部ナレッジベース、可変出力フォーマットに対応する必要があります。対話ロジック、ユーザー情報、文書データ、および出力要件は、POMLを使用してモジュール管理できるため、プロンプトが明確に構造化され、メンテナンスや拡張が容易になります。 - コンテンツの自動生成
レポート作成、コード作成、マーケティングコピー作成などのシナリオでは、POMLのテンプレートエンジンを使用して、データ(CSVファイルやJSONデータなど)と固定テキスト構造を動的に組み合わせることにより、高度にカスタマイズされたコンテンツをバッチで生成することができます。 - 教育・訓練ツール
ダイナミックな学習教材が作成できる。例えば、同じ科学的概念(例:光合成)を説明するために使用される言語のスタイルや詳細のレベルは、生徒の年齢に応じて(変数として)動的に適合させることができ、写真や表などのさまざまなメディアを使用して説明することができます。 - マルチモーダル・アプリケーション開発
テキストや画像など複数の入力を扱う必要があるLLMアプリケーションに対して、POMLは統一されたインターフェースを提供する。例えば、画像解析ツールを開発する場合<task>
分析タスクを<img>
タグは、分析する画像を<output-format>
分析結果をJSON形式で出力することを指定します。
品質保証
- POMLとは?どのような問題を解決するのですか?
POML は大規模言語モデル(LLM)用に設計されたマークアップ言語である。主に、複雑なプロンプトを記述する際に遭遇する、わかりにくい構造、困難なデータ統合、多様なフォーマット要件、専門的なツールサポートの欠如といった問題を解決し、プロンプトの開発と保守をより体系的かつ効率的にする。 - POMLとプロンプトを直接書くことの違いは何ですか?
POML は、Web ライクな構造(HTML)、スタイル(CSS)、および動的機能(テンプレートエンジン)を提供し、プロンプトのさまざまな部分(役割、タスク、データ、フォーマット要件など)を切り離すことで、読みやすく、変更しやすく、再利用しやすくする。 - POMLを使うために、まったく新しい言語を学ぶ必要がありますか?
POMLの構文はHTMLをベースにしており、非常に直感的で理解しやすい。マークアップ言語(HTMLやXMLなど)の経験があれば、POMLをすぐに使い始めることができます。公式のVS Codeプラグインを使えば、学習曲線も大幅に短縮できます。 - POMLの使用はLLMとの対話パフォーマンスに影響するか?
POMLファイルは、LLMに送信される前に、SDKやツールを使用して最終的なプレーンテキストまたはマルチモーダルリクエストに「レンダリング」されます。したがって、最終的なAPIリクエストに余分なオーバーヘッドを追加することなく、開発フェーズの効率を改善するためのツールです。