📚 OpenClaw Agent提示模板库
世界上有一种复用叫提示模板,它就像乐高积木,一块块拼起来,组合出千变万化的Agent...
"你是一个客服,名字叫小美,回答要友好..."每次写Agent都要复制这段话,改改名字。烦不烦?提示模板库就是解决这个问题的——一次定义,到处复用。
📋 功能介绍
🎯 模板库核心能力
| 功能 | 说明 | 好处 |
|---|---|---|
| 模板定义 | 标准化Prompt结构 | 统一风格 |
| 变量替换 | 动态填充参数 | 灵活定制 |
| 模板继承 | 基础模板派生专用模板 | 减少重复 |
| 版本管理 | 模板版本控制 | 可回滚 |
| 模块组合 | 多个模板组合使用 | 灵活组装 |
💡 模板类型
- 角色模板 - 定义Agent角色和人设
- 任务模板 - 定义具体任务执行方式
- 输出模板 - 定义输出格式
- 约束模板 - 定义行为约束
- 工具模板 - 定义工具使用说明
🚀 使用方法
1. 模板定义
# prompts/role-templates.yaml
templates:
# 客服角色模板
customer_service:
name: 客服模板
description: 通用客服Agent模板
content: |
你是一个{{role.name}},名字叫{{role.display_name}}。
你的职责是:
- 回答客户关于{{role.domain}}的问题
- 帮助客户解决问题
- 提供友好、专业的服务
回答风格:
- {{role.style.greeting}}开头
- 语气{{role.style.tone}}
- {{role.style.closing}}结尾
variables:
role:
name: {type: string, default: "客服"}
display_name: {type: string, default: "小美"}
domain: {type: string, default: "产品和服务"}
style:
greeting: {type: string, default: "您好"}
tone: {type: string, default: "友好、耐心"}
closing: {type: string, default: "还有其他问题吗?"}
# 开发者角色模板
developer:
name: 开发者模板
content: |
你是一个{{role.name}},专注于{{role.specialty}}。
编码规范:
{{#each coding_standards}}
- {{this}}
{{/each}}
variables:
role:
name: {type: string, default: "开发助手"}
specialty: {type: string, default: "全栈开发"}
coding_standards: {type: array, default: ["代码简洁", "注释清晰"]}
2. 模板继承
# 派生模板
templates:
# 基础客服模板
base_customer_service:
content: "你是{{name}},一个客服..."
# 电商客服(继承基础)
ecommerce_service:
extends: base_customer_service
variables:
name: "电商客服小美"
additions:
content: |
特殊规则:
- 可以查询订单状态
- 可以处理退换货申请
# 金融客服(继承基础)
financial_service:
extends: base_customer_service
variables:
name: "金融顾问小财"
additions:
content: |
特殊规则:
- 可以查询账户余额
- 可以提供理财建议
- 涉及转账需用户确认
3. 模块组合
# 模块化Prompt
agents:
smart-assistant:
# 组合多个模板
prompt:
# 角色模板
- template: role/base_customer_service
variables:
name: "智能助手"
# 任务模板
- template: task/query_and_answer
# 输出模板
- template: output/structured_response
# 约束模板
- template: constraint/no_sensitive_info
4. 动态模板
# 根据条件选择模板
agents:
adaptive-agent:
prompt:
dynamic:
# 根据用户类型选择
selector: "{{user.type}}"
templates:
vip: role/vip_service
normal: role/standard_service
new: role/onboarding_service
# 默认模板
default: role/standard_service
✨ 最佳实践
💡 模板设计原则
- 原子化 - 每个模板只做一件事
- 参数化 - 用变量代替硬编码
- 继承 - 共性抽到基类模板
- 版本化 - 重大改动开新版本
- 文档化 - 每个模板写清楚用途
⚠️ 常见问题
- 模板太长太复杂,难以维护
- 变量名不清晰,使用时填错
- 没有版本管理,改了回不去
- 模板太多,找不到合适的
📝 完整模板示例
# prompts/templates.yaml
templates:
code_reviewer:
name: 代码审查员模板
version: 2.0
author: team-dev
content: |
你是一个{{role.name}},专精{{role.language}}代码审查。
审查维度:
{{#each review_dimensions}}
{{@index}}. **{{this.name}}**: {{this.description}}
{{/each}}
输出格式:
```json
{
"issues": [...],
"score": 0-100,
"suggestions": [...]
}
```
注意事项:
- 只关注代码质量,不评论业务逻辑
- 每个问题给出具体修改建议
- 评分要客观公正
variables:
role:
name: {type: string}
language: {type: string, enum: ["Python", "JavaScript", "Go"]}
review_dimensions:
type: array
default:
- {name: "代码风格", description: "命名规范、格式等"}
- {name: "代码质量", description: "可读性、可维护性"}
- {name: "性能", description: "算法效率、资源使用"}
- {name: "安全", description: "安全漏洞、敏感信息"}
# 使用示例
examples:
- name: Python代码审查
variables:
role:
name: "Python代码审查员"
language: "Python"
💻 代码示例
Python模板使用
from openclaw import Agent
from openclaw.prompt import TemplateLibrary
# 加载模板库
lib = TemplateLibrary.from_yaml("prompts/templates.yaml")
# 使用模板创建Agent
agent = Agent(
name="customer-service",
prompt=lib.render("customer_service", {
"name": "小美",
"domain": "电商购物",
"style": {
"greeting": "亲爱的顾客您好",
"tone": "热情、专业",
"closing": "祝您购物愉快!"
}
})
)
# 组合多个模板
agent = Agent(
name="smart-agent",
prompt=lib.compose([
("role/customer_service", {"name": "小美"}),
("task/query_and_answer", {}),
("output/structured", {}),
("constraint/no_sensitive", {})
])
)
模板继承
# 派生模板
base = lib.get("base_customer_service")
# 创建派生模板
vip_template = base.extend({
"name": "VIP专属客服",
"style": {
"greeting": "尊敬的VIP会员您好",
"tone": "尊贵、贴心"
},
"additions": """
VIP专属服务:
- 优先处理
- 专属折扣提醒
"""
})
agent = Agent(prompt=vip_template.render())
动态模板选择
from openclaw.prompt import DynamicTemplate
# 根据用户类型动态选择
agent = Agent(
prompt=DynamicTemplate(
selector=lambda ctx: ctx.user.type,
templates={
"vip": "role/vip_service",
"normal": "role/standard_service",
"new": "role/onboarding"
}
)
)
# 执行时自动选择
result = agent.run("你好", context={"user": {"type": "vip"}})
模板版本管理
# 版本控制
lib = TemplateLibrary("./prompts/")
# 查看模板版本
versions = lib.list_versions("customer_service")
# ["1.0", "1.5", "2.0"]
# 使用特定版本
template = lib.get("customer_service", version="1.5")
# 对比版本差异
diff = lib.diff("customer_service", "1.5", "2.0")
# 回滚到旧版本
lib.rollback("customer_service", to="1.5")
模板测试
from openclaw.prompt import TemplateTester
# 测试模板
tester = TemplateTester(lib)
# 测试渲染
result = tester.test("customer_service", {
"name": "小美",
"domain": "测试"
})
# 验证模板完整性
validation = tester.validate("customer_service")
# {"valid": true, "missing_vars": [], "warnings": []}
# A/B测试不同模板
results = tester.ab_test(
"customer_service",
variants=["v1", "v2"],
test_cases=test_data
)
🔗 相关链接
- OpenClaw Prompt工程 - Prompt技巧
- OpenClaw Agent Persona设计 - 角色设计
- OpenClaw System Prompt - 系统提示
- OpenClaw Agent性格配置 - 个性化
- ClawHub入门指南 - 发现更多Skills
📊 模板库结构示例
prompts/
├── role/ # 角色模板
│ ├── customer_service.yaml
│ ├── developer.yaml
│ └── analyst.yaml
├── task/ # 任务模板
│ ├── query.yaml
│ ├── analysis.yaml
│ └── generation.yaml
├── output/ # 输出模板
│ ├── structured.yaml
│ ├── markdown.yaml
│ └── json.yaml
├── constraint/ # 约束模板
│ ├── safety.yaml
│ └── privacy.yaml
└── index.yaml # 模板索引