工程实践

DPML:一种结构化的 Prompt 标记语言设计方案

Sean2 分钟阅读

DPML:一种结构化的 Prompt 标记语言设计方案

基本定义

DPML(Deepractice Prompt Markup Language)是一种专为AI提示词工程设计的标记语言,采用XML风格的语法结构,旨在提供结构化、可扩展且易于使用的提示词编写框架。

设计思想

当提示词的量级和复杂度达到一定水平后,我们需要一种通用的模式去管理提示词。这种通用的模式既要考虑人与大模型的易理解性(易读,职责单一,逻辑清晰),也要考虑计算机的可解释性(方便计算机系统解析,运算,验证,可视化等功能)。

我们的设计原则是简单(奥卡姆剃刀)、模块化(可复用)、可扩展(支持迭代)

我们信奉 Unix 的设计哲学 "Everything is a file.",这在AI时代非常具有意义,将 AI、人类、计算机有效地连接在一起。

核心特点

  1. 结构化:使用标签定义不同功能模块
  2. 可扩展:支持模块化设计和渐进式复杂性
  3. 易于理解:对人类和机器都友好的语法结构
  4. 可视化潜力:便于开发编辑器和可视化工具

顶层结构

<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 管理系统
  • 持续实践输出领域模版