提示词工程
1.什么是提示词工程(Prompt Enginerring)
提示工程也叫【指令工程】
-
Prompt就是你发给大模型的指令,比如【讲个笑话】【用Python编个贪吃蛇游戏】
-
貌似简单,但意义非凡
- 【Prompt】是AGI时代的【编程语言】
- 【Prompt工程】是AGI时代的【软件工程】
- 【提示工程师】是AGI时代的【程序员】
-
要理解
- 为什么有的指令有效,有的指令无效
- 为什么同样的指令有时有效,有时无效
- 怎么提升指令有效的概率
- 什么时候用提示工程解决更高效,哪些用传统编程更高效
2.使用Prompt的两种目的
- 获得具体问题的具体结果,比如【该学Vue还是React】
- 固化一套Promp到程序中,成为系统功能的一部分,比如【每天生成本公司的简报】【Al客服系统】
前者主要通过ChatGPT,ChatALL这样的界面操作
后者就要动代码了
3.Prompt调优
找到好的prompt是个持续迭代的过程,需要不断调优
如果知道训练数据是怎么样的,参考训练数据来构造prompt是最好的
- 你知道它爱读红楼梦,就和它聊红楼梦
- 你知道它是日漫迷,就夸它卡哇伊
不知道训练数据怎么办?
- 【试】是常用方法,确实有运气因素,所以【门槛低,天花板高】
高质量prompt核心要点
- 具体,丰富,少歧义
4.Prompt的典型构成
- 角色:给Al定义一个最匹配任务的角色,比如:【你是一位软件工程师】
- 指示:对任务进行描述
- 上下文:给出与任务相关的其它背景信息(尤其在多轮交互中)
- 例子:必要时给出举例,实践证明其对输出正确性有很大帮助
- 输入:任务的输入信息,在提示词中明确的标识出输入
- 输出:输出的格式描述,以便后继模块自动解析模型的输出结果
5.【定义角色】为什么有效?
- 模型训练者并没有想到过会这样,完全是大家【把Al当人看】玩出的一个用法
- 实在传得太广,导致现在的大模型训练数据里充满了角色定义,所以更有效了
- 有一篇论文证实的现象,可以说明
大模型对prompt开头和结尾的内容更加敏感
先定义角色,其实就是在开头把问题域收窄,减少二义性
大模型应用架构师想什么?
- 怎么样能更准确?让更多的环节可控
- 怎么样能更省钱?减少prompt长度
- 怎么样让系统简单好维护?
6.思维链
大模型的“思维链”(Chain-of-Thought, CoT) 是一种通过显式引导模型分步骤思考的技术
它的核心思想是让大模型在回答问题或生成内容时,模拟人类的推理过程,将问题拆解为多个中间步骤,并逐步推导出最终答案
大模型虽然擅长生成文本,但在处理需要多步推理的问题时容易跳步或犯错
普通提问:
“小明有3个苹果,小红给了他2个,之后吃了1个,还剩几个?”
模型可能直接回答“4”,但中间步骤可能不清晰。思维链提示:
“请逐步思考并写出计算过程:小明有3个苹果……”
模型输出:
- 初始苹果数 = 3
- 小红给的苹果 = 2 → 总数 = 3 + 2 = 5
- 吃掉的苹果 = 1 → 剩余 = 5 - 1 = 4
最终答案:4
思维链的挑战
- 依赖提示设计
- 不恰当的引导词可能导致模型分步不合理。
- 需要针对不同任务优化提示模板。
- 计算成本增加
- 分步生成可能延长响应时间,尤其是长文本任务。
- 模型本身的限制
- 模型可能无法完全模拟人类逻辑,中间步骤仍可能出现跳跃或错误。
7.自洽性
“自洽性”(Self-Consistency)通常指模型在生成内容或推理过程中保持内部逻辑一致性的能力
它是确保模型输出可信、可靠的关键因素,尤其在需要多步推理或复杂问题解决的场景中至关重要
自洽性的重要性
- 提升可靠性
- 在数学、代码生成等任务中,自洽性确保每一步推导正确,最终结果可信。
- 示例:
问题:“证明勾股定理”
若模型在步骤中误用面积公式但未自洽检查,结论会出错;自洽性可触发修正。
- 减少幻觉(Hallucination)
- 自洽性迫使模型基于已有信息或逻辑推导生成内容,而非随机编造。
- 示例:
问:“《红楼梦》的作者是谁?”
自洽模型不会回答“莎士比亚”,而是基于知识库确认正确答案为曹雪芹。
- 增强可解释性
- 自洽的推理过程让用户更容易追踪错误来源,提升信任度。
自洽性的实现方式
- 提示工程
设计引导模型自我验证的提示词,例如:- “请先列出解题步骤,再检查每一步是否合理,最后给出答案。”
- “如果发现矛盾,请重新推导。”
- 模型架构改进
- 通过强化学习(RLHF)训练模型识别并修正自身逻辑错误。
- 引入知识图谱或外部工具(如计算器)辅助验证。
- 后处理校验
对模型输出进行规则检查或逻辑验证(如数学公式的符号运算)。
自洽性的挑战
- 复杂场景下的失效
- 在开放性问题(如创意写作)中,过度强调自洽性可能限制创造力。
- 计算成本高
- 自洽性需要多次推理或验证步骤,可能延长响应时间。
- 模型本身的局限性
- 大模型依赖统计模式匹配,而非真实逻辑推理,可能无法完全避免矛盾。
实际应用示例
- 数学解题
- 无自洽性:直接给出答案“x=5”,但中间步骤忽略负号导致错误。
- 有自洽性:
步骤1:方程化简为 2x + 3 = 13 → 2x = 10 → x=5
验证:代入原方程,左边=2 * 5+3=13,等于右边,答案正确。
- 代码生成
- 无自洽性:生成代码时忽略变量作用域,导致运行时错误。
- 有自洽性:
步骤1:定义函数输入参数。
步骤2:检查变量是否在作用域内。
步骤3:生成代码并验证逻辑。
8.思维树(ToT)
大模型的“思维树”(Tree-of-Thought, ToT)是一种比“思维链”(Chain-of-Thought, CoT)更复杂的推理框架,旨在通过树状结构组织多步推理过程,让模型能够更灵活地探索多种解题路径,并在过程中动态剪枝和优化。
它是近年来为解决复杂推理问题提出的新方法,尤其适用于需要多阶段决策、回溯修正的任务(如数学证明、策略游戏、创造性写作)。
思维树的核心思想
- 树状结构建模推理过程
- 节点:表示一个中间状态(如部分答案、假设、中间结论)。
- 边:表示从一个状态到另一个状态的推理步骤(如尝试一种解题方法)。
- 分支:允许模型在多个可能的推理路径上并行探索,最终选择最优路径。
- 动态探索与剪枝
- 模型在生成答案时,会像人类一样尝试多种可能性(例如不同的解题思路),并评估哪些路径更可能成功。
- 如果某条路径明显错误(如数学推导矛盾),模型会主动“剪枝”放弃该分支,避免无效计算。
思维树 vs 思维链*
特性 | 思维链(CoT) | 思维树(ToT) |
---|---|---|
结构 | 线性步骤(一步一步推导) | 树状结构(多路径探索与回溯) |
灵活性 | 单一路径推理 | 支持多分支尝试和动态调整 |
容错性 | 跳步可能导致错误扩散 | 错误路径可被剪枝,减少负面影响 |
适用场景 | 简单逻辑推理(如数学计算) | 复杂多阶段任务(如策略规划、创造性问题) |
思维树的工作流程
以解决一道数学题为例:
题目:“用3、5、7、9四个数字组成一个算式,使结果等于24(每个数字只能用一次)。”
-
根节点:初始问题(目标:用四个数字得到24)。
-
第一层分支:尝试不同运算组合(如加减乘除、括号优先级)。
- 分支1:3 × (9 - (7 - 5)) → 计算结果是否符合?
- 分支2:(7 - 5 ÷ 3) × 9 → 是否可行?
-
评估分支:计算每条路径的结果,判断是否接近目标。
-
剪枝:若某分支明显错误(如结果远大于24),放弃该路径。
-
最终路径:找到正确解法(如分支1的结果为24)。
思维树的优势
- 复杂问题解决能力
- 在需要多步试错的任务(如数独、密码破解)中,ToT能系统性地探索可能性,而非依赖单一路径。
- 动态调整能力
- 如果某条路径走不通,模型可回溯到上一节点,尝试其他分支(类似人类的“换个思路”)。
- 减少幻觉(Hallucination)
- 通过剪枝无效分支,降低模型生成不合理中间结论的概率。
实现思维树的技术挑战
- 计算成本高
- 多路径探索需要大量计算资源,尤其是当分支数量指数级增长时。
- 评估函数的设计
- 如何高效判断一个分支是否值得继续?需要结合领域知识或外部工具(如数学验证器)。
- 与模型架构的兼容性
- 现有大模型(如GPT-4)原生支持线性生成,需通过提示工程或微调适配树状推理。
实际应用场景
- 数学与逻辑难题
- 解决需要多步骤试错的数学题(如奥数题、逻辑谜题)。
- 策略游戏
- 围棋、象棋等游戏中模拟多步走法并评估胜率。
- 代码生成与调试
- 生成代码时尝试多种算法路径,并通过测试用例剪枝错误方案。
- 创造性写作
- 构建故事情节时探索不同分支,最终选择最优叙事线。
示例对比:思维链 vs 思维树
- 思维链(线性推理)
*“尝试用3×(9−(7−5))计算:- 先算括号内:7−5=2
- 再算9−2=7
- 最后3×7=21 → 结果错误,需重新思考。”*
(仅一条路径,错误后需从头开始)
- 思维树(多分支探索)
“分支1:3×(9−(7−5))=21 → 错误;
分支2:(7−5÷3)×9≈24 → 接近目标;
分支3:3×5 + 9 −7=27 → 错误。
最终选择分支2并优化参数。”
(多路径尝试,动态剪枝)
9.提示工程经验总结
- 别急着上代码,先尝试用prompt解决,往往有四两拨千斤的效果
- 但别迷信prompt,合理组合传统方法提升确定性,减少幻觉
- 想让A1做什么,就先给它定义一个最擅长做此事的角色
- 用好思维链,让复杂逻辑/计算问题结果更准确
- 防御prompt攻击非常重要
后记
学习笔记产出,如有错误还望指针