> ## Content Index
> Fetch the complete content index at: https://www.hubwiz.com/blog/llms.txt
> Use this file to discover other available public pages before exploring further.

# POML：提示编程语言
- URL: https://www.hubwiz.com/blog/poml-programming-language-for-prompting/
- Published: 2025-08-19T12:58:53.000Z
- Updated: 2025-08-19T12:58:53.000Z
- Description: 我遇到了微软的POML，提示编排标记语言，这在我和直接编写自然提示之间又多了一个步骤。那种感觉像真正的语言的提示。
- Author: admin
- Tags: PROMPT ENGINEERING, POML, #Import 2026-10-14 14:41

我遇到了微软的[POML](https://github.com/microsoft/poml?source=post%5Fpage-----adfc846387a4---------------------------------------)，提示编排标记语言，这在我和直接编写自然提示之间又多了一个步骤。那种感觉像真正的语言的提示。

**他们说POML为提示工程提供了“结构、可维护性和灵活性”**。这是营销术语，意思是：

> 当提示变得冗长、混乱，并被三个时区中的五个不同团队重复使用时，你不会失去理智。

## 1、POML关键特性

当涉及到结构化提示工程时，POML看起来非常强大

**1\. 支持除图像以外的多种文件类型**

- **Word文档**、**PDF**、**CSV**、**音频文件**，甚至**整个文件夹**都可以通过`<document>`或`<table>`等数据组件嵌入到提示中。
- 你不再仅限于静态文本或图像。提示现在可以是**数据丰富的**，并且具有上下文，看起来更像一份完整的报告，而不是一个句子。

**2\. 在VS Code中的真实编码体验**

- 有一个专门用于POML的**VS Code扩展**，提供：

> **实时预览** **在编辑器内直接测试** 像写代码一样管理提示，这基本上将提示工程变成了软件工程。

**3\. 组件类别**

- **逻辑/格式组件**：如段落或列表。
- **意图组件**：如`<role>`、`<task>`、`<example>`。
- **数据组件**：如`<image>`、`<document>`、`<table>`，用于注入结构化的外部数据。

**4\. 实际提示工程构造的示例**

- 使用`<example>`进行少样本提示，带有明确标记的`<input>`和`<output>`子组件。
- **多模态提示**：例如，使用`syntax="multimedia"`嵌入图像，供支持视觉的LLM使用。
- **替代文本回退**：对于不支持图像的模型，使用替代文本。

**5\. 提示逻辑和控制流**

- 使用`let`变量
- 使用`for`循环，访问`loop.index`
- 使用`index + 1`动态生成编号列表

**6\. QA专用标签**

- 有一个`<qa>`标签，可以干净地将**客户的问题**与响应分开——将提示变成支持代理。

**7\. 通过样式表进行提示样式设置**

- 你可以附加**样式表**来全局强制执行视觉或结构规则（比如强制所有标题为大写）。
- 这不仅仅是功能性的，还关乎让提示对人类来说易于阅读和维护。

**8\. 之前未提及的新标签**

- `<hint>`：添加上下文指导以帮助LLM
- `<cp>`（带标题的段落）：用于创建有标题的部分
- `<let>`和`<for>`：将模板逻辑带入提示中

这些新增功能表明，POML远不止是一种更整洁的提示格式。它正在演变为一个**完整的提示编程接口**，数据感知、可重用、模块化且可测试，并且有紧密的IDE支持。新细节让它感觉像**Jupyter Notebook与HTML结合用于LLM**。

## 2、POML到底是什么？

核心上，它是一种标记语言。这意味着它使用类似于HTML的标签。例如：`<role>`、`<task>`和`<example>`。

你使用这些标签将提示分成部分。所以，与其把一个20行的提示块放入文本文件，你现在有了结构。想象一下，给你的LLM一个整齐打包的午餐盒，而不是一堆杂乱的剩菜。

你也可以嵌入：

```
<img>    — 用于图像    
<document> — 附加参考文本    
<table>  — 如果你的提示包含表格数据

```

> 现在你的提示可以说，“嘿模型，看看这个图表”或者“参考这个PDF”，而不需要将整个内容内联。

它甚至有一个样式系统，有点像CSS。你可以通过应用样式来调整提示的冗长或正式程度。想想看：你改变语气而不必重写内容。

而且，是的，模板化。这部分事情变得真正接近编程：

- 你可以使用`{{ variable_name }}`设置变量
- 添加`<let>`来定义它们
- 使用条件语句如`if`语句
- 即使是循环。

> 这意味着你的提示可以说：“如果用户的语言是法语，就做这个。否则，就做那个。”之类的事情。

## 3、微软的风格：开发工具

这不仅仅是一个规范。微软推出了一个完整的工具包。

- **VSCode扩展**：自动补全、标签建议、错误高亮、预览。
- **Python和Node.js SDK**：让你将POML提示插入你的应用程序逻辑。
- 没有**C#/.NET** SDK，这很疯狂。微软创造了这个东西，却甚至没有给自己的主要开发生态系统一点支持。经典。

> 你在POML中编写提示，SDK将其编译成纯文本提示，然后发送给LLM。可以把POML看作是一个结构化的蓝图，在模型看到它之前就被扁平化了。

## 4、示例

```
<poml>  
  <role>你是一个风趣的科学传播者，使用类比和讽刺让复杂的想法变得有趣。</role>  
  <task>描述火箭如何进入太空，使用提供的图像作为参考。</task>  

  <img src="rocket_launch_diagram.png" alt="火箭发射图示" />  

  <output-format>  
    保持简洁、幽默，不超过120个字。  
    以“好了，系好安全带，太空中尉！”开头。  
  </output-format>  
</poml>

```

这个例子为LLM设定了一个轻松、讽刺的语气，定义了一个与火箭发射相关的任务，并包含了一张图像用于视觉基础。输出格式引导模型保持简洁和幽默，有特定的开头和字数限制。使用POML，这个结构化的提示可以清晰地组织、重用和测试，与支持视觉的LLM一起使用以保持一致的行为。

## 5、网上人们怎么说

我在Reddit和Hacker News上查找了一下。这里有一些反响：

- *“LLM不在意格式，除非它们被训练过。”*  
公平。如果你的模型不知道如何读取标签，它可能会忽略它们，甚至更糟，会卡住。
- *“这感觉像是让LLM去编程。”*  
是的。编写提示的工具现在成为一个程序，这个程序构建程序，然后生成代码。
- *“这不是为LLM设计的结构，而是为那些在混乱工作流中编写提示的开发者设计的。”* 可能是最诚实的观点。这有助于*人类*保持理智，特别是当提示不只是单次使用的时候。
- 是的，缺少C# SDK？这不只是我一个人的看法。其他人也提出了疑问。

## 6、我实际上喜欢它的地方

好了，现在我已经批评了一些……这里让我在扔掉它之前暂停一下：

- **我现在的提示只是……一团糟**。有时更改一个词就会破坏整个输出。添加结构可能有助于我*看到*什么在变化以及*为什么*。
- 重复的模式，比如在不同任务中使用相同的结构，可能会让模型更加可预测，尤其是如果它被训练过类似的标记的话。
- 开发工具流畅。VSCode的自动补全是节省实际时间的东西，尤其是在语法变得笨拙的时候。
- 使用变量和逻辑编写可重用的提示？这可能会减少很多复制粘贴的垃圾。

## 7、一些问题

- 它是另一个抽象。我已经有了文本→LLM。现在是文本→标记→编译→LLM。更多的移动部件。更多的失败点。
- 它*感觉*很沉重。就像我们又在建造2005年的网站。冗长的标签。括号汤。这并不优雅。
- 没有.NET支持。我用C#编写工具。这意味着我必须拼凑出一些东西才能在我的堆栈中使用它。
- 而且说实话，除非模型被训练成*期望*这种格式……有什么意义呢？你只是用嘈杂的标签包装干净的文本。

## 8、如果你刚接触这个，我会告诉你什么

> 尝试一下。但不要承诺。

拿两个你已经写的提示。用POML重写它们。使用VSCode扩展。看看感觉如何。不要读完整个规范，只需模仿一些例子。

问问自己：

- 更容易维护吗？
- 是否帮助你更清楚地思考模型应该做什么？
- 是否让与其他人的协作更容易？

> 关键的是：**有没有破坏任何东西？**

如果LLM的行为有所改善，或者至少没有变得更糟，那么可能值得使用。如果它让一切变慢、更复杂、更难读，那就放弃吧。回到纯文本。没有奖励去使用最新的格式。

**是的，如果你想要写一个奇怪的、带有`<let>`循环或`<img>`嵌入的模板化提示，我会在这里。这些东西很混乱，但有时候好主意就藏在那里。**

---

原文链接：[Microsoft POML : Programming Language for Prompting](https://medium.com/data-science-in-your-pocket/microsoft-poml-programming-language-for-prompting-adfc846387a4?ref=hubwiz.com)

汇智网翻译整理，转载请标明出处