目标:理解语言服务器协议和 ACP 支持,提升 AI 代码理解能力
LSP 集成架构
LSP 基础
LSP(Language Server Protocol)是微软提出的协议,让编辑器与语言分析工具解耦。
OpenCode 为什么需要 LSP
| 能力 | 无 LSP | 有 LSP |
|---|---|---|
| 类型推断 | ❌ 猜测 | ✅ 精确 |
| 跳转定义 | ❌ 文本搜索 | ✅ 符号解析 |
| 引用查找 | ❌ 字符串匹配 | ✅ 语义分析 |
| 诊断错误 | ❌ 无法获取 | ✅ 实时诊断 |
| 自动补全 | ❌ 无 | ✅ 智能提示 |
配置 LSP 服务器
TypeScript/JavaScript
// opencode.json
{
"lsp": {
"typescript": {
"command": "typescript-language-server",
"args": ["--stdio"]
}
}
}Rust
{
"lsp": {
"rust": {
"command": "rust-analyzer"
}
}
}Go
{
"lsp": {
"go": {
"command": "gopls",
"args": ["serve", "-rpc.trace"]
}
}
}Python
{
"lsp": {
"python": {
"command": "pyright-langserver",
"args": ["--stdio"]
}
}
}多语言配置
{
"lsp": {
"typescript": {
"command": "typescript-language-server",
"args": ["--stdio"]
},
"rust": {
"command": "rust-analyzer"
},
"go": {
"command": "gopls"
},
"python": {
"command": "pyright-langserver",
"args": ["--stdio"]
},
"lua": {
"command": "lua-language-server"
}
}
}LSP 与 AI 协作流程
安装 LSP 服务器
| 语言 | 服务器 | 安装命令 |
|---|---|---|
| TypeScript | typescript-language-server | npm i -g typescript-language-server |
| Rust | rust-analyzer | rustup component add rust-analyzer |
| Go | gopls | go install golang.org/x/tools/gopls@latest |
| Python | pyright | npm i -g pyright |
| Lua | lua-language-server | brew install lua-language-server |
| C/C++ | clangd | brew install llvm |
ACP 支持
什么是 ACP
ACP(Agent Context Protocol)是 OpenCode 的扩展协议,位于 MCP 之上。
MCP vs ACP
| MCP | ACP | |
|---|---|---|
| 层级 | 工具层 | 代理层 |
| 功能 | 提供工具给 AI | 代理间协作 |
| 通信 | AI → 工具 | AI → AI |
| 示例 | 文件读取、数据库查询 | 代码审查、测试生成 |
ACP 配置
{
"acp": {
"reviewer": {
"url": "https://reviewer-agent.company.com",
"auth": {
"type": "bearer",
"token": "${REVIEWER_TOKEN}"
}
},
"tester": {
"url": "https://test-agent.company.com",
"timeout": 120
}
}
}ACP 使用示例
调用 reviewer 审查 @src/auth.ts 的修改
AI 会将代码发送给审查代理,返回专业审查意见。
FAQ
Q: LSP 和 Tree-sitter 有什么区别?
LSP 提供语义分析(类型、定义、引用),Tree-sitter 提供语法分析(AST)。两者互补。
Q: 所有语言都需要 LSP 吗?
不是必须,但强烈推荐。没有 LSP 时 AI 只能通过文本分析理解代码。
Q: ACP 可以用于什么场景?
多代理协作:审查代理 + 测试代理 + 文档代理,各司其职。
下一篇:21. IDE 扩展开发