POML(Prompt Orchestration Markup Language)是微软公司开发的一种新型标记语言,专门用于解决大型语言模型(LLM)高级提示词工程中遇到的挑战。在实际应用中,复杂的提示词往往缺乏有效的组织结构,难以集成多种数据格式,并且容易受到模型对特定格式的敏感性影响。POML通过提供一套类似HTML的结构化语法和类似CSS的样式系统,将提示词的内容与表现形式分离。这种设计不仅提升了提示词的可读性、可维护性和可重用性,还允许开发者通过专门的标签无缝嵌入文本、表格、图片等多种外部数据源。此外,它内置了模板引擎,支持变量、循环和条件判断,可以动态生成复杂的提示词。POML还提供包括VS Code插件和多语言SDK在内的开发工具,帮助开发者更高效地构建和测试复杂的LLM应用。
Lista de funções
- 结构化标记语法: 使用类似HTML的标签(如
<role>
,<task>
,<example>
)来组织提示词,实现模块化设计,增强可读性和可重用性。 - 多样化数据处理:: Adoção
<document>
,<table>
,<img>
等专用组件,可以直接嵌入或引用外部数据,并自定义格式。 - 内容与样式分离: 类似CSS的样式系统,允许通过
<stylesheet>
或内联属性来调整输出格式(如冗长程度、语法格式),而不必修改核心逻辑。 - 内置模板引擎: 支持使用
{{ }}
变量、for
循环、if
条件判断和<let>
变量定义,用于动态生成数据驱动的提示词。 - 丰富的开发工具: 提供Visual Studio Code插件,支持语法高亮、自动补全、实时预览和错误诊断等功能。
- SDK em vários idiomas: 提供Node.js(JavaScript/TypeScript)和Python的软件开发工具包,方便将其集成到现有工作流和LLM框架中。
Usando a Ajuda
POML通过提供标记语言、开发工具和SDK,简化了创建、测试和维护复杂提示词的流程。下面将详细介绍如何安装和使用POML。
1. instalação
POML提供了多种安装方式,开发者可以根据自己的工作环境选择最合适的一种。
Visual Studio Code 插件
这是最推荐的入门方式,因为插件提供了丰富的功能来提升开发效率。
- Abra o Visual Studio Code.
- 在左侧的活动栏中点击“扩展”图标。
- 在搜索框中输入“POML”。
- 找到官方发布的插件并点击“安装”。
安装插件后,你将获得语法高亮、代码自动补全、悬停文档提示、实时预览和错误检查等功能。
Node.js (NPM)
如果你的项目基于Node.js环境,可以通过npm来安装POML的JavaScript/TypeScript库。
npm install pomljs
Python (PyPI)
对于Python开发者,可以通过pip来安装POML库。
pip install poml
如果你希望从克隆的GitHub仓库进行本地开发安装,可以使用以下命令:
pip install -e .
2. 配置LLM模型
为了在VS Code插件中测试提示词,你需要配置所使用的大语言模型API。
- 在VS Code中,通过菜单栏
文件 > 首选项 > 设置
打开设置界面。 - 在搜索框中输入“POML”,找到相关配置项。
- 根据你的模型提供商(如OpenAI, Azure, Google等)设置以下信息:
- Provedor modelo: 选择你的模型提供商。
- Chave da API: 填入你的API密钥。
- Endpoint URL: 填入模型的API端点地址。
你也可以直接将这些配置信息添加到你的settings.json
Documentação.
3. 编写第一个POML文件
POML的语法非常直观,类似HTML。下面是一个基础示例,将其保存为example.poml
Documentação.
<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. 核心语法与功能操作
Incorporação de dados
POML最强大的功能之一是能够轻松集成不同类型的数据。
- Arquivo (de computador): Uso
<document>
标签嵌入外部文本文件。
<document src="./report.txt" />
- tabular: Uso
<table>
标签可以直接定义表格数据或引用CSV文件。
<table src="./data.csv" />
模板引擎
POML内置了模板功能,可以动态生成提示词内容。
- variante: Uso
<let>
定义变量,并通过{{ }}
在文本中使用。
<let name="concept">光合作用</let>
<task>请解释什么是{{concept}}。</task>
- ciclo: Uso
for
属性遍历数据。
<let name="topics" type="json">["光合作用", "细胞呼吸", "基因遗传"]</let>
<task>
请依次解释以下概念:
<for each="item" in="topics">- {{item}}
</for>
</task>
- 条件判断: Uso
if
属性来根据条件生成不同内容。
<let name="is_simple" type="boolean">true</let>
<if condition="is_simple">
<task>请用简单的语言解释这个概念。</task>
</if>
样式化
aprovar (um projeto de lei ou inspeção etc.)<stylesheet>
标签,可以像CSS一样定义提示词的“样式”,将内容和格式分离。这有助于应对不同LLM对特定格式的偏好。
<stylesheet>
task {
format: "markdown";
verbosity: "high";
}
</stylesheet>
<task>解释黑洞的形成过程。</task>
Neste exemplo, o<task>
标签的内容将根据样式表的定义,以高详细度的Markdown格式呈现给LLM。
cenário do aplicativo
- 构建复杂的对话智能体
在开发客服机器人或个人助理时,需要处理多轮对话、外部知识库和多变的输出格式。可以使用POML将对话逻辑、用户信息、文档数据和输出要求进行模块化管理,使提示词结构清晰,易于维护和扩展。 - Geração automatizada de conteúdo
在报告生成、代码编写或营销文案创作等场景中,可以通过POML的模板引擎,将数据(如CSV文件、JSON数据)与固定的文本结构动态组合,批量生成高度定制化的内容。 - 教育和培训工具
可以创建一个动态的学习辅助工具。例如,根据学生的年龄(作为变量),动态调整解释同一科学概念(如光合作用)的语言风格和详细程度,并结合图片、表格等多种媒体进行说明。 - Desenvolvimento de aplicativos multimodais
对于需要处理文本、图像等多种输入的LLM应用,POML提供了统一的接口。例如,在开发一个图像分析工具时,可以用<task>
描述分析任务,用<img>
标签传入待分析的图片,用<output-format>
指定输出JSON格式的分析结果。
QA
- POML是什么?它解决了什么问题?
POML是一种专为大型语言模型(LLM)设计的标记语言。它主要解决了在编写复杂提示词时遇到的结构混乱、数据集成困难、格式要求多变以及缺乏专业工具支持等问题,让提示词的开发和维护变得更加系统和高效。 - POML与直接编写文本提示词有什么区别?
直接编写文本提示词就像在记事本里写代码,虽然简单,但当逻辑变复杂时会变得难以管理。POML则提供了类似网页开发的结构(HTML)、样式(CSS)和动态能力(模板引擎),将提示词的不同部分(如角色、任务、数据、格式要求)解耦,使其更易于阅读、修改和重用。 - 我是否需要学习一种全新的语言才能使用POML?
不需要。POML的语法设计借鉴了HTML,非常直观易懂。如果你有任何标记语言(如HTML或XML)的使用经验,会发现上手POML非常快。官方提供的VS Code插件也极大地降低了学习门槛。 - 使用POML是否会影响与LLM的交互性能?
不会。POML本身不直接与LLM交互。POML文件在使用SDK或工具时会被“渲染”成一个最终的纯文本或多模态请求,然后才发送给LLM。因此,它是一个在开发阶段提升效率的工具,不会给最终的API请求增加额外开销。