代码知识图谱
niuma_code 使用内置 LanguageParser 从你的代码库构建结构化知识图谱。图谱索引符号、定义、引用和依赖关系——让 LLM 无需 grep 即可即时访问代码结构。
工作原理
项目打开时:
LanguageParser 解析源文件
→ 提取:类、函数、导入、导出
→ 构建:符号表 + 关系图
→ 存储于:.niuma/kg/
知识图谱按需构建——三因素决策避免每次启动全量解析:
| 因素 | 条件 |
|---|---|
| 检测到文件变更 | 自上次构建以来有新增/修改/删除文件 |
| 时间阈值 | 距上次构建超过 24 小时 |
| 手动触发 | 用户显式请求重建 |
4 个检索工具
locate_symbol
查找符号的定义位置:
工具:locate_symbol
输入:{ "name": "UserService" }
输出:{
"type": "class",
"file": "app/services/user.py",
"line": 42,
"signature": "class UserService(BaseService):"
}
check_file_deps
列出给定文件的所有导入/被导入关系:
工具:check_file_deps
输入:{ "path": "app/services/auth.py" }
输出:{
"imports_from": ["app/models/user.py", "app/utils/crypto.py"],
"imported_by": ["app/routes/auth.py", "tests/test_auth.py"]
}
find_references
在代码库中查找符号的所有使用位置:
工具:find_references
输入:{ "name": "login" }
输出:[
{ "file": "app/services/auth.py", "line": 28, "context": "def login(email, password):" },
{ "file": "app/routes/auth.py", "line": 15, "context": "await auth_service.login(email, password)" },
{ "file": "tests/test_auth.py", "line": 42, "context": "result = auth_service.login(...)" }
]
trace_calls
追踪函数的调用链:
工具:trace_calls
输入:{ "name": "handle_login", "depth": 3 }
输出:{
"call_chain": [
"handle_login → validate_email",
"handle_login → auth_service.login → verify_password",
"handle_login → auth_service.login → create_token"
]
}
符号类型索引
LanguageParser 解析以下符号类型:
| 符号 | 语言 | 示例 |
|---|---|---|
| Class | Python, JS/TS | class UserService: |
| Function | Python, JS/TS | def get_user(id): |
| Method | Python, JS/TS | async def verify(token): |
| Variable | Python | BASE_URL = "..." |
| Import | Python, JS/TS | from app.models import User |
| Export | JS/TS | export default handler |
| Type | TypeScript | interface Config { ... } |
重建决策
知识图谱基于三个因素自动重建:
是否需要重建?
→ 自上次构建以来有文件变更?→ 是 → 重建
→ 距上次构建超过 24 小时? → 是 → 重建
→ 用户运行 /kg-rebuild? → 是 → 重建
→ 否则 → 否 → 使用缓存
缓存位置:项目根目录 .niuma/kg/(默认 git-ignored)。
相比 grep 的优势
| 方面 | grep | 知识图谱 |
|---|---|---|
| 查找定义 | 按名称搜索(可能匹配子串) | 基于 AST 节点的精确符号查找 |
| 查找引用 | grep 搜索字符串模式 | 语义引用追踪 |
| 依赖关系 | 手动分析 | 自动导入图 |
| 调用链 | 手动追踪 | 自动调用图 |
| 语言支持 | 基于模式 | 基于 AST(语言感知) |
| 速度 | 扫描所有文件 | O(1) 索引查找 |
支持的语言
通过内置 LanguageParser 提供完整 AST 支持:
- Python (.py)
- JavaScript (.js, .jsx)
- TypeScript (.ts, .tsx)
- JSON (.json)
- YAML (.yml, .yaml)
- Markdown (.md) — 标题结构
- Bash (.sh)
使用技巧
- 知识图谱是只读的——不会修改你的代码
- 使用
/kg-rebuild强制全量重建 - 缓存在
.niuma/kg/中——删除可触发全新构建 - 大型项目(>1000 文件)首次构建需 2-5 秒