Home
Login

Serena 是一個強大的編碼代理工具包,能夠將大型語言模型(LLM)轉變為一個功能完備的代理,直接在您的代碼庫上工作。

MITPython 1.2koraios Last Updated: 2025-06-13

Serena 專案詳細介紹

專案概述

Serena 是一個強大的程式設計智能體工具包,能夠將大型語言模型(LLM)轉換為功能齊全的程式設計智能體,直接在您的程式碼庫上進行工作。該專案由 Oraios AI 開發並開源貢獻給開發者社群。

核心特性

🚀 核心能力

  • 語義程式碼檢索和編輯功能:提供類似 IDE 的能力,在符號級別提取程式碼實體並利用關係結構
  • 完全開源免費:增強您已有 LLM 的能力,無需額外費用
  • 多種整合方式:支援 MCP 伺服器、Agno 框架和自定義智能體框架整合

🔧 技術優勢

  • 基於語言伺服器協定(LSP):通過廣泛實現的 LSP 提供多種程式碼查詢和編輯功能
  • 符號級理解:基於程式碼的符號理解進行發現和編輯,就像經驗豐富的開發者使用 IDE 一樣
  • 高效精準:即使在大型複雜專案中也能高效找到正確的上下文並執行正確的操作

支援的程式設計語言

直接支援(開箱即用)

  • Python
  • Java(注意:啟動較慢,首次啟動尤為明顯)
  • TypeScript

這些語言通過 Serena 底層使用的 multilspy 語言伺服器庫支援。

整合方式

1. 模型上下文協定(MCP)

Serena 提供 MCP 伺服器,可與以下客戶端整合:

  • Claude Desktop
  • IDE(如 VSCode、Cursor、IntelliJ)
  • 擴展(如 Cline、Roo Code)
  • Goose(提供良好的 CLI 體驗)
  • 以及許多其他客戶端,包括即將支援的 ChatGPT 應用

2. Agno 框架

通過 Agno(模型無關的智能體框架),Serena 可以將幾乎任何 LLM 轉換為程式設計智能體,支援:

  • Google、OpenAI、Anthropic 提供的付費 API 模型
  • Ollama、Together、Anyscale 提供的免費模型

3. 自定義智能體框架

Serena 的工具實現與框架特定程式碼解耦,可以輕鬆適配到任何智能體框架。

使用場景

Serena 可用於任何程式設計任務,包括:

  • 程式碼分析
  • 專案規劃
  • 設計新組件
  • 重構現有程式碼
  • 從初始分析到實現、測試,最終到版本控制系統提交的完整自主程式設計任務

快速開始

基本安裝

  1. 安裝 uv(安裝說明參見官方文檔
  2. 克隆倉庫到 /path/to/serena
  3. 複製 serena_config.template.ymlserena_config.yml 並調整設定
  4. 複製 myproject.template.ymlmyproject.yml 並調整專案特定設定
  5. 如需動態切換專案,將所有專案檔案添加到 serena_config.ymlprojects 列表中

Claude Desktop 整合

  1. 創建專案配置檔案 myproject.yml
  2. 在 Claude Desktop 中配置 MCP 伺服器:
    • 打開 File / Settings / Developer / MCP Servers / Edit Config
    • claude_desktop_config.json 中添加:
    {
      "mcpServers": {
        "serena": {
          "command": "/abs/path/to/uv",
          "args": ["run", "--directory", "/abs/path/to/serena", "serena-mcp-server", "--project-file", "/abs/path/to/myproject.yml"]
        }
      }
    }
    
  3. 保存配置並重啟 Claude Desktop

Goose CLI 使用

  1. 安裝 goose
  2. 使用 goose configure 添加擴展
  3. 選擇 "Command-line Extension",命名為 "Serena"
  4. 添加命令:/abs/path/to/uv run --directory /abs/path/to/serena serena-mcp-server /optional/abs/path/to/project.yml
  5. 禁用默認的 developer 擴展

Agno GUI 使用

  1. 下載 agent-ui 程式碼:npx create-agent-ui@latest
  2. 安裝 Serena:uv pip install --all-extras -r pyproject.toml -e .
  3. 複製 .env.example.env 並填入 API 密鑰
  4. 啟動 Agno 智能體:uv run python scripts/agno_agent.py
  5. 啟動 UI:cd agent-ui && pnpm dev

工具和配置

主要工具類別

  • 語義程式碼檢索工具:查找符號、引用、程式碼片段
  • 程式碼編輯工具:插入、替換、刪除程式碼
  • 檔案系統操作:讀取、創建、列出檔案和目錄
  • Shell 執行:執行 shell 命令
  • 專案管理:激活專案、入門引導、記憶體管理

安全考量

  • 所有工具的使用通常都是推薦的,以提供最大價值
  • execute_shell_command 工具允許任意程式碼執行,需要謹慎使用
  • 可以在專案配置檔案中禁用特定命令
  • 支援只讀模式(read_only: true),只允許分析和建議,不修改程式碼庫

與其他程式設計智能體的比較

相比基於訂閱的智能體(Windsurf、Cursor、VSCode)

優勢:

  • 無需訂閱費用
  • 不綁定特定 IDE
  • 不綁定特定大型語言模型或 API
  • 使用語言伺服器進行符號級程式碼理解
  • 開源且程式碼庫小,易於擴展和修改

劣勢:

  • 不直接整合到 IDE 中,檢查新程式碼不如 IDE 內置工具無縫

相比基於 API 的智能體(Claude Code、Cline、Aider)

優勢:

  • 可作為 MCP 伺服器使用,無需 API 密鑰,避免 API 費用
  • 這是 Serena 的獨特功能

相似點:

  • 都可以作為 API 基礎智能體使用
  • 都很強大,主要缺點是潛在的高 API 費用

相比其他 MCP 伺服器

  • 據了解,其他程式設計相關的 MCP 伺服器(如 DesktopCommander、codemcp)都不提供語義程式碼檢索和編輯工具
  • 它們依賴純基於文本的分析
  • Serena 整合語言伺服器和 MCP 的特性使其在處理大型程式碼庫的挑戰性程式設計任務時獨特且強大

入門引導和記憶系統

入門引導

  • 默認情況下,Serena 在首次為專案啟動時會執行入門引導過程
  • 目標是讓 Serena 熟悉專案並儲存記憶,供未來交互使用

記憶系統

  • 記憶檔案儲存在專案目錄的 .serena/memories/
  • 智能體可以選擇讀取這些檔案
  • 用戶可以根據需要閱讀和調整記憶檔案,也可以手動添加新的記憶檔案
  • 記憶系統顯著改善了用戶使用 Serena 的體驗

使用建議

模型選擇

  • 非思考版本的 Claude 3.7 似乎比思考版本效果更好
  • Gemini 在初步實驗中表現很好,但尚不支持 MCP
  • Gemini 相對便宜且可以處理巨大的上下文長度

最佳實踐

  1. 版本控制:最好從乾淨的 git 狀態開始程式碼生成任務
  2. Windows 配置:在 Windows 上設置 git config --global core.autocrlf true
  3. 程式碼結構:使用結構良好、模塊化和有類型註解的程式碼
  4. 測試和日誌:包含詳細的日誌信息和有意義的測試
  5. 規劃優先:對於複雜任務,先進行概念化和規劃
  6. 上下文管理:長任務時可以創建摘要並在新對話中繼續

完整工具列表

以下是 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: 獲取當前活動專案名稱
  • get_symbols_overview: 獲取檔案或目錄中頂級符號的概覽
  • insert_after_symbol: 在符號定義結束後插入內容
  • insert_at_line: 在檔案的給定行插入內容
  • insert_before_symbol: 在符號定義開始前插入內容
  • list_dir: 列出目錄中的檔案和目錄
  • list_memories: 列出記憶體儲存中的記憶
  • onboarding: 執行入門引導
  • prepare_for_new_conversation: 為新對話做準備
  • read_file: 讀取專案目錄中的檔案
  • read_memory: 讀取指定名稱的記憶
  • replace_lines: 用新內容替換檔案中的行範圍
  • replace_symbol_body: 替換符號的完整定義
  • restart_language_server: 重啟語言伺服器
  • search_for_pattern: 在專案中搜索模式
  • summarize_changes: 提供程式碼庫更改摘要說明
  • think_about_collected_information: 思考工具,用於考慮收集信息的完整性
  • think_about_task_adherence: 思考工具,用於確定智能體是否仍在當前任務的正確軌道上
  • think_about_whether_you_are_done: 思考工具,用於確定任務是否真正完成
  • write_memory: 將命名記憶寫入記憶體儲存以供將來參考

總結

Serena 是一個功能強大、完全開源的程式設計智能體工具包,通過語義程式碼理解和多種整合方式,為開發者提供了一個免費且強大的 AI 程式設計助手解決方案。無論是通過 MCP 伺服器與 Claude Desktop 整合,還是通過 Agno 框架使用各種 LLM,Serena 都能顯著提升程式設計效率和程式碼質量。