2026年6月6日 2 分钟阅读

Carto 实战:给 AI 编程工具装上代码架构感知层

tinyash 0 条评论

AI 编程工具在过去两年里的进步有目共睹——从自动补全代码到自主完成功能开发,从单文件编辑到跨文件重构。但你有没有发现一个奇怪的现象:Claude Code 或 Cursor 在大型项目中经常跑偏?它明明能看到所有文件,却总是猜错你应该改哪个模块。

这不是模型不够聪明,而是信息不对称——AI 工具看到的是文件,但人类开发者心里装的是架构:这个路由属于 AUTH 域、改这个文件会影响 7 个下游模块、类似的中间件模式已经写在 payment 模块里了。AI 没有这些「架构感知」,只能 grep + 盲猜。

Carto 就是来解决这个问题的——它是一个开源的代码结构智能层(Structural Intelligence Layer),通过 MCP 协议为 AI 编程工具提供代码库的架构级理解。安装它之后,AI 不再是问一个文件答一个文件,而是能理解整个项目域、影响范围和依赖图。

一句话说清 Carto 做了什么

传统模式下,当你让 AI「给 /api/users 加限流」,它做的是:

grep -r "users" src/ → 找到 12 个文件 → 随机挑 3 个 → 靠猜写代码 → 可能把不该改的模块改了

有了 Carto 后,同样的请求会变成:

get_change_plan("给 /api/users 加限流") → 返回:
  - 路由所在文件:src/routes/users.ts
  - 影响范围:7 个依赖文件(含 blast radius)
  - 所属域:AUTH
  - 已有类似模式:src/middleware/rate-limit.ts

AI 的回答从「我觉得是这样」变为「架构上应该这样做」。

安装和上手

Carto 安装极其简单——一条命令:

npm install -g carto-md
cd your-project
carto init

carto init 做三件事:

  1. 解析代码库——用 tree-sitter 解析导入关系和符号,用 Babel 解析路由和模型定义,用 Leiden+CPM 图聚类自动检测域(Domains),所有数据存入本地 SQLite
  2. 生成 AGENTS.md——在每个 AI 工具都读取的项目根目录生成架构概要文件
  3. 自动缝合 MCP——检测你已安装的所有 AI 编程工具(Cursor、Claude Code、Claude Desktop、VS Code Copilot、Windsurf、JetBrains、Zed),自动配置 MCP Server

重启你的 AI 工具,它现在就有了架构感知能力。

实测一个包含 6,259 个 TypeScript 文件的 Supabase 仓库,首次解析只需 4.8 秒,后续增量同步仅 751ms。完全不会拖慢你的开发流程。

如果想实时感知文件变更,可以开一个 watch 模式:

carto watch

每次按 Ctrl+S 保存文件,Carto 在 50ms 内完成增量解析。

16 个 MCP 工具:AI 的架构望远镜

Carto 通过 MCP 协议暴露了 16 个工具,AI 会在合适的时机自动调用它们。下面是几个最实用的:

MCP 工具返回内容
get_architecture()项目概览:域、入口点、技术栈、关键模式(第一个调用它
get_change_plan(intent)给定需求 → 要改的文件、影响的域、影响范围、已有相似模式
get_blast_radius(file)修改某个文件会影响的完整文件列表(含跳数)
get_context(file)关于一个文件的所有信息:域、影响范围、邻居、路由、模型
get_similar_patterns(file)同域、同路由型的文件——写新代码前先看已有模式
get_routes()所有 API 端点及对应文件
get_structure()导入图、入口点、高影响文件、技术栈
get_domain(name)某个域下的所有路由、模型、函数
get_cross_domain()跨域依赖边——重构前必查

所有这些查询的响应时间都在 5ms 以内——AI 调它们完全不会增加感知延迟。

域检测:自动发现项目的架构边界

域检测可能是 Carto 最核心的能力。它不是说「我给你预设好三个域」,而是用图聚类算法自动发现你的代码库里存在哪些逻辑域

比如微服务 vscode 仓库(7,567 个文件),Carto 自动检测出了 CORE、AUTH、DATABASE、EVENTS、NOTIFICATIONS 等域。而在 zed(Rust 仓库)中同样检测出了类似的架构分组。

你也可以在 carto.config.json 中手动指定域名映射规则:

{
  "domains": {
    "EDITOR": ["editor", "monaco", "text"],
    "WORKBENCH": ["workbench", "layout", "panel"]
  }
}

ACP Agent 模式:不只是 MCP 服务器

除了作为被动的 MCP 服务器,Carto 还可以作为主动的 ACP Agent 运行——像一个具备架构意识的独立编码 Agent,适用于 Zed、JetBrains 和 VS Code:

carto agent

在这个模式下,用户下发需求后,Carto 自动查询自己的 SQLite 数据库获取架构上下文,构建包含结构信息的 Prompt,然后发送到你配置的 LLM(支持 Anthropic、OpenAI、Gemini、Ollama、OpenRouter、Groq 等主流提供商),最后将回答和 diff 流式返回给编辑器。

多语言和框架支持

Carto 的导入图分析支持 TypeScript、Python、Go、Rust、Java、C/C++、C#、Ruby 等主流语言。路由提取则是框架感知的:

  • JavaScript/TypeScript:Express、Next.js、tRPC、React Router
  • Python:FastAPI、Flask、Django
  • Go:Gin、Echo、Chi
  • Rust:Actix-web、Axum、Rocket
  • Java:Spring MVC、JAX-RS
  • C#:ASP.NET Core
  • Ruby:Rails、Sinatra

模型/ORM 层同样支持 Prisma、Pydantic、SQLAlchemy、JPA @Entity、EF Core 等主流框架。

实际体验:用 Carto 做一次代码变更

让 Claude Code 配合 Carto 做一个跨域变更——给用户创建流程加上邮箱验证。没有 Carto 时,Claude 需要反复读文件、确认依赖,耗时且可能出错。有了 Carto 后,它直接调用 get_change_plan 获取完整的变更计划,然后按图索骥完成修改。开发者只需要审核 diff 确认即可。

如果你的编辑器不支持 ACP Agent 模式,单纯使用 MCP 模式也已经够用——AI 工具会在需要时自动调用 Carto 的 16 个工具,你不需要在对话中额外提示它「去查一下架构」。

安全与隐私

Carto 承诺三不:不发送代码(所有处理在本地 SQLite 完成)、不写入密钥(.cartoignore 默认排除 .env 和凭据文件)、不收费(MIT 许可证)。

总结

Carto 解决的是一个被大多数 AI 编程工具忽视的问题:AI 只能看到文件和文本,却看不到代码库的结构和架构。当一个项目从几十个文件增长到几百甚至几千个文件时,这种「结构盲区」会成为 AI 编码质量的最大瓶颈。

16 个 MCP 工具覆盖了从架构概览到变更影响分析的完整链路,Leiden+CPM 的域检测让任何项目都能获得自动化的架构边界识别,5ms 以内的查询延迟确保了 AI 的交互流畅性。如果你正在用 Cursor、Claude Code 或 Copilot 开发中型以上的项目,Carto 是目前最值得安装的 MCP 工具之一。

发表评论

你的邮箱地址不会被公开,带 * 的为必填项。