一、角色扮演:赋予模型特定视角与能力
在与大模型交互时,直接提问往往得到通用但可能不够精准的回答。一个极其有效的技巧是让模型扮演一个特定的角色。这不仅仅是加上一句“你是一个专家”,而是为模型构建一个完整的上下文框架,使其从特定的知识库和思维模式出发进行回应。
例如,当你需要一段代码时,不要问:“请写一个排序函数。” 而是说:“你是一位拥有10年经验的Python软件工程师,擅长编写高效、简洁且带有注释的代码。 请为一个包含十万个整数的列表,编写一个快速排序函数。” 这样,模型输出的代码会更倾向于采用工业级实践,甚至可能附带性能分析或优化建议,质量显著提升。这是因为角色设定激活了模型在该“人设”下关联的知识和表达方式。
提示: 角色设定的关键在于具体。指明角色的经验水平、专业领域、常用工具以及输出风格(如简洁、详尽、友好等),能让模型的输出更贴近你的预期。
二、结构化提示:清晰传达你的意图
一个模糊的提示词就像一份需求不明确的文档,会导致输出结果不可控。结构化提示是将你的需求拆解成明确的模块,像搭积木一样组合起来,让模型无歧义地理解你的意图。
一个强大的结构化提示通常包含以下几个部分:
- 角色与目标:如上所述,明确模型身份和本次任务的核心目标。
- 输入数据:提供模型需要处理的信息,如待总结的文本、待分析的数据或需要修改的代码。
- 具体指令:用动词明确任务,如“总结”、“改写”、“生成”、“解释”、“评分”等。
- 输出格式与约束:规定输出的格式(如JSON、Markdown列表)、长度、语言风格,以及需要避免的内容(如“不要使用专业术语”)。
# 一个结构化提示的示例框架
prompt = f"""
## 角色与目标
你是一位资深技术博客作者。你的任务是为编程初学者撰写一篇关于{topic}的教程。
## 输入数据
以下是原始代码片段和运行时错误日志:
## 具体指令
1. 解释代码的功能。
2. 从错误日志中定位导致程序崩溃的具体原因。
3. 提供修复后的完整代码。
4. 给出一条预防此类错误的最佳实践建议。
## 输出格式与约束
请使用Markdown格式,分四个部分(“代码解析”、“错误诊断”、“修复方案”、“最佳实践”)进行组织。解释部分避免使用行话。
"""
三、思维链:让模型“展示工作过程”
对于需要复杂推理、数学计算或多步逻辑的问题,直接要求模型给出最终答案,其准确率往往不高。思维链提示通过引导模型“一步一步地思考”,模拟人类的推理过程,能显著提升复杂任务的准确性。
最简单的实现方式是在提示末尾加上一句魔法咒语:“让我们一步步思考。” 或者更具体地:“在给出最终答案前,请先详细列出你的推理步骤。” 这迫使模型先进行中间推理,每一步都基于前一步的结论,从而在最终整合出更可靠的答案。
提示: 思维链不仅用于提高准确性,其透明的推理过程也极大地增强了结果的可解释性。当模型输出错误时,你可以清晰地看到是哪一步推理出了问题,便于针对性地修正提示。
四、少样本学习:用示例教会模型新规则
当任务格式特殊,或者你希望模型遵循一种非标准的输出模式时,少样本学习是最直接有效的方法。通过在提示中提供少量输入-输出的示例对,你可以快速“教会”模型你想要的确切格式和风格。
例如,你希望模型将中文口语转换为正式的商务邮件。直接描述规则可能不够清晰,但提供两三个示例后,模型就能立刻理解模式。
prompt = """
将以下口语化的句子转换为正式、礼貌的商务邮件核心句。
示例1:
口语:老板,那个项目搞不定了,钱不够。
正式:尊敬的领导,关于XX项目,因预算资源限制,目前推进面临较大挑战。
示例2:
口语:客户那边又改需求了,烦死了。
正式:尊敬的客户,收到您关于需求变更的反馈,我们将尽快评估对项目的影响并回复。
现在,请转换:
口语:{user_input}
正式:
"""
五、负面指令:明确“不要做什么”
除了告诉模型该做什么,明确指出不该做什么同样重要。这被称为负面指令。模型有时会“过度发挥”,加入不必要的信息、采用复杂的措辞,或者偏离你想要的格式。
在提示中加入负面约束,可以像给飞驰的汽车踩刹车一样,有效控制输出边界。例如:
- “禁止使用任何专业术语或缩写。”
- “不要给出主观评价,只需陈述事实。”
- “避免使用‘首先、其次、总之’这类过渡词。”
- “输出中不要包含任何解释,只要最终结果。”
这些指令能极大地提升输出结果的纯净度和可用性,使其更符合特定场景的要求。
六、迭代优化:提示词工程是一个过程
最后,也是最重要的心得:没有一蹴而就的完美提示词。Prompt Engineering本质上是一个迭代优化的过程。你的第一版提示词就像一个初稿,它可能已经能生成不错的结果,但总还有提升空间。
优化流程通常是:
- 初始尝试:写下你认为合理的第一个提示词。
- 评估输出:仔细检查结果,找出不理想的地方(是不够详细?格式错误?有事实错误?)。
- 分析原因:判断是哪个部分的提示词导致了问题(角色不清晰?指令模糊?缺少约束?)。
- 调整提示:针对性地修改或增加相应内容(强化角色、明确格式、加入示例或负面指令)。
- 再次测试:用新的提示词运行,并与之前的结果对比。
将这个循环重复几次,你就能得到一个稳定、高效、为你特定需求深度定制的提示词模板。这个过程积累的经验,远比寻找一个“万能提示词”更有价值。