Serena

Serena 是一个开源编码代理工具包,能够将大型语言模型(LLM)转化为可直接在代码库上工作的全功能代理。它提供语义代码检索和编辑功能,支持多种编程语言,并可通过 MCP 协议或 Agno 框架与多种 LLM 集成,适用于代码分析、重构、实现和测试等任务。

182 浏览
2025-12-18 发布

详细介绍

Serena 是一个基于 Model Context Protocol (MCP) 的编码代理工具包,能够将大型语言模型(LLM)转化为可直接在代码库上工作的全功能代理。它提供类似 IDE 的语义代码检索和编辑功能,支持多种编程语言,并可通过 MCP 协议或 Agno 框架与多种 LLM 集成。Serena 可以自主完成从代码分析到实现、测试,再到版本控制系统提交的完整编码任务。

核心功能

Serena 提供了多种核心功能,使其成为编码任务的强大助手:

  • 语义代码检索:提供类似 IDE 的符号级代码查询功能,能理解代码结构和关系。
  • 代码编辑:支持符号级别的代码编辑操作,如插入、替换和删除代码块。
  • 多语言支持:支持 Python、Java、TypeScript 等多种编程语言。
  • 多模型集成:可通过 MCP 协议或 Agno 框架与多种 LLM 集成。

安装方法

安装 Serena 需要完成以下步骤:

  1. 安装依赖:请按照 INSTALL.md 文件中的说明完成 Python、Node.js 和 Yarn 的安装。
  2. 创建虚拟环境并安装包:
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
  1. 初始化项目:
uv init your_project_name
cd your_project_name

使用方法

Serena 提供了丰富的命令行工具,支持项目管理、文件操作、代码操作和项目构建与测试。

项目激活与管理

uv run serena activate 
uv run serena delete-project 

文件操作

uv run serena create-file 
uv run serena read-file 
uv run serena delete-file 

代码操作

uv run serena find-symbol 
uv run serena insert-code  --content 
uv run serena replace-lines : --content 

项目构建与测试

uv run serena run-tests
uv run serena build

配置说明

在使用 Serena 之前,需要进行一些配置:

  1. 复制并调整配置文件:
cp serena_config.template.yml serena_config.yml
  1. 为每个项目创建 project.yml 配置文件:
mkdir -p /myproject/.serena
cp project.template.yml /myproject/.serena/project.yml

与 Claude Desktop 集成

可以通过以下方式配置 Claude Desktop 使用 Serena 作为 MCP 服务器:

{
  "mcpServers": {
    "serena": {
      "command": "/abs/path/to/uv",
      "args": ["run", "--directory", "/abs/path/to/serena", "serena-mcp-server", "--project-file", "/abs/path/to/myproject.yml"]
    }
  }
}

使用场景

Serena 适用于多种编码任务,包括:

  • 代码分析与规划
  • 设计新组件
  • 重构现有组件
  • 实现功能并进行测试
  • 提交版本控制系统

使用示例

以下是两个典型的使用场景:

实现新功能

用户可以输入提示,如:

请为项目添加日志 GUI 功能

Serena 会分析代码结构,找到合适的修改位置,并实现新功能。

代码重构

用户可以输入提示,如:

请重构 UserService 类,使其更模块化

Serena 会分析类结构,提出重构方案并实施。

常见问题

以下是几个常见问题及其解答:

  • Q: Serena 支持哪些编程语言?
    A: 直接支持 Python、Java 和 TypeScript,间接支持 Ruby、Go、C#、Rust、Kotlin、Dart 和 C/C++ 等。
  • Q: 如何解决 MCP 服务器启动问题?
    A: 可以尝试使用 SSE 模式启动服务器,并确保使用绝对路径。
  • Q: Serena 安全吗?会修改我的代码吗?
    A: Serena 可以配置为只读模式,在非只读模式下会修改代码,建议使用版本控制系统。

自定义工具

用户可以创建自定义工具,例如:

class NewTool(Tool):
    def apply(self, context: Context) -> Context:
        # 在此处实现工具逻辑
        return context

然后在 serena/agent/tools/__init__.py 中注册该工具:

from .new_tool import NewTool

__all__ = ['NewTool']

故障排查

如果遇到问题,可以尝试以下步骤:

  1. 检查日志:查看语言服务的输出日志以获取更多信息。
  2. 重新启动服务:
uv run serena restart-language-server
  1. 重新初始化项目:
uv init your_project_name

完整工具列表

以下是 Serena 的部分工具及其简要描述:

工具名称详情activate_project激活指定名称的项目。check_onboarding_performed检查是否已经完成初始化流程。create_text_file创建/覆盖项目目录中的文件。delete_lines删除文件中指定范围内的行。delete_memory从 Serena 的项目特定存储中删除记忆。execute_shell_command执行 shell 命令。find_referencing_code_snippets查找引用给定位置符号的代码片段。find_referencing_symbols查找引用给定位置符号的其他符号(可选过滤类型)。find_symbol在项目中全局或局部搜索名称包含指定字符串的符号。get_active_project获取当前激活项目的名称(如果有),并列出所有项目。

Serena 通过其强大的语义理解和代码操作能力,为开发者提供了一个高效、灵活的编码代理解决方案,适用于各种复杂的开发任务。

编码代理 语义检索 代码编辑 多模型集成

相关服务推荐

查看更多