Skip to content
🔗 分享本题
查看我的学习进度 →

记忆点:把 Prompt 当微服务来设计——模块化、可替换、可独立测试。

💡 答案要点

传统 Prompt 的问题:越长越难维护

❌ 单体 Prompt(500+ 字,难以调试):
"你是一个AI助手,你可以回答产品问题、订单查询、退换货...
如果用户问天气就说不知道。如果是技术问题就转接技术团队。
语气要友善但不能太随意。输出不超过200字。遇到愤怒的用户先道歉。
..."

组合式设计 = 把 Prompt 拆成独立可复用的组件:

✅ 组合式 Prompt(模块化,每个组件可独立测试):
  Role Definition     → 你是谁
  Task Definition     → 做什么
  Style Guide         → 怎么说
  Constraints         → 不能做什么
  Tool Definitions    → 可用工具
  Examples            → 示范
  Fallback Rules      → 出错了怎么办

具体实现:模板引擎方式

python
class ComposablePrompt:
    def __init__(self):
        self.components = {
            "role": self.load_component("role.jinja"),
            "style": self.load_component("style.jinja"),
            "constraints": self.load_component("constraints.jinja"),
            "tools": self.load_component("tools.jinja"),
            "examples": self.load_component("examples.jinja"),
        }
    
    def assemble(self, context):
        """按优先级组装完整 Prompt"""
        blocks = []
        for name in ["role", "style", "tools", "constraints", "examples"]:
            if name in self.components:
                blocks.append(self.components[name].render(context))
        return "\n\n---\n\n".join(blocks)

# Jinja 模板示例:
# templates/constraints.jinja
{% if task_type == 'code' %}
## 编码约束
- 代码必须可运行
- 不包含未定义的变量
- 注释使用中文
{% elif task_type == 'chat' %}
## 对话约束
- 每次回复不超过 200
- 主动引导用户说出需求
{% endif %}

关键设计原则

原则说明好处
Single Responsibility每个组件只做一件事改一处不影响其他
Interface Consistency统一的插入/渲染接口可动态替换组件
Testability每个组件可单独回归测试改之前跑一遍
Hot-swappable运行时可切换组件A/B 测试无缝
Dependency Declaration明确声明组件间依赖避免循环引用

与 ReWoo / Plan-and-Solve 的关系

python
# ReWoo 的思想也可以用来设计 Prompt 组件化
# ReWoo = Resolve-only Executive Workflow + One-step
# 思路:把复杂任务拆成独立的子步骤,每一步由独立 Prompt 处理

class RewooPromptComposer:
    def compose_plan(self, task):
        plan = self.planner.compose(["search_web", "summarize", "format_answer"])
        prompts = [self.components[f"step_{name}"].render(task, context) for name in plan]
        return prompts  # 每步用一个专门的 Prompt 执行

维护复杂度对比

单体 Prompt(1人):
  修改角色定义 → 可能要改全文 500 字 → 回归风险高
  新增工具支持 → 加 50 行约束 → 破坏原有风格 → 重测一切

组合式 Prompt(多人协作):
  修改角色定义 → 只改 role.jinja → 跑 10 条用例
  新增工具支持 → 加 tools.jinja → 只重新渲染 tools 段

面试话术:

"当你的 Prompt 超过 300 字的时候就该考虑组合式设计了。我见过最大的单体 Prompt 有 1200 字,改一行就会破坏其他地方。组合式的核心是把 Prompt 当成软件工程来做——每个组件独立测试,改动前跑对应用例,线上灰度发布。这跟后端的微服务理念一样:解耦才能可持续迭代。"