记忆点:把 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 当成软件工程来做——每个组件独立测试,改动前跑对应用例,线上灰度发布。这跟后端的微服务理念一样:解耦才能可持续迭代。"