# AxiomDemo **Repository Path**: vpacking/axiom-demo ## Basic Information - **Project Name**: AxiomDemo - **Description**: 将 spec → api → code 建模为显式、可追溯、可约束的工程事实,并以此约束工程变更行为。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-26 - **Last Updated**: 2026-02-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Axiom - Engineering Fact & Guardrail System with AI
**本地 AI 驱动的工程约束系统** [![Rust](https://img.shields.io/badge/Rust-1.74%2B-orange.svg)] [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)] [![Version](https://img.shields.io/badge/version-0.1.0-blue.svg)] 提供语义索引、影响分析、补丁验证等工程辅助功能
## 📖 目录 - [特性](#-特性) - [快速开始](#-快速开始) - [详细使用](#-详细使用) - [架构设计](#-架构设计) - [配置说明](#-配置说明) - [开发指南](#-开发指南) - [常见问题](#-常见问题) ## ✨ 特性 Axiom 是一个本地运行的 AI 驱动工程工具,提供以下核心能力: ### 🔍 语义搜索 - 基于向量的语义搜索,理解代码意图而非仅匹配关键字 - 支持 Rust 代码、Markdown 文档、OpenAPI 规范的索引 - 实时相似度计算,返回最相关的代码片段 ### 📊 影响分析 - **正向分析**:查看修改某个函数/模块会影响哪些其他代码 - **反向分析**:查看哪些代码依赖于当前节点 - **双向分析**:完整的依赖关系视图 - 支持深度控制和置信度过滤 ### 🔒 补丁验证 - 验证代码变更是否符合工程约束 - 支持多种验证模式(strict/lenient/warn) - 增量式验证,适合 CI/CD 集成 ### 📈 为什么分析 - 理解节点间的依赖关系 - 支持查询和追踪依赖路径 - 识别关键依赖链路 ### 🧩 MCP 服务器 - 提供 Model Context Protocol 集成 - 支持 AI Agent 调用 - 可扩展的插件架构 ### 🧹 数据清理 - 清理数据库和索引数据 - 支持选择性清理(向量/图/缓存) - 安全的确认机制 ## 🚀 快速开始 ### 环境要求 - Rust 1.74+ - SQLite 3 - 约 2GB 磁盘空间(用于模型文件) ### 安装 ```bash # 克隆仓库 git clone cd axiom # 编译 cargo build --release # 安装到本地 cargo install --path . ``` ### 下载模型 ```bash # 参考 scripts/download_model.py 下载模型 # 默认使用 bge-small-zh-v1.5 模型(中文优化) # 模型文件应放置在 ./models/ 目录下: # ./models/bge-small-zh-v1.5/ # ├── config.json # ├── model.safetensors # ├── tokenizer.json # └── ... ``` ### 初始化项目 ```bash # 在你的项目根目录 ax init # 这会创建: # - .axiom/ 目录 # - axiom.toml 配置文件 ``` ### 首次索引 ```bash # 索引项目并生成 embeddings ax index --embed # 这会: # 1. 扫描所有代码文件 # 2. 生成语义向量 # 3. 构建依赖图 # 4. 存储 SQLite 数据库 ``` ### 基本使用 ```bash # 语义搜索 ax search "如何处理用户登录" # 影响分析 ax impact "fn_authenticate" --depth 5 # 查看状态 ax status --verbose # 清理数据 ax clean ``` ## 📚 详细使用 ### 1. `ax init` - 初始化项目 创建 `.axiom` 目录和配置文件。 ```bash ax init [OPTIONS] # 选项: # -p, --path 项目路径 [default: .] # 示例 ax init ax init --path /path/to/project ``` **生成的文件结构**: ``` your-project/ ├── .axiom/ │ ├── axiom.toml # 配置文件 │ ├── axiom.db # SQLite 数据库(索引后生成) │ ├── vectors/ # 向量索引(索引后生成) │ └── index_cache.json # 增量索引缓存(可选) ├── src/ └── README.md ``` ### 2. `ax index` - 索引项目 扫描项目文件并构建索引。 ```bash ax index [OPTIONS] # 选项: # -p, --path 项目路径 [default: .] # -i, --incremental 增量索引(只索引变更文件) # -f, --force 强制重新索引 # --embed 生成 embeddings [default: true] # 示例 ax index --embed # 完整索引 + embeddings(当前目录) ax index --force # 强制重新索引 ax index --path src/ --incremental # 增量索引 src/ 目录 ``` **索引器支持**: - Rust 代码 (`.rs`) - 函数、结构体、枚举、trait、模块等 - Markdown 文档 (`.md`) - 文档章节 - OpenAPI 规范 (`.yaml`, `.yml`, `.json`) - API 端点 ### 3. `ax search` - 语义搜索 基于语义相似度搜索代码。 ```bash ax search [OPTIONS] # 选项: # -l, --limit <数量> 返回结果数 [default: 10] # -t, --threshold <分数> 相似度阈值 [default: 0.6] # -v, --verbose 显示详细信息 # -k, --kind <类型> 按类型过滤 (doc, api, code) # 示例 ax search "用户认证" ax search "database connection" --limit 5 ax search "API endpoint" --threshold 0.8 ax search "function to parse JSON" --verbose ax search "文档" --kind doc ``` **输出格式**: ``` [1] 0.8562 - src/core/engine.rs:42 [2] 0.7821 - src/parsing/rust_indexer.rs:130 [3] 0.6543 - src/storage/db.rs:100 ``` 使用 `--verbose` 查看详细信息: ``` [1] 0.8562 - src/core/engine.rs:42 📝 fn_index_project Content: /// Index a project directory... ``` ### 4. `ax impact` - 影响分析 分析代码变更的影响范围。 ```bash ax impact [OPTIONS] # 选项: # -n, --node <节点> 节点 ID # -d, --depth <深度> 最大遍历深度 [default: 10] # --semantic 包含语义关系 [default: true] # 示例 ax impact --node "fn_main" ax impact --node "fn_authenticate" --depth 5 ax impact --node "api_user_list" --semantic ``` **输出示例**: ``` 📊 Analyzing impact... Node: fn_main Max depth: 5 Include semantic: no Found node: fn_main_code_main_rs_42 ✅ Impact analysis complete Total impacted nodes: 3 Max depth reached: 2 By edge type: - Calls: 2 - Implements: 1 Impacted nodes: [depth 1] ✓ Calls - src/core/engine.rs:42 [depth 2] ✓ Calls - src/storage/db.rs:100 [depth 2] ✓ References - src/models/chunk.rs:15 ``` **影响类型图标**: - `✓` - 显式关系(代码引用) - `?` - 启发式关系(推断) - `~` - 语义关系(相似度) ### 5. `ax patch` - 补丁验证 验证代码变更是否符合工程约束。 ```bash ax patch [OPTIONS] # 选项: # -b, --base Git ref # -m, --mode <模式> 验证模式:strict/lenient/warn [default: strict] # strict - 严格模式,任何违规都失败 # lenient - 宽松模式,只报告 # warn - 警告模式,总是成功 # 示例 ax patch --base main --mode strict ax patch --base HEAD~1 --mode lenient ``` **验证规则**: - API 兼容性检查 - 代码风格一致性 - 依赖关系验证 - 自定义规则支持 ### 6. `ax why` - 为什么分析 解释节点之间的依赖关系。 ```bash ax why [OPTIONS] # 选项: # -n, --node <节点> 节点 ID # 示例 ax why --node "fn_main" ax why --node "UserRepository" ``` ### 7. `ax status` - 查看状态 显示索引和系统状态。 ```bash ax status [OPTIONS] # 选项: # -v, --verbose 显示详细信息 # 示例 ax status ax status --verbose ``` **输出示例**: ``` ✅ Axiom Status 📁 Database: .axiom/axiom.db 📊 Chunks: 1,234 📈 Embeddings: 1,234 📝 Files Indexed: 45 ``` ### 8. `ax clean` - 清理数据 清理数据库和索引数据。 ```bash ax clean [OPTIONS] # 选项: # -p, --path 项目路径 [default: .] # --vectors 只清理向量数据 # --graph 只清理图数据 # --cache 只清理索引缓存 # -f, --force 强制清理(不询问) # 示例 ax clean # 清理所有数据(需确认) ax clean --force # 强制清理所有数据 ax clean --vectors # 只清理向量数据 ax clean --graph --cache # 清理图和缓存 ``` **清理的内容**: - **Database**: 清空 `chunks` 和 `embeddings` 表(保留表结构) - **Vector store**: 删除 `.axiom/vectors/` 目录 - **Graph data**: 删除 `.axiom/graph/` 目录 - **Index cache**: 删除 `.axiom/index_cache.json` ### 9. `ax mcp` - MCP 服务器 启动 Model Context Protocol 服务器。 ```bash ax mcp # 子命令: # start 启动 MCP 服务器 # test 测试 MCP 连接 # list-tools 列出可用工具 # 示例 ax mcp start ax mcp start --addr 127.0.0.1:3000 ax mcp test ax mcp list-tools ``` ## 🏗️ 架构设计 ### 系统架构 ``` ┌─────────────────────────────────────────────────┐ │ CLI │ │ (ax init, index, search, impact, clean, etc.) │ └──────────────────┬──────────────────────────────┘ │ ┌──────────────────▼──────────────────────────────┐ │ Core Layer │ │ ┌──────────────┐ ┌─────────────┐ │ │ │ Indexer │ │ ImpactAnalyzer│ │ │ │ │ │ │ │ │ │ RustIndexer │ │ Validator │ │ │ │ MarkdownIndexer│ │ │ │ │ │ OpenAPIIndexer│ └─────────────┘ │ │ └──────────────┘ │ └──────────────────┬──────────────────────────────┘ │ ┌──────────────────▼──────────────────────────────┐ │ Storage Layer │ │ ┌───────────────┐ ┌──────────────────┐ │ │ │ ChunkStore │ │ GraphStore │ │ │ │ (SQLite) │ │ (SQLite) │ │ │ └───────────────┘ └──────────────────┘ │ └──────────────────┬──────────────────────────────┘ │ ┌──────────────────▼──────────────────────────────┐ │ AI Layer │ │ ┌──────────────────────────────────┐ │ │ │ Embedding Model (Candle) │ │ │ │ bge-small-zh-v1.5 (512 dim) │ │ │ │ bge-large-zh-v1.5 (1024 dim) │ │ │ │ bge-m3 (1024 dim, multilingual)│ │ │ └──────────────────────────────────┘ │ └─────────────────────────────────────────────────┘ ``` ### 模块组织 ``` src/ ├── main.rs # CLI 入口 ├── cli/ # 命令行解析 │ └── commands.rs # 命令定义 ├── core/ # 核心逻辑 │ ├── engine.rs # 索引引擎 │ ├── indexer.rs # 索引器定义 │ ├── impact.rs # 影响分析 │ ├── validator.rs # 补丁验证 │ └── why.rs # 为什么分析 ├── parsing/ # 解析器 │ ├── code/ # 代码语言索引器 │ │ └── rust.rs # Rust 解析器 │ ├── markdown_indexer.rs │ └── openapi_indexer.rs ├── models/ # 数据模型 │ ├── chunk.rs # Chunk 模型 │ ├── edge.rs # Edge 模型 │ └── node.rs # Node 模型 ├── storage/ # 存储层 │ ├── chunk_store.rs # Chunk 存储 │ └── graph_store.rs # Graph 存储 ├── ai/ # AI 功能 │ └── embeddings/ # 向量嵌入 │ ├── config.rs # 模型配置 │ ├── factory.rs # 模型工厂 │ ├── loader.rs # 模型加载 │ └── bge_small_zh.rs # BGE 模型实现 ├── mcp/ # MCP 服务器 └── error.rs # 错误处理 ``` ### 数据模型 **Chunk(代码块)** - 代码索引的最小单位 - 包含文件路径、行号、语言、内容等信息 - 支持向量化嵌入 **Edge(关系边)** - 表示节点间的依赖关系 - 类型:Defines, Implements, Calls, References - 置信度:Explicit, Heuristic, Semantic **Node(节点)** - Chunk 的图结构投影 - 类型:Doc, Api, Code - 支持双向关系查询 ## ⚙️ 配置说明 ### 配置文件 项目根目录的 `.axiom/axiom.toml`: ```toml [project] name = "my-project" root = "." # ================================================================ # 索引器配置 # ================================================================ [indexer] auto_embed = true embed_docs = true embed_apis = true embed_code = true # 排除的目录列表 exclude_dirs = [ "node_modules", "target", ".git", "dist", "build", "vendor", ".axiom", "models", ] # 包含的文件扩展名列表(空列表表示包含所有支持的文件类型) include_extensions = [] # ================================================================ # Embedding 模型配置 # ================================================================ [embedding] # 模型基础路径 base_path = "./models" # 模型类型: # - "bge-small-zh" 或 "bge-small-zh-v1.5" (默认,中文优化,512维) # - "bge-large-zh" 或 "bge-large-zh-v1.5" (中文高质量,1024维) # - "bge-m3" (多语言,长文档,1024维) model_type = "bge-small-zh" # 推理设备 (cpu, cuda, metal) device = "cpu" # 向量存储路径 vector_store_path = ".axiom/vectors" # 向量索引类型 (Flat, IVFFlat, HNSW) index_type = "Flat" # 语义相似度阈值 semantic_threshold = 0.6 ``` ### 环境变量 ```bash # 日志级别 export RUST_LOG=info # 基本日志 export RUST_LOG=debug # 详细日志 # 数据库路径(可选,覆盖配置文件) export AXIOM_DB_PATH=/custom/path/axiom.db ``` ## 🔧 开发指南 ### 构建项目 ```bash # 开发版本 cargo build # 发布版本 cargo build --release # 运行测试 cargo test # 运行特定测试 cargo test impact cargo test search ``` ### 项目结构 ``` axiom/ ├── src/ # 源代码 │ ├── ai/ # AI 功能 │ │ └── embeddings/ # 向量嵌入 │ ├── cli/ # CLI 命令 │ ├── core/ # 核心逻辑 │ ├── models/ # 数据模型 │ ├── parsing/ # 解析器 │ │ └── code/ # 代码索引器 │ ├── storage/ # 存储层 │ └── main.rs # 入口 ├── tests/ # 集成测试 ├── examples/ # 示例 ├── docs/ # 文档 ├── models/ # ML 模型文件 └── scripts/ # 工具脚本 ``` ### 添加新的索引器 1. **创建解析器** (`parsing/your_lang.rs`) 2. **创建索引器** (`parsing/code/your_lang_indexer.rs`) 3. **注册索引器** (`core/indexer.rs`) 示例: ```rust // parsing/code/python.rs pub struct PythonFile { pub items: Vec, } // parsing/code/python_indexer.rs pub struct PythonIndexer; impl Indexer for PythonIndexer { fn supports(&self, path: &Path) -> bool { path.extension().and_then(|e| e.to_str()) .map(|e| e == "py").unwrap_or(false) } fn index(&self, path: &Path, ...) -> Result { // 实现索引逻辑 } } ``` ### 扩展验证规则 在 `core/validator.rs` 中添加自定义规则: ```rust pub trait ValidationRule { fn validate(&self, change: &Change) -> ValidationResult; fn name(&self) -> &str; } // 示例规则 pub struct NoDirectDbInHandlerRule; ``` ## ❓ 常见问题 ### Q: 为什么搜索没有结果? **A**: 检查以下几点: 1. 是否已运行 `ax index --embed` 2. 查询是否过于具体(尝试更通用的关键词) 3. 搜索阈值是否过高(降低 `--threshold`) 4. 模型文件是否正确配置 ### Q: embeddings 占用多少空间? **A**: 对于 1000 个代码块: - 向量数据:约 2MB (512维 × 4字节 × 1000) - 元数据:约 500KB - 总计:约 2.5MB ### Q: 支持哪些编程语言? **A**: 当前支持: - ✅ Rust (完整支持) - 🚧 Markdown (文档支持) - 🚧 OpenAPI/Swagger (API 规范) - 📋 Python, JavaScript, Go (规划中) ### Q: 支持哪些模型? **A**: 当前支持: - ✅ bge-small-zh-v1.5 (默认,512维,中文优化) - ✅ bge-large-zh-v1.5 (1024维,中文高质量) - ✅ bge-m3 (1024维,多语言支持) ### Q: 如何切换模型? **A**: 修改 `.axiom/axiom.toml`: ```toml [embedding] model_type = "bge-large-zh" # 或 bge-m3 base_path = "./models" ``` 然后重新索引: ```bash ax clean --force ax index --embed ``` ### Q: 影响分析的深度如何选择? **A**: - `--depth 1-3`: 快速查看直接依赖 - `--depth 4-10`: 常规影响范围(默认) - `--depth 10+`: 深度分析,可能较慢 ### Q: 如何集成到 CI/CD? **A**: 示例 GitLab CI 配置: ```yaml stages: - validate axiom-check: stage: validate script: - cargo install --path /path/to/axiom - ax patch --base origin/main --mode strict only: - merge_requests ``` ### Q: 如何清理所有数据? **A**: ```bash # 清理所有数据(需确认) ax clean # 或强制清理 ax clean --force ``` ## 📄 许可证 MIT License - 详见 [LICENSE](LICENSE) 文件 ## 🤝 贡献 欢迎提交 Issue 和 Pull Request! ### 开发路线图 - [ ] 支持更多编程语言(Python, JavaScript, Go) - [ ] Web UI 可视化 - [ ] 性能优化(大项目索引) - [ ] VSCode 插件 - [ ] 更多验证规则 - [ ] 分布式索引支持 ## 📮 联系方式 - Issues: [GitHub Issues](https://github.com/your-org/axiom/issues) - Discussions: [GitHub Discussions](https://github.com/your-org/axiom/discussions) ---
**Built with ❤️ by the Axiom team**