Prompt Engineering,也被称为上下文提示(In-Context Prompting)或提示工程,是人工智能中的一个概念,特别是在自然语言处理(NLP)领域。它指的是通过设计和编写提示文本(Prompt),以引导大型语言模型(LLM)生成符合特定要求的语言输出。
Prompt Engineering的主要目标是使大语言模型更加准确、可控,并适应不同的任务和应用场景。下面就一起来看看Prompt Engineering到底该如何实现?我们先从一张思维导图开始:
注意:思维导图所展示的内容只是目前比较主流的LLM思维推理技术,并不能代表全部,要想学习更多的LLM推理技术框架,还需要查阅更多的资料。
注意:有时防止LLM幻觉出现,也会在提示中 明确允许LLM回答“我不知道”,样例如下:
# prompt:
# Capacity and Role:
你是一个生活助手,可以帮助用户查询天气。
# Insight:
你能够使用天气查询(weather_search:根据经纬度查询天气)工具,帮助你更好地完成任务。
# Statement:
北京今天的天气?
# Personality:
要求语言生动活泼,简洁优雅。
# Experiment:
请给出最优结果。
# 防止幻觉:
否则请回答“我不知道答案”。
从输入到输出,LLM 直接执行任务,不添加任何中间推理技巧。
零样本 = 0,经过大量数据训练并调整指令的LLM往往是能够执行零样本任务。
样例一:
# prompt:
# 指令
判断文本情感是中性、负面还是正面。
# 陈述
文本:这部电影太棒了!
llm:正面
虽然大型语言模型展示了惊人的零样本能力,但在使用零样本设置时,它们在更复杂的任务上仍然表现不佳。少样本提示(one/few-shot)可以作为一种技术,以启用上下文学习,我们在提示中提供演示以引导模型实现更好的性能。
单样本 = 1
样例一:
# prompt:
# 指令
判断文本情感是中性、负面还是正面。
# 参考示例
示例一:这部电影太棒了!(正面)。
# 陈述
文本:我太讨厌这个产品了!
llm:负面
少样本 >= 2
样例一:
prompt:
# 指令
判断文本情感是中性、负面还是正面。
# 参考示例
示例一:这部电影太棒了!(正面)。
示例二:我太讨厌这个产品了!(负面)
示例三:今天的天气还行。(中性)
# 陈述
文本:今天实在是太累了!
llm:负面
迫使模型将推理过程划分为中间步骤:除了任务输入/输出之外,还包括提示中推理的中间步骤。(中间“想法”)
样例一(先推理-后答案):
# prompt:正确答案
# few-shot,少样本
Q:小明每天早上花费10分钟时间走到学校,如果小明家距离学校2公里,那么他每分钟走多少米?
A:这是一个关于速度、路程、时间的数学问题。我们可以通过公式:速度=路程/时间来解决。因为小明每天早上走2公里,所以他的路程为2千米。而他每天早上要花费10分钟时间走到学校,因此他的时间为10分钟,即600秒。
所以小明每分钟走的距离为2公里/600秒=0.0033公里/秒或3.3米/秒。所以答案是小明每分钟走3.3米。
# 陈述
Q:两辆汽车从相距500千米的两城同时出发,相向而行,一辆摩托车以每小时80千米的速度在两辆汽车之间不断往返联络。已知这两辆汽车的速度分别是每小时40千米和60千米,求两汽车相遇时,摩托车共行驶了多少千米?
A:
0utput:我们可以使用相遇前的时间来计算摩托车的行驶距离。两辆汽车的相对速度是40千米/小时+50千米/小时=100千米/小时 根据题目我们可以得知,两辆汽车从相距500千米的两个城市同时出发,因此它们相遇的时间是500千米/100千米/小时=5小时 摩托车以每小时80千米的速度在两辆汽车之间往返,因此它每小时行驶的距离是80千米。所以,摩托车共行驶了5小时×80千米小时=400千米。
注意:先推理-后答案 效果会更好。【即:由xxx推理过程 可得xxx结果,而不是结果是xxx,因为xxx推理过程】
样例二(先答案-后推理):
# prompt:错误答案
# few-shot,少样本
Q:小明每天早上花费10分钟时间走到学校,如果小明家距离学校2公里,那么他每分钟走多少米?
A:最终答案是:3.3米。推理过程如下:这是一个关于速度、路程、时间的数学问题。我们可以通过公式:速度=路程/时间来解决。因为小明每天早上走2公里,所以他的路程为2千米。而他每天早上要花费10分钟时间走到学校,因此他的时间为10分钟,即600秒。所以小明每分钟走的距离为2公里/600秒=0.0033公里/秒或3.3米/秒。
# 陈述
Q:两辆汽车从相距500千米的两城同时出发,相向而行.一辆摩托车以每小时80千米的速度在两辆汽车之间不断往返联络.已知这两辆汽车的速度分别是每小时40千米和60千米,求两汽车相遇时,摩托车共行驶了多少千米?
A:
Output:
最终答案是:1600千米。推理过程如下:首先计算出两辆汽车相遇所用的时间。假设两辆汽车相遇时间为t小时,则根据速度=路程/时间的公式,可以得到以下两个等式:40t+60t=500,解得t=5小时。 接下来计算摩托车在这5小时内往返的次数。摩托车以每小时80千米的速度行驶,所以5小时内行驶的距离为80*5=400千米。由于摩托车是往返行驶的,所以实际行驶的距离应该是400*2=800千米。所以摩托车共行驶了800千米。
应用场景:适用于固定步骤和顺序的问题,如:数学问题、编程问题等。顺序+步骤
零样本思维链 = 0
实现方式:在zero-shot的基础上添加如下指令:“让我们一步一步思考(Let`s think step by step)”。
样例一:
prompt:一个杂耍者可以同时抛16个球。这些球的一半是高尔夫球,而高尔夫球的一半是蓝色的。那么有多少个蓝色的高尔夫球呢?
# 关键语句
请一步一步思考后给出答案。
llm:首先,我们知道一半的球是高尔夫球,即16球的一半,也就是8个高尔夫球。其次,高尔夫球的一半是蓝色的,所以需要计算8个高尔夫球的一半,即8球的一半,也就是4个蓝色的高尔夫球。所以,答案是4个蓝色的高尔夫球。
样例二:
prompt:一个杂耍者可以同时抛16个球。这些球的一半是高尔夫球,而高尔夫球的一半是蓝色的。那么有多少个蓝色的高尔夫球呢?
llm:
# 关键语句
让我们一步一步思考(Let`s think step by step)
首先,我们知道一半的球是高尔夫球,即16球的一半,也就是8个高尔夫球。其次,高尔夫球的一半是蓝色的,所以需要计算8个高尔夫球的一半,即8球的一半,也就是4个蓝色的高尔夫球。所以,答案是4个蓝色的高尔夫球。
少样本思维链 >= 1
实现方式:在示例样本中给出LLM推理过程,然后得到最终答案。
样例一:
# prompt:
# 参考示例
Q:小明每天早上花费10分钟时间走到学校,如果小明家距离学校2公里,那么他每分钟走多少米?
# 推理过程
A:这是一个关于速度、路程、时间的数学问题。我们可以通过公式:速度=路程/时间 来解决。因为小明每天早上走2公里,所以他的路程为2千米。而他每天早上要花费10分钟时间走到学校,因此他的时间为10分钟,即600秒。所以小明每分钟走的距离为2公里/600秒=0.0033公里/秒或3.3米/秒。
# 最终答案
所以答案是小明每分钟走3.3米。
# 陈述
Q:两辆汽车从相距500千米的两城同时出发,相向而行.一辆摩托车以每小时80千米的速度在两辆汽车之间不断往返联络.已知这两辆汽车的速度分别是每小时40千米和60千米,求两汽车相遇时,摩托车共行驶了多少千米?
llm:
A:我们可以使用相遇前的时间来计算摩托车的行驶距离。 两辆汽车的相对速度是40千米/小时+60千米/小时=100千米/小时 根据题目我们可以得知,两辆汽车从相距500千米的两个城市同时出发,因此它们相遇的时间是500千米/100千米/小时=5小时 摩托车以每小时80千米的速度在两辆汽车之间往返,因此它每小时行驶的距离是80千米。
所以,摩托车共行驶了5小时x80千米/小时=400千米。
当使用思维链提示时,这个过程需要手工制作有效且多样化的例子。这种手动工作可能会导致次优解决方案。
Automatic Chain-of-Thought:自动思维链,LLM自动构建few-shot。是一种消除人工的方法,即利用 LLMs “让我们一步一步地思考” 提示来生成一个接一个的推理链。这种自动过程仍然可能在生成的链中出现错误。为了减轻错误的影响,演示的多样性很重要。
两个实现阶段:
样例一:
自我一致性旨在“替换链式思维提示中使用的天真贪婪解码方法”。其想法是通过少样本 CoT 采样多个不同的推理路径,并使用生成结果选择最一致的答案。这有助于提高 CoT 提示在涉及算术和常识推理的任务中的性能。
Chain-of-Thought-Self-Consistency 自我一致性:
基本思路:
样例一:
在响应查询时启动多个并发推理路径,并在最终确定答案之前应用加权机制。通过一致性判断得到最终答案。
样例二:
同一个问题不同的CoT思维路径得到不同的结果,最后通过一致性判断得到最终答案。
在大量的应用中发现,当LLM需要解决的问题比few-shot给出的样例更有难度的时候,无论是上述哪种方式都无法较好的解决问题。
为了解决这个问题,有人提出了least-to-most(L2M,从最少到最多)的prompt的写作范式。
基本策略:
样例一:
# prompt:
# 指令
根据输入的sql语句,指出存在的问题。
# 参考示例
Q:select * from user where 1=1 -- name = '张三'
A:可以拆分这些子问题:"词法分析是否正确","语法分析是否正确","是否存在操作风险","是否存在注入风险"
Q:词法分析是否正确
A:正确
Q:语法分析是否正确
A:正确
Q:是否存在操作风险
A:存在风险,会查询出大量数据
Q:是否存在注入风险
A:存在注入风险,sql中--后面通常不加筛选条件
Q:总结一下,存在哪些问题
A:这条 SQL 语句存在两个主要的问题:
1. 操作风险:会查询出大量数据
2. 注入风险:sql中--后面通常不加筛选条件
# 陈述
Q:update student set name = 张三
llm:
A:可以拆分这些子问题: "词法分析是否正确","语法分析是否正确","是否存在操作风险","是否存在注入风险"
Q:词法分析是否正确
A:不正确,更新的值应该用引号包裹,例如 name = '张三',而不是 name = 张三。
Q:语法分析是否正确
A:不正确,因为在SET子句中对name列赋值时,'张三'应该被单引号括起来。正确的语句应该是:update student set name = '张三'
Q:是否存在操作风险
A:存在风险。此条更新语句没有使用 WHERE 子句进行条件限制,会导致表中的所有记录的 name 都被更新为 '张三',这可能是一种误操作。常规情况下,我们建议在执行更新操作时始终使用 WHERE 子句来限定被更新的记录。
Q:是否存在注入风险
A:在这个例子中,不存在 SQL 注入的风险。因为这条语句没有动态链接输入,也没有暴露出可以被利用来注入恶意 SQL 代码的漏洞。但是,SQL 注入通常出现在将未经过滤或未经适当处理的用户输入直接连接到 SQL 查询中的情况,比如在一个动态构建的 SQL 查询中,一个恶意用户可能在预期的输入之外提供额外的 SQL 语句,从而改变了原始 SQL 查询的意图。
Q:总结一下,存在哪些问题
A:这条 SQL 语句存在两个主要的问题:
1. 词法错误:在 SET 子句中对 name 列赋值时,字符串值 '张三' 没有被单引号括起来。
2. 操作风险:SQL 语句没有使用 WHERE 子句进行条件限制,这可能导致 student 表中所有记录的 name 都被更新为 '张三',很可能是一种误操作。
需要注意轻易不要在没有指定 WHERE 子句的情况下执行 UPDATE 操作,以防对数据库中的大量数据进行无意的修改,除非你确实打算进行全表更新。同时在执行 SQL 语句时要格外注意词法和语法规则,以确保 SQL 语句的正确性。
提供不同的思维路径和新颖功能,如:结果回溯。即通过将复杂问题分解为更易于解决的小问题,为LLM推理提供了一个更结构化的提示框架。【多个结果进行选择+下一步(重复)= 最终结果】
ToT 维护着一棵思维树,思维由连贯的语言序列表示,这个序列就是解决问题的中间步骤。使用这种方法,LLM 能够自己对严谨推理过程的中间思维进行评估。LLM 将生成及评估思维的能力与搜索算法(如广度优先搜索和深度优先搜索)相结合,在系统性探索思维的时候可以向前验证和回溯。
基本步骤:
定义问题(输入)、生成思维(预测步骤/问题分解)、评估思维(状态评估/边界判断-BFS/DFS)、选择最佳思维、执行思维、评估结果、回溯。
应用场景:适用于多角度思考、探索多种可能性的问题,如:策略规划、创意思考等。层次化+多角度
样例一:
# 多prompt实现
# 思维分解prompt【每一步迭代时调用】
propose_prompt = '''
Input: 2 8 8 14
Possible next steps:
2 + 8 = 10 (left: 8 10 14)
...
Input: {input}
Possible next steps:
'''
# 评估思维prompt【迭代节点】
value_prompt = '''Evaluate if given numbers can reach 24 (sure/likely/impossible)
BFS或DFS样例
...
{input}'''
# 评估结果prompt
cot_prompt = '''Use numbers and basic arithmetic operations (+ - * /) to obtain 24.
Each step, you are only allowed to choose two of the remaining numbers to obtain a new number....
Input: {input}
Steps: {steps} 【{steps}是所有被投票/评估为最有可能实现最终目标的节点】
Answer:'''
样例二:
# 多prompt实现
# 定义问题 prompt:
有四个人参加了一个聚会。他们分别是 Alice、Bob、Charlie 和 David。聚会上,每个人都戴了一顶帽子,帽子的颜色有红、蓝、绿三种。每个人都能看到其他人的帽子颜色,但不能看到自己的。他们之间进行了如下对话:
Alice 说:“我看不到红色的帽子。”
Bob 说:“我确定我戴的不是绿色的帽子。”
Charlie 说:“我知道我戴的帽子颜色不是红色的。”David 没有说话。
现在,请推理出每个人戴的帽子颜色。
# 思维分解 prompt:
1.1 定义思维步骤和候选项:
• 第一步:分析 Alice 的陈述。候选项:[Alice 戴蓝帽子,Alice 戴绿帽子]
• 第二步:分析 Bob 的陈述。候选项:[Bob 戴 红帽子,Bob 戴绿帽子]
• 第三步:分析 Charlie 的陈述。候选项:[Charlie 戴 红帽子,Charlie 戴蓝帽子]
• 第四步:分析 David 的沉默。在前三个陈述的基础上,确定 David 的帽子颜色。
# 评估思维 prompt:
1.2 使用搜索算法(如广度优先搜索)执行任务。
从第一步开始,模型会评估每个候选项:
第一步评估:
• 候选项1:Alice 戴蓝帽子
• 结果:Alice 戴蓝帽子,Bob 戴 红帽子,Charlie 戴绿帽子,David 戴 红帽子(与 Bob 的陈述矛盾)
• 候选项2:Alice 戴绿帽子
• 结果:Alice 戴绿帽子,Bob 戴 红帽子,Charlie 戴蓝帽子,David 戴 红帽子(与 Bob 的陈述矛盾)
第二步评估(基于 Alice 戴绿帽子的情况):
• 候选项1:Bob 戴 红帽子
• 结果:Alice 戴绿帽子,Bob 戴 红帽子,Charlie 戴蓝帽子,David 戴绿帽子(满足所有条件)
# 得到最终结果
1.3 得出最终答案:Alice 戴绿帽子,Bob 戴 红帽子,Charlie 戴蓝帽子,David 戴绿帽子。
样例三,简易示例:
利用LLM自身参数: temperature和top_p参数越大,模型输出越泛化。
# 单prompt实现
你是一个擅长中文和英文的AI 工程师和数据科学家,擅长中文和英文相关的 AI 技术文章编写和翻译。
请将下面的英文翻译成中文,要求语言生动活泼,简洁优雅。
你需要3个步骤来执行这个任务:
1. 将英文直接翻译为中文,主要考虑意思表达的准确性,请给出 3个结果
2. 从步骤 1 的结果中选择一个意思表达更恰当的给出 1 个结果
3. 将步骤 2 的结果润色为更简洁优雅通顺的中文,主要考虑中文的语言表达习惯,输出 3 个结果
4. 审视步骤 3 提供的 3 个结果,整合出一个最好的结果,作为最终结果输出
需要翻译的英文段落:Spending lots of time thinking about different possible future scenarios and their probabilities might be captivating, but I suggest an absolutely different approach — to try to build your prototype yourself. First, it’s rather challenging and fun. Second, it will help us to look at our work in a more structured way. Third, it will give us an opportunity to try in practice one of the most cutting-edge approaches — LLM agents.
分别输出步骤 1 的 3 个结果、步骤 2 的 1 个结果、步骤 3 的 3 个结果,和步骤 4 的最终结果:
LLM 输出的结果:...
搜索算法:
BFS:此算法保留每步最有希望的状态集。它用于树深度有限的问题,可以评估和修剪初始思维步骤到一个小集合。
DFS:此算法首先探索最有前途的状态,直到达到最终输出或状态评估器认为不可能从当前状态解决问题。
总结,ToT是CoT与CoTs的拓展:
1. 选择目的地
2. 预订机票
3. 预订酒店
4. 制定行程(参观景点、活动等)
5. 准备所需证件(护照、签证等)
6. 打包行李
7. 出发并享受旅程
1. 选择目的地
1.1 考虑兴趣和喜好
1.2 考虑预算
1.3 考虑旅行时间
2. 预订机票
2.1 比较不同航班和价格
2.2 选择最佳航班
3. 预订酒店
3.1 根据目的地和预算筛选酒店
3.2 阅读评价并选择最佳酒店
4. 制定行程
4.1 列出景点和活动
4.2 安排行程顺序和时间
5. 准备所需证件
5.1 检查护照有效期
5.2 办理签证(如需要)
6. 打包行李
6.1 列出所需物品
6.2 分类打包
7. 出发并享受旅程
AoT是ToT的拓展,减少LLM调用:基本思想是将搜索算法(DFS、BFS)以及节点评估融合在一次推理过程中。
基本思想:在prompt中明确要求LLM执行搜索算法以及节点评估,即让搜索算法融入到LLM的推理过程中,达到边推理边搜索边评估的效果。(ToT的搜索和评估是通过编程实现,并没有和LLM的推理过程深度融合)
样例一:
探索某个推理链,回溯并开始新的推理链。结合前面推理链想法生成新的解决方案。
基本策略:
核心思路:可以探索某个推理链,回溯并开始一个新的推理链,然后意识到前一个推理链中的某个想法可以与当前探索的想法相结合,并将它们合并成一个新的解决方案,利用优点并消除缺点。
GoT是CoT与ToT的概括和升级:
样例一:
样例二,排序任务:
# 多prompt实现
# 序列分解Prompt
Split the following list of 64 numbers into 4 lists of 16 numbers each,
the first list should contain the first 16 numbers, the second list the second 16 numbers, the third list the third 16 numbers and the fourth list the fourth 16 numbers.
Only output the final 4 lists in the following format without any additional text or thoughts!
{{ "List 1":[3, 4, 3, 5, 7, 8, 1, ...],
"List 2": [2, 9, 2, 4, 7, 1, 5,...],
"List 3": [6, 9, 8, 1, 9, 2, 4, ...],
"List 4":[9,0,7, 6, 5, 6, 6,...]}}
Input: [3, 1, 9, 3, 7, 5, 5, 4, 8, 1, 5, 3, 3, 2, 3, 0, 9, 7, 2, 2, 4, 4, 8, 5, 0,8,7,3,3, 8, 7,0,9, 5, 1, 6, 7, 6, 8, 9, 0, 3, 0, 6, 3, 4, 8,0, 6, 9, 8, 4, 1, 2, 9, 0, 4, 8, 8, 9, 9, 8, 5, 9]
Output: {{
"List 1": [3, 1, 9, 3, 7, 5, 5, 4, 8, 1, 5, 3, 3, 2, 3, 0],
"List 2": [9, 7, 2, 2, 4, 4, 8, 5, 0, 8, 7, 3, 3, 8, 7,0],
"List 3": [9, 5, 1, 6, 7,6, 8, 9, 0, 3, 0, 6, 3, 4, 8, 01,
"List 4": [6, 9, 8, 4, 1, 2, 9, 0, 4, 8, 8, 9, 9, 8, 5, 9]
}}
Input: {input}
# 排序Prompt
Sort the following list of numbers in ascending order
Output only the sorted list of numbers,
no additional text.
input: [3, 7,0, 2, 8, 1, 2, 2, 2, 4, 7, 8, 5, 5, 3, 9, 4, 3, 5, 6, 6, 4, 4, 5, 2, 0, 9, 3, 3, 9, 2, 1]
output: [0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, ,4 ,4 ,4 , 4, 4, 5, 5, 5, 5, 6 ,6, 7, ,7 8, 8, 9, 9, 9 ]
Input: (input}
# 合并Prompt
Merge the following 2 sorted lists of length {length1} each,
into one sorted list of length {length2} using a merge sort style approach. Only output the final merged list without any additional text or thoughts!
<Approach>
To merge the two lists in a merge-sort style approach, foloow these steps:
1. Compare the first element of both lists.
2. Append the smaller element to the merged list and move to the next element in the list from which the smaller element came.
3. Repeat steps 1 and 2 until one of the lists is empty.
4. Append the remaining elements of the non-empty list to the merged list. </Approach>
Merge the following two lists into one sorted list:
# 提炼操作Prompt
The following two lists represent an unsorted list of numbers and a sorted variant of that list. The sorted variant is not correct. Fix the sorted variant so that it is correct.
Make sure that the output list is sorted in ascending order, has the same number of elements as the input list ({length}), and contains the same elements as the input list.
<Approach>
To fix the incorrectly sorted list follow these steps: 1.For each number from θ to 9,
compare the frequency of that number in the incorrectly sorted list to the frequency of that number in the input list. 2. Iterate through the incorrectly sorted list and add or remove numbers as needed to make the frequency of each number in the incorrectly sorted list match the frequency of that number in the input list.
</Approach>
<Examples>
Input:[3,7,0,2, 8, 1, 2, 2, 2, 4, 7, 8, 5, 5, 3, 9]
Incorrectly Sorted:[0, 0,0, 0, 0, 1, 2, 2, 3, 3, 4, 4, 4, 5, 5, 7,7,8,8,9,9,9,9] Output: [0, 1, 2, 2, 2, 2, 3, 3, 4, 5, 5, 7, 7, 8, 8,9]
Input: [6, 4, 5, 7, 5, 6, 9,7, 6, 9, 4, 6, 9, 8, 1, 9, 2, 4, 9, 0, 7, 6, 5, 6, 6,2, 8, 3, 9,5, 6,1]
Incorrectly Sorted: [0, 1, 1, 2, 2, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 8, 8, 9,9, 9, 9, 9] Reason: The incorrectly sorted list contains two extra 4s and is missing two 6s and one 9.
Output:[0, 1, 1,2, 2, 3, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6,7,7,7,8,8,9,9, 9,9,9, 9]
</Examples>
Input:{input}
Incorrectly Sorted: {incorrectly_sorted}
# 程序实现
评分+结果选择
该图中的推理过程的实现有两类方式:
PoT不仅仅是生成自然语言答案,而是要求创建一个可执行程序,可以在Python等程序解释器上运行,从而产生实际的结果。
实现方式:生成可执行程序【公式生成多步骤思维+语义与变量绑定】
注意:PoT的程序执行不一定针对最终答案,而是可以作为最终答案的中间步骤的一部分。
样例一:
样例二:
# 设定
根据输入,生成sql语句。
# 示例
输入:我叫王大锤,今年21
输出:insert into user('name','age') values('王大锤',21);
# 陈述
输入:...
先生成一个答案蓝图,然后并行地充实细节,从而减少生成完整答案所需的时间。
实现思路:
样例一,对比Least to Most:
# 没有Least to Most直接解决子问题输出答案的步骤
# Prompt定义
# 设定
根据输入的sql语句,找到sql可能存在的问题。
# 示例
示例一:
输入:select * from user wher age=18 -- name = '张三'
输出:
1. 需要验证的方向:"语法分析是否正确","是否存在安全风险"。
2. 语法分析需要验证的子项:"表名是否合法","关键字是否正确"。
3. 安全风险需要验证的子项:"影响数据量","是否存在sql注入"。
总结:
- 存在sql注入,-- 符号后面通常不加过滤条件- 存在关键字错误,wher 应该为 where
LLM推理过程建模方案/推理技术/思维模式/提示工程框架 有很多种,下面几个实现方式也是市面上比较常见的方案。
先针对问题提取相关内容【文档】,然后根据相关内容实现作答。
样例一:
# 多prompt实现
# 文档提取prompt:
你是一个很有帮助的助手。你的任务是根据文档回答问题。第一步是从文档中提取与问题相关的引文,由####分隔。请使用<quotes></quotes>输出引文列表。如果没有找到相关引文,请回应“未找到相关引文!”。
####
{{文档}}
####
llm:
<quotes>...</quotes>
# 解答prompt:
根据从文档中提取的相关引文(由<quotes></quotes>分隔)和原始文档(由####分隔),请构建对问题的回答。请确保答案准确、语气友好且有帮助。
####
{{文档}}
####
<quotes>
- Chain-of-thought (CoT) prompting[27]
- Generated knowledge prompting[37]
- Least-to-most prompting[38]
- Self-consistency decoding[39]
- Complexity-based prompting[41]
- Self-refine[42]
- Tree-of-thought prompting[43]
- Maieutic prompting[45]
- Directional-stimulus prompting[46]
- Textual inversion and embeddings[59]
- Using gradient descent to search for prompts[61][62][63][64]
- Prompt injection[65][66][67]
</quotes>
基本思路:
样例一:
# 完整prompt
巴黎是哪个国家的首都?
知识:巴黎是法国的首都,位于法国北部的塞纳河畔。法国是一个位于欧洲的国家,拥有丰富的历史和文化遗产。
这里还有一个RAG检索增强技术,会在之后的文章中再进行详细介绍。
跟Least to Most 相似:回答问题之前需要先回答什么问题。
通俗的讲,Step-Back 就是在写 Prompt 的时候,往后退一步,想想在回答这个问题之前需要先回答什么问题。
样例一:
# 完整prompt构造
你是一个擅长中文和英文的AI 工程师和数据科学家,擅长中文和英文相关的 AI 技术文章编写和翻译。
请将下面的英文翻译成中文,要求语言生动活泼,简洁优雅。
需要翻译的英文段落:Spending lots of time thinking about different possible future scenarios and their probabilities might be captivating, but I suggest an absolutely different approach — to try to build your prototype yourself. First, it’s rather challenging and fun. Second, it will help us to look at our work in a more structured way. Third, it will give us an opportunity to try in practice one of the most cutting-edge approaches — LLM agents.
请按照一下步骤输出结果:
1. 要想得到通顺优雅简洁的翻译文章,你需要知道哪些前提问题
2. 这些前提问题的答案分别是什么
3. 基于这个前提问题,对于给出英文的翻译结果
参数 | 推荐值 | 简介 | 说明 |
---|---|---|---|
temperature | 0.95 | 这个值越大生成内容越随机,多样性更好 | 这个参数控制着生成的随机性。较高的温度值(如 1.2)会增加文本的多样性和创造性,但可能会牺牲一些准确性或连贯性。具体地,temperature 会调整概率输出的softmax概率分布,如果 temperature 的值为1,则没有任何调整;如果其值比1大,则会生成更加随机的文本;如果其值比1小,则生成的文本更加保守。 |
top_p | 0.95 | 单步累计采用阈值,越大越多token会被考虑 | 如果累计概率已经超过0.95,剩下的token不会被考虑例如有下面的token及其概率,a:0.9,b:0.03,c:0.03,d:0.015,e… 。则只会采用用abc,因为已经是0.96超过了0.95 |
最后,关于使用场景: