引言
在大模型(LLM)应用的开发过程中,编写高质量的提示词(Prompt)是决定系统表现的关键环节。Prompt 工程既容易被低估,也被容易高估。被低估是因为设计良好的提示词可以显著提升模型的输出质量、准确性和稳定性;被高估则是因为即使基于提示的应用,也需要大量的工程工作才能使其在生产环境中发挥作用。本文将详细介绍在编写 Prompt 时有助于提升性能的核心技术点,帮助开发者构建更可靠的 AI 应用。
明确定义助手功能
一般我们会给大模型定义一个 助手角色基调(System Role),简要明确告诉它需要做的任务是什么即可。只要框定助手要干的事情边界,不至于跑偏即可。例如,可以告诉大模型是一个'精通旅行规划的专家',而不是模糊的'助手'。
最佳实践:
- 角色设定:使用明确的职业或身份描述,如'资深 Python 代码审查员'、'专业医疗咨询助手'。
- 能力边界:明确指出模型能做什么,不能做什么,防止幻觉或越权回答。
- 语气风格:指定输出的语气,如'专业严谨'、'幽默风趣'或'简洁明了'。
提出详细的要求
我们在这里可以详细描述助手具体要干的事情,以及需要注意的点。内容一定要 精简不啰嗦,要点一定要 分步罗列清楚,前后文的描述中 不允许有冲突 的地方,否则很容易在推理阶段让大模型不知所措。简要明了的任务要求描述,能让大模型更好的执行任务,减少误差或者歧义。
关键要素:
- 输入约束:明确输入数据的格式和范围。
- 处理逻辑:分步骤描述处理流程,避免跳跃性思维。
- 输出标准:规定输出的长度、格式、语言风格。
- 负面约束:明确列出禁止出现的内容,如'不要编造数据'、'不要使用生僻词汇'。
使用 RAG(检索增强生成)
如果我们有可以获取的 外部知识 也可以加入到提示词中,这里有助于模型减少出现幻觉的可能,让它的回答能更加真实可靠有依据。比如我们现在有一个《行业知识库.txt》,我们放入向量库,在针对不同问题的时候召回相应的 doc 喂给大模型,提升其专业能力。有外部的知识可用,这比大模型空想瞎想靠谱的多。
技术细节:
- 混合搜索:需要注意的是单纯使用
向量召回可能效果很差,我们可以结合传统的 BM25的方式进行关键词的 doc 召回。最后得到的 doc 相对来说会有用的多。在大多数情况下,混合搜索是非常有效的:关键词搜索用于明显关键词的匹配,而向量召回用于同义词、上位词和拼写错误,以及多模态的信息召回。 - 上下文管理:RAG 检索回来的片段需要合理切片,避免信息过载导致模型注意力分散。
- 引用标注:建议要求模型在回答中标注信息来源,便于用户验证。
做好 Few-shot(少样本学习)
一般我们会给大模型一些例子,这些例子要有代表性,基本上能把你的任务中的常见情况和特殊情况都覆盖即可,一般 5 个左右足够了,复杂任务可以适当增多。好的例子能大幅度提升大模型对于任务的理解和推理能力。
示例选择原则:
- 多样性:覆盖不同难度、不同场景的输入。
- 一致性:确保示例中的输入输出逻辑与最终任务一致。
- 清晰度:示例应展示理想的输出格式和质量。
- 成本考量:每个示例都会消耗 Token,需平衡效果与成本。
使用思维链 CoT(Chain of Thought)
如果你还不知道什么是 思维链,可以先看相关文档了解一下。我们在遇到推理等复杂任务的时候,可以在给出例子中引导大模型一步一步去抽丝剥茧理解问题并解决问题。例如下面让大模型进行算数解答的问题,如果是常规的左边的方式直接给出答案,那就很有可能是错的。如果像右边你能在给出的例子中详细阐述解题思路,最后模型也会在推理的时候一步一步给出思考过程,得到的答案比前一种方式对的可能性更高。

