POML (Prompt Orchestration Markup Language) ist eine neue, von Microsoft entwickelte Markup-Sprache, die speziell für die Herausforderungen bei der Entwicklung fortgeschrittener Prompts für große Sprachmodelle (LLMs) entwickelt wurde. In der Praxis mangelt es komplexen Prompts oft an einer effektiven Organisationsstruktur, es ist schwierig, mehrere Datenformate zu integrieren, und sie sind anfällig für die Empfindlichkeit des Modells gegenüber bestimmten Formaten.POML trennt den Inhalt der Prompts von ihrer Darstellung, indem es eine strukturierte Syntax ähnlich wie HTML und ein Stilsystem ähnlich wie CSS bereitstellt. Dieses Design verbessert nicht nur die Lesbarkeit, Wartbarkeit und Wiederverwendbarkeit von Prompts, sondern ermöglicht es Entwicklern auch, mehrere externe Datenquellen wie Text, Tabellen, Bilder usw. durch spezielle Tags nahtlos einzubinden. Darüber hinaus verfügt POML über eine integrierte Template-Engine, die Variablen, Schleifen und bedingte Entscheidungen unterstützt, um komplexe Prompts dynamisch zu generieren. POML bietet auch Entwicklungstools wie VS-Code-Plug-ins und mehrsprachige SDKs, die Entwicklern helfen, komplexe LLM-Anwendungen effizienter zu erstellen und zu testen.
Funktionsliste
- strukturierte Auszeichnungssyntax (SMG): Verwenden Sie HTML-ähnliche Tags (wie
<role>
,<task>
,<example>
), um Stichwortwörter zu organisieren, was einen modularen Aufbau ermöglicht, der die Lesbarkeit und Wiederverwendbarkeit verbessert. - Vielfältige Datenverarbeitung:: Adoption
<document>
,<table>
,<img>
und andere spezialisierte Komponenten, mit denen externe Daten direkt eingebettet oder referenziert und das Format angepasst werden kann. - Trennung von Inhalt und StilEin CSS-ähnliches Stylesystem, das die Verwendung der
<stylesheet>
oder Inline-Attribute, um das Ausgabeformat (z. B. Redundanzgrad, Syntaxformat) anzupassen, ohne die Kernlogik ändern zu müssen. - Eingebaute Template-Engine:: Unterstützung für die Verwendung von
{{ }}
Variablen,for
Zyklus,if
Bedingte Urteile und<let>
Variablendefinition für die dynamische Generierung von datengesteuerten Stichwörtern. - Umfangreiche EntwicklungswerkzeugeBietet ein Visual Studio Code Plug-in, das Syntaxhervorhebung, Autovervollständigung, Echtzeitvorschau und Fehlerdiagnose unterstützt.
- Mehrsprachiges SDKBietet Softwareentwicklungskits für Node.js (JavaScript/TypeScript) und Python zur einfachen Integration in bestehende Arbeitsabläufe und LLM-Frameworks.
Hilfe verwenden
POML vereinfacht das Erstellen, Testen und Pflegen komplexer Cues durch die Bereitstellung einer Auszeichnungssprache, von Entwicklungstools und eines SDK. Im Folgenden finden Sie Einzelheiten zur Installation und Verwendung von POML.
1. der Einbau
POML bietet eine Vielzahl von Installationsmethoden, und die Entwickler können die für ihre Arbeitsumgebung am besten geeignete Methode wählen.
Visual Studio Code-Plugin
Dies ist der empfehlenswerteste Weg für den Einstieg, da Plugins eine Fülle von Funktionen zur Verbesserung der Entwicklung bieten.
- Öffnen Sie Visual Studio Code.
- Klicken Sie auf das Symbol "Erweiterungen" in der Aktivitätsleiste auf der linken Seite.
- Geben Sie "POML" in das Suchfeld ein.
- Suchen Sie das offiziell freigegebene Plugin und klicken Sie auf "Installieren".
Nach der Installation des Plugins erhalten Sie Syntax-Hervorhebung, automatische Code-Vervollständigung, Hover-Dokumentaufforderungen, Live-Vorschau und Fehlerprüfung.
Node.js (NPM)
Wenn Ihr Projekt auf einer Node.js-Umgebung basiert, können Sie die JavaScript/TypeScript-Bibliotheken von POML über npm installieren.
npm install pomljs
Python (PyPI)
Für Python-Entwickler kann die POML-Bibliothek über pip installiert werden.
pip install poml
Wenn Sie eine lokale Entwicklungsinstallation aus einem geklonten GitHub-Repository durchführen möchten, können Sie den folgenden Befehl verwenden:
pip install -e .
2. das LLM-Modell zu konfigurieren
Um Prompt-Wörter im VS Code-Plugin testen zu können, müssen Sie die verwendete Big Language Model API konfigurieren.
- In VS Code, über die Menüleiste
文件 > 首选项 > 设置
Öffnen Sie den Bildschirm Einstellungen. - Geben Sie "POML" in das Suchfeld ein, um das entsprechende Konfigurationsobjekt zu finden.
- Stellen Sie die folgenden Informationen entsprechend Ihrem Modellanbieter ein (z. B. OpenAI, Azure, Google usw.):
- Modell-Anbieter: Wählen Sie Ihren Modellanbieter.
- API-SchlüsselGeben Sie Ihren API-Schlüssel ein.
- Endpunkt-URLAdresse des API-Endpunkts des Modells eingeben.
Sie können diese Konfigurationsinformationen auch direkt in Ihresettings.json
Dokumentation.
3. die Erstellung des ersten POML-Dokuments
Die Syntax von POML ist sehr intuitiv und ähnelt der von HTML. Hier ist ein einfaches Beispiel, speichern Sie es alsexample.poml
Dokumentation.
<poml>
<role>你是一位耐心的老师,正在向一个10岁的孩子解释概念。</role>
<task>参考提供的图片,解释光合作用的概念。</task>
<img src="photosynthesis_diagram.png" alt="光合作用示意图" />
<output-format>
让解释保持简单、有趣,并且不超过100个字。
开头请说“你好,未来的科学家!”。
</output-format>
</poml>
Code-Erläuterung.
<poml>
Der Stamm-Tag für alle Inhalte.<role>
Definiert die Rolle, die das LLM spielen soll.<task>
Beschreibt die spezifischen Aufgaben, die vom LLM erledigt werden müssen.<img>
: Ein Bild als kontextuelle Referenz einbetten.src
verweist auf den Pfad der lokalen Bilddatei.<output-format>
Formatierung: Spezifiziert explizit die Formatierungsanforderungen für den Ausgabeinhalt.
4. die Kernsyntax und die funktionalen Operationen
Dateneinbettung
Eine der leistungsfähigsten Funktionen von POML ist die Möglichkeit, verschiedene Datentypen problemlos zu integrieren.
- (Computer-)Datei: Verwendung
<document>
Tags werden in externe Textdateien eingebettet.
<document src="./report.txt" />
- tabellarisch: Verwendung
<table>
Registerkarten können direkt Tabellendaten definieren oder auf CSV-Dateien verweisen.
<table src="./data.csv" />
Template-Engine
POML verfügt über eine eingebaute Vorlagenfunktion zur dynamischen Generierung des Inhalts von Stichworten.
- Variante: Verwendung
<let>
Definieren Sie die Variablen und übergeben Sie die{{ }}
Verwendung im Text.
<let name="concept">光合作用</let>
<task>请解释什么是{{concept}}。</task>
- Zyklus: Verwendung
for
Attribut durchläuft die Daten.
<let name="topics" type="json">["光合作用", "细胞呼吸", "基因遗传"]</let>
<task>
请依次解释以下概念:
<for each="item" in="topics">- {{item}}
</for>
</task>
- Vorbehaltsurteil: Verwendung
if
Attribut, um je nach Bedingungen unterschiedliche Inhalte zu erzeugen.
<let name="is_simple" type="boolean">true</let>
<if condition="is_simple">
<task>请用简单的语言解释这个概念。</task>
</if>
Stilisierung
passieren (eine Rechnung oder Inspektion etc.)<stylesheet>
Tag, der den "Stil" des Stichworts auf die gleiche Weise wie CSS definiert und den Inhalt von der Formatierung trennt. Dies trägt dazu bei, den unterschiedlichen Vorlieben der LLM für bestimmte Formate gerecht zu werden.
<stylesheet>
task {
format: "markdown";
verbosity: "high";
}
</stylesheet>
<task>解释黑洞的形成过程。</task>
In diesem Beispiel ist die<task>
Der Inhalt des Tags wird dem LLM in einem sehr detaillierten Markdown-Format präsentiert, das durch das Stylesheet definiert ist.
Anwendungsszenario
- Aufbau komplexer Dialogintelligenz
Bei der Entwicklung von Customer Service Bots oder persönlichen Assistenten müssen Sie mit mehreren Dialogrunden, externen Wissensdatenbanken und variablen Ausgabeformaten umgehen. Dialoglogik, Benutzerinformationen, Dokumentendaten und Ausgabeanforderungen können mit POML modular verwaltet werden, so dass die Prompts klar strukturiert und einfach zu pflegen und zu erweitern sind. - Automatisierte Erstellung von Inhalten
In Szenarien wie der Berichtserstellung, dem Schreiben von Code oder der Erstellung von Marketingtexten können hochgradig individualisierte Inhalte im Stapelverfahren generiert werden, indem Daten (z. B. CSV-Dateien, JSON-Daten) mit festen Textstrukturen unter Verwendung der POML-Vorlagen-Engine dynamisch kombiniert werden. - Instrumente für Bildung und Ausbildung
Es kann eine dynamische Lernhilfe erstellt werden. So können beispielsweise der Sprachstil und die Ausführlichkeit, mit denen ein und dasselbe wissenschaftliche Konzept (z. B. Photosynthese) erklärt wird, dynamisch an das Alter der Schüler (als Variable) angepasst und mit einer Vielzahl von Medien wie Bildern und Tabellen illustriert werden. - Entwicklung multimodaler Anwendungen
Für LLM-Anwendungen, die mehrere Eingaben wie Text und Bilder verarbeiten müssen, bietet POML eine einheitliche Schnittstelle. Bei der Entwicklung eines Bildanalysewerkzeugs kann man zum Beispiel die<task>
Beschreiben Sie die Analyseaufgabe mit<img>
Tag wird das zu analysierende Bild mit der Option<output-format>
Gibt an, dass die Analyseergebnisse im JSON-Format ausgegeben werden sollen.
QA
- Was ist POML? Welches Problem wird damit gelöst?
POML ist eine Auszeichnungssprache, die für groß angelegte Sprachmodelle (LLMs) entwickelt wurde. Sie löst vor allem die Probleme der verwirrenden Struktur, der schwierigen Datenintegration, der variablen Formatierungsanforderungen und des Mangels an professioneller Toolunterstützung, die beim Schreiben komplexer Prompts auftreten, und macht die Entwicklung und Pflege von Prompts systematischer und effizienter. - Was ist der Unterschied zwischen POML und dem Schreiben von direkten Textaufforderungen?
POML bietet eine webähnliche Struktur (HTML), einen Stil (CSS) und dynamische Funktionen (Template-Engine), die die verschiedenen Teile von Prompts (z. B. Rollen, Aufgaben, Daten, Formatierungsanforderungen) entkoppeln, wodurch sie leichter zu lesen, zu ändern und wiederzuverwenden sind. - Muss ich eine völlig neue Sprache lernen, um POML zu benutzen?
Nein. Die Syntax von POML lehnt sich an HTML an und ist sehr intuitiv und leicht zu verstehen. Wenn Sie Erfahrung mit Auszeichnungssprachen wie HTML oder XML haben, werden Sie sehr schnell mit POML zurechtkommen. Das offizielle VS-Code-Plugin verringert die Lernkurve ebenfalls erheblich. - Hat die Verwendung von POML Auswirkungen auf die interaktive Leistung mit LLM?
Nein. POML selbst interagiert nicht direkt mit dem LLM; die POML-Datei wird bei Verwendung des SDK oder Tools in eine endgültige Klartext- oder multimodale Anfrage "gerendert", bevor sie an den LLM gesendet wird.