提示工程备忘单(面向JavaScript开发者)
笔记总结自本教程。
原则1:撰写清晰具体的指令
策略1:使用分隔符明确标示输入的不同部分
分隔符可以是以下任何形式:
'''文本'''
"""文本"""
< 文本 >
<标签>文本</标签>
例如:
const text = `
你应该通过提供尽可能清晰和具体的指令来表达你希望模型做什么。
这将引导模型产生所需的输出,并减少收到无关或不正确回应的可能性。
不要将撰写清晰的提示与撰写简短的提示混淆。
在许多情况下,较长的提示能为模型提供更多的清晰度和上下文,
这可能导致更详细和相关的输出。
`
const prompt = `
将由三重引号分隔的文本总结为一句话。
"""${text}"""
`
策略2:要求结构化输出
如JSON或HTML
const prompt = `
生成三个虚构的书名及其作者和流派。
以JSON格式提供,使用以下键:
book_id, title, author, genre。
`
策略3:要求模型检查是否满足条件
const text = `
泡一杯茶很简单!首先,你需要把水烧开。
在等待的同时,拿一个杯子放入茶包。
一旦水足够热,直接倒在茶包上。
让它静置一会儿,让茶叶浸泡。
几分钟后,取出茶包。如果你喜欢,
可以加一些糖或牛奶调味。
就这样!你就有了一杯美味的茶可以享用了。
`
const prompt = `
你将收到由三重引号分隔的文本。
如果它包含一系列指令,请按以下格式重写这些指令:
步骤1 - ...
步骤2 - ...
...
步骤N - ...
如果文本不包含一系列指令,则简单地写上"未提供步骤。"
"""${text}"""
`
策略4:"少样本"提示
"少样本"提示是指向AI模型提供有限数量的示例,然后让它在类似领域生成新的回应。这是一种常用于训练和利用大型语言模型(LLMs)的技术。
少样本提示的步骤如下:
-
选择你希望模型生成回应的领域或主题。这可以是文本的某种体裁、说话方式等。
-
提供该领域的一小组示例(即"提示")供模型参考。通常只需2-5个示例就足够进行"少样本"学习。
-
模型将分析提示中的模式、风格和结构。它将学习定义该领域回应的属性。
-
让模型在同一领域生成新的回应。通过参考提示,它可以产生匹配所需风格、结构等的回应。
-
审查回应并提供反馈以进一步改进模型。这可以是对模型的明确反馈,或只是注意下一组提示生成的领域。
示例:
const prompt = `
你的任务是以一致的风格回答。
<孩子>:教我关于耐心。
<祖父母>:雕刻最深谷的河流源自一处modest泉;
最宏大的交响乐始于单个音符;
最复杂的挂毯始于一根孤独的线。
<孩子>:教我关于韧性。
`
原则2:给模型时间"思考"
策略1:指定完成任务所需的步骤
const text = `
在一个迷人的村庄里,兄妹杰克和吉尔出发去山顶的井里
打水。他们一边爬山一边快乐地唱着歌,不幸却突然降临——
杰克被一块石头绊倒,滚下了山坡,吉尔紧随其后。
虽然有些擦伤,但两人回到家中得到了安慰的拥抱。
尽管遭遇了这次意外,他们冒险的精神依然不减,
继续愉快地探索。
`
// 示例1
const prompt_1 = `
执行以下操作:
1 - 用1句话总结由三重引号分隔的以下文本。
2 - 将摘要翻译成法语。
3 - 列出法语摘要中的每个名字。
4 - 输出一个包含以下键的json对象:french_summary, num_names。
用换行符分隔你的答案。
文本:
"""${text}"""
`
策略2:指示模型在匆忙得出结论之前先想出自己的解决方案
const prompt = `
你的任务是确定学生的解答是否正确。
要解决这个问题,请执行以下步骤:
- 首先,自己解决这个问题。
- 然后将你的解答与学生的解答进行比较,
评估学生的解答是否正确。
在你自己解决问题之前,不要决定学生的解答是否正确。
使用以下格式:
问题:
"""
这里是问题
"""
学生的解答:
"""
这里是学生的解答
"""
实际解答:
"""
解决问题的步骤和你的解答在这里
"""
学生的解答是否与刚刚计算的实际解答相同:
"""
是或否
"""
学生评分:
"""
正确或不正确
"""
问题:
"""
我正在建造一个太阳能发电站,需要帮助计算财务情况。
- 土地成本为每平方英尺100美元
- 我可以以每平方英尺250美元的价格购买太阳能板
- 我谈妥了一份维护合同,每年将花费我固定的10万美元,
外加每平方英尺10美元
作为平方英尺数的函数,第一年运营的总成本是多少?
"""
学生的解答:
"""
设x为安装面积(平方英尺)。
成本:
1. 土地成本:100x
2. 太阳能板成本:250x
3. 维护成本:100,000 + 100x
总成本:100x + 250x + 100,000 + 100x = 450x + 100,000
"""
实际解决方案:
你是OrderBot,一个自动服务系统,用于收集比萨餐厅的订单。首先,如果顾客问了一个空泛或介绍性的问题,你要问候顾客,然后收集订单,再询问是自取还是外送。你要等待收集完整个订单,然后总结一下,最后再次确认顾客是否还想添加其他东西。如果是外送,你要询问地址。最后你要收取付款。确保澄清所有选项、额外配料和尺寸,以便准确识别菜单中的项目。
如果有"之前的对话"数据,你会得到这些数据,以便了解之前讨论的内容。
你用简短、非常口语化的友好风格回应。菜单包括:
意大利辣香肠比萨 12.95, 10.00, 7.00
芝士比萨 10.95, 9.25, 6.50
茄子比萨 11.95, 9.75, 6.75
薯条 4.50, 3.50
希腊沙拉 7.25
配料:
额外芝士 2.00,
蘑菇 1.50
香肠 3.00
加拿大培根 3.50
AI酱 1.50
青椒 1.00
饮料:
可乐 3.00, 2.00, 1.00
雪碧 3.00, 2.00, 1.00
瓶装水 5.00
之前的对话:${oldContext}
此订单的问题:${newContext}
"""
`