作者是看了阿里巴巴的提示词编写技巧那篇文章所做一个总结。原文附上:提示词工程
一、设计Prompt
我们在给大模型提供prompt的时候需要描述清楚我们的需求,越清晰越具体,AI给的反馈就越好。
例如:
1:请你给我写一篇散文

2:你是一个文学作家,请你给我写一篇500类似于鲁迅文风的散文,主题是思乡。

这样他们的效果就不一样了。
二、使用Prompt框架
这里的的框架类似于 背景、目的、风格、语气、受众、输出。对于这样框架我们用#词汇#框起来给AI描述。
例子:
#背景#
我想为公司的新产品做广告。我公司的名字叫阿里云百炼,产品叫阿里云百炼 Zephyr Z9,是一款轻薄便携的手机。
#目的#
为我创建一个微博帖子(限制:500字),旨在让人们有兴趣点击产品链接购买。
优化Prompt
一、为模型提供输出案例。
在描述完我们的需求之后我们可以给模型提供一个我们想要它实现的输出案例,模型就能仿照着我们的输例来给我们满意的答案。
二、设定完成任务的步骤:
对于模型而言,一些复杂的任务我们需要告诉它该怎么去处理,这时候我们可以让他跟中我们的任务步骤走:
例如:
#背景#
又到了周日,小明像以往一样去爷爷奶奶家玩,小明于早上八点整步行出发,已知小明每分钟行走50米,
走了12分钟后,小明的父亲发现小明忘记带作业了,于是便骑车去追小明,已知小明的爸爸每分钟骑行200米,
等到追上小明后,爸爸决定骑车带上小明,已知小明坐自行车的路程是走路路程的5倍,
#目的#
小明什么时候到爷爷家?
#任务步骤#
- 先计算小明被爸爸追上时的时间和移动的距离。
- 再计算小明去爷爷家剩余的距离和需要的时间。
- 最后计算小明到爷爷家的时间。
三、学会用分隔符
在构建复杂得到Prompt时,采用特定的分隔符是极为关键的,分隔符的作用是让AI知道每一部分的具体内容,而分隔符的选取选择哪些不常用的特殊字符,例如###、===等
例如:
请简短总结以下影评。
曾经意气风发的张志强在生活的重压下,中年"失速"偏离了原本的生活轨迹,一时意气用事的决定,让他瞬间从家人的"小骄傲"变成了社会的"边角料"。
然而,他未曾料到,这仅是他中年人生道路上的起点。接连不断的变故如疾风骤雨般袭来,迫使他不得不重新面对自我。
当生活的重担真正压肩,他选择成为一名快递员,从新的起点重新出发,穿梭于都市大街小巷的张志强在路上结识了一众志同道合的伙伴。
四、引导模型"思考"
引导模型思考我们可以采用思维链的方式,告诉AI应该对问题如何去思考,如何去分析?这样能狗提升大模型在复杂场景下的推理能力
例子:
对一个json块进行解析,在最后面添加以下提示词。
1:
#输出#
如果全部符合要求,只输出 "符合要求",否则只输出 "不符合要求"。
输出:
不符合要求
2:
#输出#
先输出针对各要求的思考判断过程。
如果全部符合要求,再输出 "符合要求",否则输出 "不符合要求"。
输出:
首先,我们来逐步分析给定的JSON数据,以判断它是否符合所有提到的要求。
思考过程
检查每个servlet是否有init-param
cofaxEmailservlet 有init-param,包含 "mailHost" 和 "mailHostOverride"。
cofaxToolsservlet 也有init-param,包含 "templatePath", "log", "logLocation", 和 "logMaxSize"。
结论:每个servlet都有init-param,满足要求1。
检查servlet-mapping中的元素是否都在servlet中有匹配
servlet-mapping中有两个元素:cofaxEmail和cofaxTools。
servlet定义中也正好有这两个servlet名称的定义:cofaxEmail和cofaxTools。
结论:servlet-mapping 中的所有元素都能在 servlet 中找到匹配,满足要求2。
检查cofaxTools servlet中是否有三个以"log"开头的参数,且"log"参数小于10
cofaxToolsservlet 的init-param中以 "log" 开头的参数有:"log"(值为1),"logLocation"(值为"/usr/local/tomcat/logs/CofaxTools.log"),和理论上应该计算在内的"logMaxSize"(尽管它的值为空,但题目似乎更关注前缀而非值的内容)。
其中 "log" 的值为1,确实小于10。
结论:虽然关于"logMaxSize"是否算作以"log"开头的有效参数可能有歧义(因为它没有实际数值),但基于最直接的解读,我们可以认为是满足了至少存在三个以"log"开头的参数这一条件,且明确指定的"log"参数值为1,小于10,因此大体上满足要求3,尽管"logMaxSize"的处理依据具体情况可能有所不同。
输出
基于以上分析,虽然关于"logMaxSize"的处理可能存在解释空间,但主要条件基本得到满足。因此,如果对"logMaxSize"不作严格要求(比如,不强制要求它必须有一个有效数值且小于10),则可以认为整体符合要求。如果有对"logMaxSize"的具体数值要求,则需要进一步澄清后决定。但在标准解读下,答案应为:"符合要求"。
可以看到差别相当明显,此外还有提示链,通过多轮对话来引导AI的思考方向,例如一些agent里面的计划模式,就是使用了这个提示链的方式去进行处理的