IDE 中的 AI:从 LSP 到智能助手的演进
- 现代代码补全的技术路线:从 LSP 到大模型补全
- 上下文构建与代码索引:让模型只看该看的东西
- Claude 与 Cursor 风格 IDE 助手:一个可能的架构拆解
- 在自己 IDE 里接一个最小 AI 助手:一条可行链路
- IDE 中的安全:隐私与幻觉治理
- 企业级 AI IDE 设计总览:分层架构与关键数据流
- Inline Chat 与 IDE 集成:从选中代码到 Diff 应用
- 上下文构建与 Token 成本控制:企业级策略
- 多文件重构管线:从 LSP 分析到安全 Diff 应用
- 项目级 RAG 与大仓库优化:索引、召回与错误控制
- LSP 在 AI IDE 中的角色:事实引擎、切块助手与安全网
- 工具调用与安全沙箱:让模型能做事但做不坏
- 评估、监控与迭代体系:AI IDE 的工程生命线
这一篇先把“IDE 里的 AI”这件事整体铺开:传统 LSP 提供了什么,大模型补上了什么缺口,以及现在常见的 AI IDE 助手大概是怎么分层工作的。
传统 IDE 能力的“天花板”:LSP 能做什么?
在没有大模型之前,一个成熟 IDE 能提供的“智能”能力,大多来自静态分析 + 语言服务,典型代表就是 LSP(Language Server Protocol):
- 补全(completion):基于符号表、类型、作用域做出候选列表;
- 跳转(go to definition / references):通过符号解析和索引找到定义和引用;
- 诊断(diagnostics):语法错误、部分类型错误、简单的代码味道;
- 重命名 / 重构(rename / refactor):在抽象语法层安全地改名、提取方法等。
这些能力有几个典型特征:
- 强一致性:只要语法树、类型系统是对的,它就不会“瞎编”;
- 高度依赖语言规则:对 Java/TypeScript 这样类型信息丰富的语言很强,对动态语言就弱一些;
- 上下文范围有限:主要在单文件或少量引用关系内工作,很难“读懂整个项目”。
换句话说,传统 IDE 在“正确性”和“结构理解”上很强,但在:
- 生成新代码;
- 理解业务语义;
- 跨文件、跨模块地给出高层建议
这几块上是先天短板。
大模型补上的那一块:从“语法感知”到“语义感知”
大模型进来之后,多了一层基于语义和统计模式的能力,和 LSP 的优势刚好互补:
- 能根据上下文风格和惯用模式,生成符合当前项目习惯的代码;
- 能把多个文件里的信息揉在一起,给出相对整体的解释或重构建议;
- 能用自然语言沟通需求,再转成代码草稿或测试用例。
和 LSP 对比,可以粗略这样对照:
- LSP:基于规则和语法树的“确定性”智能;
- LLM:基于数据分布和语义模式的“统计性”智能。
两者叠加就变成:
- 由 LSP 提供语法/符号级别的安全网;
- 由 LLM 提供跨文件、跨语言、跨层次的“灵感”和“建议”。
一个简单的例子是代码补全:
- 传统补全:更多是“把已经存在的标识符列出来”;
- LLM 补全:可以补出整段控制流、错误处理逻辑、日志等,而且风格接近你现有代码。
一般性的架构分层:壳、语言服务和 AI 服务
不管是 VS Code、JetBrains 还是 Cursor/基于 Theia 的 IDE,大致都可以拆成三层:
IDE 壳(Shell)
- 布局、窗口管理、主题、快捷键、命令系统;
- 文件树、终端、调试器视图等 UI。
语言服务层(Language Services)
- LSP 客户端 + 各语言的 LSP 进程;
- 语法高亮、跳转、重构、诊断等传统 IDE 能力。
AI 服务层(AI Services)
- 本地/云端的大模型服务;
- 代码搜索和向量索引服务;
- 对话/补全/重构的 orchestration(编排逻辑)。
大多数“AI IDE 助手”的工作,都可以理解为:
- 在壳里收集上下文(当前文件、光标位置、选区、项目结构等);
- 把这些上下文送进 AI 服务(有时还要先走一遍搜索/索引);
- 接受 AI 的输出,渲染在壳里:
- 作为补全候选、ghost text;
- 作为 diff / patch;
- 作为对话侧边栏里的解释或建议。
典型能力在内部是怎么“串起来”的?
以几种常见的 IDE 内 AI 能力为例,可以看到语言服务层和 AI 服务层是一起工作的:
代码补全
- IDE 收集光标前后若干行 + 相关文件片段;
- 可能先问一次 LSP 拿到语法/类型提示,再拼进 prompt;
- 调用代码 LLM,生成一段补全;
- IDE 对结果做 post-process(缩进、括号配对、截断到合法语句),插入或作为建议显示。
“解释这段代码 / 优化这段逻辑”
- IDE 把选中的代码和必要上下文打包;
- 有的实现会提前走一遍 AST/LSP,给模型补充结构化信息;
- 模型输出自然语言解释或改写方案,IDE 只负责渲染和应用 diff。
跨文件重构建议
- IDE 先用索引服务找相关调用点/依赖文件;
- 把结果压缩成适合放进 prompt 的摘要;
- 模型给出建议和 patch,IDE 再用 LSP/编译器做最后一层语法/类型校验。
从这个视角看,“智能 IDE”并不是简单把一个聊天框塞进编辑器,而是:
- 把模型嵌进了原本就存在的 LSP/重构/调试链路里;
- 让模型做更擅长的那部分(模式挖掘、自然语言理解/生成),把确定性和安全性留给编译器/LSP/测试。
这一块和你现有 Theia/LSP/Monaco 笔记的关系
你现在的前端 IDE 笔记里已经有:
- Theia 的整体结构;
- Lumino 布局、InversifyJS 扩展机制;
- Monaco 编辑器内核;
- LSP 和 AST 相关内容。
可以简单对齐一下位置:
- Theia / VS Code 这些 IDE 壳负责“外层 UI 和扩展点”;
- LSP / AST 工具链负责“语言级静态分析和重构”;
- AI 服务(Claude/Cursor 一类)则在壳外或旁边,作为一个新的“语言服务供应商”接进来。
后面如果单开几篇讲:
- 现代代码补全是怎么把 LSP 和 LLM 结合在一起的;
- Claude / Cursor 这类工具在 IDE 里大概是怎么分层和编排的;
- 在你自己的 IDE 里接一个最小的 AI 助手需要哪些步骤;
就可以和你已有的 Theia/LSP/AST 笔记自然串在一起,构成一条从“编辑器内核 → 语言服务 → AI 助手”的完整链路。