Skip to content

提示词链

当一个任务过于复杂,单条提示词无法可靠完成时,可以把它拆分成多个子任务,依次执行,前一步的输出作为下一步的输入——这就是提示词链(Prompt Chaining)。

为什么需要提示词链?

单条提示词的问题

把所有要求塞进一个超长提示词,会导致以下问题:

  1. AI容易遗漏某些子任务 —— 任务太多,顾此失彼
  2. 前后步骤的逻辑相互干扰 —— 不同任务的要求可能冲突
  3. 出错时难以定位问题 —— 不知道是哪一步出了错
  4. Token消耗高 —— 一次性输入大量内容,成本上升

提示词链的解决思路

提示词链把复杂任务分而治之

复杂任务

┌─────────────────────────────────────┐
│  提示词1:完成子任务A                │
│       ↓                             │
│  提示词2:基于A的结果,完成子任务B    │
│       ↓                             │
│  提示词3:基于B的结果,完成子任务C    │
│       ↓                             │
│  最终结果                           │
└─────────────────────────────────────┘

每一步都能独立验证质量,整体可靠性大幅提升。

适合使用提示词链的场景

场景链式拆分方式
长文档分析提取关键信息 → 分析 → 生成报告
代码生成梳理需求 → 设计接口 → 实现代码 → 写测试
内容创作确定大纲 → 逐节撰写 → 润色修改
数据处理清洗数据 → 分类标注 → 汇总统计
翻译本地化直译 → 文化适配 → 润色

实战案例详解

案例一:简历筛选流水线

这是一个典型的三步提示词链:

第一步:信息提取

请从以下简历中提取关键信息,以JSON格式输出:
- name(姓名)
- years_exp(工作年限,数字)
- skills(技能列表)
- last_title(最近职位)
- education(学历)

<resume>
张三
高级软件工程师 | 8年经验

工作经历:
- ABC科技公司,高级工程师,2020-2024
  负责后端架构设计,主导微服务改造项目
- XYZ互联网公司,工程师,2016-2020
  参与核心业务系统开发

技能:Python, Java, Kubernetes, MySQL, Redis

教育背景:北京大学 计算机科学 本科
</resume>

输出示例:

json
{
  "name": "张三",
  "years_exp": 8,
  "skills": ["Python", "Java", "Kubernetes", "MySQL", "Redis"],
  "last_title": "高级软件工程师",
  "education": "本科"
}

第二步:岗位匹配

将第一步的JSON输出作为第二步的输入:

根据以下候选人信息和岗位要求,打出0-10的匹配分,
并说明主要匹配点和不足点。

<candidate>
{
  "name": "张三",
  "years_exp": 8,
  "skills": ["Python", "Java", "Kubernetes", "MySQL", "Redis"],
  "last_title": "高级软件工程师",
  "education": "本科"
}
</candidate>

<job_requirements>
职位:资深后端工程师
要求:
- 5年以上后端开发经验
- 精通Python或Go
- 有微服务架构经验
- 熟悉容器化技术
- 本科及以上学历
</job_requirements>

输出示例:

匹配评分:8/10

匹配点:
1. 工作年限:8年经验,超过要求的5年 ✓
2. 技术栈:精通Python,有Kubernetes经验 ✓
3. 架构经验:主导过微服务改造项目 ✓
4. 学历:本科学历符合要求 ✓

不足点:
1. 岗位要求Go语言,候选人主要使用Java
2. 未提及具体的性能优化经验

第三步:生成邮件

根据第二步的评估结果生成邮件:

根据候选人的评估结果,生成一封邮件。

<evaluation>
匹配评分:8/10
匹配点:工作年限符合、精通Python、有微服务经验
不足点:不会Go语言
</evaluation>

<job_title>资深后端工程师</job_title>

如果匹配分>=7,起草一封面试邀请邮件;
如果匹配分<7,起草一封婉拒邮件。

要求:邮件简洁专业,不超过200字。

输出示例:

主题:【面试邀请】资深后端工程师岗位 - 张三

张三先生您好:

感谢您投递资深后端工程师岗位。您的技术背景和微服务架构经验
给我们留下了深刻印象。

我们诚挚邀请您参加面试,进一步了解您的技术专长和项目经验。
面试时间初定为下周二下午,具体安排将另行通知。

期待与您见面!

HR团队
XX科技公司

案例二:代码生成流水线

第一步:需求分析

分析以下功能需求,输出:
1. 核心功能点
2. 需要的技术组件
3. 可能的边界情况

需求:
用户登录功能,支持手机号+验证码登录和密码登录,
需要防止暴力破解,登录成功后返回token。

第二步:接口设计

基于第一步的分析结果设计API:

基于以下需求分析,设计RESTful API接口:

<analysis>
[第一步的输出]
</analysis>

输出格式:
- 接口路径
- 请求方法
- 请求参数
- 响应格式
- 错误码

第三步:代码实现

基于接口设计生成代码:

基于以下接口设计,用Python FastAPI实现代码:

<api_design>
[第二步的输出]
</api_design>

要求:
- 包含完整的错误处理
- 添加类型提示
- 包含文档字符串

第四步:单元测试

基于代码生成测试:

为以下代码编写单元测试:

<code>
[第三步的代码]
</code>

要求:
- 覆盖正常情况和边界情况
- 使用pytest框架
- 包含测试说明

案例三:长文档处理

第一步:结构分析

分析以下文档的结构,列出所有章节标题和层级关系:

<document>
[长文档内容]
</document>

第二步:分段总结

总结文档的第三章内容:

<chapter_3>
[第三章内容]
</chapter_3>

要求:200字以内,提取核心观点。

第三步:综合报告

基于以下各章节总结,生成完整的文档摘要:

<summaries>
第一章:[总结]
第二章:[总结]
第三章:[总结]
...
</summaries>

要求:
- 500字以内
- 突出文档的核心价值
- 包含关键结论

提示词链的设计原则

原则一:每步只做一件事

❌ 一条提示词做多件事
请分析这段代码,找出bug,修复它,然后写测试,最后生成文档。

✅ 分步执行
Step 1: 分析代码,找出潜在问题
Step 2: 针对每个问题给出修复方案
Step 3: 为修复后的代码写测试
Step 4: 生成文档

原则二:明确定义输入输出

每一步都要明确:

  • 这一步接收什么输入
  • 这一步输出什么格式
# 好的定义

输入:简历原文
输出:JSON格式的结构化数据,包含name、years_exp、skills字段

# 差的定义

输入:简历
输出:处理后的信息

原则三:保持独立性

每一步应该能独立理解和执行,不依赖"上下文记忆":

❌ 依赖上下文

Step 2: 根据上面的分析...

✅ 显式传入

Step 2: 基于以下分析结果...
<analysis>
[Step 1的输出]
</analysis>

原则四:设置检查点

在关键步骤之间加入验证,确保中间结果正确:

python
# 伪代码示例

step1_output = call_llm(prompt1)
if not validate(step1_output):
    raise Error("Step 1 failed")

step2_output = call_llm(prompt2.format(input=step1_output))
if not validate(step2_output):
    raise Error("Step 2 failed")

开发者实践:代码实现

如果你是开发者,可以用代码来实现提示词链:

python
import anthropic

client = anthropic.Anthropic()

def prompt_chain(resume_text: str, job_requirements: str):
    # Step 1: 提取信息
    step1_response = client.messages.create(
        model="claude-sonnet-4-20250514",
        max_tokens=1024,
        messages=[{
            "role": "user",
            "content": f"""
            请从以下简历中提取关键信息,以JSON格式输出...
            <resume>{resume_text}</resume>
            """
        }]
    )
    candidate_json = step1_response.content[0].text
    
    # Step 2: 匹配评估
    step2_response = client.messages.create(
        model="claude-sonnet-4-20250514",
        max_tokens=1024,
        messages=[{
            "role": "user",
            "content": f"""
            根据以下候选人信息评估匹配度...
            <candidate>{candidate_json}</candidate>
            <job_requirements>{job_requirements}</job_requirements>
            """
        }]
    )
    evaluation = step2_response.content[0].text
    
    # Step 3: 生成邮件
    step3_response = client.messages.create(
        model="claude-sonnet-4-20250514",
        max_tokens=1024,
        messages=[{
            "role": "user",
            "content": f"""
            根据评估结果生成邮件...
            <evaluation>{evaluation}</evaluation>
            """
        }]
    )
    
    return step3_response.content[0].text

加入错误处理和重试

python
import json

def extract_with_retry(resume_text: str, max_retries: int = 3):
    for attempt in range(max_retries):
        try:
            response = client.messages.create(...)
            result = json.loads(response.content[0].text)
            # 验证必要字段
            if all(key in result for key in ['name', 'years_exp', 'skills']):
                return result
        except json.JSONDecodeError:
            print(f"JSON解析失败,重试 {attempt + 1}/{max_retries}")
        except Exception as e:
            print(f"错误:{e},重试 {attempt + 1}/{max_retries}")
    
    raise Exception("提取失败,请检查输入")

提示词链 vs 一次性提示

维度提示词链一次性提示
复杂任务✅ 更可靠❌ 容易出错
简单任务⚠️ 过度设计✅ 更高效
调试难度✅ 容易定位❌ 难以定位
Token消耗⚠️ 较高✅ 较低
响应时间⚠️ 多次调用✅ 一次调用

经验法则

  • 任务超过3个子步骤 → 用提示词链
  • 任务简单直接 → 用一次性提示

小结

提示词链的核心要点:

要点说明
分而治之把复杂任务拆成独立子任务
单一职责每步只做一件事
显式传递明确传入上一步的输出
设置检查点验证中间结果

开发者建议

在代码中实现提示词链时,建议在每一步之间加入输出验证逻辑——检查JSON格式是否正确、关键字段是否存在。发现异常时可以自动重试或切换到备用提示词。

下一步

学会了提示词链后,让我们学习 元提示,让AI帮你写和改进提示词。