轴突
](https://pypi.org/project/axoniq/) ](https://pepy.tech/projects/axoniq)  ](https://github.com/harshkedia177/axon) 
代码库的知识图——直观地探索它,或者让你的AI代理查询它。
将任何代码库索引到结构化知识图中——每个依赖关系、调用链、集群和执行流。通过一个 交互式web仪表板 使用力导向图可视化,或通过 MCP工具 因此,AI代理在每次工具调用中都能充分理解结构。
$ axon analyze .
Walking files... 142 files found
Parsing code... 142/142
Tracing calls... 847 calls resolved
Analyzing types... 234 type relationships
Detecting communities... 8 clusters found
Detecting execution flows... 34 processes found
Finding dead code... 12 unreachable symbols
Analyzing git history... 18 coupled file pairs
Generating embeddings... 623 vectors stored
Done in 4.2s — 623 symbols, 1,847 edges, 8 clusters, 34 flows然后直观地探索你的代码库:
axon ui # Opens interactive dashboard at localhost:8420三个视图,一个命令:
- 探索者 --交互式力导向图(Sigma.js+WebGL)。单击任何节点以查看其代码、调用者、被调用者、影响半径和社区。社区船体覆盖图一目了然地显示了建筑集群。
- 分析 --健康评分、耦合热图、死代码报告、继承树、分支差异——你的代码库健康在一个仪表板上。
- 密码控制台 --使用语法高亮显示、预设和历史记录对图形编写并运行Cypher查询。
加:命令面板(Cmd+K)、键盘快捷键、流跟踪动画、图形小地图和监视模式激活时由SSE驱动的实时重新加载。
______________________________________________________________________
问题
您的AI代理编辑 UserService.validate()它不知道47个函数依赖于该返回类型,3个执行流通过它,以及 payment_handler.py 80%的时间都在变化。
打破改变船。
这是因为AI代理使用平面文本。他们为调用者提供帮助,忽略间接调用者,并且不了解代码是如何编写的 *连接的*上下文窗口是有限的。LSP不公开调用图。滑鼠给你的是绳索,而不是结构。
代理人需要 知识图谱 --没有更多的文本。
______________________________________________________________________
Axon如何解决这个问题
大多数代码智能工具都会给代理提供原始文件,并希望它读得足够多。Axon采取了不同的方法: 索引时的预计算结构 因此,每次工具调用都会返回完整的、可操作的上下文。
一个12阶段的管道在你的仓库上运行一次。之后:
axon_impact("validate")在一次调用中返回所有47个受影响的符号,按深度分组(将中断/可能中断/回顾),并带有置信度得分axon_query("auth handler")返回按执行流分组的混合排名结果,而不是名称匹配的简单列表axon_context("UserService")返回调用者、被调用者、类型引用、社区成员资格和死代码状态——全貌
三个好处:
- 可靠性 --上下文已经在工具响应中。没有可能遗漏代码的多步骤探索。
- 代币效率 --一个工具调用,而不是10个查询搜索链。代理将令牌用于推理,而不是导航。
- 民主化模式 --即使是较小的模型也能获得完全的架构清晰度,因为工具可以完成繁重的工作。
零云依赖。 一切都在本地运行——解析、图存储、嵌入、搜索。没有API密钥,没有数据离开您的机器。
______________________________________________________________________
太长,读不下去了
pip install axoniq # 1. Install
cd your-project && axon analyze . # 2. Index (one command, ~5s for most repos)
axon ui # 3. Explore visually at localhost:8420对于AI代理 --添加到 .mcp.json 在项目根目录中:
{
"mcpServers": {
"axon": {
"command": "axon",
"args": ["serve", "--watch"]
}
}
}对于开发者 --亲自探索图表:
axon ui # Interactive dashboard (standalone or attaches to running host)
axon ui --watch # Live reload on file changes
axon host --watch # Shared host: UI + multi-session MCP______________________________________________________________________
所得
直观地探索您的代码库
Web用户界面
一个完整的交互式仪表板——不需要终端或扩展。一个命令:
axon ui # Launch at localhost:8420
axon ui --watch # Live reload on file changes
axon ui --port 9000 # Custom port
axon ui --dev # Dev mode (Vite HMR on :5173)| 查看 | 它显示了什么 |
|---|---|
| 探索者 | 交互式力导向图(Sigma.js+WebGL)、文件树侧边栏、带代码预览的符号详细信息面板、调用者/被调用者、影响分析和流程成员资格。社区船体覆盖显示了建筑集群。 |
| 分析 | 健康评分、耦合热图、死代码报告、继承树可视化、分支差异和聚合统计数据——您的代码库健康状况一目了然。 |
| 密码控制台 | 具有语法高亮显示、预设查询库、结果表和查询历史的查询编辑器。 |
附加: 命令面板(Cmd+K)、键盘快捷键、图形小地图、流动轨迹和冲击波纹动画、启用观察模式时由SSE驱动的实时重新加载。
UI由带有完整REST API的FastAPI服务器支持-请参阅 API终点 在......下面
查找任何内容——按名称、概念或拼写错误
混合搜索(BM25+矢量+模糊)
融合了三种搜索策略 Reciprocal Rank Fusion:RRF(相互排名融合):
- BM25全文搜索 --通过KuzuDB FTS快速精确匹配名称和关键字
- 语义向量搜索 --通过384个dim嵌入进行概念查询(BAAI/bge-small-en-v1.5)
- 模糊名称搜索 --Levenshtein回退拼写错误和部分匹配
结果按照测试文件降序(0.5倍)和源函数/类提升(1.2倍)进行排名,然后 按执行流分组 因此,代理可以在单个调用中看到架构上下文。
在改变之前,先知道什么会坏
深度分组影响分析
当你要更改一个符号时,Axon会通过调用图、类型引用和git耦合历史向上游跟踪。结果按可操作性的深度分组:
- 深度1 --直接来电者(将中断)
- 深度2 --间接呼叫者(可能中断)
- 深度3+ --传递性(回顾)
每个边缘都有一个置信度得分(1.0=精确匹配,0.8=接收者方法,0.5=模糊),这样你就可以优先考虑要审查的内容。
查找要删除的内容
死码检测
不仅仅是“零调用者”——一种理解你的框架的多通道分析:
- 初始扫描 --标记没有来电的符号
- 豁免 --入口点、导出、构造函数、测试代码、dunder方法,
__init__.py符号、装饰功能,@property方法 - 超控通行证 --联合国标志覆盖非死基类方法的方法
- 协议一致性 --在符合协议的类上取消标记方法
- 协议存根 --取消标记Protocol类(接口契约)上的所有方法
了解代码的运行方式,而不仅仅是它的位置
执行流跟踪
使用框架感知模式检测入口点:
- python:
@app.route,@router.get,@click.command,test_*功能,__main__块 - JavaScript/TypeScript:Express处理程序、导出函数、,
handler/middleware模式
然后通过调用图跟踪每个入口点的BFS执行流,将流分为社区内或跨社区。
无需阅读文档即可查看您的架构
社区发现
使用 莱顿算法 (igraph+leidenalg)自动发现功能簇。每个社区都会得到一个凝聚力得分和自动生成的标签。代理可以问“这个符号属于哪个集群?”并在不阅读任何设计文档的情况下得到答案。
查找git知道的隐藏依赖项
更改耦合(Git历史记录)
分析6个月的git历史,找出静态分析遗漏的依赖关系:
coupling(A, B) = co_changes(A, B) / max(changes(A), changes(B))耦合强度>=0.3和3+共同更改的文件将被链接。这些会出现在影响分析中——所以当你改变 user.py,代理人也知道要检查 user_test.py 和 auth_middleware.py.
始终保持最新
观看模式
基于Rust的文件观察器(观察文件)支持的实时重新索引:
$ axon watch
Watching /Users/you/project for changes...
[10:32:15] src/auth/validate.py modified -> re-indexed (0.3s)
[10:33:02] 2 files modified -> re-indexed (0.5s)文件本地阶段(解析、导入、调用、类型)在发生更改时立即运行。全局阶段(社区、流程、死代码)每30秒批处理一次。
结构差异,而非文本差异
分支比较
使用git工作树在符号级别比较分支(无需隐藏):
$ axon diff main..feature
Symbols added (4):
+ process_payment (Function) -- src/payments/stripe.py
+ PaymentIntent (Class) -- src/payments/models.py
Symbols modified (2):
~ checkout_handler (Function) -- src/routes/checkout.py
Symbols removed (1):
- old_charge (Function) -- src/payments/legacy.py清晰的调用图
噪声滤波
内置块列表(138个条目)自动过滤语言内置(print, len, isinstance),JS/TS全局变量(console, setTimeout, fetch),React挂钩(useState, useEffect),以及调用图中的常见stdlib方法。您的图表显示 *你的* 代码的关系,而不是来自 list.append().
______________________________________________________________________
管道
Axon通过12个连续的分析阶段建立了对结构的深入理解:
| 阶段 | 它做什么 |
|---|---|
| 文件行走 | 尊重回购 .gitignore,按支持的语言筛选 |
| 结构 | 使用CONTAINS关系创建文件/文件夹层次结构 |
| 解析 | 树型AST提取——函数、类、方法、接口、枚举、类型别名 |
| 导入分辨率 | 将导入语句解析为实际文件(相对、绝对、裸说明符) |
| 呼叫跟踪 | 带有置信度分数的地图函数调用。噪音过滤跳过138种语言内置 |
| 遗产 | 跟踪类继承(EXTENDS)和接口实现(IMPLEMENTS) |
| 类型分析 | 从参数、返回类型和变量注释中提取类型引用 |
| 社区发现 | Leiden算法将相关符号聚类到功能社区中 |
| 过程检测 | 框架感知入口点检测+BFS流跟踪 |
| 死码检测 | 具有覆盖、协议和装饰感知的多通道分析 |
| 更改联轴器 | Git历史分析——查找总是一起更改的文件 |
| 嵌入 | 每个符号有384个模糊向量,支持语义搜索。跳过 --no-embeddings |
______________________________________________________________________
MCP集成
Axon公开了其作为MCP服务器的全部智能。只需设置一次,你的AI代理就可以永远对你的代码库有结构上的理解。
设置
克劳德代码 --添加到 .mcp.json 在项目根目录中(或运行 claude mcp add axon -- axon serve --watch):
{
"mcpServers": {
"axon": {
"command": "axon",
"args": ["serve", "--watch"]
}
}
}光标 --添加到MCP设置中:
{
"axon": {
"command": "axon",
"args": ["serve", "--watch"]
}
}可选新功能:
axon host --watch这将为UI和多个MCP客户端启动一个共享主机。 axon setup --claude / axon setup --cursor 仍然打印标准配置。
这 --watch 标志允许实时重新索引——图形会在您编辑代码时更新。
工具
| 工具 | 代理得到什么 |
|---|---|
axon_query | 混合搜索(BM25+向量+模糊),结果按执行流分组 |
axon_context | 360度视图——调用者、被调用者、类型引用、置信度标签、死代码状态 |
axon_impact | 爆炸半径按深度分组——直接(将破裂)、间接(可能破裂)、传递 |
axon_dead_code | 按文件分组的所有无法访问的符号 |
axon_detect_changes | 地图a git diff 受影响的符号和执行流程 |
axon_list_repos | 所有带有统计信息的索引存储库 |
axon_cypher | 针对知识图的只读Cypher查询 |
每个工具响应都包括 下一步提示 引导代理人完成自然调查工作流程:
query -> "Next: Use context() on a specific symbol for the full picture."
context -> "Next: Use impact() if planning changes to this symbol."
impact -> "Tip: Review each affected symbol before making changes."资源
| URI | 描述 |
|---|---|
axon://overview | 按类型列出的节点和关系计数 |
axon://dead-code | 完整的死代码报告 |
axon://schema | Cypher查询的图形模式参考 |
______________________________________________________________________
API终点
web UI由FastAPI服务器支持。所有端点都在 /api:
| 端点 | 描述 |
|---|---|
GET /api/graph | 完整知识图(分页) |
GET /api/node/{id} | 包含调用者、被调用者、类型引用的节点详细信息 |
GET /api/overview | 聚合节点/边计数 |
GET /api/search | 混合搜索(BM25+向量+模糊) |
GET /api/impact/{id} | 按深度分析爆破半径 |
GET /api/dead-code | 死代码报告 |
GET /api/communities | 社区成员列表 |
GET /api/coupling | 更改耦合热图数据 |
GET /api/files/{path} | 具有语法上下文的源文件内容 |
POST /api/cypher | 执行只读Cypher查询 |
GET /api/diff | 结构分支比较 |
GET /api/processes | 执行流程列表 |
GET /api/events | SSE流用于实时重新加载事件 |
POST /api/reindex | 触发完全重新索引(仅监视模式) |
Cypher查询在服务器端经过验证——写入关键字(CREATE, DELETE, DROP等)在删除评论后被拒绝。
______________________________________________________________________
如何比较
| 能力 | grep/ripgrep | LSP | 上下文窗口填充 | Axon |
|---|---|---|---|---|
| 交互式图形用户界面 | 不 | 不 | 不 | 是(完整的网络仪表板) |
| 文本搜索 | 是 | 否 | 是 | 是(混合BM25+矢量) |
| 查找所有呼叫者 | 否 | 部分 | 命中或未命中 | 是(有信心的完整调用图) |
| 类型关系 | 否 | 是 | 否 | 有(参数/返回/变量角色) |
| 死代码检测 | 否 | 否 | 是(多通道,框架感知) | |
| 执行流跟踪 | 否 | 否 | 是(入口点->流) | |
| 社区检测 | 否 | 否 | 是(Leiden算法) | |
| 变更耦合(git) | 否 | 否 | 是(6个月共同变更分析) | |
| 影响分析 | 否 | 否 | 是(按置信度进行深度分组) | |
| AI代理集成 | 否 | 部分 | N/A | 是(完整MCP服务器) |
| 结构分支差异 | 否 | 否 | 是(节点/边缘级别) | |
| 观看模式 | 否 | 是 | 否 | 有(基于锈蚀,500ms去抖动) |
| 脱机工作 | 是 | 是 | 否 | 是 |
______________________________________________________________________
支持的语言
| 语言 | 扩展 | 解析器 |
|---|---|---|
python .py | 树栖蟒蛇 | |
| TypeScript | .ts, .tsx | 树型字体 |
| JavaScript | .js, .jsx, .mjs, .cjs | 树型javascript |
______________________________________________________________________
安装
# With pip
pip install axoniq
# With uv (recommended)
uv add axoniq
# With Neo4j backend support
pip install axoniq[neo4j]需要 Python 3.11+。包含web UI(前端+后端),无需Node.js或额外安装。
源自源头
git clone https://github.com/harshkedia177/axon.git
cd axon
uv sync --all-extras
uv run axon --help要在更改后重建前端(需要Node.js 18+):
cd src/axon/web/frontend
npm install && npm run build______________________________________________________________________
CLI参考
axon analyze [PATH] Index a repository (default: current directory)
--full Force full rebuild (skip incremental)
--no-embeddings Skip vector embedding generation (faster indexing)
axon status Show index status for current repo
axon list List all indexed repositories (auto-populated on analyze)
axon clean Delete index for current repo
--force / -f Skip confirmation prompt
axon query QUERY Hybrid search the knowledge graph
--limit / -n N Max results (default: 20)
axon context SYMBOL 360-degree view of a symbol
axon impact SYMBOL Blast radius analysis
--depth / -d N BFS traversal depth (default: 3)
axon dead-code List all detected dead code
axon cypher QUERY Execute a raw Cypher query (read-only)
axon watch Watch mode — live re-indexing on file changes
axon diff BASE..HEAD Structural branch comparison
axon host Shared host for UI + HTTP MCP (default: localhost:8420)
--port / -p PORT Port to serve on (default: 8420)
--watch / --no-watch Enable live file watching
--dev Dev mode — proxy to Vite dev server for HMR
--no-open Don't auto-open browser
axon ui Launch the web UI (default: localhost:8420)
--port / -p PORT Port to serve on (default: 8420)
--watch / -w Enable live file watching with auto-reindex
--dev Dev mode — proxy to Vite dev server for HMR
--no-open Don't auto-open browser
--direct Force standalone mode even if a shared host exists
axon setup Print MCP configuration JSON
--claude For Claude Code
--cursor For Cursor
axon mcp Start the MCP server (stdio transport)
axon serve Start the MCP server
--watch, -w Enable live file watching with auto-reindex
axon --version Print version______________________________________________________________________
示例工作流
“我需要重构User类——什么会中断?”
# See everything connected to User
axon context User
# Check blast radius — grouped by depth
axon impact User --depth 3
# Find files that always change with user.py
axon cypher "MATCH (a:File)-[r:CodeRelation]->(b:File) WHERE a.name = 'user.py' AND r.rel_type = 'coupled_with' RETURN b.name, r.strength ORDER BY r.strength DESC"“我们应该清理死代码吗?”
axon dead-code“主要执行流程是什么?”
axon cypher "MATCH (p:Process) RETURN p.name, p.properties ORDER BY p.name"“代码库的哪些部分耦合最紧密?”
axon cypher "MATCH (a:File)-[r:CodeRelation]->(b:File) WHERE r.rel_type = 'coupled_with' RETURN a.name, b.name, r.strength ORDER BY r.strength DESC LIMIT 20"______________________________________________________________________
知识图谱模型
节点
| 标签 | 描述 |
|---|---|
File | 源文件 |
Folder | 目录 |
Function | 顶级功能 |
Class | 类定义 |
Method | 类中的方法 |
Interface | 接口/协议定义 |
TypeAlias | 类型别名 |
Enum | 枚举 |
Community | 自动检测功能集群 |
Process | 检测到执行流 |
关系
| 类型 | 描述 | 关键属性 |
|---|---|---|
CONTAINS | 文件夹->文件/符号层次结构 | -- |
DEFINES | 文件->它定义的符号 | -- |
CALLS | 符号->它调用的符号 | confidence (0.0-1.0) |
IMPORTS | 文件->从中导入的文件 | symbols (名单) |
EXTENDS | 类->它扩展的类 | -- |
IMPLEMENTS | 类->它实现的接口 | -- |
USES_TYPE | 符号->键入引用 | role (参数/返回值/变量) |
EXPORTS | 文件->它导出的符号 | -- |
MEMBER_OF | 符号->它所属的社区 | -- |
STEP_IN_PROCESS | 符号->它参与的过程 | step_number |
COUPLED_WITH | 文件->与之共同更改的文件 | strength, co_changes |
节点ID格式
{label}:{relative_path}:{symbol_name}
Examples:
function:src/auth/validate.py:validate_user
class:src/models/user.py:User
method:src/models/user.py:User.save______________________________________________________________________
建筑
Source Code (.py, .ts, .js, .tsx, .jsx)
|
v
+----------------------------------------------+
| Ingestion Pipeline (12 phases) |
| |
| walk -> structure -> parse -> imports |
| -> calls -> heritage -> types |
| -> communities -> processes -> dead_code |
| -> coupling -> embeddings |
+----------------------+-----------------------+
|
v
+-----------------+
| KnowledgeGraph | (in-memory during build)
+--------+--------+
|
+------------+------------+
v v v
+---------+ +---------+ +---------+
| KuzuDB | | FTS | | Vector |
| (graph) | | (BM25) | | (HNSW) |
+----+----+ +----+----+ +----+----+
+------------+------------+
|
StorageBackend Protocol
|
+-----------+-----------+
v v v
+----------+ +----------+ +----------+
| MCP | | Web UI | | CLI |
| Server | | (FastAPI | | (Typer) |
| (stdio) | | + React)| | |
+----+-----+ +----+-----+ +----+-----+
| | |
Claude Code Browser Terminal
/ Cursor (developer) (developer)技术栈
| 层 | 技术 | 目的 |
|---|---|---|
| 解析 | 树保姆 | 语言无关AST提取 |
| 图形存储 | KuzuDB | 支持Cypher、FTS和矢量的嵌入式图形数据库 |
| 图形算法 | igraph+leidenalg | 莱顿社区检测 |
| 嵌入 | fastembed | 基于ONNX的384个dim矢量(~100MB,无PyTorch) |
| MCP协议 | MCP SDK(FastMCP) | AI代理通过stdio进行通信 |
| Web后端 | FastAPI+Uvicorn | 用于Web UI的REST API,用于实时更新的SSE |
| Web前端 | React+TypeScript+Vite | 带Tailwind CSS的交互式仪表板 |
| 图形可视化 | Sigma.js+Graphology | 使用ForceAtlas2布局的WebGL图形渲染 |
| CLI | Typer+Rich | 带进度条的终端界面 |
| 文件监视 | 监视 | 基于Rust的文件系统监视器 |
| Gitignore | 路径规范 | 完整 .gitignore 模式匹配 |
存储
一切都生活在当地:
your-project/
+-- .axon/
+-- kuzu/ # KuzuDB graph database (graph + FTS + vectors)
+-- meta.json # Index metadata and stats添加 .axon/ 到你的 .gitignore.
全球注册处 ~/.axon/repos/ 自动填充 axon analyze,使 axon list 发现您机器上的所有索引存储库。
存储层被抽象为 StorageBackend 协议——默认为KuzuDB,可选Neo4j后端可通过 pip install axoniq[neo4j].
______________________________________________________________________
发展
git clone https://github.com/harshkedia177/axon.git
cd axon
uv sync --all-extras
# Run tests
uv run pytest
# Lint
uv run ruff check src/
# Run from source
uv run axon --help
# Frontend development (React + Vite with HMR)
cd src/axon/web/frontend
npm install
npm run dev # Vite dev server on :5173
# In another terminal:
uv run axon ui --dev # Backend on :8420, proxies to Vite______________________________________________________________________
许可证
麻省理工学院
______________________________________________________________________
建造于 @哈斯克迪亚177
