1.生成式AI是一个计算量有限的函数,单次输入要求越多,输出质量越会下降!
AI和人在这个方面很像,人处理事情也是有“容量”上限的,我们一次性分配给下属的任务越多,他们交付的质量大概率也会越低。时刻记住这一点!
因此,对于特别庞大的提示词上下文,我们心里有一些“可能会得到差答案”的预期。这时候怎么办?
人工归纳、重新开一个窗口,开启一个新对话。因为随着对话内容不断变多,上下文中一定充斥着很多跟我们下一个问题不相关的东西,这时候,我们就需要“剥离”出子问题,再去发问。
相信随着AGI的发展,人工归纳会慢慢变成自动归纳,但是目前还是自己识别比较靠谱。
2.越是宽泛、笼统的输入,输出就越感觉“未经打磨”。
比如,我们就用一句话提示词“请帮我写一个社交网站”,得到的结果一定是差强人意的。因为一个良好体验的社交网站需要打磨的地方太多了,你的提示词如果不能体现这些打磨的点,那结果大概率不会让你满意。 这里有一个很有趣的tradeoff:
如果写的特别粗糙,那就跟我们想要的大相径庭,需要人工修改的太多;
如果每个细节都用提示词写出来,那就太麻烦了,和直接写代码没啥区别了;
所以最佳实践是:像画素描那样去打磨你的作品,素描时一般会先画出轮廓,然后在细化细节。
所以我们的提示词也是这样的流程:
1、先编写可以产出一个轮廓性系统的提示词,不要纠结某个具体的细节,甚至有些细节你可以主动提示:“这个部分先空着,用一个placeholder替代”,这样可以节省很多token和时间。
2、然后针对不同的模块、功能,再编写更多的提示词,逐步的细化。
3.越是“冷门”/“定制化”逻辑,AI的回答越是无法让你满意。
相对应的越是标准的问题,AI回答的答案与你想要的越是接近。比如你让它写一个归并排序算法、Dijkstra算法,它很快可以写出来。
如果我们让AI实现一个微信头像的选取和编辑功能,它怎么都实现不了你想要的效果(所有模型我都测试过,结果很不如人意)。因为微信的头像选取功能其实有很多精妙的小细节设计:比如它的图像是可以以任意位置为中心放大的,而GPT学习数据中不可能有微信的代码,因此它所理解的都是一些标准的放大和缩小方案(以图片中心为原点进行缩放),更别说坐标转换算法了。
这个时候你就需要“建模”成更加通用的一些问法,必要的时候自己设计逻辑,让它去按步骤实现。相比直接写代码,提示词还是相对轻松很多的。
这里还有一个重点——实际的企业级软件开发99%都是个性化的,比如阿里和京东的代码一定都各不相同,设计思路可能有类似的,但细节大多都不同。对于一个复杂的生产级系统,代码结构的编排非常重要,因为每家公司、每种业务都有各自的特殊需求,因此这不是一个“标准”问题,AI的回答不会太如人意(原则2),因此我们需要自己来构建一个“逻辑自洽”的代码架构。
比如对于前端APP项目来说可以分成api、model、pageModel、pages、database、repo。只有我们自己讲逻辑了、AI才可以输出的更加完美。
4.如果你不讲“道理”和“原则”,AI也不会讲“道理”和“原则”。
这个特性非常有趣,以前主管、领导给下面的同学分配任务,很可能只是说个大概,甚至自己都没有完全想清楚,就用自己的“现场扭曲力”强压了下去。
下属也只能硬着头皮去做,发现了不对也不会吭声;AI则不会说谎,如果你自己的需求不讲道理,它的结果一定不会让你太满意。
因此,当你浅思考无法得到好的结果的时候,这里不要偷懒了,自己花时间想清楚了分配给AI去做吧。 可以先跟AI进行开放式的聊天,帮助自己理清思路,确定逻辑上没问题之后,再编写任务提示词。
5.及时的归档已经成功的修改。
cursor有Accept这个功能,当我们改了很多东西时,我们一定要从意识上“感受到危险”!
这种危险来自于,已经改了这么多了,如果待会儿改坏了,我要是全部撤销,那之前写的就都没了。当我们感觉到这种危险时,可以先Accept之前已经写的代码。
6.AI会偷偷干“好事”,留个心眼。
“你怎么又把我已经写好的代码改坏了?”——这是很多用AI编程的同学经常会遇到的问题。这个与AI“总是尽可能多的完成输出”的特性有关系。目前生成式AI就是根据前面的文字关系生成后面的文字,因此它的“推理能力”有时候嗨到停不下来,DS就曾经曝出这样的BUG:某些提示词会导致一直输出,无限循环。
用多了之后,我们会有一定的“第六感”,当我们预感到那样写了,AI可能会干出什么坏事情的时候,我们需要在提示词中明确告知“别那么做”!尤其在我们做批量处理的时候,一定要想想有没有特例。
比如,如果我们让AI写一个列表查询和展示的页面,它大概率会考虑分页,即便你没有提到。如果我们的系统不需要分页,那就明确告知:不需要你分页,后端不会返回全部结果。
7.逻辑复杂,很难表达?举个例子最好。
很多时候,我们可以先自己辛苦一下,把一个最简单的案例写出来,然后,让AI依葫芦画瓢。这样就能减少很多提示词编写成本。
比如,我们只需要写一个DPO和Mapper最简单的例子,里面放几个基本的字段。AI就可以快速的根据这个案例,编写出所有的DAL层代码。因为AI非常擅长“规模化”,前提是你的样打的好。
8.不知道从何入手?观察自己并总结!
对于一些一下子想不清楚该如何表达的逻辑,不要想着AI能和你心有灵犀(对于一些标准概念有可能会有这种感觉)。如果我们自己都没想清楚一个全新的流程或者项目,就让AI一顿输出,那一定得到的是一堆“没用”的代码,还是需要大量依靠人工去修改。 比如对 AI 说:“帮我写一个自动回复客户邮件的系统。” AI 可能会生成一个通用的、基于关键词匹配的回复机器人,但很可能答非所问或语气生硬。正确做法是先观察自己是怎么处理的,然后你会发现,自己原来对不同的邮件回复的语气都是不一样的,这样你就发现了一套新的“提示词”。
最佳实践:自己先动起来,观察和总结自己做事的步骤,慢慢你就会发现大量可以使用AI的地方。更多企业内部搭建Agent流程也是类似的过程,为什么需要FDE?也就是他们派个人来观察企业实际的运转过程,然后就知道怎么使用AI了。