📚 OpenClaw Agent提示模板库

世界上有一种复用叫提示模板,它就像乐高积木,一块块拼起来,组合出千变万化的Agent...

"你是一个客服,名字叫小美,回答要友好..."每次写Agent都要复制这段话,改改名字。烦不烦?提示模板库就是解决这个问题的——一次定义,到处复用。

📋 功能介绍

🎯 模板库核心能力

功能 说明 好处
模板定义 标准化Prompt结构 统一风格
变量替换 动态填充参数 灵活定制
模板继承 基础模板派生专用模板 减少重复
版本管理 模板版本控制 可回滚
模块组合 多个模板组合使用 灵活组装

💡 模板类型

🚀 使用方法

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
)

🔗 相关链接

📊 模板库结构示例

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      # 模板索引