FIELD NOTE / {$vo.autoindex}

把代码库变成一张图,AI终于知道该找谁改代码了

每个团队都有这么一个人:你问他"这个函数能改吗",他能立刻告诉你——小心,请求分发器在调它,去年重构过,改成显式传上下文了,去找 David,是他做的。这段回答不在任何一个文件里,它散落在调用图、PR 历史、当初推动改动的 issue,以及参与其中的人之间。 AI 编程助手走不了这条路。它只看得见眼前的文件,也许再加一两条向量检索的结果,会话一结束,全部忘光。RepoBrain 的做法是:指向任意

把代码库变成一张图,AI终于知道该找谁改代码了
NX REPORT
2026
当前位置 PG模拟器官方网站|多端游戏模拟平台 资讯动态 把代码库变成一张图,AI终于知道该找谁改代码了

每个团队都有这么一个人:你问他"这个函数能改吗",他能立刻告诉你——小心,请求分发器在调它,去年重构过,改成显式传上下文了,去找 David,是他做的。这段回答不在任何一个文件里,它散落在调用图、PR 历史、当初推动改动的 issue,以及参与其中的人之间。 AI 编程助手走不了这条路。它只看得见眼前的文件,也许再加一两条向量检索的结果,会话一结束,全部忘光。RepoBrain 的做法是:指向任意公开 GitHub 仓库,在 FalkorDB 里建一张知识图谱,让 agent 通过遍历这张图来回答问题、审查 PR,并且每条答案都附上它走过的路径。 四层结构,一次摄入 一次 ingest 把仓库拆成四层互相连接的数据。代码层是 File 定义 Function、Function 调用 Function;历史层是 Person 撰写或评审 PR、PR 修改 Function;意图层是 PR 修复 Issue;记忆层则是 Episode 使用任意节点、Note 指向 Task。 代码层来自 Python 自带的 ast 模块,函数、方法、调用和导入按名称解析。历史层来自 GitHub 的 GraphQL API:最近 200 个已合并 PR、它们的评审人、关闭的 issue,以及 diff 里的每个文件。PR 与函数的关联靠 diff 的 hunk 头和改动过的 def 行建立。意图层是多数工具漏掉的部分——一个 PR 修复的那个 issue,通常写清了代码为什么长成现在这样。 每个仓库在同一个 FalkorDB 实例里拥有独立的图,租户隔离不产生额外成本。 为什么是图 "full_dispatch_request 为什么写成这样,我该问谁"——这个问题可以写成一条 Cypher 查询:从函数出发,找到撰写过修改它的 PR 的人,再可选地连到该 PR 修复的 issue,按合并时间倒序取最近 6 条。 在 Flask 上,这条查询返回 PR #5818(由 @davidism 提交,把上下文贯穿分发方法),它修复了 Issue #5815(在内部传递上下文,而不是使用 contextvars)。两者合起来解释了设计意图:让一个 AppContext 贯穿每个分发方法,而不是读取上下文代理——这个想法最早由 @pgjones 提出,目的是加速异步视图。在关系型存储里这是四次 join,在向量存储里这是一次猜测,在图中它是一个跳转模式,在 FalkorDB Cloud 上约 0.1 秒跑完。 每个 agent 工具都是这样一条查询。LLM(跑在 Groq 上的 gpt-oss-120b)只负责选择调用哪个工具、把结果写成文字。事实来自图,所以答案自带凭据。 会过期的记忆 记忆分两种。Episode 记录每一次问答,用 USED 边连到 agent 碰过的代码、PR 和人,同一会话里追问时历史直接从图里取回。Fact 是可长期保留的结论,比如"@davidism 拥有 AppContext 设计,PR #5818",用 ABOUT 边连到它描述的对象,由 agent 通过 remember 工具保存;如果它忘了,一个整合步骤会从答案中提炼出来,完成从情节记忆到语义记忆的转换。 难点在于过期。一条关于函数的结论,只在该函数被改动之前成立。所以 ingest 时会给每个函数的 AST 存一个指纹——对 ast.dump(node) 做哈希,重新格式化不算改动。保存结论时,ABOUT 边记下当时看到的指纹。重新同步后,代码在结论脚下移动过,这条结论就是过期的。agent 被要求把过期结论当作待复核的线索,而不是可以照搬的真相;界面上它们会得到一个琥珀色的"Stale: code changed"标记。 三个 agent,一张共享的图 PR 审查由三个 agent 顺序执行,它们之间不传 Python 对象,而是通过图交接。RepoBrain 先把 PR 的 diff hunk 映射到函数的行范围,确定到底哪些函数变了,创建一个 Task 指向 Function。impact agent 走调用图,写一条 Note 指向该 Task。historian 从图里读到这条 Note,挖出改动代码背后的 PR 和 issue,标出这个 PR 可能推翻的东西。reviewer 读完两份 Note,用 experts 工具挑出人类评审人,写出 PR 评论,由 GitHub Action 发布。 在 Flask 的开放 PR #5918 上,historian 找到了 PR #5917——它刚刚修复了 provide_automatic_options 的覆盖逻辑(对应 Issue #5916),还找到了添加该配置项的 PR #5496。这正是审查这个 PR

about image
MORE TO EXPLORE

继续阅读

只踢过4分钟,他替补登场当选全场最佳,穆里尼奥改口了

只踢过4分钟,他替补登场当选全场最佳,穆里尼奥改口了

北京时间周三晚,欧冠联赛阶段,皇家马德里在客场 4比3 逆转击败罗马。替补登场的恩德里克成为这场翻盘的关键人物之一。 下半场,恩德里克换下维尼修斯,出现在右路。他给主队防线制造了持续麻烦,并最终接阿尔达·居莱尔的传中头球破门。凭借下半场的影响力和这粒进球,这位20岁的巴西前锋当选全场最佳球员。 据记者Rodra的消息,穆里尼奥计划在接下来的比赛中增加恩德里克的出场时间,原因正是他在对阵罗马时改变比

贺子珍收到毛主席8000元后说“退回去”,但最后退回去的,不是全部

贺子珍收到毛主席8000元后说“退回去”,但最后退回去的,不是全部

1972年,301医院。贺子珍躺在病床上,有人把8000元送到她面前,说是毛主席批示的,从稿费里出的,给她做生活补贴。贺子珍的反应不是收下,而是说:我看病的费用公家能报销,不缺钱用,还是退回去吧。 这句话听起来干脆,但事情没有这么简单。 先说说这笔钱是怎么来的。1972年,毛主席和江青的女儿李讷离了婚,一个人带着孩子,请了保姆,工资不够花,实在撑不住了,才托人向父亲开口。毛主席一向对子女严格,但这

辽宁队决战山东,首发阵容调整,高诗岩缺席,王岚嵚要带队胜辽篮

辽宁队决战山东,首发阵容调整,高诗岩缺席,王岚嵚要带队胜辽篮

辽宁队决战山东,首发阵容调整,高诗岩缺席,王岚嵚要带队胜辽篮 就在今天晚上,CBA将迎来一场焦点大战,那就是辽宁队决战山东队,两支球队处于关系特别密切但又是冤家的状态,之前多次交手,辽宁队一直占据优势,可这个赛季形势发生了很大反转,山东队大幅度加强,此时辽宁队的首发阵容也进行了调整,我们具体来看一下,这5人分别是赵继伟,李虎毅,爱德华兹,克里斯和付豪, 可以看出这也是目前辽宁队能够派出的最稳定阵容

赫塔费vs巴列卡诺大名单:新援卡瓦哈尔入选!

赫塔费vs巴列卡诺大名单:新援卡瓦哈尔入选!

直播吧10月19日讯 北京时间明天凌晨3点,赫塔费将在西甲主场迎战巴列卡诺,赫塔费方面公布了比赛大名单,此前自由身加盟的皇马名宿卡瓦哈尔入选。 赫塔费大名单: 门将:1-莱塔切克、13-索里亚、35-迭戈·费雷尔 后卫:2-达克纳姆、3-达文奇、4-萨佐诺夫、5-阿布卡尔、14-卡瓦哈尔、15-博塞利、17-费梅尼亚、21-安德烈斯·加西亚、22-莫西卡、26-瓦卢 中场:6-马里奥·马丁、8-古

贾平凹:一个人活着,其实仅仅是一个人的事——快乐是自己的,苦难也是自己的

贾平凹:一个人活着,其实仅仅是一个人的事——快乐是自己的,苦难也是自己的

贾平凹:一个人活着其实仅仅是一个人的事,生活关照型的朋友可能了解我身上的每一个痣,不一定了解我的心;精神交流型的朋友可能了解我的心,却又常常拂我的意。快乐来了,最快乐的是自己,苦难来了,最苦难的也是自己。 人这一生,终究要学会与自己相处。年轻时总以为,朋友越多,人生越热闹,遇到事情就有人帮忙,心里有话就有人倾听。可经历多了才明白,每个人都有自己的生活,每段关系都有各自的边界。别人可以陪你走一程,却