要让gemini重构函数时严格保持原有输入输出行为不变,必须用提示词锁死接口契约、禁止语义变更、排除隐式副作用,并明确拒绝“优化”类主观判断。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

要让Gemini在重构函数时严格保持原有输入输出行为不变,必须用提示词锁死接口契约、禁止语义变更、排除隐式副作用,并明确拒绝“优化”类主观判断。
锁定函数签名与IO契约
在提示词开头直接声明:「你只能修改函数内部实现,不得改动函数名、参数名、参数顺序、参数类型(含可选/默认值)、返回值类型、返回值结构(如是否为Promise、是否为数组嵌套)、空值/异常的返回方式」。
这一步漏掉任何一项,Gemini就可能把 async function 改成同步调用,或把 {data, error} 改成 throw new Error(),导致调用方崩溃。
禁止任何形式的语义等价替换
明确写入:「不允许用 Array.from(set) 替代 [...new Set(arr)],不允许用 str.trim() 替代 str.replace(/^\s+|\s+$/g, ''),不允许将 for 循环改写为 reduce,即使结果相同——因为执行路径、错误堆栈、性能特征、内存占用均不同」。
方法一:添加约束句「所有变量名、中间计算步骤、分支逻辑顺序必须与原代码一致,仅允许调整缩进、空行、括号位置、拆分过长表达式」。
方法二:要求 Gemini 先输出「本函数当前输入输出契约摘要」,确认无误后再开始重构。摘要必须包含:入参样例值(含边界值如 null/undefined/NaN)、预期返回值(含类型和结构)、已知抛出的错误类型及触发条件。
强制隔离副作用与外部依赖
加入硬性指令:「若原函数调用了 console.log、localStorage、Date.now()、Math.random()、fetch 或任何全局变量,请原样保留调用位置与参数;不得封装、提取、mock、删除,也不得添加新的外部调用」。
【关键前提】 提示词中必须附带完整原始函数代码(含注释),且注明「以下代码为不可更改的基准版本」。
这一步不加,Gemini 会默认“清理日志”“替换随机数为常量”,导致测试用例全部失效。
验证重构结果的最小必要动作
第一步:要求 Gemini 输出「重构后代码」与「逐行差异说明」,差异说明中每条必须标注「是否影响输入输出行为」,并给出判断依据。
第二步:要求 Gemini 列出「三个最可能破坏兼容性的风险点」,例如:“第12行将 `a == b` 改为 `a === b`,当 a 为 '0'、b 为 0 时返回值由 true 变为 false”。
第三步:要求 Gemini 补充一行注释到重构后代码末尾:// REFACTORED: input/output identical to v1.0.3 —— 此注释必须与原始代码中对应版本标记完全一致。











