DeepSeek改bug的提示词怎么写最高效
你贴出一段报错代码,DeepSeek改完后反而更乱、功能直接失效——这事儿说到底,不是模型不行,而是提示词没锁住它的行为边界。AI很容易把“修复Bug”理解成“重写整个逻辑”,一旦边界模糊,它就会发挥“创造性”,而你想要的只是一处精准修补。

所以问题的根源很清晰:
提示词没有明确告诉AI“从哪到哪不许动”
第一步:用结构化方式描述Bug现象
在提示词最开头,必须用三行明确写出:输入、预期、实际表现。例如:
输入:{“user_id”: “U123”, “role”: “admin”}
预期:返回 status=200 + 用户权限列表
实际:抛出 KeyError: ‘permissions’,堆栈指向第47行 get_user_profile() 内部。
这一步不能省——模型不看上下文就猜逻辑,而你给的“报错了”三个字,它可能当成网络超时、密钥失效、甚至Python版本不兼容来修。信息越精准,AI越不会跑偏。
第二步:嵌入代码上下文锚点
方法一:在粘贴代码前加注释标记起始位置
/// CONTEXT_START: 权限校验模块 v3.2(含缓存层)
方法二:在疑似问题函数第一行下方插入作用域声明
def get_user_profile(data):
/// FUNCTION_SCOPE: 依赖 fetch_from_cache() 和 validate_role()
【关键】不要只贴出报错那一行,必须包含该函数完整定义+其直接调用的2个上下游函数(哪怕只有3行),否则AI会擅自补全不存在的变量或删掉你依赖的副作用逻辑。
第三步:注入调试断言模板
第一步:在提示词中插入可执行验证语句
ASSERT: line 47 必须返回 dict 类型,且键包含 ‘permissions’、‘name’、‘email’
第二步:对条件分支加中间断言
ASSERT_INSIDE_IF: 当 data[‘role’] == ‘admin’ 时,必须跳过 cache 检查,直连数据库
第三步:若涉及异步或IO,声明时序约束
ASSERT_ORDER: validate_role() 执行完毕后,fetch_from_cache() 才能被调用
这些断言不是摆设——DeepSeek会把它当测试用例生成,自动检查修复后是否仍满足全部断言。漏写一条,就可能让AI把原本该走DB的路径改成走缓存,而你根本没意识到。
第四步:指定修复粒度与硬性边界
1、用 RESTRICT 锁定修改范围
RESTRICT: 仅允许修改 line 45–52,禁止新增函数、禁止修改参数签名、禁止删除任何 try/except 块
2、对安全相关逻辑加防护条款
SECURITY_LOCK: 不得移除 input sanitization 调用;不得简化 role 校验逻辑;所有日志打点位置必须保留
3、强制保留不可删元素
必须保留原函数签名;必须保留第38行 logger.info(“profile fetched”);必须保留 finally 块中 close_db_connection() 调用
第五步:提供失败测试用例
直接贴出你本地复现Bug的最小可运行片段:
python
test_input = {“user_id”: “U123”, “role”: “admin”}
result = get_user_profile(test_input) # 这里崩了
这比说“我调用就报错”管用十倍——AI会拿这段代码当沙盒环境跑验证,修完自动执行一遍,确保不再抛 KeyError。
说到底,把每一步的边界画清楚,DeepSeek才能真正像个资深工程师一样,只动该动的地方,不会把整个系统翻个底朝天。