Agent工坊

【Agent工坊】Hermes Agent v0.14 LSP实时纠错:AI写完代码自动查bug,比IDE还快

write_filepatch 工具现在内置真实语言服务器诊断——Python 用 pyright、TypeScript 用 tsserver、Rust 用 rust-analyzer。Agent 写完代码的下一秒,语法错误、类型不匹配、未使用变量全给你揪出来。


为什么AI写的代码需要"第二双眼睛"

用AI编程助手写代码有一个经典问题:模型不知道自己写错了


你用 Hermes Agent 让模型写一个 Python 数据处理脚本,它信心满满地写完了。你直接运行——TypeError。你回去检查——哦,第23行 user_input 可能是 None,第45行 import os 没用到,第67行函数签名参数类型不对。


这些问题模型自己不会发现,因为:


  1. LLM 没有实时类型检查能力 — 它根据训练数据"觉得"代码是对的
  2. LLM 看不到运行时错误 — 静态分析能发现的问题,模型不一定知道
  3. 长文件里的小错误容易被忽略 — 127行代码里一个拼写错误,人类和模型都容易漏

Hermes Agent v0.14 的 LSP 语义诊断功能解决了这个问题。它在 Agent 每次调用 write_filepatch 之后,自动运行真实的语言服务器诊断,把结果反馈给 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实时诊断工作流

▲ 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支持语言一览

▲ 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安装命令诊断能力
Pythonpyrightnpm i -g pyright类型检查、未使用导入、None安全、参数类型
Pythonpylsppip install python-lsp-server语法错误、代码风格、基础类型检查
TypeScripttsservernpm i -g typescript typescript-language-server类型错误、未使用变量、严格模式检查
JavaScripttsserver同上类型推断、ESLint集成
Gogoplsgo install golang.org/x/tools/gopls@latest类型错误、未使用变量、go vet诊断
Rustrust-analyzerrustup component add rust-analyzer类型错误、borrow checker、未使用代码
C/C++clangd系统包管理器语法错误、警告、未使用变量

⚠️ 踩坑提醒pylsppyright 同时安装时,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 — 写入失败(权限不足)



每轮文件变更验证+LSP诊断

▲ 文件变更验证页脚:每轮对话后Agent收到精确的文件变更清单,LSP诊断结果直接嵌入


LSP 诊断结果直接嵌入在这个验证页脚里。Agent 在下一轮对话开始前就已经知道:


  • 哪些文件写成功了
  • 哪些写失败了
  • 成功的文件有没有诊断错误/警告

这就杜绝了经典的"Agent 说我写了但其实没写"的信任问题。


实际收益:三个真实场景

场景 1:多文件重构

你让 Agent 重构一个模块,涉及 5 个 Python 文件:


> 把 user_service.py 里的 User 类拆分到 user_model.py,
  更新所有引用,保持类型安全。


以前的做法:Agent 逐个写文件 → 你手动跑 mypypyright → 发现 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.getresponse_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 LSPGitHub CopilotCursorClaude Code
诊断时机写文件时实时编辑时实时编辑时实时无内置诊断
语言服务器真实LSP真实LSP真实LSP
多语言支持✅(按安装)
Agent自我修复✅(诊断反馈给Agent)部分
开源

Hermes Agent 的独特之处在于:诊断结果反馈给 Agent 本身。Copilot 和 Cursor 也会诊断,但诊断结果显示给人类看;Hermes 的诊断结果进入 Agent 的上下文,Agent 可以据此自我修复。


总结:LSP 诊断改变了什么

  1. 从"写代码→手动运行→发现错误→让Agent改"变成"写代码→Agent自己发现并修复"。你只需要验收最终结果,而不是在中间反复检查。
  1. Agent 的代码质量有了一次质的飞跃。类型错误、未使用变量、None安全问题——这些占 AI 生成代码 bug 的 60% 以上——现在由真实编译器级别工具检查。
  1. 零配置,按需启用。装好 language server 就自动工作,不装也不影响其他功能。
  1. 和文件验证器配合,解决了"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辅助创作,经人工审核编辑发布