Prompt 学习笔记

生成 Prompt 最好的方法是让 AI 自己生成。 我们可以让他按某个框架生成一份,然后在此基础上调优。

经典的 Prompt

经典的 Prompt 通常由任务说明,上下文,问题,输出格式等部分中的一个或几个组成。

  • 任务说明### 判断下面句子的情感为积极还是消极。它明确了模型需要完成的任务;
  • 上下文### 针对此问题有如下示例: #示例 1:浣熊爸爸背了一箱干脆面走来,小浣熊手舞足蹈迎接爸爸。\n 积极 \n #示例 2:小浣熊吃了一包麻辣味的干脆面,辣得肚子疼。\n 消极 \n #示例 3:小浣熊吃了一包烧烤味的干脆面,脸上露出了满意的笑容。\n 积极 \n。上下文提供了帮助模型理解和回答问题的示例或背景信息;
  • 问题### 待分类的句子:小浣熊连续吃了 20 包烧烤味的干脆面,撑得肚子疼。是用户真正想要模型解决的问题,它可以是一个段落(比如摘要总结 任务中被总结的段落),也可以是一个实际的问题(比如问答任务中用户的 问题),或者表格等其他类型的输入内容;
  • 输出格式### 以{” 结果”: ” ”} 的 JSON 格式返回最终结果。它规范了模型的输出格式。

推荐几个框架

ICIO

假设我们希望让模型总结一篇关于机器学习应用的文章,Prompt 的设计可以如下:

  • Instruction(指令):请提供一段关于本文内容的简洁总结。
  • Context(背景):本文讨论了机器学习在医疗诊断中的应用,并分析了不同算法的优劣。
  • Input(输入):输入的文章内容,包括关于医疗诊断的机器学习应用的信息。
  • Output(输出):请将总结控制在 3-4 句话内,简洁明了。

CRISP

CRISP 是一个围绕 Prompt 精度和一致性而设计的框架,分别从上下文(Context)、角色(Role)、输入(Input)、**结构(Structure)和目标(Purpose)**五个方面来优化 Prompt。

  • Context(上下文):为模型提供任务背景,以确保它理解任务的整体情境。

  • Role(角色):在 Prompt 中指定模型的角色,帮助它更好地适应输出风格。例如,让模型扮演“教授”、“客户服务代表”或“数据分析师”。

  • Input(输入):模型需要处理的主要信息或材料。

  • Structure(结构):输出的组织方式或逻辑结构,确保模型生成条理清晰的内容。

  • Purpose(目标):明确任务的最终目标或期望效果,例如“解释”、“推荐”或“分析”。 示例:

  • 上下文:关于区块链的技术介绍。

  • 角色:作为一个区块链专家。

  • 输入:给定的区块链介绍文本。

  • 结构:逐条说明。

  • 目标:让普通人理解区块链的基本概念。

最佳实践

  • 技巧一:明确背景和目标
  • 技巧二:为模型提供输出样例
  • 技巧三:使用分隔符号区分内容单元
  • 技巧四:引导模型“思考”

1-3 Prompt 案例

#背景#
你很擅长编写小红书种草笔记,喜欢增加丰富的emoji元素。
#目的#
请生成一篇小红书种草笔记,推广强森吹风机。吹风机的优点是:体积小、高颜值、风力大、干得快、智能控温不伤发。
#受众#
喜欢追求时尚的年轻人,尤其是年轻女性
#输出#
小红书文章格式,充满emoji元素,简洁但内容充实
#语气与风格#
我亲测过+n种好物+谁适合谁受益 这个秘诀让你的话语超有信服力! 比如:亲自尝试了很多美白神器,终于挖到宝!仅俩月,肌肤变得嫩滑透亮,自我感觉飘飘欲仙~ 此法特为想大晒体验的小伙伴们量身定制,还能精准安利,助人避坑!
难题出没+揭秘原因+终极解药 这公式助你条理清晰地分享,内容价值爆棚! 案例:渴望秀发如丝?揭秘时刻来啦!原来我一直遗漏关键一步,直到遇见它!换用这款洗发水,秀发显著改善,光泽get! 此法逻辑严密,不仅分享秘籍,还引导读者找到问题破解之道。
独到见解+深度剖析+巧妙推荐 这公式帮你自然流露心声,还能温馨种草! 示例:我觉得每个女孩都该有份挚爱,生活因此而精彩。手帐成了我的小确幸,每当提笔,幸福指数飙升! 它助你畅所欲言,同时不经意间传递心头好,双赢策略!
亲身经历+成果展示 这公式让你的情感表达鲜活又感人! 场景:回想起夏夜海边的蚊灾,满身红包的绝望,直到遇见救星!现在,光滑肌肤让我裙摆飞扬,自信回归! 它让你的故事活灵活现,分享喜悦与感恩之情,触动人心!

4 Prompt 案例:思维链/提示链

#背景#
JSON 输入:
{"web-app": {
"servlet": [
{
"servlet-name": "cofaxEmail",
"servlet-class": "org.cofax.cds.EmailServlet",
"init-param": {
"mailHost": "mail1",
"mailHostOverride": "mail2"}},
{
"servlet-name": "cofaxTools",
"servlet-class": "org.cofax.cms.CofaxToolsServlet",
"init-param": {
"templatePath": "toolstemplates/",
"log": 1,
"logLocation": "/usr/local/tomcat/logs/CofaxTools.log",
"logMaxSize": ""}}],
"servlet-mapping": {
"cofaxEmail": "/cofaxutil/aemail/*",
"cofaxTools": "/tools/*"},
"taglib": {
"taglib-uri": "cofax.tld",
"taglib-location": "/WEB-INF/tlds/cofax.tld"}}}
#目的#
根据 JSON 判断是否完全符合以下要求:
1. 是否每个 servelet 都有 init-param
2. 是不是 servelet-mapping 中元素都在 servlet 中都有匹配
3. servelet 的 cofaxTools 中有三个以“log” 开头的参数,且 “log” 参数小于 10
#输出#
先输出针对各要求的思考判断过程。
如果全部符合要求,再输出 "符合要求",否则输出 "不符合要求"。

参考

  1. Prompt 最佳实践