使用Gemini解决编程难题时,最令人头疼的莫过于反复修改提示、频繁重试、代码跑不通后再追问——最终时间全部消耗在无休止的调试循环中。其实并非模型能力不足,而是你没能把问题“说清楚”。下面这几条经验,能帮你将返工次数降至最低,让Gemini精准直达答案。

将问题拆解为可独立验证的最小单元
不要一开始就抛出“帮我写一个支持登录、权限校验、JWT刷新的Spring Boot后端”——这类需求背后至少隐藏了5个耦合逻辑。Gemini只能按照它自己的理解组合实现,而你的预期全在脑子里,它根本无法看到。
第一步:先摸清当前卡点在哪。是JWT解析报错?还是Refresh Token续期逻辑总是返回401?
第二步:只聚焦这一个细节。例如:“Spring Security中,当refresh token过期时,/refresh接口应返回401而非抛出异常,但我用了JwtAuthenticationFilter拦截,结果触发了默认异常处理器。如何让这个过滤器静默处理并直接响应401?”
第三步:贴出你已经写好的关键代码片段(比如filter中的doFilterInternal那段),再加上实际返回的错误日志片段——不要只说“报错了”,要贴“Caused by: IllegalArgumentException: Token is expired”这种具体信息。
完成这三步后,Gemini大概率第一次就能给出可直接粘贴到项目中的修复补丁。你若不拆解,它只能靠猜测;拆分得越细致,它就越不敢自由发挥。
用具体输入输出来定义期望行为
很多返工的原因很简单:“我以为它懂我的意思”。例如说“把数组去重”,它可能返回Set转换方案,而你需要的是保留原始顺序的LinkedHashSet——但你并未说明“要保留顺序”。
方法一:直接给样例。
输入:[1, 2, 2, 3, 1, 4] → 期望输出:[1, 2, 3, 4](记得附带“顺序无关”这样的注释)
方法二:将约束条件写入问题中。
“用JavaScript实现,不能使用Set,不能修改原数组,时间复杂度≤O(n),空间复杂度≤O(n),返回新数组。”
方法三:指出常见错误解法并排除。
“我知道Array.from(new Set(arr))能去重,但会丢失NaN和-0的区分,我需要严格遵循ES6 SameValueZero比较规则,请用for循环+Map手动实现。”
关键点:必须给出输入样例和期望输出,否则Gemini默认走最简路径,90%概率偏离你的真实场景。
主动声明技术栈与版本边界
问“Python怎么读取Excel”却不说用pandas还是openpyxl,Gemini默认给你pandas.read_excel(),但你项目里禁用了pandas,只允许纯Python + xlrd——返工由此开始。
在问题开头加上一行技术上下文:
“环境:Python 3.9,不能安装新包,已有xlrd==1.2.0,Excel文件是.xls格式(不是.xlsx)。”
或:
“前端项目是Vue 3 + Pinia + Vite 5.2,已禁用any类型,TS严格模式开启。”
这一句话看似多余,实则砍掉了所有跨生态的错误联想。不写这句,Gemini可能直接给你React+Zustand的方案,还附带npm install命令。
让Gemini“自检”而非“自答”
不要只问“怎么实现?”,多加一句“请先确认以下前提是否成立……”。它会先判断可行性,再决定是否生成代码。
例如:
“我有一个Node.js服务运行在Alpine Linux容器里,用pm2启动。现在想监控内存泄漏,但容器内没有bash,只有sh,且无法安装node-gyp。请先确认:① 是否能用process.memoryUsage()做粗粒度监控;② 是否有无需编译的轻量级内存分析模块可用;③ 如果都不行,是否有基于/proc/{pid}/statm的shell脚本方案。确认完再分点给出可执行方案。”
这样一来,它不会直接甩出require('heapdump')的方案,然后你发现根本装不上。
做好这四点,你会发现Gemini的返工率直线下降——不是它变聪明了,而是你把问题“喂”得更清晰、更精准。
