Zed Agent 评测夹具深潜:Zode 提示词如何定义一个非交互式代码 Agent,以及评测管线如何消费它
发布时间:2026/9/7 18:14:53来源:尧图网络
Zed Agent 评测夹具深潜Zode 提示词如何定义一个非交互式代码 Agent以及评测管线如何消费它【免费下载链接】zedCode at the speed of thought – Zed is a high-performance, multiplayer code editor from the creators of Atom and Tree-sitter.项目地址: https://gitcode.com/GitHub_Trending/ze/zed这篇文章以 Zed 仓库中的评测夹具文件 prompt.md 为主体拆解它如何把从零构建一个名为 Zode 的 CLI 代码 Agent的任务、Anthropic/MCP 两套 SDK 的完整文档与 MCP 工具的 JSON Schema 一次性打包进一段提示词并结合 edit_file.rs 中的eval_zode测试说明 Zed 如何把这份提示词变成可重复运行、可量化打分的评测样本。读完后你将掌握非交互式 Agent 的提示词工程范式文档内联、工具 Schema 随附、该夹具配套的被试任务React 练习题以及 Zedunit-eval评测框架的样本构造与断言机制。一、这份文档是什么Zed Agent 工具评测的提示词夹具prompt.md位于crates/agent/src/tools/evals/fixtures/zode/目录下与两个 Python 文件配套存放react.py被测 Agent 需要实现的 Exercism react 练习题的骨架文件react_test.py该练习题的完整单元测试套件273 行、十余个用例。它不是给人读的教程而是被 edit_file.rs 通过include_str!宏在编译期嵌入 Rust 二进制的评测素材message(User, [text(include_str!(fixtures/zode/prompt.md))]),也就是说整份提示词包括内嵌的 SDK README 与 JSON Schema全文约 2200 行会在评测运行时作为一条User消息原样发给语言模型。二、Zode 任务定义提示词正文的前 13 条硬性要求prompt.md的开头是一段任务说明书它给出了构建 Zode 的全部约束。逐条继承原文的 13 个要点如下目标构建一个类似 Aider 或 Claude Code 的 CLI 代码 Agent 工具名叫Zode起点是一个完全空白的项目与 Aider/Claude Code 相同的循环模式接收用户初始提示后反复调用 LLM → 执行工具调用直到达成最终目标关键差异Zode 不要求交互式。初始提示传入之后用户不会再输入任何内容系统必须仅靠工具调用 LLM 调用达成目标用Python实现使用anthropic python sdk和model context protocolMCPsdk用虚拟环境 pip 安装依赖工具调用遵循 Anthropic 官方 tool use 指引指定模型claude-3-7-sonnet-20250219并给出一把 API Key注意夹具中出现的sk-ant-api03-...是占位演示值不是可用凭据工具全部来自Claude MCP 服务器先用claude mcp serve启动该服务器Zode 自己实现 MCP客户端通过 MCP 协议连接它很可能需要用子进程启动该服务器。经由这个 MCP 服务器可获得的工具为Bash、GlobTool、GrepTool、LS、View、Edit、Replace、WebFetchToolCLI 调用形态必须是python zode.py file.md其中file.md是包含用户提示的任意文件之后再无任何用户输入Zode 必须自己接管并循环调用 LLM 与工具直到目标完成尽量把所有代码集中在单个zode.py文件里并充分利用上面提到的求助渠道即随附的文档实现完成后必须运行python zode.py eval/instructions.md用内置的评测指令检验新 Agent 的表现随附资料包括Anthropic Python SDK 的完整 README、MCP Python SDK 的完整 README含一个完整的 MCP 客户端示例以及 Claude Code 工具的 JSON Schema见后文。这套要求本身就是一个提示词工程样本把技术栈、模型版本、凭据来源、工具清单、入口命令、验收方式全部压缩在前 13 行且每一条都是可被 Agent 执行的指令而非背景描述。三、为什么把两份 SDK README 全文内联进提示词prompt.md从第 15 行起是Anthropic Python SDK 的完整 README约 745 行随后是MCP Python SDK 的完整 README约 660 行最后附上MCP 客户端示例与工具 JSON Schema。对交互式产品来说这些内容本可以需要时再联网查文档但 Zode 的约束 4 决定了它不能中途提问、也不假设它拥有联网查文档之外的知识——所以评测者把实现所需的全部文档一次性注入上下文。这正是非交互式 Agent 提示词设计的典型做法上下文自包含self-contained prompt。3.1 Anthropic SDKZode 真正会用到的部分内联 README 中对 Zode 主循环最关键的能力是消息创建与工具调用入口同步客户端import os from anthropic import Anthropic client Anthropic( api_keyos.environ.get(ANTHROPIC_API_KEY), # 默认值可省略 ) message client.messages.create( max_tokens1024, messages[{role: user, content: Hello, Claude}], modelclaude-3-5-sonnet-latest, ) print(message.content)异步版本只需from anthropic import AsyncAnthropic并在每次 API 调用上加await流式版本传streamTrue或推荐用client.messages.stream(...)上下文管理器配合stream.text_stream增量打印长请求大max_tokens尤其应使用流式。README 还覆盖了对 Agent 框架重要的几组参数与约定主题关键事实均出自内联 README安装pip install anthropic要求 Python 3.8Token 统计client.beta.messages.count_tokens(...)可在不发消息的前提下估算输入 token响应对象的usage属性给出实际用量重试连接错误、408、409、429、500 默认自动重试 2 次指数退避可用max_retries在客户端或client.with_options(max_retries5)按请求覆盖超时默认 10 分钟可传浮点数或httpx.Timeout精细配置 connect/read/write错误体系全部异常继承自anthropic.APIError400/401/403/404/422/429/500 分别映射到BadRequestError/AuthenticationError/PermissionDeniedError/NotFoundError/UnprocessableEntityError/RateLimitError/InternalServerError网络不通抛APIConnectionError分页list 接口返回自动翻页迭代器也提供.has_next_page()/.get_next_page()原始响应client.messages.with_raw_response.create(...)可拿 HTTP 头.with_streaming_response支持流式读取响应体部署形态另有AnthropicBedrockpip install anthropic[bedrock]与AnthropicVertex客户端API 与基础类一致版本头默认发送anthropic-version: 2023-06-01请求头其中工具调用支持一节Tool use / function calling是 Zode 主循环的接口基础模型返回的tool_use内容块需要由客户端执行后再以tool_result追加回消息列表循环直到end_turn——虽然 README 本身指向外部文档但 Zode 的提示词明确要求遵循官方 tool use 指引来搭建这个循环。3.2 MCP SDKZode 连接 Claude MCP 服务器所依赖的 APIMCP Python SDK README 的核心内容是三种原语与一套客户端 APIResources类似 GET 端点用于把数据加载进 LLM 上下文Tools类似 POST 端点供模型执行、产生副作用Prompts用户触发user-controlled的可复用交互模板。三者控制权归属README 原表原语控制方用途Prompts用户交互模板如斜杠命令、菜单项Resources应用客户端管理的数据上下文如文件内容、API 响应Tools模型暴露给 LLM 执行的动作如 API 调用、数据更新安装方式为pip install mcp[cli]或 uv 项目里uv add mcp[cli]。Zode 作为MCP 客户端README Writing MCP Clients 一节给出的最小骨架就是它要照抄的模式from mcp import ClientSession, StdioServerParameters from mcp.client.stdio import stdio_client server_params StdioServerParameters( commandpython, # 可执行程序对应提示词要求的 subprocess 启动方式 args[example_server.py], # 命令行参数 envNone, # 可选环境变量 ) async def run(): async with stdio_client(server_params) as (read, write): async with ClientSession(read, write) as session: await session.initialize() tools await session.list_tools() # 发现工具 result await session.call_tool(tool-name, arguments{arg1: value})提示词要求 Zode 用子进程启动claude mcp serve再作为客户端通过 stdio 传输连接——与StdioServerParametersstdio_client的用法完全对应command填claude、args填[mcp, serve]即可。README 中另附的完整客户端示例Configuration/Server/Tool/LLMClient/ChatSession五个类则展示了工程化的连接管理AsyncExitStack管理生命周期、list_tools结果包装成Tool对象并format_for_llm()渲染成系统消息、execute_tool带重试与模型输出 JSON 工具调用 → 客户端执行 → 结果回灌的编排流程这正是 Zode 主循环的参考实现。四、随附的 MCP 工具 JSON SchemaZode 可用的能力边界prompt.md末尾内联了一段 JSON-RPC 响应jsonrpc: 2.0, id: 1的result.tools数组列出 Claude MCP 服务器暴露的全部工具及其inputSchema均为 draft-07 JSON Schema、additionalProperties: false。Zode 的 LLM 只能调用这些工具Schema 即其能力边界工具必填参数说明dispatch_agentprompt派生子 Agent 执行新任务Bashcommand执行 shell 命令可选timeout毫秒上限 600000、description5-10 词说明BatchTooldescription、invocations批量并行/串行执行多个工具调用降低上下文占用与延迟GlobToolpattern按 glob 模式匹配文件名结果按修改时间排序GrepToolpattern按正则搜索文件内容可选path、include如*.{ts,tsx}LSpath列出目录内容path必须为绝对路径可选ignoreglob 列表Viewfile_path读文件可选offset、limit分段读取大文件Editfile_path、old_string、new_string局部替换可选expected_replacements默认 1匹配数不符则失败Replacefile_path、content整体写入/覆盖文件ReadNotebooknotebook_path读取 Jupyter notebook 全部代码单元格NotebookEditCellnotebook_path、cell_number、new_source编辑指定单元格可选cell_type、edit_modereplace/insert/deleteWebFetchToolurl、prompt抓取 URL 并用小模型按 prompt 摘要内容只读、带 15 分钟缓存Schema 中还包含大量用法说明usage notes例如Bash的描述明确要求避免find/grep/cat而改用GrepTool/GlobTool/View、命令用;或连接且避免cdEdit强调old_string需包含前后 3-5 行上下文以保证唯一性。这些描述本身就是工具级提示词Zode 不需要为工具行为再写额外说明——工具语义已经由 MCP 服务器下发。五、被测任务React 练习题骨架与完整测试Zode 提示词第 13 条要求实现完成后跑python zode.py eval/instructions.md自检而在 Zed 仓库的评测语境下配套夹具给出了 Zode 实际要解决的编程任务——Exercism 的 react 练习react.py 只有 14 行骨架class InputCell: def __init__(self, initial_value): self.value None class ComputeCell: def __init__(self, inputs, compute_function): self.value None def add_callback(self, callback): pass def remove_callback(self, callback): pass而 react_test.py 是 273 行的完整验收测试自述由 Exercismreact练习的 canonical-data 自动生成覆盖输入单元格可赋值计算单元格初始求值、依赖顺序依赖变更时自动重算计算单元格可依赖其他计算单元格链式依赖回调只在值真正变化时触发、不重复上报、可增删、多依赖变更时只触发一次。实现这些行为需要在ComputeCell中维护依赖关系与回调传播逻辑是一道典型的从测试出发实现的任务非常适合检验 Agent 的读测试 → 实现 → 运行验证闭环能力。六、评测管线eval_zode如何消费这份提示词回到 edit_file.rs 的eval_zode可以完整还原这份夹具被使用的机制。1. 测试门控。该测试标注了#[test] #[cfg_attr(not(feature unit-eval), ignore)] fn eval_zode() { ... }即只有显式开启unit-evalfeature 才会执行普通cargo test下被忽略——因为每次运行都要真实调用语言模型。2. 会话构造。评测输入由三条消息组成User整份prompt.md的文本经include_str!嵌入Assistant两个ReadFileTool的tool_use块分别读取root/eval/react.py与root/eval/react_test.pyUser对应的两个tool_result内容即夹具中两个 Python 文件的全文。待写文件路径为root/zode.pyinput_content为None——即一个待创建的新文件。整个会话模拟的正是 Zode 场景提示词给足上下文、Agent 已读取了要解决的任务文件现在轮到模型输出zode.py的完整代码对应 EditFileTool 的写入调用。3. 断言逻辑。与同文件中其他 eval 使用EvalAssertion::judge_diff用裁判模型评判 diff 语义不同eval_zode用的是EvalAssertion::new直接断言生成文本的格式let invalid_starts [ , , \n]; for start in invalid_starts { if sample.text_after.starts_with(start) { message.push_str(format!(The sample starts with a {:?}\n, start)); break; } }即写出的zode.py内容不得以空格、反引号或换行开头——反过来说模型必须直接输出裸 Python 源码而不是用 Markdown 代码围栏 包裹或带前导空白的讲解式回答。断言通过得 100 分并清空消息否则 0 分。4. 迭代与通过标准。外层由 eval_utils.rs 的eval驱动eval_utils::eval(50, 1., eval_utils::NoProcessor, move || { ... })eval的签名是eval(iterations, expected_pass_ratio, processor, evalf)eval_zode取 50 次迭代、期望通过率1.100%每轮把上述会话重新送一次模型、执行同一断言统计Passed/Failed/Error并实时打印Evaluated x/50 (yy.yy% passed)进度。100% 的期望通过率说明该用例被当作格式稳定性探针——衡量模型在给定完整上下文时连续多次输出裸代码文件而非 Markdown 包裹的可靠性。七、从这份夹具能提炼的设计要点非交互式 Agent 的上下文自包含原则既然用户不再介入提示词就必须内联实现所需的一切——SDK README、可运行的客户端范例、工具 Schema、验收命令一个不落。Zode 提示词是全量文档注入而非链接指路的直接证据。工具即接口Zode 自身不实现文件读写而是把 Claude MCP 服务器claude mcp serve子进程 stdio 客户端当作唯一工具来源工具的行为约束唯一性要求、禁用命令、路径必须绝对全部写在inputSchema.description里由协议下发Agent 侧零硬编码。夹具即评测素材fixtures/zode/三件套提示词、任务骨架、验收测试展示了 Zed 的 Agent 工具评测方法——用include_str!把真实提示词编译进测试用受控会话User/Assistant/tool_result 交替复现 Agent 某一轮决策现场再用廉价且确定性的断言格式检查或judge_diff裁判模型语义检查给出可重复的分数。复现方式在 Zed 仓库中eval_zode属于agentcrate 的tools/evals模块需要以unit-evalfeature 运行例如cargo test -p agent --features unit-eval一类的 cargo 测试命令并配置模型凭据且依赖真实的语言模型调用因此仅在具备模型访问权限的开发环境中可执行仓库本身是只读的这里仅说明查看与运行方式不做任何修改。参考资料均在本仓库内夹具提示词prompt.md评测目标代码骨架与测试react.py、react_test.py评测用例eval_zodeedit_file.rs评测框架evaleval_utils.rs【免费下载链接】zedCode at the speed of thought – Zed is a high-performance, multiplayer code editor from the creators of Atom and Tree-sitter.项目地址: https://gitcode.com/GitHub_Trending/ze/zed创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网