Serena 怎么用 Jinja 模板覆盖 system_prompt 等内置 prompt
Serena 怎么用 Jinja 模板覆盖 system_prompt 等内置 prompt【免费下载链接】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 提供给 LLM 的内置指令比如精简system_prompt、调整工具使用策略时Serena 允许你用 Jinja2 模板完全自定义它的 prompt。本文的目标是在 Serena 用户数据目录中创建 prompt 覆盖文件让 Serena 在会话中改用你的版本并验证覆盖已生效。适用前提是本机已安装 Serena 并能运行serenaCLI。哪些 prompt 可以被覆盖根据 配置文档Serena 提供给 LLM 的所有 prompt 都是 Jinja2 模板具体包括三类Serena 的 system prompt即 Serena Instructions Manual定义在 prompt 模板system_prompt中context 和 mode prompt即 context/mode 定义文件中的prompt字段project prompt即project.yml中的initial_prompt在项目激活时提供给 LLM。模板变量让 prompt 可以适配当前配置。以下变量在上述所有模板中可用变量说明available_tools当前暴露给 LLM 的工具名列表可写条件分支如{% if replace_content in available_tools %}…{% endif %}available_markers已有至少一个工具暴露的工具标记名列表如ToolMarkerSymbolicRead适合按工具组做条件判断tool_names规范工具名到有效工具名的映射包含历史重命名和语言后端替换。文档建议写{{ tool_names[find_symbol] }}而不是硬编码工具名另外context、mode 和 project prompt不包括Serena 的 system prompt还支持embed_memory(name)函数用于把指定 memory 的内容内联进 prompt。修改 system_prompt 时不能依赖这个函数。内置 prompt 的默认定义在仓库的 src/serena/resources/config/prompt_templates/ 目录下system_prompt.yml等覆盖时建议以默认版本为起点修改。第一步查看可覆盖的 prompt# 列出所有 prompt 名称及其当前来源default 或你的覆盖文件 serena prompts listlist会显示两部分各 prompt 名称未覆盖时显示default以及可以被覆盖的 prompt YAML 文件清单。先用它确认你要覆盖的 prompt 名字再进入下一步。第二步创建覆盖文件有两种方式效果相同——都是在 Serena 数据目录的prompt_templates文件夹中放入与默认 prompt 同名的.yml文件。数据目录默认为~/.serena通过环境变量SERENA_HOME修改后会跟随新位置。方式一用 CLI 创建推荐# 复制对应的内置 prompt YAML 到用户 prompt_templates 目录并自动打开编辑器 serena prompts create-override system_prompt # 之后再编辑已有覆盖 serena prompts edit-override system_promptcreate-override的参数是 YAML 文件名可以省略.yml后缀如果对应覆盖文件已存在命令会报错而不覆盖现有文件。方式二手动创建文件在~/.serena/prompt_templates/下创建system_prompt.yml顶层用prompts:键定义同名 prompt。文档给出的最小示例prompts: system_prompt: | Whatever you want ...实际内容建议从默认的 system_prompt.yml 复制后修改。该文件还包含connection_prompt等字段其注释说明部分客户端不允许配置真正的 system prompt此时 Serena 会把system_prompt的内容通过initial_instructions工具作为普通消息下发——覆盖文件按同样的 YAML 结构编写即可。模板写法上默认模板大量使用{% if … in available_tools %}条件块和{{ tool_names[…] }}保留这些结构可以让你的覆盖版在不同工具配置下都正确渲染。验证覆盖已生效# 重新列出被覆盖的 prompt 会显示你的覆盖文件路径而不是 default serena prompts list # 打印未渲染的模板内容且会体现你的 YAML 覆盖即 Serena 实际将使用的模板 serena prompts print-prompt-template system_prompt判断标准prompts list中目标 prompt 一行显示的是覆盖文件路径而非default且print-prompt-template输出的内容与你修改的 YAML 一致。之后在客户端中启动新的 Serena 会话即可使用新 prompt。回退与其他常用命令如果不想继续保留覆盖可以删除覆盖文件Serena 会回落到内置默认 prompt# 删除覆盖文件只删除用户目录下的 override不影响内置模板 serena prompts delete-override system_prompt # 列出当前所有已存在的覆盖文件 serena prompts list-overrides两个限制需要注意embed_memory(name)不能用于 system prompt 模板tool_names映射会随语言后端变化例如启用 JetBrains 后端时find_symbol会被替换所以覆盖模板中引用工具名时优先使用{{ tool_names[…] }}而不是写死名字。【免费下载链接】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),仅供参考