阅读与理解

向 AI Reader 问一个具体的行为

怎样就变量、异步问题和补丁提问,该加什么上下文,以及怎样核对回答。

“解释一下这个项目”能换来一份概览,但很少能告诉你某个分支为什么执行了、某次改动安不安全。想让 AI Reader 帮上忙,就问一个具体的行为,并说清楚要它查什么。

说清发生了什么、预期是什么

一个好的开场问题包括三点:你做了什么,发生了什么,原本预期是什么。知道相关的文件或选区就加上;不知道的话,描述你看到的提示或操作,让 AI Reader 先找到入口。

例如:

环境变量是 REPORT_LIMIT=4,报表输出了四条,但配置文件写的是六条。请从输入追踪到输出,说明哪个来源生效了,以及环境变量为空字符串时会怎样。

这个问题有明确的终点:选中了哪个来源,在哪里校验,最后在哪里使用。它还顺带引出一个小测试。配置追踪案例展示了一个完整的回答应该讲清哪些事。

选择起始上下文

上下文 适合 仍需自己确认
选区 解释一个表达式或分支 调用方的假设、周围的条件
文件 行为分散在好几个方法里 import 和外部状态
文件夹 知道是哪个子系统,但不知道入口 实际参与的是哪些文件
Git 对比 审查指定提交之间的改动 base 和 head 的方向、历史上下文

加进去的上下文只是起点。AI Reader 会在你授权的项目里打开其他文件、追踪依赖,所以请求里可能不止你加的那个文件。如果涉及保密代码,先看看哪些内容会被发送。

提问示例

异步界面问题:

先选 A 再选 B,有时界面上还是 A 的内容。请跨过每个 await 追踪这两次请求,列出成功、catch 和 finally 里的状态写入,并说明是什么阻止了旧请求改动当前界面。

JavaScript 异步竞态教程复现了这个调用顺序,再用请求序号保护正文、错误提示和加载状态。下载文中的示例,即可运行附带的测试。

补丁审查:

审查这次对比中缓存失效相关的改动。每个可能的回归都请给出改动位置、真实可能发生的事件顺序、用户会看到什么,以及一个能区分新旧行为的测试。原来就有的问题请单独列出。

架构问题:

这份缓存归哪个组件管,谁能让它失效,哪些调用方共用同一个条目?请引用创建它和修改它的代码,并标出取决于运行时配置的部分。

每个问题都写明了好的回答必须包含什么:一个事件顺序,一个能区分新旧版本的测试,或者创建和修改缓存的代码。

先核对一个结论,再往下问

在代码快速预览里打开关键引用,需要的话再看完整文件。检查引用里的条件对你的输入是否真的成立,以及有没有别的调用方、覆盖规则或错误分支会推翻结论。

回答有缺口时,把问题缩小了再追问:

你找到了两个实现。这次请求是在哪里选中其中一个的?如果光看代码确定不了,还缺哪个运行时的值?

AI Reader 不能运行项目里的测试,所以它给出的测试还没有跑过。请自己运行,再把结果贴回对话里。

连续追问与另开话题

下一个问题是在同一条线上继续深挖,就留在当前对话里。想换个方向调查,可以在已完成的回答上选择分叉对话,带着到这条回答为止的上下文开一个独立的对话,原来的线索保持不变。

只有在某一轮打开允许修改后,AI Reader 才会修改文件;之后的运行和分出来的对话都会回到只读。Git 对比对话始终只读。编辑完成后,看一遍 diff,再运行覆盖这次改动的检查。