esolnguyen/ai-knowledge-graph

GitHub: esolnguyen/ai-knowledge-graph

将任意代码文件夹通过 AST 解析转化为知识图谱,支持社区检测、多格式可视化和 AI 助手集成,帮助团队理解和导航复杂代码架构。

Stars: 1 | Forks: 0

# AI 知识图谱 ## 目录 - [工作原理](#how-it-works) - [安装说明](#installation) - [快速入门](#quickstart) - [使用方法](#usage) - [构建图谱](#build-a-graph) - [探索图谱](#explore-the-graph) - [保持图谱最新](#keep-the-graph-fresh) - [同步 Azure DevOps](#sync-azure-devops) - [AI 助手集成](#ai-assistant-integration) - [命令参考](#command-reference) - [开发](#development) ## 工作原理 该 pipeline 分四个阶段运行: 1. **检测**:遍历目标目录并识别每个受支持的源文件。 2. **提取**:使用 tree-sitter 解析每个文件,为类/函数/模块生成节点,为调用/导入生成边。 3. **构建**:组装 NetworkX 图谱,运行 Louvain 社区检测,评估内聚性,并标记 god 节点以及令人惊讶的跨社区边。 4. **导出**:将 `graph.json` (GraphRAG payload) 和 `REPORT.md` (审计报告) 写入 `/aikgraph-out/` 下。 仅基于 AST 的 `update` 命令涵盖此流程。若需**语义层**(跨文件概念边、docs/README 理解、图像/PDF 提取、依据边),请从 AI 编码助手中运行完整的 `/aikgraph` 流程(参见 [AI 助手集成](#ai-assistant-integration))。 ## 安装说明 在仓库根目录下执行: ``` cd ~/source/aikgraph pip install -e . --no-deps ``` 验证 CLI 是否在你的 `PATH` 中: ``` aikgraph --help ``` 你应该会看到 `Usage: aikgraph ` 及其随后的命令列表。 ## 快速入门 端到端:在一个或多个仓库上构建图谱,接入 Kiro,并让 Kiro 读取该图谱。 ### 1. 将你想要图谱化的代码收集到一个文件夹中 选择一个工作区文件夹(磁盘上的任何位置)。将你想要加入图谱的每个仓库克隆到其下: ``` mkdir -p ~/projects/my-workspace cd ~/projects/my-workspace git clone git@github.com:your-org/service-a.git git clone git@github.com:your-org/service-b.git git clone git@github.com:your-org/shared-lib.git ``` 该图谱将工作区视为一个整体——跨仓库的调用和导入会变成真实的边。 ### 2. 在该文件夹内构建图谱 ``` cd ~/projects/my-workspace aikgraph update . ``` 输出会保存在**工作区内部**,而不是你的主目录中: ``` ~/projects/my-workspace/ ├── service-a/ ├── service-b/ ├── shared-lib/ └── aikgraph-out/ <-- created by `aikgraph update` ├── graph.json ├── REPORT.md ├── graph.html (open in browser) ├── graph.svg └── obsidian/ (open as an Obsidian vault) ``` ### 3. 安装 Kiro 技能 ``` cd ~/projects/my-workspace aikgraph kiro install ``` 这会做两件事: - 将技能放置在 `~/.kiro/skills/aikgraph/SKILL.md` —— 这是**全局的**,因此 Kiro 会在每个项目中都加载它。 - 写入 `./.kiro/steering/aikgraph.md` 并准备 `./.kiro/aikgraph-out/` —— 这是**项目局部的**。之后,`aikgraph update` 会将图谱写入 `./.kiro/aikgraph-out/` 而不是 `./aikgraph-out/`(标记文件会重定向输出路径)。 重新运行 update 以便将输出保存在支持 Kiro 的位置: ``` aikgraph update . ls .kiro/aikgraph-out/ # graph.json, REPORT.md, graph.html, ... ``` ### 4. 打开 Kiro 并询问有关代码的问题 在 Kiro 中打开工作区。常驻的 steering 文件会告诉 Kiro 在回答架构问题之前先读取 `./.kiro/aikgraph-out/REPORT.md`,而该技能会教会它运行 `aikgraph query`、`aikgraph path` 和 `aikgraph explain` 来进行定向查找。你可以这样提问: - “向我讲解 service-a 是如何调用 shared-lib 的。” - “这个工作区中的 god 节点有哪些?” - “从 `LoginForm` 到 `UserRepository` 的最短路径。” 当代码发生更改时,重新运行 `aikgraph update .`(或者设置 `aikgraph watch .` / `aikgraph hook install` —— 参见 [保持图谱最新](#keep-the-graph-fresh))。 ## 使用方法 示例以 `~/projects/my-project` 为目标(任何源文件夹均可)。请替换为你自己的路径。 ### 构建图谱 ``` aikgraph update ~/projects/my-project # JSON + REPORT only (default) aikgraph update ~/projects/my-project --html --svg --obsidian # generate all extra outputs aikgraph update ~/projects/my-project --html # add interactive HTML only ``` 输出保存在 `/aikgraph-out/`: | 文件 / 文件夹 | 用途 | 启用方式 | |---------------|---------|--------| | `graph.json` | 完整的图谱 payload(兼容 GraphRAG) | 始终 | | `REPORT.md` | 涵盖 god 节点、社区和后续问题的审计报告 | 始终 | | `graph.html` | 交互式 vis.js 可视化(暗色主题、搜索、社区图例) | `--html` | | `graph.svg` | 静态 matplotlib 渲染(需要 `matplotlib`) | `--svg` | | `obsidian/` | Obsidian 知识库:每个节点一个带有 wikilink 的 `.md` 笔记、社区概览笔记、`graph.canvas`,以及 `.obsidian/graph.json` 中按社区划分的颜色 | `--obsidian` | 预期的最后一行: ``` [aikgraph watch] Rebuilt: N nodes, M edges, K communities ``` ### 探索图谱 导出一次 `GRAPH`,然后进行查询: ``` GRAPH=~/projects/my-project/aikgraph-out/graph.json aikgraph explain "AuthModule" --graph $GRAPH aikgraph path "LoginForm" "UserRepository" --graph $GRAPH aikgraph query "how does extraction talk to core" --graph $GRAPH aikgraph query "auth flow" --dfs --budget 3000 --graph $GRAPH ``` 或者 `cd` 进入目标文件夹并省略 `--graph`。它默认指向 `./aikgraph-out/graph.json`。 | 命令 | 用途 | |---------|---------| | `aikgraph explain ""` | 对某个节点及其相邻节点的通俗语言描述 | | `aikgraph path "" ""` | 两个概念之间的最短路径 | | `aikgraph query ""` | 用于获取广泛上下文的 BFS 遍历(添加 `--dfs` 以追踪链条) | | `aikgraph query "" --budget N` | 将回答限制在 N 个 token(默认 2000) | ### 保持图谱最新 选择适合你工作流的方式: | 方式 | 命令 | 何时使用 | |----------|---------|-------------| | **手动** | `aikgraph update ` | 在进行重大编辑后的一次性重建 | | **Git hook** | `aikgraph hook install` (在目标仓库中) | 每次提交 / 检出时自动重建 | | **文件监视器** | `aikgraph watch ` (需要 `watchdog`) | 保存时实时重建,3 秒防抖 | 使用 `aikgraph hook status` 和 `aikgraph hook uninstall` 来管理钩子。监视器在前台运行;使用 `Ctrl+C` 停止。 ### 同步 Azure DevOps 将 Azure DevOps 项目的工作项和仓库拉取到与你的代码相同的图谱中。工作项(PBIs、bugs、epics)将成为文档节点;仓库也成为文档节点,其默认分支的检出将反馈给 AST 提取器,因此工单与真实代码符号之间的交叉链接会显示为边。 设置一次凭证,然后将 `--project` 传递给 `aikgraph update`: ``` export AZURE_DEVOPS_ORG="your-org" export AZURE_DEVOPS_PAT="..." # PAT with Work Items (Read) + Code (Read) aikgraph update ~/projects/my-workspace --project MyProject ``` 发生的过程如下: 1. 工作项和仓库作为带有 YAML frontmatter 的 markdown 被获取到 `/raw/azure/` 中。 2. 每个仓库的默认分支会被浅克隆到 `/raw/azure/repos//` 下。 3. 常规 AST 提取器对克隆的代码运行,Azure 提取器从工作项关系中发出 `parent_of` / `related_to` / `touches_repo` 边,并从仓库到代码符号发出 `contains` 边。 4. 构建的图谱被写入 `~/.kiro/aikgraph-out//` 下(可通过 `AIKGRAPH_OUT=` 覆盖),因此它是全局存在的,而不是位于扫描目录内。 增量状态存储在 `/raw/azure/.azure_sync_state.json` 中 —— 随后的运行仅获取自上次游标以来更改的工作项,并且仅重新获取 HEAD 发生变动的仓库。 | 标志 | 用途 | |------|---------| | `--project ` | 要同步的 Azure DevOps 项目(触发同步所必需) | | `--since YYYY-MM-DD` | 限定首次运行的工作项扫描窗口(默认:过去 365 天) | | `--full` | 忽略已保存的状态;强制进行完整重新扫描和重新克隆 | | `--no-clone` | 跳过 git clone 步骤 —— 仅获取工作项 + 仓库元数据 | | `--repos a,b,c` | 仅克隆此仓库子集(以逗号分隔的名称) | ## AI 助手集成 仅基于 AST 的 `update` 命令是一个更大型 pipeline 中无需 LLM 的子集。**语义**层(跨文件概念边、docs/README 理解、图像/PDF 提取、依据边)在安装了该技能的 AI 编码助手中以 `/aikgraph` 的方式运行。 ### Kiro ``` cd ~/projects/my-project aikgraph kiro install ``` 会安装: - `~/.kiro/skills/aikgraph/SKILL.md`(全局):教导 Kiro 何时以及如何调用 `aikgraph query "..."`、`aikgraph path "A" "B"`、`aikgraph explain "X"` 及其余 CLI 命令的技能。安装一次;即可被 Kiro 在所有项目中拾取。 - `./.kiro/steering/aikgraph.md`(项目局部):常驻的 steering 文件,指导 Kiro 在回答架构问题前先关注该项目的 `REPORT.md` - `./.kiro/aikgraph-out/`(项目局部):`aikgraph update` 写入 `graph.json` 和 `REPORT.md` 的输出目录 从 shell 中运行 `aikgraph update` 以构建/刷新图谱。 ### Claude Code ``` cd ~/projects/my-project aikgraph claude install ``` 会安装: - 指引 Claude Code 关注 `REPORT.md` + graph.json 的 `CLAUDE.md` 部分 - 当代码更改时运行 `aikgraph update` 的 PreToolUse 钩子 - `.claude/aikgraph-out/`:项目局部的输出目录 ### GitHub Copilot CLI ``` cd ~/projects/my-project aikgraph copilot install ``` 准备 `.copilot/aikgraph-out/` 作为输出目录。运行 `aikgraph update` 以填充内容。 ### 卸载 ``` aikgraph uninstall # platform: claude | copilot | kiro ``` ## 命令参考 ### 图谱构建(无需 LLM) ``` aikgraph update # AST extract + rebuild (graph.json + REPORT.md only) aikgraph update --html --svg --obsidian # opt into extra outputs aikgraph update --project # also sync Azure DevOps (work items + repos) [--since YYYY-MM-DD] [--full] [--no-clone] [--repos a,b,c] aikgraph cluster-only # re-cluster an existing graph.json aikgraph watch # auto-rebuild on save (needs watchdog) ``` Azure DevOps 同步需要在环境中设置 `AZURE_DEVOPS_ORG` 和 `AZURE_DEVOPS_PAT`。详情请参见 [同步 Azure DevOps](#sync-azure-devops)。 ### 打开 Obsidian 知识库 在运行了 `aikgraph update --obsidian` 后,在 Obsidian 中将 `/aikgraph-out/obsidian/` 作为知识库打开。你将获得: - 每个图谱节点对应一个笔记,并带有指向每个相连节点的 wikilink (`[[neighbor]]`)。 - 每个社区对应一个 `_COMMUNITY_.md` 概览,列出成员、内聚性、桥接节点和跨社区边。 - `graph.canvas`,用于结构化的按社区分组布局(作为 Obsidian Canvas 打开)。 - `.obsidian/graph.json`,其中包含已接入 Obsidian 内置图谱视图的按社区划分的颜色。 ### 内容摄取 ``` aikgraph add # fetch URL into ./raw, update the graph ``` ### 平台安装程序 ``` aikgraph install --platform claude|copilot|kiro aikgraph claude install|uninstall # per-project CLAUDE.md + PreToolUse hook aikgraph copilot install|uninstall # Copilot CLI skill aikgraph kiro install|uninstall # Kiro skill folder + always-on steering aikgraph hook install|uninstall|status # git post-commit / post-checkout hooks ``` ## 开发 重新构建发行版: ``` python3 -m build # wheel + sdist in dist/ ``` 在修改了 `pyproject.toml` 后强制重新安装: ``` pip install -e . --no-deps --force-reinstall ``` 不使用控制台脚本直接运行: ``` python3 -m aikgraph ```
标签:AI知识图谱, AI编程助手, AST解析, Azure DevOps集成, GraphRAG, Louvain算法, NetworkX, Python, tree-sitter, 云安全监控, 代码分析, 代码图谱, 代码审查, 代码理解, 代码结构可视化, 凭证管理, 大模型外挂知识库, 威胁情报, 开发效率, 开发者工具, 无后门, 特权检测, 知识图谱构建, 社区发现, 突变策略, 网络可观测性, 逆向工具, 静态分析