工程实践
DPML:一种结构化的 Prompt 标记语言设计方案
Sean2 分钟阅读
DPML:一种结构化的 Prompt 标记语言设计方案
基本定义
DPML(Deepractice Prompt Markup Language)是一种专为AI提示词工程设计的标记语言,采用XML风格的语法结构,旨在提供结构化、可扩展且易于使用的提示词编写框架。
设计思想
当提示词的量级和复杂度达到一定水平后,我们需要一种通用的模式去管理提示词。这种通用的模式既要考虑人与大模型的易理解性(易读,职责单一,逻辑清晰),也要考虑计算机的可解释性(方便计算机系统解析,运算,验证,可视化等功能)。
我们的设计原则是简单(奥卡姆剃刀)、模块化(可复用)、可扩展(支持迭代)。
我们信奉 Unix 的设计哲学 "Everything is a file.",这在AI时代非常具有意义,将 AI、人类、计算机有效地连接在一起。
核心特点
- 结构化:使用标签定义不同功能模块
- 可扩展:支持模块化设计和渐进式复杂性
- 易于理解:对人类和机器都友好的语法结构
- 可视化潜力:便于开发编辑器和可视化工具
顶层结构
<prompt>
<role>...</role> <!-- 角色定义、职责、权限 -->
<thinking>...</thinking> <!-- 思考过程、推理链 -->
<executing>...</executing> <!-- 执行步骤、方法 -->
<testing>...</testing> <!-- 质量控制、验证标准 -->
<protocol>...</protocol> <!-- 交互协议、规则 -->
<context>...</context> <!-- 背景信息、环境 -->
<task>...</task> <!-- 任务定义、目标 -->
<workflow>...</workflow> <!-- 工作流、协作模式 -->
</prompt>
通用属性
- id:标签的唯一标识
- version:版本号(语义化版本格式)
- ref:引用,支持相对路径、绝对路径、id引用、http引用
- schema:提供验证规则元文档
ref 引用功能
ref属性用于引用其他DPML元素或外部资源,实现内容重用和模块化:
<!-- 引用当前文档中的元素 -->
<context ref="#market-data" />
<!-- 引用外部文件中的元素 -->
<role ref="./templates/analyst.xml">
<identity>资深金融分析师</identity>
<specialization>新兴市场</specialization>
</role>
渐进式复杂性
因为大模型本身具有类人的思考能力,无需像计算机一样制定非常详细的规则。我们目前可以基于DPML和Markdown的结合,在二级标签之下使用Markdown定义提示词,既提供了灵活性、可读性,又实现了结构化、模块化。
应用实例
<prompt version="1.0" id="frontend-developer-assistant">
<role id="frontend-engineer">
# 资深前端工程师
## 专业背景
* 5年以上前端开发经验
* 精通HTML5、CSS3和JavaScript(ES6+)
* 熟悉主流前端框架:React、Vue、Angular
## 工作范围
* 提供前端开发相关的代码实现和优化建议
* 解答前端技术问题和最佳实践
* 提供前端架构和技术选型建议
</role>
<thinking id="problem-solving-approach">
# 问题分析框架
## 代码问题分析流程
1. **问题理解**:明确问题描述和预期结果
2. **情境分析**:分析代码上下文和执行环境
3. **解决方案评估**:生成多种可能的解决方案
</thinking>
</prompt>
未来发展
- 引入
<meta>标签定义元信息 - 引入
<llm><mcp><tool><rag>等 Agent 组装和交互要素 - 开发可视化、解释器、IDE插件等配套工具
- 定义 DPML schema 的 XSD 规则
- 基于 DPML 开发 Prompt 管理系统
- 持续实践输出领域模版