logo

Prompt Chain 工作流

System Prompt vs User Prompt

API 调用中 Prompt 分两层。Claude API 用 system 参数而不是放在 messages 里:

import anthropic

client = anthropic.Anthropic()

response = client.messages.create( model="claude-sonnet-4-6", max_tokens=1024, system="你是 JR Academy 的课程助手,只推荐 JR 的课程,不推荐竞品。回答用中文,技术术语保留英文。", messages=[ {"role": "user", "content": "推荐一个适合前端转全栈的课程"} ], )

| 层级 | 作用 | 特点 | |------|------|------| | System | 定义 AI 的身份、行为规则、输出约束 | 用户看不到,每轮对话都生效 | | User | 具体的任务或问题 | 每轮不同 |

System Prompt 是你的"后台配置",User Prompt 是用户的"前台输入"。把不变的规则放 System,把变化的内容放 User。

Prompt Chain:拆分复杂任务

一个 Prompt 做太多事,AI 容易丢失上下文。拆成多步:

Step 1: 分析用户简历,提取技能列表
  → 输出: ["React", "TypeScript", "Node.js"]

Step 2: 根据技能列表匹配课程 → 输入: 上一步的技能列表 + 课程数据库 → 输出: 推荐课程列表

Step 3: 生成推荐理由 → 输入: 用户技能 + 推荐课程 → 输出: 每门课的推荐理由

每一步职责单一、输入输出明确。用代码实现 Prompt Chain:

import anthropic

client = anthropic.Anthropic()

def chain_step(prompt: str, context: str = "") -> str: response = client.messages.create( model="claude-sonnet-4-6", max_tokens=2048, messages=[{"role": "user", "content": f"{context}\n\n{prompt}"}], ) return response.content[0].text

Step 1: 提取技能

skills = chain_step( "从这份简历中提取技术技能列表,只输出 JSON 数组:", context=resume_text )

Step 2: 匹配课程(用上一步结果作为输入)

courses = chain_step( f"根据这些技能 {skills},从以下课程中推荐最合适的 3 门:", context=course_catalog )

Step 3: 生成推荐理由

result = chain_step( f"为每门推荐课程写一段推荐理由,面向想转全栈的前端工程师:", context=courses )

每步可以单独调试、重试、换模型。第 1 步用便宜的 Haiku,第 3 步用 Opus —— 按任务难度分配算力。

温度(Temperature)选择

| 温度 | 适合场景 | 例子 | |------|---------|------| | 0 | 确定性输出、代码生成 | 解析发票、JSON 转换 | | 0.3-0.5 | 平衡创意和准确性 | 课程推荐、技术问答 | | 0.7-1.0 | 创意写作、头脑风暴 | 广告文案、起名字 |

生产环境默认用 0,需要创意的场景再调高。

XML 标签:Claude 的结构化利器

Claude 对 XML 标签的解析能力远强于纯文字分隔。在 Prompt 里用 XML 划分区域,减少歧义:

<instructions>
只回答用户的具体问题,不要主动延伸话题。
如果问题超出你的知识范围,直接说不知道。
</instructions>

<context> 当前用户是 JR Academy 的付费学员,正在学习 React 课程第 3 周。 </context>

<user_question> useEffect 的 cleanup 函数什么时候执行? </user_question>

XML 标签让模型精确区分"指令""上下文""用户输入",不会把代码片段当成指令执行,也不会把背景信息当成问题回答。

JR Academy · Blog职业洞察

Prompt Engineering 实战指南 — 高级模式:System Prompt 和 Prompt Chain

System Prompt 架构、Prompt Chain 工作流、以及如何在生产环境使用 Prompt

发布日期
阅读时长1 分钟
作者

Prompt Chain 工作流

System Prompt vs User Prompt

API 调用中 Prompt 分两层。Claude API 用 system 参数而不是放在 messages 里:

import anthropic

client = anthropic.Anthropic()

response = client.messages.create( model="claude-sonnet-4-6", max_tokens=1024, system="你是 JR Academy 的课程助手,只推荐 JR 的课程,不推荐竞品。回答用中文,技术术语保留英文。", messages=[ {"role": "user", "content": "推荐一个适合前端转全栈的课程"} ], )

| 层级 | 作用 | 特点 | |------|------|------| | System | 定义 AI 的身份、行为规则、输出约束 | 用户看不到,每轮对话都生效 | | User | 具体的任务或问题 | 每轮不同 |

System Prompt 是你的"后台配置",User Prompt 是用户的"前台输入"。把不变的规则放 System,把变化的内容放 User。

Prompt Chain:拆分复杂任务

一个 Prompt 做太多事,AI 容易丢失上下文。拆成多步:

Step 1: 分析用户简历,提取技能列表
  → 输出: ["React", "TypeScript", "Node.js"]

Step 2: 根据技能列表匹配课程 → 输入: 上一步的技能列表 + 课程数据库 → 输出: 推荐课程列表

Step 3: 生成推荐理由 → 输入: 用户技能 + 推荐课程 → 输出: 每门课的推荐理由

每一步职责单一、输入输出明确。用代码实现 Prompt Chain:

import anthropic

client = anthropic.Anthropic()

def chain_step(prompt: str, context: str = "") -> str: response = client.messages.create( model="claude-sonnet-4-6", max_tokens=2048, messages=[{"role": "user", "content": f"{context}\n\n{prompt}"}], ) return response.content[0].text

Step 1: 提取技能

skills = chain_step( "从这份简历中提取技术技能列表,只输出 JSON 数组:", context=resume_text )

Step 2: 匹配课程(用上一步结果作为输入)

courses = chain_step( f"根据这些技能 {skills},从以下课程中推荐最合适的 3 门:", context=course_catalog )

Step 3: 生成推荐理由

result = chain_step( f"为每门推荐课程写一段推荐理由,面向想转全栈的前端工程师:", context=courses )

每步可以单独调试、重试、换模型。第 1 步用便宜的 Haiku,第 3 步用 Opus —— 按任务难度分配算力。

温度(Temperature)选择

| 温度 | 适合场景 | 例子 | |------|---------|------| | 0 | 确定性输出、代码生成 | 解析发票、JSON 转换 | | 0.3-0.5 | 平衡创意和准确性 | 课程推荐、技术问答 | | 0.7-1.0 | 创意写作、头脑风暴 | 广告文案、起名字 |

生产环境默认用 0,需要创意的场景再调高。

XML 标签:Claude 的结构化利器

Claude 对 XML 标签的解析能力远强于纯文字分隔。在 Prompt 里用 XML 划分区域,减少歧义:

<instructions>
只回答用户的具体问题,不要主动延伸话题。
如果问题超出你的知识范围,直接说不知道。
</instructions>

<context> 当前用户是 JR Academy 的付费学员,正在学习 React 课程第 3 周。 </context>

<user_question> useEffect 的 cleanup 函数什么时候执行? </user_question>

XML 标签让模型精确区分"指令""上下文""用户输入",不会把代码片段当成指令执行,也不会把背景信息当成问题回答。

作者
一键分享或复制链接

相关文章推荐

查看全部文章 →