Skip to content
Discussion options

You must be logged in to vote

我去代码里对了一遍:main_task_user.md 里其实只有本组的 diff 全文,组外文件是没有 diff 正文的,所以 file_read_diff 并不是多此一举。

1. 模板里是两个不同的槽位

internal/config/template/prompts/main_task_user.md:

  • {{diffs}} → <review_files>:本组文件的 diff 全文
  • {{change_files}} → <other_changed_files>:只有文件名

{{change_files}} 由 buildChangeFilesExceptGroup 生成(internal/agent/agent.go:1626),每一项都走 formatDiffEntry(同文件 1612 行),输出形如:

MODIFIED   src/api/handler.go (+12/-3)

只有状态、路径、增删行数,一行 diff 正文都没有。而且函数名里的 ExceptGroup 就是在刻意把本组文件从这个清单里剔除,正是为了不跟 <review_files> 重复。

所以模型实际拿到的是:本组 = 完整 diff,组外 = 一份光秃秃的清单。file_read_diff 补的就是后面这一半 —— 它的 DiffMap 由 injectDiffMap(agent.go:608)按整个变更集的路径建好,正好覆盖组外文件。

2. file_read 替代不了,因为它读的是「改完之后」

file_read 最终走 FileReader.ReadLines,而 Fil…

Replies: 2 comments

Comment options

You must be logged in to vote
0 replies
Answer selected by lizhengfeng101
Comment options

You must be logged in to vote
0 replies
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Category
Q&A
Labels
None yet
3 participants