<p>应直接粘贴终端完整失败输出并附加三要素与空间锚点,再要求git diff格式修改:--- a/src/user_service.py@@ -14,5 +14,5 @@ def get_user_name(user_id): ... return user.name</p>
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

你正在调试一个Python单元测试,pytest报错显示AssertionError: assert get_user_name(123) == 'Alice',而你刚粘贴了出错函数和测试用例到智谱清言,却得到一段完全不相关的JSON解析代码——这不是模型“不会改”,而是它没被明确告知:你正盯着终端里那一行红色AssertionError,光标停在VS Code第27行波浪线下方,且尚未运行修复后的代码。
锁定报错现场与上下文边界
打开智谱清言网页版 → 新建对话 → 【光标必须定位在输入框最开头,不能有任何空格或换行】 → 直接粘贴终端中完整的失败输出(含堆栈最后一行、文件路径、行号),例如:tests/test_user.py:42: AssertionError: assert get_user_name(123) == 'Alice'。
这一步强制模型放弃“泛化补全”模式。如果只写“我的测试失败了”,它会默认调用通用测试教学知识库;但看到test_user.py:42,它只能激活Python测试框架专项记忆。
紧接着在同一输入框内,换行后立刻追加三要素:① 出错函数所在文件与行号(如src/user_service.py 第15行);② 你本地复现的最小命令(如pytest tests/test_user.py::test_get_user_name -xvs);③ 已排除的干扰项(如确认数据库mock已生效,确认用户ID 123在fixture中已预置)。
让模型“看见”你的编辑器状态
方法一:用空间锚点替代指令性语言
在三要素之后,加一句:“你正悬停在VS Code第15行return user.name右侧,左侧是灰色波浪线,右下角状态栏显示‘Python 3.11 (venv)’”。这句话不提供技术信息,但能切断模型调用“通用TDD流程”的路径。
方法二:用操作痕迹建立临场感
追加:“你右手食指刚松开Command+C,终端窗口还开着,光标在AssertionError那行末尾闪烁,左侧是未保存的user_service.py标签页”。此时模型不再模拟“远程顾问”,而是被迫进入“结对编程坐席”角色。
【漏掉空间锚点,模型会自动补全它训练数据里最常共现的调试场景,比如默认怀疑pytest插件版本冲突】
驱动模型输出可验证的修改方案
第一步:要求模型先输出差异块而非整段重写
在提示词末尾明确写:“只输出git diff格式的修改内容,从--- a/src/user_service.py开始,包含完整路径、行号标记(@@ -14,5 +14,5 @@),不解释原因,不生成新函数”。
第二步:强制约束修改粒度
追加:“若原函数含条件分支,仅修改触发失败路径的分支内代码;禁止新增try/except、日志或类型注解——这些属于后续优化项,当前目标是让test_get_user_name通过”。
第三步:绑定验证动作
最后加一句:“修改后,你应能立即在终端执行pytest tests/test_user.py::test_get_user_name -xvs并看到绿色的1 passed”。


















