摘要:用AI编程工具,就好比跟一个特别务实、脑子里装了一堆代码知识的学霸朋友聊天。你得把你的目标说得清清楚楚,还要手把手带他搞明白你到底想干啥。不然,他可能会给你一堆稀里糊涂的答案,浪费你时间。下面是几条“忽悠”AI给你干活的秘诀,保管让它听话!
跟AI编程工具聊天,就像哄个“超级实际”的学霸朋友
用AI编程工具,就好比跟一个特别务实、脑子里装了一堆代码知识的学霸朋友聊天。你得把你的目标说得清清楚楚,还要手把手带他搞明白你到底想干啥。不然,他可能会给你一堆稀里糊涂的答案,浪费你时间。下面是几条“忽悠”AI给你干活的秘诀,保管让它听话!
1. 把背景Context故事讲得跟小说一样详细
AI这家伙,啥也不知道,除非你告诉它!所以,写提示的时候得像讲故事一样,把背景交代得明明白白。比如,你得告诉它你用啥编程语言(Python?JavaScript?),用啥框架(React还是Vue?),甚至具体到哪个函数或代码出了问题。如果代码报错,记得把错误信息原封不动甩给它,再加一句“这个代码本来是想干啥的”。
举个栗子:别光说“我的代码咋坏了?”,得写:“我有个Node.js的Express函数,本来想通过ID查用户,结果抛了个TypeError,烦死了!这是我的代码和错误信息:(贴代码)。”你多给点“剧透”,AI少猜点心思,答案就靠谱得多!
2. 别含糊,直接说你想要啥
含糊的问题,换来的是含糊的答案。别问“我的代码为啥不灵?”这种抓瞎的问题,得具体点!比如:“这个JavaScript函数本来应该返回排序好的数组,结果老是undefined,代码在这儿(贴代码),你帮我看看咋回事?怎么修?”或者,“我这个排序函数跑10万个数据太慢了,咋优化速度?”
神句公式:用这个套路准没错——“我的代码应该干[想干的事],但给[输入例子]时,它干了[现在的烂事]。错哪儿了?” 这样AI就能秒懂你的痛点,直奔主题解决问题。
3. 大任务拆成小块,慢慢来
想让AI帮你写个超级复杂的功能?别一股脑儿把所有要求塞一个提示里!那就像让AI一口气吃下整个汉堡,容易噎着。聪明点,把任务拆成小块,慢慢喂。比如:“先给我搭个React组件的框架,再加状态管理,最后连上API。”一步步来,AI的回答会更靠谱,你也更容易检查。
为啥这样好:这就像你搭乐高,先搭个底盘,再加轮子,最后装车顶。AI每次只专心干一件事,答案就不会乱七八糟。你还能边看边改,像个导演喊“卡!重来!”。
4. 举个例子,AI秒懂你的心
想让AI明白你想要啥?给个例子!比如:“我输入数组[3,1,4],函数得吐出[1,3,4]。”这就像给AI画个靶子,它就知道往哪儿射箭了。没例子,AI可能瞎猜,给你个奇奇怪怪的结果。就像教小弟干活,你得先示范一遍:“看,我是这样用的,你照着来!”
术语小彩蛋:这招叫“少量提示”(few-shot prompting),就是给AI看个模板,让它照着模仿。哪怕就一个例子,也能让AI少走弯路。
5. 让AI“扮演”牛人,效果翻倍
想让AI的回答更专业?给它安个“角色”!比如:“你现在是React界的超级大佬,帮我检查这段代码的bug。”或者“你是JavaScript性能优化大师,帮我把这个函数跑得飞快!”AI一听自己是大佬,立马端正态度,给你整出高水平的建议。
真实案例:有人让AI“扮演JavaScript错误处理专家”,结果AI不仅修了bug,还顺便教了一堆错误处理的骚操作!所以,角色扮演这招,简直是AI的“变身开关”。
6. 跟AI聊着聊着改,答案越来越靠谱
别指望AI一上来就给你完美答案!它就像个实习生,初稿可能有点糙。你得像个老司机,边看边指导。比如,AI给的代码用递归,你不喜欢?就说:“哥们,换成循环试试!”或者“不错,再把变量名改得好听点,加点注释!”AI会记住你们聊天的上下文,慢慢被你调教得服服帖帖。
小秘诀:把AI当伙伴,耐心点,几次调整后,它就能给你想要的完美代码。
7. 代码写得清楚,AI才不迷糊
最后一条,虽然有点像“老妈的唠叨”,但真重要!你的代码得写得清楚,变量名得有意义,格式得整齐,最好再加点注释。AI就像个超级细心的实习生,会从你的代码里“偷学”你的风格。你代码乱糟糟,AI也容易懵,给你个乱七八糟的建议。反过来,你代码整洁,AI也会照着你的路子走,答案更靠谱。
调试代码:让AI当你的“代码侦探”
调试代码是AI的拿手好戏!它就像个会说话的小黄鸭,不仅听你吐槽,还能帮你找bug。但你得学会怎么“使唤”它。
1. 把问题讲得跟讲故事一样清楚
别说“我的代码崩了,咋办?”得说:“我的JavaScript函数本来要算数组[1,2,3]的总和,结果吐了个NaN(不是数字)。代码在这儿(贴代码),你看看哪儿错了?”把语言、错误信息、代码、想干啥、实际干了啥,全交代清楚。AI就能像福尔摩斯一样,直奔问题核心。
2. 复杂问题,让AI“一步步”查
要是bug藏得深,没报错但结果不对,你可以让AI“慢动作回放”代码。比如:“一行一行过这个函数,告诉我total值咋变的,逻辑哪儿崩了?”AI会像个调试器,给你讲每一步干了啥,帮你揪出问题。这招超适合找那种“阴险”的逻辑错误。
3. 给AI最小“犯罪现场”
你的代码库可能有几百行,但bug可能就藏在10行里。试着把问题精简到最小的代码片段,照样能复现错误。比如:“这10行代码(贴代码)也会抛TypeError,帮我看看为啥?”这不仅让AI少费脑子,你自己也可能在精简时灵光一闪,发现问题!
4. 问得精准,还得追问
给足背景后,直接问:“这bug咋来的?咋修?”AI答得不爽?追问!比如:“你修的代码看着行,能再给个例子证明它没问题吗?”或者“为啥这改动能解决?讲讲呗!”AI会接着聊,给你更细的解释。就像跟个耐心老师讨教,追问到懂为止!
举个栗子:
烂提示:“我的mapUsersById函数咋不灵?”
AI可能答:“呃,数组是不是空的?用户有id吗?”(废话一堆,没用!)
好提示:“我有个JavaScript函数mapUsersById,想把用户数组转成按ID查找的Map。但跑[{id: 1, name: 'Alice'}]时,抛了TypeError: 无法读取undefined的‘id’。代码在这儿(贴代码)。它应该返回{ '1': {id: 1, name: 'Alice'} }。哪儿错了?咋修?”
AI答:“你循环里用i
为啥好:给了语言、代码、错误、输入输出,AI直接找到bug,还给了解决方案!
重构代码:让AI帮你把“破车”改成“跑车”
重构代码就是把你的“破旧代码”改得又快又漂亮,但功能不变。AI在这块儿很强,但你得告诉它“漂亮”是啥意思。
1. 说清楚你想咋“改车”
别光说“重构这代码”,得讲明白你想要啥:更好看?更快?还是更符合语言习惯?比如:“把这函数重构得更好读,少点重复,变量名起得帅点!”或者“这个算法跑10万数据太慢,优化下速度!”AI知道目标后,才能给你想要的改动。
2. 给足代码背景Context
贴上要改的代码,最好再讲讲它在项目里干啥。比如:“这是个React组件(贴代码),想改成用Hooks,项目用的是Next.js 14。”AI会照着你的框架和风格改。要是代码有特殊要求(比如不能用某些新语法),也得说:“我们用Node.js v14,别用太新的API。”
3. 让AI解释改动,学点新招
AI不仅能帮你把代码改得又快又帅,还能顺便当你的编程老师!告诉它:“重构完代码,给我讲讲你改了啥,咋改的,为啥这样更好?” 它会给你一份“改车报告”,比如:“我把两个重复的循环合并成一个,省事儿!还加了个字典,查找速度从乌龟爬变火箭飞!” 看它的解释,就像看了一场“代码改装秀”,你能学到新招,还能检查它有没有偷懒。要是解释里有点不对劲,立马喊:“喂,这改得不对啊,重新来!”
4. 让AI扮演“改车大师”
想让AI改得更牛?给它封个“大师”称号!比如:“你现在是TypeScript界的改装大师,把这段代码改得符合最新潮流,最佳实践!” AI一听自己是大佬,立马抖擞精神,给你整出高大上的代码,可能是把循环改成一行数组方法,或者加个超炫的类型注解!再比如:“你是个Python老司机,像教小弟一样,帮我把这代码改得简洁,还得加文档注释!” AI可能会把循环换成集合操作,代码从“拖拉机”秒变“超跑”,还附上解释:“集合去重,速度快到飞起!”
真实案例:有人让AI扮演“Python性能专家”,结果AI把一个循环改成了一行集合操作,速度提升十倍,还附赠了文档字符串,简直是改装界的“法拉利”!
重构栗子:
假设你有个Node.js函数,干活是干了,但代码长得像“破旧三轮车”,重复、乱、慢。代码是这样的:
javascript
这代码问题一大堆:抓数据的逻辑重复得像复读机,错误信息含糊得像猜谜,合并数据的循环慢得像乌龟爬。
咱来试试两种提示,看AI咋改装:
烂提示:“把getCombinedData函数重构一下。”
AI可能答:
AI解释:“我把抓用户和订单改成同时跑,速度快了!错误处理合并成一句,订单用字典分组,合并数据更简洁,可能也更快。”
分析:这改得还行,AI把抓数据的活儿并行干了,用字典加速查找,还把循环改成map,挺帅!但为啥这提示算“烂”?因为你没说清楚想改啥,AI全凭自己猜!它假设你想提速(并行抓数据是不错,但万一并行不安全呢?),还把错误信息合并成一句,丢了“哪个抓失败”的细节。AI改得不错是运气好,但这种“自由发挥”风险大,复杂代码可能改偏了!
好提示:“重构getCombinedData函数,目标是:
(1) 去掉抓用户和订单的重复代码,弄个辅助函数或一起抓。
(2) 如果可以,两个列表同时抓。
(3) 保留单独的错误提示,告诉我是用户还是订单抓失败了。
(4) 优化合并数据,用高效的查找结构代替嵌套循环。给改好的代码,加注释解释改了啥。”
AI答:
javascriptasync function getCombinedData(apiClient) {// 1. 并行抓用户和订单,提速const [usersResponse, ordersResponse] = await Promise.all([apiClient.fetch('/users'),apiClient.fetch('/orders')]);// 2. 单独检查错误,哪个崩了说清楚if (!usersResponse.ok) {throw new Error('抓用户失败了!');}if (!ordersResponse.ok) {throw new Error('抓订单失败了!');}// 3. 并行解析JSON,效率再加点const [users, orders] = await Promise.all([usersResponse.json,ordersResponse.json]);// 4. 用reduce建订单字典,查找快如闪电const ordersByUser = orders.reduce((map, order) => {if (!map[order.userId]) {map[order.userId] = ;}map[order.userId].push(order);return map;}, {});// 5. 用map合并数据,简洁又高效return users.map(user => ({user,orders: ordersByUser[user.id] || // 没订单就给空数组}));}改动解释:
并行抓取:用Promise.all同时抓用户和订单,速度翻倍(目标1、2)。
错误分开:单独检查usersResponse和ordersResponse,哪个崩了都知道(目标3)。
JSON并行:JSON解析也用Promise.all,小提速。
高效合并:用reduce建了个ordersByUser字典,一次分组,查找快到飞起,O(1)速度(目标4)。
分析:这改装得满分!代码又快又简洁,错误信息清楚,字典查找秒杀嵌套循环。AI严格按你的目标改,每条要求都命中,还加了注释解释得明明白白。你再追问:“不错,但能不能再加个日志记录错误?”AI就能接着完善。精准提示就是牛,AI直接给你想要的跑车!
其他改装小技巧:
分步改:代码太复杂?先改可读性(命名、拆函数),再优化算法,一步步来,稳!
问方案:AI改的不爽?问:“能不能用函数式风格重构?不用循环,用数组方法!” AI会给你个新玩法。
学新招:AI用了reduce建字典?让它解释:“为啥reduce牛?教教我!” AI会给你讲个小教程。
验证:改完跑测试!AI可能不小心搞错啥,比如忘了日志。你得检查,必要时让AI写测试用例。
写新功能:让AI帮你造辆“新车”
AI还能帮你从零开始造新功能,比如写个React组件或Express API端点。开放式任务最刺激,但得引导AI别跑偏。咋做?
1. 先画蓝图,再细化
先用大白话说你想造啥,拆成小块。比如想加个搜索栏:“我想在React应用里加个搜索功能,按名字过滤产品,产品从API来。” AI可能给你个计划:1. 加搜索框;2. 存搜索状态;3. 按查询过滤;4. 不区分大小写。
计划ok后,逐个提示:“先做个SearchBar组件,带输入框更新searchQuery状态。”再“给searchQuery和产品数组,过滤产品(不区分大小写,按名字)。” 分块干,AI答案更靠谱,你也好检查。
2. 给AI看“老车”参考
项目里有类似功能?秀给AI看:“这是UserList组件(贴代码),照这风格做个带搜索的ProductList组件。” AI会模仿你的代码风格,保持项目一致性。提下框架和习惯:“我们用Redux管状态,把搜索状态加到Redux里。” AI会按Redux模式写。
3. 用注释当“内联提示”
在代码里写注释,AI秒懂!比如:
javascript
// TODO: 验证请求有姓名和邮箱
AI会补上验证代码。这就像给AI递了个小纸条,告诉它下一步干啥。
4. 给输入输出例子
想让AI写个函数?给例子:“formatPrice(2.5)得返回‘$2.50’。” 或者“Express中间件,GET /users得在控制台打‘GET /users’。” 例子就是AI的“导航仪”,没它AI可能跑偏。
5. 不满意?加细节再来
AI写的代码不爽?别急,改提示!比如:“你用了递归,我想要循环,改改!”或“用Hooks重写,别用类组件,我们全是函数式!” 再加约束:“函数复杂度得是O(n),数据量大。” 迭代几次,AI就能造出你心目中的“超跑”。
现代场景:Next.js电商状态管理
烂提示:“给我的Next.js电商应用建状态管理。”
好提示:我在用Next.js 14建电商应用,需设计状态管理架构。需求:
组件:
产品列表(要:产品数组、过滤器、分页)
购物车(要:商品、总计、送货信息)
用户认证(要:用户资料、认证状态、偏好)
实时通知(要:提示消息、错误状态)
技术限制:
Next.js 14,应用路由器+服务器组件
TypeScript严格模式
服务器端数据抓取(为SEO)
客户端交互(购物车/用户操作)
状态需在导航时保留
选项:
各领域用Zustand存储(购物车、认证、通知)
React Query/TanStack Query管服务器状态+Zustand管客户端
一家Zustand店,带切片
请给推荐架构,带代码示例,展示咋建存储和Next.js App Router整合。
为啥好:真实场景,技术栈清清楚楚,需求列得明明白白,要架构还得有代码,AI能给精准方案!
总结:跟AI“愉快玩耍”的秘诀
用AI编程就像跟个聪明但有点轴的学霸朋友合作。你得把目标讲得跟讲故事一样清楚,拆任务、给例子、设角色、反复调教,代码得整洁。调试时,AI是你的“福尔摩斯”,帮你找bug;重构时,AI是“改装大师”,把破车变跑车;写新功能时,AI是“造车厂”,帮你从零建新车。只要提示够精准,AI就能给你想要的“超跑”代码!
常见的提示反模式以及如何避免它们
并非所有提示都生而平等。到目前为止,我们已经看到了许多有效提示的例子,但识别反模式——导致AI响应不佳的常见错误——同样具有指导意义。
以下是一些常见的提示失败及其解决方法:
反模式:模糊的提示。
这是典型的“它不起作用,请修复它”或“写一些可以执行 X 的操作”而没有足够的细节。我们看到了一个例子,当问题“为什么我的功能不起作用?”得到了一个无用的答案时。模糊的提示迫使人工智能猜测上下文,并经常导致通用建议或不相关的代码。解决方法很简单:添加上下文和细节。如果你发现自己问了一个问题,而答案感觉像一个魔术 8 球响应(“你试过检查 X 吗?”),请停止并使用更多细节(错误消息、代码摘录、预期结果与实际结果等)重新构建你的查询。一个好的做法是阅读你的提示并问:“这个问题可以应用于几十种不同的场景吗?”如果是,那么它太模糊了。使其非常具体,以至于它只能适用于你的场景。
反模式:过多的提示。
这与问题相反:要求AI同时执行太多操作。例如,“生成一个完整的Node.js应用,包含身份验证、React前端和部署脚本”。或者规模更小的“修复这5个错误,并一次性添加这3个功能”。AI可能会尝试执行,但结果可能会混乱不清或不完整,或者它可能会忽略请求的某些部分。即使它解决了所有问题,响应也会很长且更难验证。解决办法是拆分任务。确定优先级:正如我们之前强调的那样,一次只做一件事。这使得更容易发现错误并确保模型保持专注。如果您发现自己在编写的段落中包含多个“和”,请考虑将其拆分为单独的提示或连续的步骤。
反模式:遗漏问题。
有时用户会提供大量信息,但从未明确提出问题或说明他们的需求。例如,直接输出一大段代码片段,只说“这是我的代码”。这会让 AI 感到困惑——它不知道你想要什么。务必包含明确的要求,例如“找出上述代码中的错误” 、“解释此代码的作用”或“完成代码中的待办事项” 。提示应该有目的。如果仅提供文本而没有问题或说明,AI 可能会做出错误的假设(例如总结代码而不是修复它等)。确保 AI 知道你为什么向它展示这些代码。即使是简单的补充,“这段代码有什么问题?”或“请继续实现此功能”,也能为它指明方向。
反模式:模糊的成功标准。
这是一个微妙的问题——有时你可能会要求优化或改进,但你没有定义成功是什么样子。例如,“让这个函数运行得更快”。以什么指标来衡量更快?如果人工智能不知道你的性能限制,它可能会对一些无关紧要的事情进行微优化,或者使用理论上更快但实际上可以忽略不计的方法。或者“让这段代码更简洁” ——“更简洁”是一个主观问题。我们通过明确说明目标来解决这个问题,例如“减少重复”或“改进变量名”等。解决方法:量化或限定改进。例如,“优化这个函数以线性时间运行(当前版本是二次的)”或“重构它以删除全局变量并使用类代替”。基本上,要明确说明你用重构或功能要解决什么问题。如果你把它留得太宽,人工智能可能会解决与你关心的问题不同的问题。
反模式:忽略 AI 的澄清或输出。
有时,AI 可能会回应一个澄清问题或假设。例如:“您使用的是 React 类组件还是功能组件?”或“我假设输入是一个字符串 - 请确认。”如果您忽略这些问题并只是重申您的请求,那么您就错过了改进提示的机会。AI 发出信号,表明它需要更多信息。务必回答它的问题或改进您的提示以包含这些详细信息。此外,如果 AI 的输出明显不对(例如它误解了问题),请不要逐字逐句地重试相同的提示。花点时间调整您的措辞。也许您的提示中有一个模棱两可的短语或遗漏了一些重要内容。把它当作一次对话 - 如果人类误解了,您会用不同的方式解释;对 AI 也这样做。
反模式:风格多变或不一致。
如果您不断更改提问方式或一次性混合使用不同的格式,模型可能会感到困惑。例如,在指令中在第一人称和第三人称之间切换,或者将伪代码与实际代码混淆,造成混淆。请尽量在单个提示中保持一致的风格。如果您提供示例,请确保它们清晰地划分(使用 Markdown 的三个反引号表示代码,使用引号表示输入/输出示例等)。一致性有助于模型正确解析您的意图。此外,如果您有偏好的风格(例如,ES6 和 ES5 语法),请始终如一地提及它,否则模型可能会在某个提示中建议一种方式,而在之后又建议另一种方式。
反模式:像“上面的代码”这样含糊不清的引用。
聊天时,如果你说“上面的函数”或“之前的输出”,请确保引用清晰。如果对话很长,而你又说“重构上面的代码”,AI 可能会跟不上或选择错误的代码片段进行重构。更安全的做法是再次引用代码,或者明确指出你想要重构的函数。模型的注意力窗口有限,虽然许多 LLM 可以引用对话的先前部分,但再次提供明确的上下文可以帮助避免混淆。如果代码显示后已经过了一段时间(或多条消息),这一点尤其重要。
最后,当出现问题时,这里有一个重写提示的策略方法:
识别 AI 的响应中缺失或错误之处。它是否解决了其他问题?它是否产生了错误或不合适的解决方案?例如,也许你要求用 TypeScript 编写解决方案,但它却给出了纯 JavaScript 代码。或者,当你明确需要迭代解决方案时,它却编写了递归解决方案。找出差异所在。
在新的提示中添加或强调该要求。您可以说:“解决方案应该使用 TypeScript,而不是 JavaScript。请包含类型注释。”或者,“我提到过我想要一个迭代解决方案——请避免使用递归,而使用循环。”有时,在提示中使用“注意:”或“重要:”之类的短语有助于突出关键约束(模型没有情感,但它会将某些措辞视为重要性)。例如:“重要提示:请勿为此使用任何外部库。”或“注意:代码必须在浏览器中运行,因此没有特定于 Node 的 API。”。
如有需要,请进一步细分请求。如果人工智能反复无法完成复杂的请求,请尝试先提出一个较小的部分。或者提出一个可能有助于理解情况的问题:“你明白我说的 X 是什么意思吗?”然后,模型可能会解释它认为你的意思,如果解释错了,你可以纠正。这就是元提示——讨论提示本身——有时可以解决误解。
如果讨论陷入僵局,可以考虑重新开始。有时,经过多次尝试后,对话可能会变得混乱。这时,可以尝试重新开始(或暂时清除聊天记录),并根据之前的失败经验,重新设计一个更精细的问题。模型不介意重复,而全新的上下文可以消除之前消息中积累的困惑。
通过了解这些反模式及其解决方案,您将能够更快地动态调整提示。对于开发人员来说,提示工程在很大程度上是一个迭代的、反馈驱动的过程(就像任何编程任务一样!)。好消息是,您现在的工具箱里有很多模式和示例可供借鉴。
结论
提示工程既是一门艺术,也是一门科学——正如我们所见,它正迅速成为使用 AI 代码助手的开发者的必备技能。通过编写清晰、上下文丰富的提示,你实际上可以教会AI 你所需的内容,就像你引导人类团队成员或向同事解释问题一样。
原文:
来源:解道Jdon