
Serena 如何用 query_project 工具查询外部项目的符号信息【免费下载链接】serenaA powerful MCP toolkit for coding, providing semantic retrieval and editing capabilities - the IDE for your agent项目地址: https://gitcode.com/GitHub_Trending/ser/serena在开发中经常遇到这种情况你正在 Serena 中处理项目 A却需要查看项目 B比如一个被依赖的库的符号信息——某个类定义在哪里、哪些引用指向它。直接激活项目 B 会打断当前会话的工作项目。Serena 的query_project工具就是为解决这个问题设计的它让 agent 在不激活目标项目的前提下查询另一个 Serena 项目中注册项目的文件与符号信息见 Project Workflow 的 “Reading from External Projects” 一节。本文的目标路径是把外部项目注册为 Serena 项目 → 激活query-projects模式 → 按语言后端满足资源条件IDE 打开或启动 Project Server→ 让 agent 用query_project发起只读符号查询。准备条件外部项目必须已被 Serena 认识query_project只能查询“known to Serena”的项目即已经按 Serena 的项目工作流创建过的项目。对每个想被查询的外部项目先在其目录内执行显式项目创建serena project create [options] [project directory]不指定目录时默认为当前目录对已有代码的项目Serena 会基于源码文件检测编程语言并自动激活主语言检测到多种语言时会提示你选择是否启用空项目可以用--language python --language typescript这类参数显式指定语言可以用--name my-name指定项目在 Serena 中的引用名用--index在创建后立即索引。创建后建议对较大的项目执行一次索引预缓存语言服务器提供的符号信息避免首次符号查询时的延迟serena project index索引只需执行一次常规使用中文件变化时 Serena 会自动更新索引。项目创建后project_name、language_servers、added_modes等设置位于项目目录下的.serena/project.yml可参考模板 project.template.yml 中的完整参数说明。启用 query-projects 模式query_project属于可选工具默认不激活。启用方式是激活名为query-projects的模式。该模式的定义文件为 query-projects.yml它会引入两个工具query_project在目标项目上下文中执行只读工具list_queryable_projects列出当前可以查询的项目名称与根路径。模式可以在三个层面配置最终激活的模式是三者取并集base_modesdefault_modesadded_modes详见 Configuration 文档全局配置serena_config.ymlbase_modes中的模式始终生效default_modes可被项目或命令行覆盖项目配置project.yml设置added_modes为当前项目追加模式。模板文件注释里给出的示例正是本场景# list of mode names to be activated additionally for this project, e.g. [query-projects] added_modes: [query-projects]注意added_modes是“追加”而default_modes是“覆盖全局默认模式”。只想在特定项目开启查询能力时用added_modes即可不影响其他模式。启动时命令行参数传给start-mcp-server的参数可以覆盖默认模式--mode或在上面追加模式--add-mode。例如启动时为本次会话追加--add-mode query-projects配置变更后重启对应会话工具才会出现在 agent 可用工具集中。按语言后端满足查询条件启用模式后query_project对资源的管理取决于当前语言后端两种后端的要求不同JetBrains 后端确保每个希望被符号查询的项目都在一个 IDE 实例中打开。查询能力复用 IDE 中已有的项目实例Serena 本身不会替你启动它们。LSP 后端通过query_project执行符号工具要求 Serena 的Project Server处于运行状态。它会自动为被查项目拉起所需的语言服务器。启动命令见 070_security.md 也说明该服务只会在项目查询场景下显式启动serena start-project-server该命令启动一个监听127.0.0.1的 HTTP 服务默认地址可用--host/--port覆盖见 cli.py 中start-project-server子命令的选项。由于符号查询依赖它保持该服务与查询会话同时运行。发起查询并核对结果条件就绪后在对话中让 agent 对外部项目发起查询即可。核对顺序先确认目标项目在可查询列表里让 agent 调用list_queryable_projects。它返回项目名到根路径的映射目标项目出现在结果中说明注册以及后端侧的条件已满足。在 JetBrains 后端下只有当前有打开 IDE 实例的项目才会被列出为可符号访问LSP 后端下所有已注册项目都通过 Project Server 可查询见 query_project_tools.py。再执行符号查询让 agent 用query_project在目标项目中执行只读符号工具例如查询某符号的定义、引用或项目符号概览。query_project只允许执行只读工具——非只读工具会在断言处被拒绝无法用于修改外部项目。一次成功的查询返回的是对应只读工具在目标项目上下文中执行的结果符号名、文件位置、代码片段等与在当前项目中直接调用该工具的输出形态一致。若list_queryable_projects中看不到目标项目回到前两步核对项目是否已执行serena project create以及 JetBrains 后端下 IDE 是否打开了该项目。限制与边界query_project是纯只读通道它不激活项目也不能执行编辑类工具。要对外部项目做修改仍需在该项目中正常激活它并工作。LSP 后端下Project Server 是符号查询的前提未启动时符号查询无法完成。该工具在单项目类上下文中默认不出现可选工具必须显式通过上述任一模式配置启用。全局配置、project.yml与命令行参数对模式的覆盖关系见 Configuration 文档的 Modes 一节完整的工作流背景项目创建、索引、激活见 Project Workflow。【免费下载链接】serenaA powerful MCP toolkit for coding, providing semantic retrieval and editing capabilities - the IDE for your agent项目地址: https://gitcode.com/GitHub_Trending/ser/serena创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考