0. 前言
嗨嗨嗨我又来了,有段时间没更了,上一次更新这个系列的时候,还是在上一次。
不知不觉居然更到第四弹了(还有个番外),最开始只是想着把iFlow的东西怎么能迁移过来,写个总结,方便其他还在寻找合适工具的小伙伴,也方便自己留个记录好查询。
不知道有没有眼尖的小伙伴,发现这个系列的标题,其实每一期都不一样。
第一弹用的无缝,是说如何能快速把东西和使用习惯做一个迁移,尽快上手使用。
第二弹用的丝滑,是说的如何自动对上下文进行智能的压缩,让你的编码过程更加丝滑,不会被上下文窗口限制打断。
第三弹用的顺畅,是说的当模型不了解的时候,如果能顺畅接入网络,进行联网搜索。
番外篇用的灵活,是说的如何为你订阅的CodingPlan的模型,添加多模态,开启思考能力,并在多种思考深度,以及是否开启思考,进行灵活快速的切换。
本篇用的是精准,主角就是LSP了。
1. 后语
1.1 假装来个名词解释吧虽然也是CV的
LSP可不是什么老xx……它是LanguageServerProtocol(语言服务器协议)的缩写,是由微软在2016年提出的一种开放协议,用于在代码编辑器/IDE和语言服务器之间进行通信的。
语言服务器协议(LSP)有两个主要组成部分。
- 语言服务器:这是一个后台进程,它能够理解你的代码,并提供特定于某种语言的功能。
- 语言客户端:它是编辑器中的一种插件或扩展程序,负责与语言服务器进行通信,获取相应功能并将这些智能特性展示给你。
简单来说,就是一个能够帮你深入理解、查找、解释代码的c/s服务。
过去你要查找一个函数的定义,或者是想要改动一个地方,但是又担心会影响其他调用的多处,就需要进行检索,ai检索其实也和我们人类一样,在没有lsp的时候,它也是关键词搜索。
这样造成的问题就是:
- 搜索效率低
- 搜索出大量不相关的部分,需要进一步判断
- 可能会漏掉某些部分
- token爆炸
有了lsp,它就可以快速帮你进行定位,可谓是快准狠(这也是本篇标题精准的含义)
像是在vscode之类的ide编辑器中,你鼠标悬浮,显示定义内容,解释信息,包括快速跳转等等这些功能,都是依托于lsp。
其实iFlow CLI项目在被砍前,还在给我们加LSP的功能呢,只不过没等到……(泪目,我又来刀大家了)
1.2 OpenCode中的LSP
好了,说回OpenCode,OC很早就支持了LSP,并内置了大量的LSP服务。
就是那个右侧的sidebar侧边栏,位于MCP下方的就是LSP的状态。
只不过在实际使用过程中,可能经常见到的是LSPs will activate as files are read这样的提示,这说明LSP确实已经安装了,但没有触发,虽然提示写的是读取文件就会激活,但有的时候你让它读取文件了,这里依然是同样的提示,没有任何变化。
这是由于要启用LSP还是需要“一点点”配置的。
1.2.1 配置文件层级和优先级额外说明
我们知道OpenCode的配置文件是分层级的,有远程的,有全局的,有项目的,优先级依次提升。
如果你想要在项目中使用特殊的,可以在项目目录中创建opencode.json文件,如果和全局配置相同的,会以项目中的配置进行覆盖,不同的,会合并。
如果你想全局都统一,则可以直接在全局配置文件中(~/.config/opencode/opencode.json)进行配置。
1.2.2 如何配置
很简单,语法是这样的:
"lsp": {
"<语言名>": {
"command": ["对应语言lsp服务", "--stdio"],
"extensions": [".扩展名1",".扩展名2"]
}
例如我的配置,添加了typescript,vue,bash,yaml,python这几个,如下:
"lsp": {
"typescript": {
"command": ["typescript-language-server", "--stdio"],
"extensions": [".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs", ".mts", ".cts"]
},
"vue": {
"command": ["vue-language-server", "--stdio"],
"extensions": [".vue"]
},
"bash": {
"command": ["bash-language-server", "start"],
"extensions": [".sh", ".bash"]
},
"yaml": {
"command": ["yaml-language-server", "--stdio"],
"extensions": [".yaml", ".yml"]
},
"python": {
"command": ["pyright-langserver", "--stdio"],
"extensions": [".py", ".pyi"]
}
}
其中python的,需要自己安装pyright,其他opencode都内置自动安装。
配置完成后,需要重启opencode。
1.2.3 又到了展示效果的时候了
当你的ai读取了对应的文件后,lsp就会自动启动激活了。
1.3 额外的插件
还有一个额外的插件,叫做 opencode-type-inject,是TypeScript 类型的 AI 编码助手上下文,自动将类型签名注入文件读取,在写入时提供类型错误反馈,并提供类型查找工具。
Github:
功能
- 自动类型注入:读取 TS/Svelte 文件时,自动附加相关类型签名
- 类型检查反馈:写入文件后自动检查类型错误并报告
- 类型查找工具:lookup_type、list_types、type_check
对项目的帮助
- 大幅减少类型错误 — AI 写代码时能看到正确的类型签名
- 自动解析导入类型 — 最多4层深度的类型依赖
- 即时反馈 — 写完代码立刻知道有没有类型错误
代价
- Token消耗:每次读文件会附加类型上下文
- 启动开销:需要初始化 TypeScript 语言服务
- 与 DCP 交互:类型注入内容也会被压缩处理
建议
如果你的项目 TypeScript 很多,可以安装,收益大于成本。
2. 正文
其实有想第五弹写什么方向的,但可能没那么快,也不保证(哈哈)
另外我想可能在第五弹就终结这个系列了。


