openviking/parse/parsers/code/README.md
OpenViking 通过 Code Parser 模块实现对代码仓库的整体解析与理解。与普通文档的拆解式处理不同,代码解析采用了基于目录结构的整体映射策略,旨在保持代码项目的完整上下文。
| 特性 | 策略 | 说明 |
|---|---|---|
| 解析粒度 | 文件级 | 不进行 Chunking 拆分,保持单文件完整性 |
| 目录映射 | 1:1 映射 | 本地目录结构直接映射为 Viking URI 路径 |
| 处理模式 | 异步处理 | Parser 负责搬运,SemanticProcessor 负责理解 |
| 元数据 | 自动提取 | 提取语言、依赖、符号定义等基础信息 |
代码仓库作为一种特殊的资源类型,具有以下显著特征,这些特征直接决定了我们的技术方案:
我们将代码仓库映射到 OpenViking 的标准分层描述体系中。
假设用户导入了 OpenViking 仓库:
client.add_resource(
"https://github.com/volcengine/OpenViking",
target="viking://resources/github/volcengine/OpenViking"
)
系统将生成如下标准化的目录树结构,能够完整体现深层级的文件路径:
viking://resources/github/volcengine/OpenViking/
├── .abstract.md # L0: 项目级摘要
├── .overview.md # L1: 项目级概览
├── docs/
│ ├── .abstract.md
│ ├── .overview.md
│ ├── zh/...
│ └── en/...
├── src/
│ ├── .abstract.md
│ ├── .overview.md
│ └── index/ # 深层目录结构
│ ├── .abstract.md
│ ├── .overview.md
│ └── index/ # 更深层的子模块
│ ├── .abstract.md
│ ├── .overview.md
│ ├── index_engine.cpp # L2: 具体代码文件(C++)
│ └── ...
└── openviking/
├── .abstract.md
├── .overview.md
└── ...
在这颗目录树中,每一层目录都会有一个 .abstract.md 文件和 .overview.md 文件:
.abstract.md:目录的摘要,介绍本目录的功能和在项目中的作用。.overview.md:目录的概览,介绍本目录的文件结构、关键实体的位置等。.gitignore 规则。扩展 URLTypeDetector 以支持代码仓库识别:
https://github.com/org/repo 或 *.git)。git clone --depth 1 进行浅克隆,速度最快。main.zip 或 master.zip。.git, .idea, __pycache__, node_modules 等非代码资源。解析器遵循 V5.0 的异步处理架构:
物理搬运 (Parser Phase):
viking://temp/{uuid}/ 临时目录。add_resource 接口能快速返回。异步理解 (Semantic Phase):
TreeBuilder 将临时目录移入正式路径(如 viking://resources/...)。SemanticMsg 并推入 SemanticQueue。SemanticProcessor 消费消息,遍历目录树,异步生成各级目录的 .abstract.md 和 .overview.md。# 导入代码仓库
client.add_resource(
"https://github.com/volcengine/OpenViking",
target="viking://resources/github/volcengine/OpenViking",
reason="引入 OpenViking 源码作为参考"
)
# 搜索代码逻辑
results = client.find(
"OpenViking 和 VikingDB 的关系是什么?",
target_uri="viking://resources/github/volcengine/OpenViking/OpenViking/docs/zh/"
)
考虑到当前性能不佳,可以用小一点的仓库测试:https://github.com/msgpack/msgpack-python
代码解析器实现了以下过滤规则:
.git, .idea, __pycache__, node_modules 等非代码目录.pyc, .so, .dll, .exe, .bin 等编译文件.md, .txt, .rst 等纯文本格式的文档文件会被处理,因为它们属于"文本内容"解析器包含辅助方法 _detect_file_type() 用于检测文件类型,可返回:
"code":编程语言文件(.py, .java, .js, .cpp 等)"documentation":文档文件(.md, .txt, .rst 等)"other":其他文本文件"binary":二进制文件(已通过 IGNORE_EXTENSIONS 过滤)包含完整的测试文件 tests/misc/test_code_parser.py 验证:
IGNORE_DIRS 包含所有必需的目录IGNORE_EXTENSIONS 包含所有必需的格式