详细介绍
Serena 是一个基于 Model Context Protocol (MCP) 的编码代理工具包,能够将大型语言模型(LLM)转化为可直接在代码库上工作的全功能代理。它提供类似 IDE 的语义代码检索和编辑功能,支持多种编程语言,并可通过 MCP 协议或 Agno 框架与多种 LLM 集成。Serena 可以自主完成从代码分析到实现、测试,再到版本控制系统提交的完整编码任务。
核心功能
Serena 提供了多种核心功能,使其成为编码任务的强大助手:
- 语义代码检索:提供类似 IDE 的符号级代码查询功能,能理解代码结构和关系。
- 代码编辑:支持符号级别的代码编辑操作,如插入、替换和删除代码块。
- 多语言支持:支持 Python、Java、TypeScript 等多种编程语言。
- 多模型集成:可通过 MCP 协议或 Agno 框架与多种 LLM 集成。
安装方法
安装 Serena 需要完成以下步骤:
- 安装依赖:请按照
INSTALL.md文件中的说明完成 Python、Node.js 和 Yarn 的安装。 - 创建虚拟环境并安装包:
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt- 初始化项目:
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 之前,需要进行一些配置:
- 复制并调整配置文件:
cp serena_config.template.yml serena_config.yml- 为每个项目创建
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']故障排查
如果遇到问题,可以尝试以下步骤:
- 检查日志:查看语言服务的输出日志以获取更多信息。
- 重新启动服务:
uv run serena restart-language-server- 重新初始化项目:
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 通过其强大的语义理解和代码操作能力,为开发者提供了一个高效、灵活的编码代理解决方案,适用于各种复杂的开发任务。