oraios/serena · 上手攻略
- 仓库:oraios/serena
- 链接:https://github.com/oraios/serena
- 分类:skill
- 作者:Tom
- 更新:2026-07-08
这是什么
Serena 是一个面向 AI 编程 Agent 的 MCP 工具包,为 Agent 提供 IDE 级别的语义代码检索、编辑、重构和调试能力。它的核心定位是"Agent 的专属 IDE"——让 Agent 能像资深开发者使用 IDE 那样,在符号(symbol)层面理解代码结构,而不是逐文件逐行地猜。
简而言之:没有 Serena,Agent 只能靠"grep 搜索 + 文本替换"在代码库里摸索;有了 Serena,Agent 能直接查符号引用、跨文件重命名、找实现、查类型层次。
两种后端可选:
| 后端 | 费用 | 支持语言数 |
|---|---|---|
| 语言服务器(LSP) | 免费,开源 | 40+(Ada/AL/Angular/Bash/C#/C++/Clojure/Dart/Elixir/Erlang/Fortran/Go/Haskell/Java/JavaScript/Kotlin/Lua/MATLAB/Nix/OCaml/Perl/PHP/Python/R/Ruby/Rust/Scala/Swift/TypeScript/Zig 等) |
| JetBrains 插件 | 付费,有免费试用 | JetBrains 全家桶支持的所有语言(IntelliJ/PyCharm/WebStorm/GoLand 等) |
解决什么问题
主流 Agent(Claude Code、Codex、Copilot CLI 等)在处理代码时,本质上是在做"文本手术":搜索关键字、替换字符串。这种方式在大型代码库里极容易出错——同名变量、跨文件引用、字符串误匹配,都会让 Agent 输出错误的修改。
Serena 通过 LSP 或 JetBrains 插件,把代码的符号语义暴露给 Agent:
- 符号引用查找:某函数在哪些地方被调用?
- 声明定位:某个符号在哪里定义?
- 跨文件重命名:改一个函数名,所有引用同步更新
- 移动/重构:符号、文件、目录的整体搬迁
- 类型层次:查看接口的实现类
实测数据(官方评估,Claude Code + 大型 Python 代码库):
"Serena's IDE-backed semantic tools are the single most impactful addition to my toolkit – cross-file renames, moves, and reference lookups that would cost me 8–12 careful, error-prone steps collapse into one atomic call."
GPT 5.4(高)/ Codex CLI 在 Java 代码库上的评价:
"It gives me the missing IDE-level understanding of symbols, references, and refactorings, turning fragile text surgery into calmer, faster, more confident code changes."
快速安装
唯一前提:安装 uv
Serena 通过 uv 管理,不需要 pip/conda:
# macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# 或
pip install uv
安装 Serena:
uv tool install -p 3.13 serena-agent
⚠️ 官方明确提示:不要从 MCP marketplace 或插件市场安装,那些版本往往过时且非最优。请务必使用上面的命令。
初始化(使用 LSP 后端):
serena init
成功后会看到初始化完成的提示。此时 Serena 会自动在项目目录下生成配置。
初始化(使用 JetBrains 后端):
serena init -b JetBrains
然后在 IDE 里安装对应插件(免费试用):https://plugins.jetbrains.com/plugin/28946-serena/
为客户端配置 MCP 连接:
不同的 Agent 客户端有不同的配置方式,完整指南见官方文档:https://oraios.github.io/serena/02-usage/030_clients.html
典型思路是:将 serena 命令作为 MCP 服务器启动,客户端通过命令行参数或 HTTP 模式连接。
核心用法
Serena 通过 MCP 协议暴露以下工具类别(以 LSP 后端为例):
检索类
| 工具 | 功能 |
|---|---|
find_symbol |
在项目中按名称找符号(函数/类/变量) |
symbol_overview |
查看文件的符号大纲(类结构、函数列表) |
find_referencing_symbols |
找所有引用了某符号的地方 |
find_declaration |
跳转到符号声明位置 |
find_implementations |
找接口/抽象类的所有实现 |
query_external_projects |
查外部依赖中的符号(需要源码) |
diagnostics |
获取代码诊断信息(lint/类型错误) |
编辑/重构类
| 工具 | 功能 |
|---|---|
rename |
符号重命名(影响所有引用,自动原子化) |
replace_symbol_body |
替换符号的函数体 |
insert_after_symbol |
在符号后插入代码 |
insert_before_symbol |
在符号前插入代码 |
safe_delete |
安全删除(先确认无引用) |
⚠️
rename(跨文件重命名)和move(移动符号/文件/目录)是 JetBrains 插件独有功能,LSP 后端 rename 仅支持符号级。
实用工具类
当 Serena 独立使用(非 Claude Code 等自带文件工具的 Agent)时,这些工具可用:
search_for_pattern— 正则搜索replace_content— 基于正则的内容替换list_dir/find_file— 目录浏览与文件搜索read_file— 读取文件片段execute_shell_command— 运行构建/测试/lint 命令
在 Claude Code / Codex 环境中,这些通常被禁用,避免功能重叠。
内存系统
Serena 自带一个轻量内存系统,支持跨会话、跨用户、跨项目共享知识,适合和 Agent 的 AGENTS.md 配合使用:
# serena.yaml 配置示例
memory:
enabled: true
backend: file # 或 other-backed
path: .serena/memory
配置层级
Serena 支持多层级可组合配置(从全局到执行上下文):
# 全局配置 ~/.serena/config.yaml
global:
backend: LSP
language: en
# 项目本地配置 ./serena.yaml(覆盖全局)
project:
backend: JetBrains
# MCP 启动命令级配置
serena --config-mode=strict
典型适用场景
1. 大型代码库维护(万人开源项目、企业 monorepo)
当代码库有上百个文件、复杂的模块依赖时,Agent 如果只靠 grep 搜索,很容易改错或漏改。Serena 让 Agent 精确理解符号关系,跨文件重构安全可靠。
2. 多语言 monorepo 开发
Serena 的 LSP 后端支持 40+ 语言,适合多语言项目(前端 TypeScript + 后端 Go + Python 混写),无需切换工具。
3. 持续集成的 AI 代码审查
Agent 可用 diagnostics 工具批量检查代码质量,配合 CI pipeline 自动输出报告。
4. JetBrains 用户的深度重构
如果团队使用 IntelliJ / PyCharm,JetBrains 插件后端提供 rename(符号+文件+目录)、move、inline 等高级重构,能力最完整。
坑与注意
-
不要从 MCP marketplace 安装:官方明确警告 marketplace 版本过时。请务必用
uv tool install手动安装。 -
LSP 后端的 rename 有局限:仅支持符号级rename,不支持文件/目录 rename;JetBrains 插件无此限制。如需完整重构能力,请用 JetBrains 后端。
-
语言支持因后端而异:LSP 后端对部分语言(如 Kotlin、Ruby)的
find_implementations支持有限,具体见:https://oraios.github.io/serena/01-about/020_programming-languages.html -
磁盘空间消耗:Serena 在初始化时可能需要为语言服务器下载索引,建议确保 5GB+ 可用空间。
-
JetBrains 插件需要付费:免费试用可用,但长期使用需购买 JetBrains 许可证。
-
uv 最低 Python 版本:要求 Python 3.13,使用前确认版本:
python --version。 -
find_declaration对外部依赖支持有限:声明在外部包里的符号,LSP 通常无法定位。
与同类对比
| 工具 | 定位 | 后端 | 多语言 | 特色 |
|---|---|---|---|---|
| Serena | Agent 的 IDE(符号级) | LSP / JetBrains | 40+ | 专为 Agent 设计,符号语义最完整 |
| Cody (Sourcegraph) | 代码智能 | 自有 LLM | 任意 | 强在代码解释和问答,非重构 |
| Continue (VS Code) | IDE 插件 | 多模型 | 任意 | 通用代码助手,非专注 Agent 场景 |
| Aider | 终端 AI 编程 | 多模型 | 任意 | 专注 humans,弱符号语义 |
| Claude Code 内置工具 | Agent 基础 | — | — | 有文件/Rename,但无符号级引用理解 |
核心差异:Serena 是目前唯一一个专门为 AI Agent 设计、以符号语义操作为核心的 MCP 工具包;其他工具主要面向人类开发者,Agent 使用时效率和准确性均不如 Serena。
一句话推荐结论
如果你用 Claude Code / Codex / Copilot CLI 处理超过 10 个文件的代码库,Serena 是目前最值得安装的 MCP 工具,它把 Agent 的"文本替换"升级为真正的"符号重构",实测可以将复杂重构的 token 消耗和错误率大幅降低。