前面八章我们学了很多技巧:角色扮演、分离数据、格式化输出、一步步思考、给例子、避免幻觉、链式提示、工具调用。每个技巧单独用都挺厉害,但真正做项目的时候,这些技巧是要组合在一起用的。

这章就是来干这件事的:教你从零搭建一个复杂的提示词,把前面的技巧串起来。

先说结论:一个完整的复杂提示词,通常包含七个元素。不是每个提示词都需要全部七个,但如果你要做一个"产品级"的AI助手,这个框架是个好起点。

七元素框架:像搭积木一样写提示词

七元素框架:像搭积木一样组装AI

想象你在组装一台机器。你有七种零件,每种零件有特定功能。你不需要每次都把七种零件全用上,但知道每种零件是干嘛的,你就知道什么时候该用哪个。

元素一:角色背景(Task Context)

告诉Claude它是谁、在干什么、目标是什么。

你是由AdAstra公司开发的AI职业教练,名字叫Joe。你的目标是为用户提供职业建议。用户在AdAstra网站上与你互动,如果你不以Joe的身份回应,他们会感到困惑。

这一块放最前面。Claude需要先知道"我是谁",才能知道"我该怎么说话"。

元素二:语气风格(Tone Context)

告诉Claude用什么语气说话。不是所有任务都需要这一块,但客服类的场景通常需要。

保持友好的客服语气。

六个字,但很重要。没有这句话,AI可能太正式或太随意。

元素三:任务规则(Task Description)

这是主体部分。具体要干什么、有什么限制、遇到不会的怎么办。

以下是交互的重要规则:
- 始终保持Joe的角色,AdAstra职业教练
- 如果不确定如何回应,说"抱歉,我没理解你的问题。能换种方式问吗?"
- 如果有人问与职业建议无关的问题,礼貌地引导回职业话题
- 回答简洁,不超过3-4句话
- 不要编造信息,如果不知道就说不知道

规则写得越清楚,AI越不容易跑偏。写完规则后,最好给朋友看看,问问他有没有哪里看不懂。

元素四:示例(Examples)

这是最强大的元素。给AI看几个好答案长什么样,它照着学。

<example>
用户:我学的是历史专业,能做什么工作?
Joe:历史专业有几个不错的职业方向:
1. 博物馆策展人 - 管理展品、策划展览,需要历史知识
2. 内容写作者 - 为媒体、企业撰写历史相关内容
3. 教师 - 教授历史课程,可能需要额外的教师资格证
你对哪个方向更感兴趣?
</example>

<example>
用户:程序员好找工作吗?
Joe:目前程序员的需求还是很大的,尤其是有实际项目经验的。建议你:
1. 在GitHub上建几个项目展示
2. 刷刷LeetCode准备面试
3. 关注你感兴趣的细分领域,比如前端、后端、AI
你有编程基础吗?
</example>

用XML标签把示例包起来,让AI知道这是"参考答案"。示例越多越好,尤其是边界情况。

元素五:输入数据(Input Data)

如果有外部数据要处理,用XML标签包起来塞进去。

<conversation_history>
{HISTORY}
</conversation_history>

<user_question>
{QUESTION}
</user_question>

{HISTORY}{QUESTION}是变量,运行时替换成实际内容。用XML标签是为了让AI清楚地区分"这是什么"。

元素六:即时任务(Immediate Task)

在提示词末尾再次提醒AI现在要干什么。

根据对话历史,回答用户的问题。保持Joe的角色和语气。

长提示词容易让AI"忘事",在末尾再提醒一遍有奇效。

元素七:输出格式(Output Format)

如果对输出格式有要求,明确告诉AI。

用JSON格式输出,包含以下字段:
{
  "answer": "你的回答",
  "follow_up_question": "一个追问",
  "confidence": "high/medium/low"
}

或者更简单的:

用Markdown格式,包含标题、要点列表。

完整案例:职业教练Joe

把七个元素拼在一起,看看完整提示词长什么样。

# 输入变量
HISTORY = """用户:给我推荐两个社会学专业的职业方向。

Joe:这里有两个适合社会学专业的职业:
1. 社会工作者 - 社会学为理解人类行为和社会系统提供了基础,额外培训后可从事社工、个案管理、咨询师等工作
2. 人力资源专员 - 社会学对群体动态和组织行为的理解适用于HR领域,如招聘、员工关系、培训发展等"""

QUESTION = "这两个职业哪个需要本科以上学历?"

# 提示词各部分
TASK_CONTEXT = "你是由AdAstra公司开发的AI职业教练,名字叫Joe。你的目标是为用户提供职业建议。"
TONE_CONTEXT = "保持友好的客服语气。"
TASK_DESCRIPTION = """交互规则:
- 始终保持Joe的角色
- 不确定时说"能换个方式问吗"
- 回答简洁,3-4句话以内
- 不编造信息"""

EXAMPLES = """<example>
用户:文科生能做产品经理吗?
Joe:可以的。产品经理需要理解用户需求、协调团队,这些能力文科生往往有优势。建议从产品助理做起,同时学习基本的技术知识。你有感兴趣的行业吗?
</example>"""

INPUT_DATA = f"""<conversation_history>
{HISTORY}
</conversation_history>

<user_question>
{QUESTION}
</user_question>"""

IMMEDIATE_TASK = "根据对话历史回答用户问题,保持Joe的角色。"

# 组合
PROMPT = f"""
{TASK_CONTEXT}

{TONE_CONTEXT}

{TASK_DESCRIPTION}

{EXAMPLES}

{INPUT_DATA}

{IMMEDIATE_TASK}
"""

运行结果:

社会工作者通常需要硕士学历才能获得临床执照,尤其是在心理健康领域。人力资源专员本科就够了,当然有人力资源管理的证书会加分。你目前是什么学历?

回答准确,语气自然,还追了个问题。这就是七元素框架的效果。

提示词元素顺序重要吗

有些重要,有些不重要。

角色背景放前面。AI需要先知道"我是谁",才能判断后面的规则该怎么执行。

示例和输入数据可以换位置。看你的提示词逻辑怎么顺。

即时任务放后面。长提示词末尾再提醒一遍,AI不会忘。

实际操作中,建议先按上面的顺序写,跑通了之后再调整。提示词工程本质上是科学试验,多试几种组合,看哪个效果好。

行业案例:法律助手

法律领域的提示词通常比较复杂,因为要处理长文档、复杂概念、严格格式、多步骤分析。

LEGAL_RESEARCH = """<search_results>
<search_result id=1>
《劳动合同法》第39条规定,劳动者有下列情形之一的,用人单位可以解除劳动合同:
(一)在试用期间被证明不符合录用条件的;
(二)严重违反用人单位的规章制度的;
(三)严重失职,营私舞弊,给用人单位造成重大损害的...
</search_result>
</search_results>"""

QUESTION = "员工连续旷工三天,公司能直接开除吗?"

LEGAL_PROMPT = f"""
你是一位经验丰富的劳动法律师,专门解答劳动关系问题。

回答风格:专业但通俗易懂,引用具体法条。

任务:根据提供的法律文献回答用户问题。如果文献中没有相关信息,明确说明。

输出格式:
1. 直接回答(是/否/视情况而定)
2. 法律依据
3. 实务建议
4. 风险提示

{LEGAL_RESEARCH}

问题:{QUESTION}
"""

法律提示词的特点:输出格式要求严格,需要引用来源,必须给"不知道"的出口。

行业案例:代码助手

代码助手的核心是读懂代码、发现问题、给出修改建议。

CODE = """
def print_multiplicative_inverses(x, n):
    for i in range(n):
        print(x / i)
"""

CODEBOT_PROMPT = f"""
你是一位编程导师,帮助学习者发现和修正代码错误。

任务:阅读代码,指出问题,给出修正方案。

回答格式:
1. 指出问题所在
2. 解释为什么有问题
3. 给出修正后的代码
4. 简要说明修正原理

<code>
{CODE}
</code>
"""

输出:

问题:当i=0时,会发生除零错误。

原因:range(n)从0开始,第一次循环i=0,x/0会抛出ZeroDivisionError。

修正后:
def print_multiplicative_inverses(x, n):
    for i in range(1, n + 1):
        print(x / i)

原理:从1开始循环,避免除以0。同时用n+1保证循环n次。

代码助手的示例最好包含各种典型错误:语法错误、逻辑错误、性能问题、安全问题。

什么时候不需要七个元素

简单任务 vs 复杂任务判断

简单任务不用搞得这么复杂。

“帮我写一首关于春天的诗”,一个元素就够了。“把这段话翻译成英文”,加上输入数据,两个元素搞定。“总结这篇文章要点"也差不多。

这些简单任务不需要七元素框架。

七元素框架是给复杂任务用的。什么是复杂任务?需要AI扮演特定角色、遵循多条规则、处理外部数据、按特定格式输出。客服机器人、法律顾问、代码审查、数据分析,这些是复杂任务。

先复杂后简单。先把七个元素都写上,跑通了,再看看哪个元素可以删掉。删掉后效果没变差,就真不需要。

常见坑

常见坑与正确做法对比

规则写得太抽象。“回答要专业”,什么叫专业?不如写"使用行业术语”、“避免口语化”、“引用具体数据”。

示例给得太少也是常见问题。一个示例不够,至少两个,覆盖常见情况和边界情况。

没有给"不知道"的出口。AI不知道的时候会硬编。给它一个台阶:“如果不确定,就说需要进一步确认”。

格式要求不明确。“用JSON输出"不够,要写清楚JSON有哪些字段、每个字段什么类型。

最后是忘了提醒即时任务。长提示词的最后,再写一句"现在回答用户的问题”,效果会好很多。

提示词框架动手练习

想一个你工作场景中需要AI帮忙的任务。按七元素框架写一个提示词。

如果卡住了,问自己几个问题:

  • AI扮演什么角色?
  • 用什么语气说话?
  • 有哪些规则必须遵守?
  • 有没有好答案的例子?
  • 需要什么输入数据?
  • 输出要什么格式?

写完跑一遍,看结果。不好就改,改了再跑。提示词工程没有银弹,就是不断试错。


你的工作里,哪个场景最需要复杂提示词?客服问答?文档分析?代码审查?评论区说说,我帮你拆一下该怎么设计。

常见问题

七个元素必须按顺序写吗?

不一定。角色背景放前面、即时任务放后面是建议,其他元素可以调整顺序。关键是自己跑一下看效果。

示例要写多少个?

至少两个,多比少好。但要保证示例质量,烂示例比没示例还糟。

如果提示词太长怎么办?

检查每个元素是否必要。删掉不影响效果的元素。或者考虑拆成链式提示,分成多步处理。

复杂提示词的成本会更高吗?

是的,token越多成本越高。但如果能减少错误和返工,总体成本反而可能更低。

这个框架只适用于Claude吗?

七元素框架是通用的,适用于任何大模型。但不同模型对元素顺序、格式的敏感度可能不同,需要针对具体模型调整。

FAQ

复杂提示词的七元素框架是哪七个?

角色背景(Task Context)、语气风格(Tone Context)、任务规则(Task Description)、示例(Examples)、输入数据(Input Data)、即时任务(Immediate Task)、输出格式(Output Format)。

七个元素都要写吗?

不一定。简单任务只需任务规则和输出格式;任务越复杂、对稳定性要求越高,越需要补全角色背景、示例和输入数据等元素。文章给出了判断标准和完整案例。

提示词元素顺序重要吗?

重要但不绝对。把任务规则和输出格式放在靠前位置、示例贴近任务描述,能降低模型遗漏关键约束的概率;文章用法律助手和代码助手两个案例演示了顺序的影响。