09 全面调教:让GPT理解“否定”
你好,我是键盘,我们继续驯服 GPT。
这节课我们来直面“人智协作”中绕不开的底层诉求——精准控制。什么意思呢?它可以拆解成两个子课题。
- 要:清晰、明确地表达你的需求。
- 不要:引导AI规避你不想生成的内容。
大多数人都盯着“要什么”,却忽略了“精准地不要什么”的重要性,结果就是因为这20%的细节,让80%的结果可用性大幅下降。这就是课程标题中“让GPT理解否定”的含义了。
其实在GPT这类语言模型中遇到的“控制”难题到了非文本生成模型中也无法回避。比如Midjourney,它的出图质量那么高,为什么大家花了钱还在愁落地应用呢?Stable Diffusion + ControlNet会告诉你,是控制。ControlNet插件就是直接指挥SD应该用什么表情、什么角度、什么姿势等等细节来绘图的。控制效果不好,消耗更多的成本,也足够让你质疑AI、怀疑人生。
这节课我会带你设计一个脚本人设来实现长图的自动切割,通过案例讲明白如何让 GPT 理解“否定”。这个脚本在商品详情页的裁剪、图片邮件切割等等这类图片切割的场景里都非常实用。
我们需要用到Mac自带的AppleScript,Windows用户使用Python也可以替代实现。如果你会使用Figma,也可以让ChatGPT帮助开发一个插件来实现。
以上方案都不需要开发基础,我会把它们作为分支功能合入prompt,和你一起通通实现。
GPT无法有效理解“否定”的根源是什么?
GPT模型是基于概率和模式来识别prompt的,而不是通过真正的阅读来理解文本。所以TA可能无法准确地理解和处理否定概念。但它的性能和准确度会随着模型的更新和优化而提高。另一方面,GPT会通过提取重点关键字来进一步理解prompt。
这里面,具体的关键词权重最高,连接词和“不要”这样的表达可能会被忽略。
在咱们课程的留言区中,叶筱结合自己的理解,给出了生动的比喻。
再比如我们讲过的“双语混打”中爬取Twitter数据的案例,GPT会更倾向于使用相关的API来实现,偏偏我还在prompt中提到了API,那TA就会盯着API关键词,忽略“不要使用”四个大字。
💬 案例prompt
也就是说,在这种模式下,GPT更大概率会使用API来实现,而不是你说什么就是什么。使用“不要”换成“Do not”这种双语混打策略都不能彻底解决“有效否定”的原因也在这里。
下面是官方实践给出的佐证和指导,可以参考。
Instead of just saying what not to do, say what to do instead。(用肯定来取代否定)
❌ Less effective(效果不佳)
The following is a conversation between an Agent and a Customer. DO NOT ASK USERNAME OR PASSWORD. DO NOT REPEAT.
Customer: I can’t log in to my account.
Agent:
✅ Better(效果更好)
The following is a conversation between an Agent and a Customer. The agent will attempt to diagnose the problem and suggest a solution, whilst refraining from asking any questions related to PII. Instead of asking for PII, such as username or password, refer the user to the help article www.samplewebsite.com/help/faq
Customer: I can’t log in to my account.
Agent:
在案例中学习:全面调教,设计一个长图裁剪脚本
上面的官方指导我在第二节课的“有效否定三策略”中也有讲过,再复习一下。
- 否定转肯定。
- 侧重肯定,再附上对应的否定。
- 加入示例调教。
现在你可以借助综合人设模版,直接通过展开 /功能:要做什么
来盘点需求,同步设计prompt,看看怎么针对综合人设的5个重点定义,把“有效否定3策略”融合进去。
为了方便理解,你可以先把“肯定/否定”这一组概念,扩展为要/不要、偏好/默认、是/不是、应该/避免……因为它们和“肯定/否定”一样,都隐藏了一个判断的逻辑。
- 功能:要做什么,不要什么。
开局先用一句话定义核心功能,围绕核心来有序展开细节,你的设计就不会乱。
💬 prompt设计:核心功能
这里我还命名了一个综合人设“Script Master”,可以容纳不同平台和编程语言的解决方案。另外,“任务完成”这种关键的反馈也设置一下,让GPT设计好UI,而且可以精准控制差异化,比如Mac上用弹窗、Python的是文字反馈、Figma则是完整GUI(图形用户界面)。除了这些实际功能,还有洗脑用的“初始化”,让GPT先和用户打招呼,递出菜单沟通需求。
💬 prompt设计:子功能
/mac:用AppleScript编写一个脚本来实现,`格式选择`需要UI
/win:编写一个python脚本来实现
/figma:开发一个Figma插件来实现,需要UI
/help:列出`偏好`菜单,提供指引
💬 prompt设计:初始化
- 偏好:偏好什么,否则默认什么。
GPT理解偏好的语境还是很容易的,侧重肯定你的偏好即可。没有想法就默认使用一套设计好的高容错默认值。
比如你日常用的是Windows,初始prompt里的平台默认值就改成Windows。这些偏好会决定GPT用什么设置来接收什么任务,用什么样的方式去执行。注意,偏好不是焊死的,随时可以用/help指令来调整。
💬 可复用的prompt写法
- 判断:满足条件做什么,否则做什么。
这是让GPT一步一步思考的关键。
先说情况判断。与其一条路走到黑,让GPT不停地执行所有事情,不如设计多个分支,某个节点满足条件再自动推理下一个分支,会更加精准、高效。“一条道走到黑”是没有判断的,即使出错也可能最后再给你反馈。就像地上一个井盖丢了,就应该先树立一个警示牌,而不是等人掉进去了再说“哦欧……”。
举个例子,如果想达到的效果是:假如用户定位是“小白”,则提供必要的安装指引再开始设计;如果用户有一定基础,则直接给出代码,不要给多余的指引。那应该怎么写呢?
💬 可复用的prompt判断示例
还有一种判断是确认类判断,“是”就继续,“不是”就修改。我倾向于用“#注释”的方式来调教GPT。比如“不要使用代码块回复”即遇到Markdown就正确地渲染出来。
另外,假如用户已经修改了某个参数,确认过了,那么根据“偏好只确认一次”,就不要再麻烦用户继续确认其他的设置,直接进入主题就好。
如果前面已经提供了“偏好”,那就按需修改,不然就扣1默认,进入主题。
- 模版:什么输出格式?拒绝单调。
模版就是所谓的示例调教,让GPT抄作业。通过这种方式,直截了当地说清楚GPT应该做什么。注意不要使用干巴巴的纯文字段落,要用咱们说过的结构化表达。
💬 可复用的prompt写法
不同的分支,可以有不同的模版,比如设置项适合用带图标的表格,指令菜单适合用列表,表格序号是冗余可以去掉。这些差异性和颗粒度都能通过自然语言精准控制。
- 要求:应该怎样,避免怎样。
因为要求是影响全局的,所以描述就要更加缜密,重点应用“先肯定,再附上对应的否定”,把“要”和“不要”都带上。在这个案例里,最重要的事情是强调“把用户提供的信息自动填入设计的代码中”,不要让人来操心。剩下的做到高效、简洁易懂和少冗余,把必要的要求用“肯定”的语气表达出来就足够了。
💬 可复用的prompt写法
- 把用户提供的路径填入脚本,而不是人力整合。
- 使用高效的算法,避免复杂的运算和步骤。
- 尽量少地调用依赖库存,使用简洁易懂的注释,而不是包含大量术语的方式。
- 正确渲染markdown。
- 请一步一步思考,输出完整的代码。
最后,在综合人设prompt(模板在这里)的设计中梳理需求,全盘控制。
可以看到,在“有效否定3策略”的基础上,这里使用了更全面的控制,其中有2点最重要。
- 加入判断,应对复杂。通过设计多个任务节点的方式,有效释放GPT思维链(CoT)的能力,一步一步推理,而且是有针对性地选择某个任务节点来继续。
- 增加上下文联系,让描述模式更好理解。比如“使用高效的方式”和“避免额外的引用库”这样的上下文组合。比在某些位置单纯提到“不要什么”更精准,不需要处处添加示例。
自检,排除自相矛盾
跑机之前,先过一遍整体的描述有没有自相矛盾的地方。因为多综合人设容易突破500字,前后不一致的概率就更大。比如前文要求“不要使用序号”,后面又来一句“序号列居中对齐”。如果出现这种低级错误,一定要修正初始prompt后再继续。
一切就绪,我们放飞ChatGPT对话框的小飞机。
一步一步实现
首先和GPT沟通偏好。通过emoji加表格菜单的方式就能打造友好的UI交互。这里的图片裁切任务,宽度不变,单独要求高度使用1456px。根据“只确认一次”的要求,我们就可以直接选择不同场景的指令开始派活。
第一种场景,选择 /mac
,用AppleScript来实现。这里发现需要额外的ImageMagick支持,粘贴代码运行就好。接着拿到AppleScript代码,依旧是复制粘贴,想不想夸GPT就随你了。
一稿过,既高效又有效。路径和参数都自动合入到了代码里,也按要求给出了提醒UI,完全不需要我们懂编码,也不需要操作图像处理工具。可以看到,这里如无意外,最重要的反而是“完成的反馈”,我在 🔔 提醒
中给出了偏好设置。
那有意外怎么办呢?老办法,用prompt模版 报错:你复制的报错信息
。
第二种场景,切到 /win
,验收Windows用户使用Python来实现的情况,也一稿通过了(设计师泪流满面)。依赖库只使用了图形处理所需的PIL和访问系统的os,没有多余。
这里的命名不是严格遵循“偏好”的,其实对于复杂的任务,局部不稳定输出还是比较常见的。只要不影响核心的功能,通过上一节课的迭代方法持续沟通修正就好,这里就只要指正一次。
成果顺利验收。
到这里已经跑了2个方案,输出有点长了,很多小伙伴输出一长就会迷路。没关系,一句 /help
就能解决。除了切换需求,你也可以随时修改偏好。除此之外的其他疑问,GPT都会为你排忧解难。
第三个场景,切到 /figma
,用(指挥GPT)开发一个插件的方式来实现。
Figma插件这个方式主打GUI可视化交互,需要比较长的迭代沟通,这里我用设计师小伙伴 Kakitchen 实现的成品给你感受一下。现在在GPT的协助下,一位设计师就可以秒变全栈工程师。
彩蛋:图片嵌入和流程图
案例到这里就结束了,不过除了迭代答案,我们当然也迭代知识,在这次实验里我有2个关于定义专业输出的新发现,和你分享一下,分别是精准控制图片嵌入和流程图生成(控制逻辑)。
图片嵌入:“要你好看”
偏好设置中的配图来自可商用的高质量图库Unsplash。在GPT中使用图片,除了必要的数据可视化和图形辅助学习,装饰类的都不适合占太大篇幅,尤其是高度。
根据原图URL中的参数 &fit=crop&w=1974
,可以看出自适应方式是裁剪,宽度是1974px。如果你已经有一个选好的 unsplash 图片的链接,那就用这行Markdown模版嵌入图片。
不想动手找图片,那就用之前分享过的翻盲盒接口,这种方式不能控制目标图片,它会随着浏览器的刷新,根据关键词来变换输出。
流程图:先胜后战,全局在握
假如你还想用可视化的方式清晰地还原设计逻辑,通过这种方式来自检或者细化设计,怎么办?
💬 prompt
用上面的prompt,再找一个支持Mermaid的编辑器,把GPT生成的代码贴进去,节点中的emoji和符号(比如“?” )会造成报错,去掉即可。这里我用了Notion笔记,看右图成果,哪里需要自己动手画?
小黑板
这节课,我从“人智协作”中绕不开的底层诉求出发,将精准控制拆解成了“要”和“不要”两个子课题,“要”的问题前面的课程已经解决了,所以我们集火解决掌控“不要”的问题。
GPT无法有效理解“否定”,主要源于TA是根据概率和模式来识别,而不是通过真正的阅读来理解文本的基础逻辑。另一方面,GPT通过提取重点关键字来实现进一步操作,“不要”这样的动作可能会被忽略。所以,我们可以通过融合“有效否定3策略”“加入判断”和“增加上下文联系”等多种策略来保证GPT能够真正“阅读理解”。
比如我们这节课设计的Script Master,在“/功能”中明确要做什么、不要什么,而不是只说要什么;在“偏好”中侧重肯定个人偏好,否则就用默认值容错,无需示例;再加入“判断”,满足条件做什么,否则做什么,精准控制实现路径和方法;使用“模版”示例调教,让GPT抄作业;最后列出“要求”,说一说应该怎样,避免怎样。
整体prompt的设计也加入了上下文联系的方法来减少冗余表达或者多余的示例。在用不同方式实现长图自动裁剪的案例中,我们掌握了让 GPT真正理解“否定”的方法,有效地掌控全局。
彩蛋环节,我分享了灵活控制嵌入图片尺寸的方法,还有使用mermaid代码一键生成流程图来还原设计逻辑的方法。它们在日常的GPT工作流中还大有可为,记得多多尝试。
其实这个方案一开始是受小伙伴的Figma插件思路启发的,我探索了其他几种不同实现方式之后才整合成一个综合方案。GPT的学习之路,很多志同道合的朋友都在互相启发,希望这种“携手共进”的方式也能给你学习灵感。
这套课程中,我们不仅要系统掌握利用GPT解决问题的基本规律,对于具体的问题,还要刨根问底,这样才能将有限的方法变成可以无限迁移的方法论。
要点:
踏浪扬帆
超级个体的时代已经来临,你可以大胆做很多以前不敢想的事情了。尝试用同样的思路处理垃圾邮件、通讯录或者零散的记事本。通过智能删减,让自己更轻松。
测试验收前,记得备份好重要的信息哦。
期待在评论区看到你的思考或感受分享,也欢迎你将这节课分享给感兴趣的朋友们,戳此加入课程交流群,我们下节课再会。
附|Script Master
兼容:ChatGPT,建议去掉配图来释放占用的字数。
效果更佳:GPT-4
插件:不需要
字数:480
声明:本人设仅供个人学习体验,未经许可不得商用。
你是一个计算机脚本设计专家,请根据下面的说明,确认用户偏好之后,实现[一个长图切割脚本设计]
功能:针对指定路径的长图 {替换你的长图路径},按一个指定高度切割为多个切片,宽度不变,新建桌面文件夹Slices保存。
---
1、初始化:{`回复`+`配图`+`偏好`列表+`指令`表格。 #不要使用代码块回复,偏好只确认一次
- 回复:“**Hi I’m Script Maser,请确认你的偏好,回“1”保持默认。**
偏好示例:平台:Win
”
- 
- 表格输出`偏好`,模版:
## ✦偏好✦
表格 #不要使用序号
- 用列表列出`指令`菜单,模版:
## ✦指令✦
}
2、偏好:
🎛️ 基础:<用户基础> 默认:小白
💻 平台:<Win> 默认:Mac
🔔 提醒:<定义代码中的完成提示> 默认:“🎉 任务已完成”
🏞️ 格式:<jpg> 默认:png
📝 命名:<切片命名> 默认:原图名称_s_count
📏 高度:<切片高度> 默认:750
3、指令:
/mac:用AppleScript编写一个脚本来实现,`格式选择`需要UI
/win:编写一个python脚本来实现
/figma:开发一个Figma插件来实现,需要UI
/help:列出`偏好`菜单,提供指引
4、判断:
如果用户是“小白”,请直接提供方案。否则:
- 选择/win的情况,你应该先引导用户安装python、安装依赖包。
- 选择/figma插件的情况,你应该提供详尽的指导。
5、要求:
- 把用户提供的路径填入脚本,而不是人力整合。
- 使用高效的算法,避免复杂的运算和步骤。
- 尽量少地调用依赖库存,使用简洁易懂的注释,而不是包含大量术语。
- 正确渲染markdown。
- 请一步一步思考,输出完整的代码。
- 赵赵赵 👍(0) 💬(1)
上文说“输出有点长了,很多小伙伴输出一长就会迷路。没关系,一句 /help 就能解决。”可是我发现有的时候一个方案都没跑完它就迷路了,都来不及输入/help了,这该怎么解决呢?
2023-10-08 - peter 👍(0) 💬(1)
从09课开始看,会复习前面的内容,所以问题会穿插包含前面某课的内容。 Q1:“斜杠工程师”是什么意思? Q2:本专栏是基于哪个网站讲解的?是https://openai.com/吗?还是国内的某个镜像网站? Q3:手机上哪个网站或APP可以使用chatGPT?
2023-06-18 - ᴶᴱᴿ 👍(3) 💬(3)
如果你想将某些不可能的任务变成可能,真正利用GPT的思维链这一点极为重要。比如,你想生成一份超长的PPT,应该先确认好主题,生成大纲,接着填充细节,再输出数据源和参考等补充,最后它可以是PPT、论文、推文或者任何富文本文稿。 逐步推理,逐步执行,而不是劈头盖脸就生成一份超长PPT,还要求GPT不能侧漏或者翻车。
2023-06-16