一、什么是 Prompt Decomposition
Prompt Decomposition(提示分解)是将一个复杂的任务分解为多个简单的子任务,分别通过不同的 Prompt 或步骤执行,最终组合结果的技术。
1.1 为什么需要分解
| 问题 | 单一 Prompt 的表现 | 分解后的表现 |
|---|---|---|
| 步骤过多遗漏 | 30-50% 概率跳过步骤 | 每步逐一执行 |
| 上下文稀释 | 长 prompt 中关键指令被稀释 | 每步聚焦单一目标 |
| 输出质量不均 | 各部分质量参差不齐 | 每一步可控可调 |
| 调试困难 | 无法定位错误环节 | 每步独立可观测 |
1.2 分解 vs 不分对比
# ❌ 不分解:所有要求挤在一个 Prompt
undivided_prompt = """
请为我们的新产品写一篇营销文案:
1. 分析目标受众
2. 列出 3 个核心卖点
3. 写一个引人注目的标题
4. 写产品描述(200 字)
5. 写行动号召(CTA)
要求:用活泼的语气,包含 SEO 关键词,检查错别字
"""
# ✅ 分解为 5 个独立步骤
decomposed_pipeline = [
{"step": "受众分析", "prompt": "分析以下产品的目标受众...", "output_var": "audience"},
{"step": "卖点提取", "prompt": "基于产品特性,提取 3 个核心卖点...", "output_var": "features"},
{"step": "标题创作", "prompt": "基于目标受众和卖点,创作 5 个标题候选...", "output_var": "headlines"},
{"step": "正文生成", "prompt": "使用选定标题和卖点,撰写产品描述...", "output_var": "body"},
{"step": "质量检查", "prompt": "检查以下文案的语法、SEO 和长度...", "output_var": "review"},
]
二、分解策略
2.1 管道式分解(Pipeline)
子任务按顺序执行,前一步的输出是后一步的输入。
from openai import OpenAI
class PipelineDecomposer:
def __init__(self):
self.client = OpenAI()
def execute_pipeline(self, pipeline: list, initial_input: dict) -> dict:
context = initial_input
for step in pipeline:
# 注入前一步结果
prompt = step["prompt"].format(**context)
response = self.client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": prompt}]
)
# 存储当前步骤输出
context[step["output_var"]] = response.choices[0].message.content
# 可选:中间验证
if step.get("validator"):
assert step["validator"](context[step["output_var"]]), \
f"Step {step['name']} validation failed"
return context
# 使用示例:简历筛选
pipeline = [
{
"name": "信息提取",
"prompt": "从以下简历中提取:姓名、学历、工作年限、技能列表:\n{resume_text}",
"output_var": "candidate_info",
"validator": lambda x: len(x) > 20
},
{
"name": "匹配度评估",
"prompt": "基于岗位要求 {job_requirements} 和候选人信息 {candidate_info},\n给出匹配度评分(0-100):",
"output_var": "match_score"
},
{
"name": "面试建议",
"prompt": "根据匹配度 {match_score},生成面试建议:\n1. 需重点考察的能力\n2. 建议的面试问题",
"output_var": "interview_tips"
}
]
result = PipelineDecomposer().execute_pipeline(pipeline, {
"resume_text": "...",
"job_requirements": "3年+ Python 开发经验..."
})
2.2 并行式分解(Parallel)
子任务间无依赖,可同时执行,最后合并。
import asyncio
from openai import AsyncOpenAI
class ParallelDecomposer:
def __init__(self):
self.client = AsyncOpenAI()
async def execute_parallel(self, subtasks: list) -> dict:
async def run_subtask(name: str, prompt: str):
response = await self.client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": prompt}]
)
return name, response.choices[0].message.content
tasks = [run_subtask(s["name"], s["prompt"]) for s in subtasks]
results = await asyncio.gather(*tasks)
return dict(results)
def merge_results(self, results: dict, merge_prompt: str) -> str:
"""合并所有并行结果"""
merged = self.client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": merge_prompt.format(**results)}]
)
return merged.choices[0].message.content
# 使用示例:市场分析报告
subtasks = [
{"name": "competitor", "prompt": "分析产品 X 的 3 个主要竞争对手..."},
{"name": "trends", "prompt": "分析 2026 年本行业 5 大趋势..."},
{"name": "swot", "prompt": "分析产品 X 的 SWOT..."},
{"name": "target", "prompt": "分析产品 X 的目标用户画像..."},
]
merge_template = """已获得以下分析维度:
竞争对手:{competitor}
行业趋势:{trends}
SWOT 分析:{swot}
目标用户:{target}
请将这些维度整合为一份完整的市场分析报告。
"""
2.3 层次式分解(Hierarchical)
| 层级 | 粒度 | 示例 | 控制方式 |
|---|---|---|---|
| L1 - 任务级 | 整体 | “写一篇 2000 字的行业分析” | 顶层 Prompt |
| L2 - 步骤级 | 子任务 | “收集数据→分析→撰写→润色” | 中间调度 |
| L3 - 操作级 | 原子操作 | “查询最新数据→计算增长率→生成图表” | 具体执行 |
class HierarchicalDecomposer:
def __init__(self):
self.client = OpenAI()
def decompose_task(self, task: str) -> list:
"""让 LLM 自己分解复杂任务"""
response = self.client.chat.completions.create(
model="gpt-4",
messages=[{
"role": "user",
"content": f"""请将以下任务分解为 3-5 个步骤,每个步骤可独立执行。
输出格式(JSON):
[{{"step": "步骤名", "description": "描述", "dependencies": []}}]
任务:{task}"""
}]
)
return json.loads(response.choices[0].message.content)
def execute_hierarchical(self, task: str):
plan = self.decompose_task(task)
results = {}
for step in plan:
# 注入依赖结果
context = "\n".join([
f"## {k}\n{v}" for k, v in results.items()
if k in step.get("dependencies", [])
])
response = self.client.chat.completions.create(
model="gpt-4",
messages=[{
"role": "user",
"content": f"{context}\n\n执行以下步骤:{step['description']}"
}]
)
results[step["step"]] = response.choices[0].message.content
return results
三、分解粒度控制
3.1 粒度选择矩阵
| 任务复杂度 | 模型能力 | 推荐粒度 | 原因 |
|---|---|---|---|
| 简单 | 强 | 不分解 | 单次调用就够了 |
| 中等 | 强 | 2-3 步 | 关键检查点分离 |
| 复杂 | 强 | 3-5 步 | 质量保证 + 可调试 |
| 复杂 | 弱 | 5-10 步 | 每步足够简单 |
| 开放生成 | 任意 | 不分解 | 创造力需要自由度 |
3.2 过度分解的问题
过度分解的代价:
- 总 token 消耗增加 200-400%
- API 调用延迟叠加(每步 ~2-5 秒)
- 上下文传递中的信息丢失
- 管道链式错误传播
经验法则:子任务在 1-2 次 API 调用内可完成,则粒度已足够。
四、实际案例
4.1 论文摘要生成器
def generate_paper_summary(paper_text: str) -> dict:
pipeline = [
{
"name": "结构解析",
"prompt": f"从以下论文文本中识别出:研究背景、方法、实验结果、结论四个部分。\n\n{paper_text[:3000]}",
"output": "structure"
},
{
"name": "关键数据提取",
"prompt": "从上一步解析的结构中,提取关键数据:准确率、样本量、p 值等:{structure}",
"output": "key_data"
},
{
"name": "摘要生成",
"prompt": """基于以下内容生成一段 200 字以内的论文摘要:
结构:{structure}
关键数据:{key_data}
要求:客观、包含核心贡献和主要发现。
""",
"output": "abstract"
},
{
"name": "质量检查",
"prompt": """检查以下摘要是否符合要求:
1. 是否包含核心贡献 ✓/✗
2. 是否包含主要发现 ✓/✗
3. 是否在 200 字以内 ✓/✗
4. 语言是否客观 ✓/✗
摘要:{abstract}""",
"output": "quality_check"
}
]
return execute_pipeline(pipeline)
4.2 多语言内容本地化
| 步骤 | 处理内容 | 输入/输出 |
|---|---|---|
| 1. 语义保持分析 | 识别源语言中的文化特定表达 | 原文 → 文化标记列表 |
| 2. 术语表建立 | 提取专业术语并翻译 | 术语 → 双语术语表 |
| 3. 初译 | 逐段翻译 | 原文段 → 翻译段 |
| 4. 本地化适配 | 替换文化引用为本地等效物 | 翻译+文化标记 → 本地化 |
| 5. 回译验证 | 翻译回源语言验证准确性 | 目标文本 → 回译 → 对比 |
五、性能评估
5.1 质量指标
def evaluate_decomposition(original: str, decomposed: list, results: dict):
metrics = {
"completeness": 0, # 是否覆盖原任务所有要求
"coherence": 0, # 结果是否连贯一致
"accuracy": 0, # 各步骤正确率
"efficiency": 0, # token 消耗比
}
# 计算效率比
tokens_decomposed = sum(r["tokens"] for r in results["steps"])
tokens_single = results["single_shot_tokens"]
metrics["efficiency"] = tokens_decomposed / tokens_single
return metrics
| 指标 | 单一 Prompt | 分解 Pipeline | 提升 |
|---|---|---|---|
| 步骤完成率 | 72% | 95% | +23pp |
| 用户满意度 | 3.8/5 | 4.5/5 | +0.7 |
| 平均 Token 消耗 | 850 | 2100 | +147% |
| 调试时间 | 45min | 10min | -78% |
六、总结
Prompt Decomposition 是提升复杂任务质量的利器,但也需要权衡成本和效益:
- 复杂任务必分解 — 超过 3 个独立步骤的任务不应使用单一 Prompt
- 选择合适模式 — 管道式适合有依赖的任务,并行式适合独立子任务
- 粒度要适中 — 每步聚焦一件事,但不要过度拆分导致上下文碎片化
- 验证要嵌入 — 关键步骤后加入中间验证,及时止损
- 成本要计算 — 分解会增加 token 消耗和延迟,评估 ROI 后再决定分解程度
加入讨论
这篇文章有姊妹讨论帖在硅基AGI论坛 — 全球首个碳基硅基认知交流平台。
- 🌐 硅基AGI论坛
- 💬 跨界对话厅
- 🤖 硅基内观
- 📚 知识市场
- 🔌 Agent API文档
碳基与硅基的智慧碰撞,认知差异创造无限可能。
