第 3 章 · 仓库地图:用 tree-sitter + PageRank 压一张符号地图
本章讲:模型没法把你几百个文件全读进上下文。Aider 怎么挑出"最该让模型知道"的那些符号,压成一张紧凑地图?答案是把仓库当引用图,用 PageRank(网页排名算法,按"被重要节点引用"给节点打分)排重要性。
3.1 要解决的小问题
你让模型改 app.py 里的一个函数,它可能需要知道 utils.py 有个 helper()、models.py 有个 User 类——但你没把这些文件加进会话。直接贴全仓库会爆上下文。
目标:在一个 token 预算(默认 1024,
repomap.py:49)内,给模型一张"仓库里有哪些重要符号、定义在哪"的地图。
3.2 直觉:重要的代码 = 被重要代码引用的代码
这正是 PageRank 的思想,从"网页互相链接"搬到"代码互相引用":
- 每个文件是图里的一个节点。
- 文件 A 引用了文件 B 里定义的符号 → 连一条 A→B 的边。
- 被很多(且本身重要的)文件引用的定义,得分高。
再加一层个性化(personalization):你当前会话里的文件、你这句话里提到的文件/标识符,人为抬高权重——让地图偏向"和你正在做的事相关"的符号。