write_file和patch工具现在内置真实语言服务器诊断——Python 用 pyright、TypeScript 用 tsserver、Rust 用 rust-analyzer。Agent 写完代码的下一秒,语法错误、类型不匹配、未使用变量全给你揪出来。
为什么AI写的代码需要"第二双眼睛"
用AI编程助手写代码有一个经典问题:模型不知道自己写错了。
你用 Hermes Agent 让模型写一个 Python 数据处理脚本,它信心满满地写完了。你直接运行——TypeError。你回去检查——哦,第23行 user_input 可能是 None,第45行 import os 没用到,第67行函数签名参数类型不对。
这些问题模型自己不会发现,因为:
- LLM 没有实时类型检查能力 — 它根据训练数据"觉得"代码是对的
- LLM 看不到运行时错误 — 静态分析能发现的问题,模型不一定知道
- 长文件里的小错误容易被忽略 — 127行代码里一个拼写错误,人类和模型都容易漏
Hermes Agent v0.14 的 LSP 语义诊断功能解决了这个问题。它在 Agent 每次调用 write_file 或 patch 之后,自动运行真实的语言服务器诊断,把结果反馈给 Agent。Agent 看到诊断信息后可以立即修复——整个过程你甚至不需要介入。
怎么工作的
Agent 写代码 → write_file("script.py", content)
↓
Hermes 保存文件
↓
启动/复用 LSP 服务器
(pyright / tsserver / rust-analyzer ...)
↓
等待诊断结果(通常 < 1s)
↓
将诊断信息注入下一轮对话
↓
Agent 看到:
⚠️ Line 23: 'user_input' is possibly None
⚠️ Line 45: Unused import 'os'
↓
Agent 自动修复或询问你是否修复

▲ LSP实时诊断工作流:Agent写代码→保存→LSP服务器诊断→结果反馈→自动修复
关键点:LSP 诊断在 Agent 写入文件的同一轮就返回结果。不是异步的、不是下次打开才看到——Agent 在回话中就收到了反馈。这改变了 AI 编程的工作流。
实战:5 分钟配好 LSP 诊断
步骤 1:安装语言服务器
Hermes Agent 不会自动安装 language server。你需要根据项目语言手动安装:
# Python 项目(推荐 pyright,最快)
npm install -g pyright
# 或者 pylsp(功能更全但更慢)
pip install python-lsp-server
# TypeScript / JavaScript 项目
npm install -g typescript typescript-language-server
# Go 项目
go install golang.org/x/tools/gopls@latest
# Rust 项目
rustup component add rust-analyzer
⚠️ 踩坑提醒:
pyright需要 Node.js 环境。如果没有安装 Node.js,Hermes 的 LSP 功能会静默跳过 Python 诊断。建议所有 AI 编程工作流都装上 Node.js——不只是为了 pyright,MCP 服务器、很多 AI 工具链都依赖它。
步骤 2:验证 LSP 可用
# 检查语言服务器是否在 PATH 中
which pyright # 应输出 /usr/local/bin/pyright 或类似路径
which typescript-language-server
which gopls
which rust-analyzer
Hermes Agent 在启动时会自动检测这些可执行文件。如果检测到,对应的 LSP 诊断功能就自动开启,不需要额外配置。
步骤 3:在 Hermes 中体验
hermes chat
然后让 Agent 写一段有潜在问题的代码:
> 帮我写一个Python函数,从API获取用户数据并处理。用户可能不存在,需要处理None的情况。
Agent 会写类似这样的代码:
[Agent writes to script.py:]
import requests
import os # 未使用的导入
def get_user_data(user_id: int) -> dict:
resp = requests.get(f"https://api.example.com/users/{user_id}")
user = resp.json()
name = user["name"].upper() # user 如果是 None,这里会崩
return {"name": name, "id": user_id}
Agent 保存文件后,LSP 诊断会立即报告:
[LSP 诊断结果]
⚠️ script.py:2 — 'os' imported but never used (Pyright: reportUnusedImport)
⚠️ script.py:5 — 'user' could be None; 'resp.json()' may return None if response is empty (Pyright: reportOptionalMemberAccess)
⚠️ script.py:3 — 返回类型标注为 dict 但实际返回可能包含不同类型的值 (Pyright: reportUnknownParameterType)
Agent 看到这些诊断后会自动修复:
# [Agent 修复后的代码]
import requests
from typing import Optional
def get_user_data(user_id: int) -> dict:
resp = requests.get(f"https://api.example.com/users/{user_id}")
if resp.status_code != 200:
return {"error": f"User {user_id} not found"}
user_data = resp.json()
if user_data is None:
return {"error": "Empty response"}
name = str(user_data.get("name", "Unknown")).upper()
return {"name": name, "id": user_id}
整个过程,你只发了一条指令,Agent 写代码→诊断→修复,自动完成三轮迭代。
支持的语言和诊断能力

▲ Hermes Agent LSP支持的语言和对应Language Server:Python(pyright)、TypeScript(tsserver)、Go(gopls)、Rust(rust-analyzer)、C/C++(clangd)
Hermes Agent v0.14 的 LSP 支持取决于你的系统中安装了哪些 language server。以下是实测可用的组合:
| 语言 | Language Server | 安装命令 | 诊断能力 |
|---|---|---|---|
| Python | pyright | npm i -g pyright | 类型检查、未使用导入、None安全、参数类型 |
| Python | pylsp | pip install python-lsp-server | 语法错误、代码风格、基础类型检查 |
| TypeScript | tsserver | npm i -g typescript typescript-language-server | 类型错误、未使用变量、严格模式检查 |
| JavaScript | tsserver | 同上 | 类型推断、ESLint集成 |
| Go | gopls | go install golang.org/x/tools/gopls@latest | 类型错误、未使用变量、go vet诊断 |
| Rust | rust-analyzer | rustup component add rust-analyzer | 类型错误、borrow checker、未使用代码 |
| C/C++ | clangd | 系统包管理器 | 语法错误、警告、未使用变量 |
⚠️ 踩坑提醒:
pylsp和pyright同时安装时,Hermes 优先使用pyright(更快、诊断更准确)。pylsp的功能更全(代码风格、复杂度检查)但启动慢约 2-3 倍。对于 AI 编程场景,推荐pyright——Agent 需要的是快速反馈,不是全面的代码审查。
与每轮文件验证器配合使用
v0.14 还有一个配套功能:文件变更验证页脚(file-mutation verifier footer)。每轮对话结束后,Agent 会看到一份精确的文件变更清单:
[文件变更验证 — Turn #3]
✅ /tmp/api_client.py — 新增 47 行 (LSP: 0 errors, 1 warning)
✅ /opt/hermes-home/config.yaml — 修改 3 行
❌ /etc/hermes/config.yaml — 写入失败(权限不足)

▲ 文件变更验证页脚:每轮对话后Agent收到精确的文件变更清单,LSP诊断结果直接嵌入
LSP 诊断结果直接嵌入在这个验证页脚里。Agent 在下一轮对话开始前就已经知道:
- 哪些文件写成功了
- 哪些写失败了
- 成功的文件有没有诊断错误/警告
这就杜绝了经典的"Agent 说我写了但其实没写"的信任问题。
实际收益:三个真实场景
场景 1:多文件重构
你让 Agent 重构一个模块,涉及 5 个 Python 文件:
> 把 user_service.py 里的 User 类拆分到 user_model.py,
更新所有引用,保持类型安全。
以前的做法:Agent 逐个写文件 → 你手动跑 mypy 或 pyright → 发现 3 个类型错误 → 让 Agent 修复 → 再跑一遍 → 还有 1 个 → 再来一轮。
现在的做法:Agent 写文件 → LSP 自动诊断 → Agent 看到诊断后自动修复 → 所有文件写完,0 诊断错误。你只需要最终验收。
时间节省:原本 3-4 轮手动检查循环 → 现在 Agent 内部自动完成。
场景 2:新人上手陌生代码库
你接手一个使用 SQLAlchemy + FastAPI 的项目,让 Agent 帮你加一个新接口:
> 在 routes/orders.py 里加一个 GET /orders/recent 接口,
参考现有的 GET /users/recent 实现。
Agent 写代码时,LSP 会立即报告:
Order.status字段类型是Enum不是str——Agent 需要在比较时用.value- SQLAlchemy session 的返回类型是
Optional[Order]——Agent 必须处理None - 新接口缺少
@router.get的response_model参数
这些诊断信息让 Agent 第一次就写出了正确的代码,而不是写了一版跑不通再改。
场景 3:跨语言项目
你的项目同时有 Python 后端和 TypeScript 前端:
# 同时安装两种语言服务器
npm install -g pyright typescript typescript-language-server
Hermes Agent 会自动为 .py 文件启用 pyright、为 .ts/.tsx 文件启用 tsserver,在同一个会话中无缝切换。
> 给后端加一个 /api/stats 接口返回统计数据,
然后在前端加一个 StatsChart 组件展示这些数据。
Agent 写 stats_api.py → LSP 诊断 Python 代码 → 写 StatsChart.tsx → LSP 诊断 TypeScript 代码 → 两个文件都零诊断错误。
局限和注意事项
1. 诊断范围有限
LSP 只能做静态分析。逻辑错误、业务逻辑错误、性能问题不在诊断范围内:
# LSP 不会报错,但逻辑是错的
def calculate_discount(price, user_tier):
if user_tier == "vip":
return price * 1.2 # 应该是 * 0.8(VIP 应该打折,不是加价)
return price
2. 首次启动有延迟
Language server 首次启动需要几秒(pyright ~1s,tsserver ~3s,rust-analyzer ~5s)。但 Hermes 会保持 server 进程存活,后续诊断都是毫秒级。
3. 部分语言需要项目配置
TypeScript 项目需要 tsconfig.json,Python 项目可选 pyproject.toml 中的 [tool.pyright] 配置。没有配置文件时,language server 使用默认设置。
4. LSP 静默跳过
如果 language server 没有安装,Hermes 不会报错——LSP 功能静默跳过,Agent 不知道诊断没有运行。这意味着:
# 一定要先确认 language server 在 PATH 中
which pyright # 确认已安装
which tsserver # 确认已安装
⚠️ 踩坑提醒:很多用户以为 LSP 功能没生效是因为有 bug,实际上只是没装 language server。Hermes 不会提醒你"没装 pyright,Python 诊断已跳过"。建议在项目启动脚本里加上 language server 的安装步骤。
与同类工具对比
| 功能 | Hermes Agent LSP | GitHub Copilot | Cursor | Claude Code |
|---|---|---|---|---|
| 诊断时机 | 写文件时实时 | 编辑时实时 | 编辑时实时 | 无内置诊断 |
| 语言服务器 | 真实LSP | 真实LSP | 真实LSP | 无 |
| 多语言支持 | ✅(按安装) | ✅ | ✅ | ❌ |
| Agent自我修复 | ✅(诊断反馈给Agent) | ❌ | 部分 | ❌ |
| 开源 | ✅ | ❌ | ❌ | ❌ |
Hermes Agent 的独特之处在于:诊断结果反馈给 Agent 本身。Copilot 和 Cursor 也会诊断,但诊断结果显示给人类看;Hermes 的诊断结果进入 Agent 的上下文,Agent 可以据此自我修复。
总结:LSP 诊断改变了什么
- 从"写代码→手动运行→发现错误→让Agent改"变成"写代码→Agent自己发现并修复"。你只需要验收最终结果,而不是在中间反复检查。
- Agent 的代码质量有了一次质的飞跃。类型错误、未使用变量、None安全问题——这些占 AI 生成代码 bug 的 60% 以上——现在由真实编译器级别工具检查。
- 零配置,按需启用。装好 language server 就自动工作,不装也不影响其他功能。
- 和文件验证器配合,解决了"Agent 写没写对"的信任问题。
对于用 Hermes Agent 做日常开发的用户,这个功能可能比新模型、新平台、新工具都更有实际价值——因为它解决的是每个 AI 编程工作流都会遇到的问题。
快速上手命令:
# 1. 安装 Hermes Agent v0.14
pip install --upgrade hermes-agent
# 2. 安装语言服务器
npm install -g pyright typescript typescript-language-server
# 3. 开始使用
hermes chat
> 帮我写一个 Python 脚本处理 CSV 数据
# Agent 写代码后会自动诊断,你观察 LSP 反馈
#Agent工坊 #HermesAgent #AI编程 #LSP #代码质量
本文引用:
- Hermes Agent v0.14.0 Release Notes: https://github.com/NousResearch/hermes-agent/releases/tag/v2026.5.16
- PR #24168: Semantic diagnostics from real language servers in write_file/patch
- PR #25978: Shift baseline diagnostics into post-edit coordinates
- PR #24498: Per-turn file-mutation verifier footer
本文由AI辅助创作,经人工审核编辑发布
