【持续更新】实践中碰到的提示工程技巧汇总
本文主要是跟踪记录 我在工程实践中总结的提示工程技巧,亲测有效。
关于整体结构
意图识别和语义判断的时候,待判断的句子放在规则后面
问题描述:
在意图识别的相似场景中,会使用LLM去判断一个语句是否符合一系列的规则。在实际场景中,这些规则往往非常长且复杂。整体结构上有两种排布方式
方式一:
temp="""你的任务是判断句子A是否包含定义B中的语义
定义B是:“{cls_def}”
句子A是:“{sent}”
# 你要直接回答 是 或 否 ,不能输出其他内容
"""
方式二:
temp="""你的任务是判断句子A是否包含定义B中的语义
句子A是:“{sent}”
定义B是:“{cls_def}”
# 你要直接回答 是 或 否 ,不能输出其他内容
"""
哪种好?
解决方案:
实际场景中,方式一,也就是待判断的句子距离生成位置越近,正确率越高。
我的实践场景中,相同的规则语义片段和相同的模型(Qwen2.5-14B),方式一比方式二 执行正确率高20%+
当然,是不是模型能力越强,这个gap越小?是的。但你总有要挑战LLM极限的任务。不然的话,是不是一个小模型也能满足你的大部分需求?
不用纠结HTML或Markdown
问题描述:
GPT4和LLAMA这两个模型的大量训练数据里面都是网页数据,导致这两个模型在理解这类数据时候有一些优势,但是中文模型上,同样的优势并不明显。可能是因为这里面还有更大比例的中文数据,这部分数据是从万卷这类图书文本中出来的。
解决方案:
Qwen和Deepseek生成的时候都比较偏向Markdown,豆包在生成时则有点偏向中文书籍。但是理解复杂任务说明的时候,更关键的不是任务说明的排版格式细节,而是具体措辞,举例等因素。
让大模型先给排一个版就行,不必纠结。
案例的书写应该和规则放在一个部分
问题描述:
很多任务中,需要就具体给大模型的执行规则、执行条件等,进行举例。有时候会发现明明举了一个跟当前情况很像的例子,但是模型执行就是错误的。
问题分析:
很多这种情况都跟模型注意不到相关信息有关,有时候写清楚、直白还不够。还要让他注意到。
解决方案:
用
规则一:XXXXX,比如:例子1;例子2
规则二:XXXXX,比如:例子3;例子4
比用
规则一:XXXXX,
规则二:XXXXX
比如:例子1 属于规则1 ;例子3 属于规则2
效果好。(如果你说,我试过 我的场景下没差别啊。恭喜你,还没遇到特别难搞的case)
关于措辞
任务说明中的措辞
避免过度依赖“改写”等常用任务描述
问题描述:
在任务说明中,“改写”这个词可能让你的大模型更倾向于彻底重构句子,而不是轻度调整,导致输出显得生硬或不自然。
问题原因:
IFT任务当中,存在大量‘改写任务’,进而导致模型在这个任务上有点overfit
解决方案:
尝试用同意但不常用的词替换。
用“微调”替代“改写”:如果结果不符合预期,可以尝试用“微调”这类不常见的词替代“改写”。这能引导模型更专注于局部调整,而不是彻底重构,从而提升输出的质量。
要想模型公正,不要说是自己做的
问题描述:
在任务说明中,如果说“我写了一个论文的Abstract,你帮我看看有什么问题。” 模型的回答会更倾向于积极评价。这样比较容易降低“模型检查成文”等相似认为的成功率。
问题原因:
这个成因还挺迷的,类似的现象发现的文章比较多,最近还有篇文章讨论这个 SycEval: Evaluating LLM Sycophancy 主要的原因可能来自align的语料的倾向性。
解决方案:
这个解决还挺简单的,把【我】换成【我的同事】,如果你还担心模型不够严苛,你可以再加一句我有点担心这个结论不对, 模型的倾向性就会扭转。
一些人类知道的间接推断规则,要明示给模型
问题描述:
在判断任务中,要求模型通过简单推理得到结论的时候,模型的回答成功率有时候不稳定。比如,要让模型从上下文中判断“孩子本周五是否回来”时,你希望模型注意到的情况是“在周四发生的对话中,家长说了明天孩子回来,就代表孩子周五回来。” 这类信息,模型有概率答对,但不稳定。
问题原因:
这个还是系统1和系统2之间没有低成本桥梁的问题,就是不推理,单凭直觉做快问快答,就是容易错。
解决方案:
虽然目前研究的重点都在COT上。但是在业务场景中,没有那么高的RT容忍度,还要让这个结果稳定且正确,就要以规则的形式告诉模型,明示这种推断规则,“在周四的对话记录中,家长表示了明天孩子回来”,即代表孩子周五回来。
尽量不要是用“左右”这类无法衡量范围的词来描述尺度
问题描述:
使用“大概”,“左右” 这类词的时候,人类的预期是机器和人对这个没有明确尺度的概念的理解是一致的,但是实际判断的时候,这类词会令多数任务的判定成功率出现问题。比如,“一个人身高正常是指在160cm上下”,这种描述下,170cm在这个范围内吗?不同的模型判断可能有差别,不同任务下,模型的判断可能也有差别。
解决方案:
如果能明确范围就明确到具体边界。如果难以明确边界,也不要用‘左右’,用案例。
使用“仔细”来高亮关键信息
问题描述:
在提示工程里已经说明白了“遇到某个情况,应该怎么做”的情况下,模型的判断或者执行仍然 易错(而不是全错)
问题分析:
提示工程全文比较长的情况下,最容易出现这种情况,主要原因还是模型的注意力没有高亮你希望他关注的说明或者案例。
解决方案:
使用“仔细”这类在行为上要求模型关注的的词汇来强化模型对某个事情的注意力。比如
客户讲到“孩子不听/不愿意/听不进去”时,你要仔细分析"不愿意"对应的对象和宾语,如果……
实践中,不同的模型对不同的词敏感,可以试试 Markdown的 **符号,“注意上下文”,“仔细观察”等类似描述。
更多推荐


所有评论(0)