ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

DeepSeek原生AI coding agent实战:从工具调用到多智能体编排

DeepSeek原生AI coding agent实战:从工具调用到多智能体编排 1. 从“能聊”到“能干”DeepSeek 原生 AI coding agent 到底改变了什么第一次看到“DeepSeek 原生 AI coding agent”这个说法我脑子里冒出来的不是某个具体产品而是一个很明确的信号模型厂商开始不满足于只做一个“你问我答”的对话框而是要把模型塞进真实的工程流水线里让它自己读代码、改文件、跑测试、看报错、再改直到任务闭环。这件事的意义比单纯把模型参数做大要实在得多。过去一年大家用 DeepSeek 的方式基本停留在“网页版问问题”或者“API 拼一个聊天机器人”。写代码时你把一段报错贴进去它给你一段修复建议然后你复制粘贴回编辑器再手动跑一遍。这个流程里模型是“顾问”你是“执行者”。而 AI coding agent 要做的是把“执行者”这个角色也接过去——它拿到一个任务描述自己决定读哪些文件、改哪几行、执行什么命令、根据输出判断下一步。你从“操作员”变成了“验收员”。这就是为什么“DeepSeek 原生 AI coding agent”值得单独拿出来聊。它不是又一个套壳聊天工具而是把 DeepSeek 的推理能力、工具调用能力和本地/远程执行环境绑在一起形成一个能自主完成编码任务的智能体。适合谁来参考三类人最该关注一是每天写业务代码、想提效的一线开发者二是正在做 AI 应用、需要把模型接入自己系统的工程师三是想搞清楚 agent 到底怎么落地、不想只停留在概念层面的技术负责人。我下面会从整体设计思路、核心细节、实操过程、常见问题几个角度把这件事拆开讲清楚。里面会涉及deepseek harness、codex 接入 deepseek、vscode 接入 deepseek、ccswitch 配置 deepseek、deepseek api 如何调用、本地部署 deepseek这些热词背后的实际含义也会补充一些我在实际折腾过程中踩过的坑和总结出来的技巧。你不需要先成为 agent 专家只要写过代码、用过命令行就能跟着思路走一遍。2. 整体设计与思路拆解为什么是“原生 agent”而不是“插件”2.1 从聊天机器人到编码智能体的本质跨越很多人第一次接触 AI 编程是从 Copilot 式的代码补全开始的。你敲几个字符它补全一行体验很顺滑但本质上它只解决了“下一行写什么”的问题。它不知道你的项目结构不知道你刚改过的那个函数被谁调用更不会主动去跑测试。DeepSeek 原生 AI coding agent 的思路完全不同它把“任务”作为输入而不是“光标位置”。你告诉它“把用户登录接口的超时时间从 3 秒改成 10 秒并补一个重试逻辑”它会自己去搜索相关文件、定位配置、修改代码、运行测试最后给你一个 diff。这个跨越的关键在于工具调用。模型本身只能输出文本但 agent 框架会给它一组工具读文件、写文件、执行 shell 命令、搜索代码库、调用外部 API。模型在每一步决定调用哪个工具、传什么参数然后根据工具返回的结果决定下一步。DeepSeek 在这方面做得比较到位的地方是它的 API 对 function calling 的支持比较稳定返回的 tool calls 结构清晰不容易出现“模型说了要调用但格式不对”的情况。这也是为什么deepseek messages tool calls need immediate results这类报错会成为热词——说明真的有人在生产环境里跑 agent而且遇到了工具调用结果回传的时序问题。2.2 为什么强调“原生”模型与 harness 的配合逻辑“原生”这个词在这里不是营销话术它指的是模型训练阶段就考虑了 agent 场景。普通模型你也能拿来做 agent但需要写很复杂的 prompt 来约束它的输出格式还要在解析失败时做各种兜底。DeepSeek 原生 agent 相关的模型版本在训练时应该就加入了大量工具调用、多轮规划、错误恢复的样本所以它在面对“先读文件再改代码再跑测试”这种多步任务时指令遵循度更高。这就引出了deepseek harness这个概念。Harness 可以理解成“套在模型外面的执行框架”它负责管理对话历史、维护工具列表、解析模型返回的 tool calls、实际执行工具、把结果再喂回模型。一个好的 harness 要解决几个问题上下文窗口怎么管理代码库很大不能全塞进去、工具执行的安全边界不能让模型随便删库、失败重试策略命令跑挂了怎么办、多轮对话的状态保持。DeepSeek 原生 agent 如果配套了自己的 harness那模型和框架之间的配合就会比“通用模型 通用框架”更顺因为双方在训练和设计阶段就对齐了协议。2.3 方案选型本地部署、API 调用还是 IDE 集成实际落地时你有三条路可以走每条路的取舍不一样。第一条是纯 API 调用。你拿 DeepSeek 的 API key自己写一个 agent loop或者接入现成的 agent 框架。优点是门槛低、不用管显卡、模型版本随时更新。缺点是代码要传到远端对隐私敏感的项目不合适而且按 token 计费跑长任务时成本要心里有数。deepseek api 如何调用这个热词说明很多人卡在第一步其实核心就是拿到 key、选对 endpoint、按 OpenAI 兼容格式发请求。第二条是本地部署。用 vLLM 之类的推理框架把 DeepSeek 的模型权重跑在自己的机器或服务器上。vllm 部署 deepseek、deepseek 本地化部署这些词热度很高说明大家对数据不出内网这件事很在意。本地部署的好处是隐私可控、没有按量计费的心理负担缺点是硬件门槛高而且模型版本更新需要自己重新拉权重、重新配环境。适合有 GPU 资源、对数据安全要求高的团队。第三条是IDE 集成。vscode 接入 deepseek、codex 接入 deepseek、ccswitch 配置 deepseek这些热词指向的是同一个需求我不想离开编辑器能不能在 VS Code 里直接让 DeepSeek 帮我改代码。这条路体验最好但配置也最容易出问题因为 IDE 插件、模型 endpoint、API 格式三者之间经常有版本兼容的坑。我的建议是个人开发者先从 API 调用 命令行 agent 开始跑通一个最小闭环团队有隐私要求再考虑本地部署IDE 集成作为日常提效手段但不要把它当成唯一入口因为复杂任务还是命令行 agent 更灵活。2.4 多智能体编排什么时候需要什么时候是过度设计多智能体 ai agent coding 协助开发规范、deepseek harness 多个智能体 编排这些词说明大家已经开始不满足于单个 agent而是想让多个 agent 分工协作。比如一个 agent 负责读代码理解架构一个负责写实现一个负责写测试一个负责 review。听起来很美但实际落地时多智能体的通信开销和状态同步复杂度会迅速上升。我的经验是任务能拆成清晰独立的子任务时多智能体才有意义。比如“给这个模块补单元测试”和“重构这个模块的接口”可以并行那就分给两个 agent。但如果任务本身是串行的、每一步依赖上一步的输出那单 agent 多轮循环反而更稳因为不需要在 agent 之间传递大量上下文。很多团队一上来就搞多智能体结果发现调试成本比收益还高。先从单 agent 跑通再考虑编排这是更务实的路径。3. 核心细节解析与实操要点工具调用、上下文与安全边界3.1 工具调用的协议细节与常见报错DeepSeek 的 API 在工具调用上遵循的是比较标准的格式你在一开始定义 tools 列表每个 tool 有 name、description、parametersJSON Schema。模型在回复里如果决定调用工具会返回一个 tool_calls 数组里面包含 function name 和 arguments。你的 harness 拿到之后执行对应函数然后把结果以 role 为 tool 的消息追加到对话历史里再发起下一次请求。这里最容易出问题的就是deepseek messages tool calls need immediate results这个报错。它的字面意思是你发了一条包含 tool calls 的 assistant 消息但下一条消息必须是对应的 tool 结果不能插入其他内容。很多新手在拿到 tool calls 后先做了一堆日志打印、或者插了一条 system 消息再发 tool 结果就会触发这个错误。正确的做法是拿到 tool_calls 后立即执行工具把每个 tool_call_id 对应的结果按顺序追加然后再请求模型。中间不要插入任何其他角色的消息。还有一个细节是并行工具调用。模型可能一次返回多个 tool_calls比如同时读三个文件。你的 harness 要能并发执行这些工具然后把结果按 tool_call_id 一一对应地追加。如果顺序错了或者漏了一个模型下一轮就会困惑。我一般会在 harness 里做一个 mapkey 是 tool_call_idvalue 是执行结果追加时按模型返回的顺序遍历。3.2 上下文管理代码库很大时怎么让模型看到关键信息代码库动辄几万行不可能全塞进上下文窗口。DeepSeek 的上下文长度虽然不小但塞满之后推理成本高、速度慢而且模型容易“迷失在中间”。所以 agent 必须有能力按需检索。常见的做法是给 agent 一个search_code工具底层用 ripgrep 或类似工具做关键词搜索返回匹配的文件路径和行号。模型先搜关键词找到相关文件再用read_file读具体内容。这样上下文里只保留真正相关的片段。另一个做法是预先建索引用向量检索找语义相关的代码块但这对个人项目来说有点重关键词搜索在大多数场景下已经够用。我在实操中会额外加一条规则每次读文件时限制行数比如最多读 200 行并且告诉模型“如果需要更多内容可以指定 offset 继续读”。这样避免一次读入一个几千行的文件把上下文撑爆。同时我会在 system prompt 里明确告诉模型当前工作目录、项目类型、主要语言减少它盲目搜索的次数。3.3 安全边界怎么防止 agent 把项目搞崩让模型自主执行 shell 命令这件事本身就带着风险。它可能跑rm -rf可能改错配置文件可能把数据库迁移脚本执行了。所以安全边界必须提前设计好。第一层是命令白名单。不要给 agent 一个任意执行的 shell而是只暴露有限的几个工具run_tests、run_linter、run_build。这些工具内部封装好具体命令模型只能选择跑哪个不能自己拼命令。如果确实需要更灵活的执行能力至少要做命令前缀校验禁止rm、curl、wget这类危险命令。第二层是文件写入限制。agent 只能改工作目录下的文件不能碰系统目录。每次写文件前harness 要检查路径是否在允许范围内。另外建议开启 git让 agent 的每次修改都留下痕迹出问题可以git diff看它改了什么必要时git checkout回滚。第三层是人工确认。对于高风险操作比如删除文件、修改依赖版本、执行数据库命令harness 可以暂停下来让用户确认后再继续。这在早期调试阶段特别有用等你对 agent 的行为有信任感了再逐步放开。提示我见过有人为了让 agent “更自由”直接给它一个无限制的 shell 工具结果模型在调试时跑了一个递归删除把整个项目目录清空了。git 也没救回来因为没提交。所以安全边界不是可选项是必选项。3.4 模型选择与参数调优temperature、max tokens 怎么设做 agent 时模型的参数设置和做聊天时不一样。聊天可以 temperature 高一点让回答更有创意。但 agent 需要稳定、可预测的行为所以 temperature 建议设低0.1 到 0.3 之间比较合适。太高了模型会随机发挥可能跳过关键步骤或者生成格式不对的 tool calls。max tokens 也要注意。如果设得太小模型可能在规划到一半就被截断导致 tool calls 不完整。如果设得太大又浪费。我的经验是对于编码 agent单次回复的 max tokens 设在 2048 到 4096 之间比较合理足够它输出一段规划加几个 tool calls。如果任务特别复杂可以让它分多轮完成而不是一次输出巨长的内容。还有一个参数是 top_p一般保持默认或者设 0.95 就行。关键是 temperature 要低保证工具调用的格式稳定。另外如果 DeepSeek 的 API 支持 seed 参数固定 seed 可以让同样的输入产生更一致的行为方便调试。4. 实操过程与核心环节实现从零搭一个最小可用 agent4.1 环境准备与 API 接入先假设你走的是 API 调用路线。第一步是拿到 DeepSeek 的 API key这个在官网控制台可以生成。然后确认你要用的模型名称不同版本的模型在工具调用能力上可能有差异选支持 function calling 的那个。接下来是装依赖。如果你用 Python核心就是openai这个库因为 DeepSeek 的 API 是 OpenAI 兼容的。你只需要把 base_url 改成 DeepSeek 的 endpointapi_key 换成自己的其余调用方式和 OpenAI 一样。这也是为什么codex 接入 deepseek能成立——很多工具本身就是按 OpenAI 格式写的换个 base_url 就能接上。from openai import OpenAI client OpenAI( api_key你的_deepseek_api_key, base_urlhttps://api.deepseek.com/v1 ) response client.chat.completions.create( modeldeepseek-chat, messages[{role: user, content: 你好}] ) print(response.choices[0].message.content)这段代码跑通说明你的 API 接入没问题。如果报 401检查 key如果报 404检查 base_url 和 model 名称如果超时检查网络。这三类错误覆盖了 90% 的接入问题。4.2 定义工具集读、写、搜、跑Agent 的能力边界由工具集决定。一个最小可用的编码 agent 至少需要四个工具读文件、写文件、搜索代码、执行命令。下面是我常用的工具定义用 JSON Schema 描述。tools [ { type: function, function: { name: read_file, description: 读取指定文件的内容可指定起始行和行数, parameters: { type: object, properties: { path: {type: string, description: 文件路径}, offset: {type: integer, description: 起始行从0开始}, limit: {type: integer, description: 读取行数默认200} }, required: [path] } } }, { type: function, function: { name: write_file, description: 写入内容到指定文件会覆盖原内容, parameters: { type: object, properties: { path: {type: string}, content: {type: string} }, required: [path, content] } } }, { type: function, function: { name: search_code, description: 在项目目录中搜索关键词返回匹配的文件和行号, parameters: { type: object, properties: { keyword: {type: string}, file_pattern: {type: string, description: 如 *.py} }, required: [keyword] } } }, { type: function, function: { name: run_command, description: 执行允许的命令如测试、构建、lint, parameters: { type: object, properties: { command: {type: string, enum: [pytest, npm test, cargo build, eslint]} }, required: [command] } } } ]注意run_command的 command 用了 enum这就是白名单机制。模型只能从这几个命令里选不能自己拼。如果你需要更灵活可以改成字符串但在执行前做正则校验禁止危险模式。4.3 实现 agent 主循环Agent 的核心就是一个 while 循环发请求、拿回复、如果有 tool calls 就执行、把结果追加、继续循环直到模型不再调用工具或者达到最大轮数。import json def execute_tool(name, args): if name read_file: with open(args[path], r) as f: lines f.readlines() offset args.get(offset, 0) limit args.get(limit, 200) return .join(lines[offset:offsetlimit]) elif name write_file: with open(args[path], w) as f: f.write(args[content]) return 写入成功 elif name search_code: import subprocess result subprocess.run( [rg, args[keyword], --json], capture_outputTrue, textTrue ) return result.stdout[:3000] elif name run_command: import subprocess result subprocess.run( args[command].split(), capture_outputTrue, textTrue, timeout120 ) return fstdout:\n{result.stdout}\nstderr:\n{result.stderr} return 未知工具 def run_agent(task, max_turns20): messages [ {role: system, content: 你是一个编码助手使用工具完成任务。每次只做必要的最小修改。}, {role: user, content: task} ] for turn in range(max_turns): response client.chat.completions.create( modeldeepseek-chat, messagesmessages, toolstools, temperature0.2 ) msg response.choices[0].message messages.append(msg) if not msg.tool_calls: return msg.content for tool_call in msg.tool_calls: name tool_call.function.name args json.loads(tool_call.function.arguments) result execute_tool(name, args) messages.append({ role: tool, tool_call_id: tool_call.id, content: result }) return 达到最大轮数任务未完成这段代码就是一个最小可用的 agent。你可以把 task 换成“给 utils.py 里的 parse_date 函数补一个单元测试”然后看它自己搜索文件、读代码、写测试、跑 pytest。第一次跑通的时候那种“它真的自己干活了”的感觉还是很明显的。4.4 接入 VS Code 与命令行工作流如果你不想自己写 harness可以用现成的工具。vscode 接入 deepseek通常是通过 Continue、Cline 这类插件在设置里把模型 provider 改成 OpenAI 兼容填上 DeepSeek 的 base_url 和 key。ccswitch 配置 deepseek则是另一类工具用来在多个模型配置之间切换适合同时用多个模型的场景。命令行方面deepseek harness如果指的是官方或社区提供的 harness安装方式一般是 npm 或 pip 包。deepseek harness 安装这个热词说明有人在装的时候遇到问题常见原因是 Node 版本不对或者网络拉包失败。我的建议是先用官方文档给的版本要求核对环境再装。如果装完跑不起来先跑一个最简单的 hello world确认 harness 本身能启动再接入模型。deepseek harness playwright这个组合值得单独提一句。Playwright 是做浏览器自动化的把它作为工具接给 agent就能让 agent 自己打开网页、点击、填表单、截图。这对做 Web 开发的人很有用——agent 改完前端代码自己起服务、打开页面、验证效果。但这也意味着 agent 能操作浏览器安全边界要再收紧一层比如限制只能访问 localhost。4.5 多智能体编排的实操框架如果你确实需要多智能体一个务实的做法是“主 agent 子 agent”模式。主 agent 负责拆解任务和调度子 agent 负责执行具体子任务。子 agent 可以是同一个模型的不同实例各自有独立的上下文只把结果返回给主 agent。比如一个重构任务主 agent 先读代码拆成“改接口定义”“改调用方”“补测试”三个子任务。然后启动三个子 agent每个拿到自己的子任务和必要的上下文独立完成返回 diff。主 agent 汇总 diff检查冲突最后应用。这样每个子 agent 的上下文都很小推理快而且互不干扰。但要注意子 agent 之间如果有依赖比如“改调用方”依赖“改接口定义”的结果那就不能并行必须串行。所以编排的关键是依赖分析。我一般会让主 agent 先输出一个任务依赖图确认没有循环依赖后再执行。这个依赖图不用画出来用文字描述就行比如“任务 A 完成后才能开始任务 B”。5. 常见问题与排查技巧实录5.1 工具调用相关报错速查报错信息可能原因解决方法messages tool calls need immediate resultstool calls 后插入了非 tool 消息确保 tool 结果紧跟在 assistant 消息后按 tool_call_id 对应tool_call_id not found结果里的 id 和请求里的不一致检查是否用了模型返回的原始 id不要自己生成invalid tool arguments模型返回的 JSON 格式不对降低 temperature在 system prompt 里强调输出合法 JSONmax turns exceeded任务太复杂或模型陷入循环提高 max_turns或在 prompt 里要求先规划再执行context length exceeded上下文塞太满限制读文件行数及时清理历史消息5.2 模型“跑偏”时的纠正技巧Agent 跑偏是常事。它可能反复读同一个文件可能改了一个不该改的地方可能跑测试失败后不分析原因就乱改。我的纠正技巧有几个。第一在 system prompt 里加约束“每次修改前先说明你要改什么、为什么改”“如果测试失败先读报错信息不要直接改代码”。这些约束能显著减少盲目行为。第二设置最大轮数。不要让它无限循环20 轮还没搞定就停下来人工介入看看卡在哪。第三保留完整的消息历史出问题时打印出来看。很多时候你看一眼它读的文件和执行的命令就知道它为什么跑偏了。第四如果它反复犯同一个错可以在下一轮消息里直接给它提示比如“你刚才改的 test_utils.py 里 import 路径错了应该是 from utils import parse_date”。这相当于人工给它一个 nudge比重新跑一遍快。5.3 本地部署的性能与显存问题本地部署 deepseek、vllm 部署 deepseek这条路最大的坑是显存。DeepSeek 的模型有不同规模小到 7B 大到几百 B显存需求差异巨大。7B 的模型用 4-bit 量化后大概需要 6-8GB 显存消费级显卡能跑。但更大的模型就需要多卡或者量化更激进推理速度也会下降。我的建议是如果只是做 agent 实验先用 API别一上来就本地部署。等确认了工作流有价值再考虑本地化。本地部署时vLLM 的--tensor-parallel-size参数要根据显卡数量设--max-model-len要根据显存调整不要盲目设大。另外本地模型的工具调用能力可能不如 API 版本因为量化会损失一些精度需要多测试。5.4 IDE 集成中的版本兼容坑vscode 接入 deepseek最常见的坑是插件版本和 API 格式不匹配。有些插件只支持 OpenAI 的 function calling 格式而 DeepSeek 的返回结构可能有细微差异导致工具调用解析失败。解决办法是看插件的文档确认它支持 OpenAI 兼容接口并且在设置里正确填写 base_url。另一个坑是模型名称。有些插件会校验模型名称是否在它支持的列表里你填deepseek-chat它可能不认。这时候要么改插件配置要么用ccswitch这类工具做一层代理把模型名称映射过去。还有一个坑是流式输出。Agent 场景下流式输出和工具调用可能冲突因为工具调用需要完整的 JSON 才能解析。如果插件开了流式可能拿到一半的 tool calls 就解析失败。建议在 agent 模式下关闭流式等任务完成再一次性输出。5.5 成本控制与 token 优化用 API 跑 agenttoken 消耗比聊天大得多因为每一轮都要把完整历史发过去。一个复杂任务跑 20 轮每轮几千 token成本很快就上去了。优化方法有几个。一是精简 system prompt。不要写太长的角色描述把关键约束说清楚就行。二是及时清理历史。如果前面的工具结果已经不需要了可以用摘要替代或者只保留最近几轮。三是限制读文件大小前面说过每次最多 200 行。四是用便宜的模型做简单任务复杂的规划用强模型简单的执行用弱模型。DeepSeek 有不同价位的模型按需选择。提示我一般会在 harness 里加一个 token 计数器每轮打印累计消耗。跑几次之后你就对成本有感觉了知道什么任务大概花多少钱。5.6 关于“破甲”“无限制词”这类需求的说明热词里出现了deepseek 破甲无限制词、deepseek 破甲这类词。这里需要明确一点任何模型都有使用规范绕过安全限制去生成不当内容既违反服务条款也可能带来法律风险。做 coding agent 时我们关注的是模型在工程任务上的能力而不是去突破它的安全边界。如果你在开发中遇到模型拒绝执行某些正常编码任务正确的做法是优化 prompt把任务描述得更清晰、更具体而不是试图“破甲”。大多数所谓的“拒绝”其实是因为任务描述模糊模型不确定你的意图。6. 从单 agent 到工程化我踩过的坑和总结的经验6.1 先跑通最小闭环再谈优化我见过太多人一上来就搭多智能体、接向量数据库、搞复杂的工作流引擎结果连一个“读文件-改代码-跑测试”的闭环都没跑通。正确的顺序是先用最简单的 harness 跑通单 agent 单任务确认模型能正确调用工具、能根据结果调整行为。然后再逐步加工具、加约束、加编排。每一步都验证过再往下走出问题时才知道是哪一层的问题。6.2 日志和可观测性比想象中重要Agent 的行为是概率性的同样的输入可能走出不同的路径。没有日志你根本不知道它为什么失败。我的做法是每一轮都记录模型返回的原始消息、调用了哪些工具、参数是什么、结果是什么、耗时多少。这些日志在调试时价值极高。你甚至可以把日志喂给另一个模型让它帮你分析 agent 为什么跑偏。6.3 人工介入不是失败是必要环节很多人觉得 agent 就应该全自动人工介入说明 agent 不行。但实际工程中人工确认高风险操作、在 agent 卡住时给一个提示、在任务完成后 review diff这些都是正常流程。Agent 是来提效的不是来取代人的判断的。把人工介入设计成流程的一部分而不是把它当成异常心态会好很多。6.4 关于 deepseek harness 版本回退热词里有deepseek harness 怎么退回到 v0.1.5-rc.2这说明新版本可能引入了不兼容的改动或者 bug。我的经验是在生产环境用 agent 工具时锁定版本不要盲目追新。如果新版本出了问题回退到上一个稳定版本等社区反馈稳定了再升级。回退方法一般是改 package.json 或 requirements.txt 里的版本号重新安装。如果 harness 有配置文件注意配置文件格式可能也有变化回退时一起回退。6.5 后续可以扩展的方向如果你已经把单 agent 跑通了接下来可以尝试几个方向。一是接入更多工具比如数据库查询、API 调用、浏览器操作让 agent 能处理更完整的任务。二是做任务模板把常见的编码任务补测试、重构、修 bug固化成 prompt 模板减少每次描述的成本。三是做评估集收集一批任务和预期结果每次改 harness 或换模型时跑一遍看通过率有没有下降。四是探索多 agent 协作但记住前面的建议任务能拆独立才用多 agent。我个人在实际操作中的体会是DeepSeek 原生 AI coding agent 这条路技术上的门槛没有想象中高真正的难点在于工程细节的把控——工具调用的时序、上下文的裁剪、安全边界的设置、失败后的恢复。这些细节没有捷径只能一个个踩过去。但一旦跑通你会发现它确实能把你从重复性的编码劳动里解放出来让你把精力放在更值得思考的地方。最后再分享一个小技巧每次让 agent 执行任务前先让它输出一个执行计划你确认后再让它动手。这个简单的步骤能避免大量无效操作尤其是面对不熟悉的代码库时效果特别明显。
返回列表