网易首页 > 网易号 > 正文 申请入驻

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

0
分享至

每个团队都有这么一个人:你问他"这个函数能改吗",他能立刻告诉你——小心,请求分发器在调它,去年重构过,改成显式传上下文了,去找 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 的人需要的历史。

所有工具同时通过 MCP 提供,Claude Desktop、Cursor 或任何 MCP 客户端都能查询同一张图和同一份记忆。

几个工程细节

shortestPath 只支持有向,且必须放在 WITH 或 RETURN 里。要回答"这个人和那个函数怎么连上的",路径是之字形的,所以 connect 用无向的 [*k] 匹配一跳一跳放宽,命中即停;因为提前停止,找到的第一条就是最短路径之一。全文索引适合 agent 搜索,queryNodes('PR', 'retries') 能通过词干匹配到 retry,比 CONTAINS 更适合自然语言提问。GRAPH.RO_QUERY 是一层免费的安全网,agent 的原始 cypher 工具走它,即使模型被提示注入也无法写入图。UNWIND $rows 批量写入让 ingest 保持快速:Flask 的 831 个函数、983 次调用和 200 个 PR 约 30 秒载入 FalkorDB Cloud。

还有一个客户端坑:redis-py 8 下,FalkorDB.from_url 打开的 RESP3 连接池会在传输大回复时中途断开,改用构造函数建客户端(RESP2)解决。

项目由 Sanidhya Dhangar 和 Aditya Sikarwar 构建,Claude Code 担任编码助手。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
牛逼!刚刚公布:GDP增速4.6%,人均收入大涨5.3%

牛逼!刚刚公布:GDP增速4.6%,人均收入大涨5.3%

说财猫
2026-10-19 11:00:27
一个国家能蠢到什么程度?看看法国就明白了:法国黑人接近800万,巴黎新生儿里70%是黑人

一个国家能蠢到什么程度?看看法国就明白了:法国黑人接近800万,巴黎新生儿里70%是黑人

怪味历史连连看
2026-09-08 01:55:32
上海大胜北控:张镇麟28分屡秀暴扣 廖三宁34+5+4创生涯纪录

上海大胜北控:张镇麟28分屡秀暴扣 廖三宁34+5+4创生涯纪录

醉卧浮生
2026-10-19 21:26:25
又一个龟男的世界崩塌了!网传绍兴一男子遇到妻子和情人约会,咆哮每月1.3万工资,1.25万上交老婆

又一个龟男的世界崩塌了!网传绍兴一男子遇到妻子和情人约会,咆哮每月1.3万工资,1.25万上交老婆

火山詩话
2026-10-19 15:16:53
暗流已经出现?苏联当年的颠覆套路再现中国,接连怪事更值得警惕

暗流已经出现?苏联当年的颠覆套路再现中国,接连怪事更值得警惕

補懂事的孩紙
2026-10-16 11:58:16
国庆刚过又一内鬼泄密被揪!身份曝光央视发声,网友:严惩叛国贼

国庆刚过又一内鬼泄密被揪!身份曝光央视发声,网友:严惩叛国贼

新一说史
2026-10-19 14:11:39
中国驻菲律宾大使就菲反华政客污蔑抹黑中方言论向菲外长拉扎罗提出严正交涉

中国驻菲律宾大使就菲反华政客污蔑抹黑中方言论向菲外长拉扎罗提出严正交涉

环球网资讯
2026-10-19 21:32:11
为什么暴乱总发生在法国?

为什么暴乱总发生在法国?

西游日记
2026-10-19 08:49:07
经济日报的评论,替一个断掉的踏板撑腰

经济日报的评论,替一个断掉的踏板撑腰

鲁先生的笔
2026-10-19 23:29:24
大瓜!邯郸篮球直播忘关麦事件

大瓜!邯郸篮球直播忘关麦事件

新动察
2026-10-19 15:09:35
早有前科!中国留学生披旭日旗,身份曝光,回国将迎3个严重后果

早有前科!中国留学生披旭日旗,身份曝光,回国将迎3个严重后果

梦想的旅途照进现实
2026-10-19 14:17:36
“男子在稻城亚丁高反被救援下撤途中死亡”调查:官方称事发地不在景区系非法穿越 其母付了救援请马帮等费用

“男子在稻城亚丁高反被救援下撤途中死亡”调查:官方称事发地不在景区系非法穿越 其母付了救援请马帮等费用

红星新闻
2026-10-19 21:33:23
公安部172号令:年满70岁,不能骑普通二轮、三轮摩托车

公安部172号令:年满70岁,不能骑普通二轮、三轮摩托车

生活魔术专家
2026-10-19 10:07:17
全场掌声!乌外长说出一句金句:我们从无牌可打,到别把牌打出去

全场掌声!乌外长说出一句金句:我们从无牌可打,到别把牌打出去

经纬戎韬
2026-10-19 06:45:41
内塔尼亚胡:我已决心推翻伊朗政权,绝不会与拥有核武器的伊朗共存;如果我当选,下一届政府不会允许巴勒斯坦建国

内塔尼亚胡:我已决心推翻伊朗政权,绝不会与拥有核武器的伊朗共存;如果我当选,下一届政府不会允许巴勒斯坦建国

扬子晚报
2026-10-18 20:08:01
为什么总在凌晨两三点醒?老中医:是身体在提醒你这3个信号!

为什么总在凌晨两三点醒?老中医:是身体在提醒你这3个信号!

古怪奇谈录
2026-05-19 15:24:20
报复来了?中方反制落下一个月后,日本宣布:对华启动反倾销调查

报复来了?中方反制落下一个月后,日本宣布:对华启动反倾销调查

麓谷隐士
2026-10-19 00:05:04
重罚!曝曼城本赛季将面临巨额罚款+扣分确保降级 下赛季还会扣分

重罚!曝曼城本赛季将面临巨额罚款+扣分确保降级 下赛季还会扣分

我爱英超
2026-10-19 22:01:08
刷到网红四哥,真是让人哭笑不得,演了两年50亿富豪,连续4个月吃老坛酸菜面

刷到网红四哥,真是让人哭笑不得,演了两年50亿富豪,连续4个月吃老坛酸菜面

喜欢历史的阿繁
2026-10-18 01:39:26
50岁女星李小冉官宣离婚,自曝与徐佳宁去年已离,两人结婚11年,没有子女

50岁女星李小冉官宣离婚,自曝与徐佳宁去年已离,两人结婚11年,没有子女

叨唠
2026-10-19 20:30:52
2026-10-20 04:28:49
像素与芯片
像素与芯片
有态度网友ytd
182文章数 80关注度
往期回顾 全部

科技要闻

王晟:近千亿资金涌入后 具身智能开始退烧

头条要闻

中国留学生披旭日旗事件最新进展:目前已被遣返

头条要闻

中国留学生披旭日旗事件最新进展:目前已被遣返

体育要闻

从NBA退役10年后,他真去警局上班了

娱乐要闻

奚梦瑶回应重返维密:还是很开心的

财经要闻

黄奇帆之子往事:从广微系到魏桥的跳跃

汽车要闻

不知道二代海鸥多好玩? 上赛道跑两圈 很过瘾的

态度原创

旅游
手机
游戏
家居
艺术

旅游要闻

换个思路,北京的冷门博物馆也好逛

手机要闻

2026年三季度印度智能手机市场遇冷,iPhone销量下滑20%

《龙之信条2:黑暗觉者》评测:天若有情天亦老"/> 主站 商城 论坛 自运营 登录 注册 简体中文 简体中文 English 《龙之信条2:黑暗觉...

家居要闻

2026建博会(广州) 公装联探展交流活动

艺术要闻

俄罗斯90后摄影师比莉娅娃英这组写真,看完我直接跪了!最后一张绝了!

无障碍浏览 进入关怀版