手把手复刻 Claude Code!用 CrewAI 从零搭建工业级代码智能体 Harness!

📅 2026/7/24 13:48:18
手把手复刻 Claude Code!用 CrewAI 从零搭建工业级代码智能体 Harness!
但凡你自己动手搭建过编码智能体大概率都会遇到这类问题把大模型对接文件读写工具与终端命令工具挂载到真实代码仓库后往往执行十几轮工具调用就彻底崩盘。要么读错目标文件要么执行中途遗忘核心需求大量无效返回内容塞满上下文窗口彻底偏离任务目标。但同样的需求交给 Claude Code就能流畅闭环完成。很多人会简单归结为Anthropic 自家模型性能更强可这个结论完全忽略了真正起决定性作用的底层工程设计。真正拉开差距的核心是harness运行框架。运行框架就是包裹在大模型外层的工程代码全权负责任务规划、工具调度执行、上下文记忆、安全管控大模型只需要专注决策下一步该执行什么动作。如果把整套成型的智能体运行框架画成架构图结构看着繁杂但可以划分为四大核心模块•Memory记忆模块向大模型推送当前任务上下文同时载入跨会话沉淀的知识库信息•Skills能力模块定义智能体的运行规范包含执行流程、约束条件、决策启发规则•Protocols通信协议层打通智能体与用户、工具、其他智能体之间的交互链路•框架核心层统筹调度子智能体、运行沙箱、结果校验、人工审批流程、可观测日志、上下文压缩Anthropic 把这套架构通俗划分为「大脑」与「手脚」大模型是负责判断动作的大脑运行框架是落地执行、锚定任务进度的手脚。所以你自研智能体和 Claude Code 之间的能力鸿沟根源不在于模型本身而在于模型外围整套工程化调度体系。Claude Code 是目前生产环境中成熟度顶尖的运行框架之一但其底层架构拆解后核心层级远比想象中精简。为了直观厘清整套框架需要自研哪些模块我基于开源多智能体编排框架 CrewAI 复刻了这套体系。最终发现框架原生能力可以覆盖大部分基础能力剩下无法直接开箱即用的部分才是真正需要手动攻坚的工程难点。接下来我们逐层搭建整套框架先实现核心执行循环再依次叠加任务规划、子智能体委派、沙箱环境、持久化记忆。每一步都会清晰区分「框架原生自带能力」和「需要自行开发定制」的边界。Claude Code 运行框架底层原理Claude Code 的最核心基础就是一套标准智能体循环向模型传入对话消息模型输出下一步动作要么直接回复文本结果要么发起工具调用请求。一旦触发工具调用框架执行对应工具并把执行结果回填对话上下文再交由模型进行下一轮决策。不断循环直到模型不再发起任何工具调用、直接输出最终答复本轮任务宣告结束。在这套循环里读取文件、修改代码、执行终端命令、运行单元测试并非拆分出多个独立运行模式全部都是同一套循环内不同类型的工具调用。但仅靠基础循环编码智能体稳定性完全无法支撑真实项目开发。因此 Claude Code 在循环外层叠加了任务规划、文件操作工具集、子智能体委派、记忆系统、权限审批与沙箱隔离体系。这些模块不会替换原有主循环而是让整套流程具备安全性与稳定性适配工程级实际开发场景。下面就按照这套架构分步复刻从最基础的主循环开始逐层对接 CrewAI 对应原生功能。核心智能体执行循环循环会固定重复以下流程直至任务完结传入任务指令交由大模型处理模型直接输出文本回答或是发起一项/多项工具调用若存在工具调用框架批量执行工具并将返回结果回传给模型对话上下文携带更新后的对话记录进入下一轮循环当模型回复内容不含任何工具调用时任务终止并返回最终结果伪代码实现while True: reply model(messages, tools) # 筛选出所有工具调用指令 calls [b for b in reply if b.type tool_use] if not calls: # 无工具调用直接返回最终结果任务结束 return reply.text # 追加模型回复内容 所有工具执行结果进入下一轮循环 messages [reply, run_all(calls)]单次简单查询可能一轮循环就能结束但修复复杂漏洞、大规模代码重构这类场景往往需要数十轮迭代模型获取足够信息后才会输出最终结论。而 CrewAI 只要创建智能体并绑定任务就会自动内置这套执行循环无需手动编写 while 循环逻辑仅需定义智能体与对应任务即可。搭建第一个基础智能体创建一个简单的漏洞修复智能体from crewai import LLM, Agent, Crew, Task# 定义漏洞修复智能体bug_fixer Agent( role漏洞修复专员, goal在代码仓库中定位已知漏洞并给出对应的修复方案, backstory会遍历目录与读取源码文件精准梳理项目代码结构, llmclaude-sonnet-4-6,)# 定义具体任务task Task( description完成 {objective} 描述的漏洞修复工作, expected_output简要说明修复方案以及需要修改的目标文件,)# 启动编排流程并传入入参result Crew(agents[bug_fixer], tasks[task]).kickoff( inputs{objective: 修复 account.py 中的透支漏洞})三个核心基础概念•Agent智能体定义执行主体包含角色定位、目标、大模型绑定、可用工具集合•Task任务明确需要完成的具体工作与交付标准•Crew编排集群聚合智能体与任务调用kickoff()即可自动运行前文所述的整套执行循环底层可无缝兼容 Anthropic、OpenAI、谷歌等任意大模型为智能体挂载工具集大模型本身仅能生成文本想要操作代码仓库必须依托工具实现文件读取、写入、终端执行、三方接口调用。CrewAI 自带开箱即用的文件系统工具• FileReadTool读取指定文件内容• DirectoryReadTool遍历列出文件夹目录结构• FileWriterTool新建/覆盖写入文件from crewai_tools import DirectoryReadTool, FileReadTool, FileWriterToolread_file FileReadTool()write_file FileWriterTool()list_dir DirectoryReadTool()filesystem_tools [read_file, write_file, list_dir]这类工具同时可以充当外置记忆不需要把海量检索内容全部塞进模型上下文窗口智能体可将长文本结果写入临时文件上下文仅留存文件路径后续需要时再按需读取。以此精简上下文负载让模型注意力聚焦核心任务这也是 Anthropic 提出的上下文工程核心思路。内置工具仅覆盖通用常用场景定制化工具可以通过tool装饰器封装 Python 函数实现。函数文档字符串就是工具使用说明告知模型该工具用途、适用场景与入参规范。示例封装 pytest 测试执行工具from crewai.tools import toolimport subprocesstool(run_tests)def run_tests(path: str tests/) - str: 在指定路径执行 pytest 测试用例并返回执行结果 result subprocess.run( [pytest, path, -q], capture_outputTrue, textTrue, timeout120 ) output result.stdout result.stderr # 限制返回文本长度避免上下文溢出 return output[-4000:] if len(output) 4000 else output长周期任务的任务规划机制任务复杂度提升后纯基础循环很容易出现上下文衰减经过多轮文件读取、工具调用、中间结果回填后上下文信息冗余杂乱原始任务目标被大量无关信息淹没智能体逐渐偏离需求。任务规划就是用来解决该问题智能体在正式动手执行前先输出分步执行计划并且全程将计划保留在上下文内。计划不会直接执行操作而是作为路线图锚定核心目标对应 Claude Code 里待办清单的作用。CrewAI 在集群层面开启规划功能即可生效会在流程启动前生成整体执行方案from crewai import Crew, LLMcrew Crew( agentsself.agents, tasksself.tasks, planningTrue, # 可自定义负责生成规划的大模型 planning_llmLLM(modelgpt-4o-mini),)默认使用 gpt-4o-mini 生成规划支持替换为任意大模型。单个智能体还能开启自主推理在行动前自行梳理思路from crewai import Agentbug_fixer Agent( role漏洞修复专员, goal在代码仓库中定位已知漏洞并给出对应的修复方案, backstory会遍历目录与读取源码文件精准梳理项目代码结构, tools[FileReadTool()], reasoningTrue, max_reasoning_attempts3 # 可选限定最多迭代思考次数)规划与自主推理分工不同• 全局规划针对整项大任务搭建顶层步骤框架• 单体推理单个智能体在执行单步操作前先斟酌自身执行思路两者搭配使用能有效防止长流程任务跑偏。通过子智能体委派拆解任务规划能锁定任务方向但无法减少单轮上下文承载的信息体量。面对大型代码仓库即便有清晰规划单次任务需要读取数十个文件全部塞进主智能体上下文依然会超限。子智能体委派可以拆分工作量主智能体下发细分子任务给专项辅助智能体子智能体拥有独立上下文完成工作后仅向主智能体返回精简结论中间执行过程不会污染顶层上下文。CrewAI 依托分层执行流程实现该能力设置一名主管智能体向多个垂直领域专业智能体分发任务并汇总所有结果。原先单一个漏洞修复智能体包揽所有工作现在拆分为四类角色代码仓库勘探员遍历仓库结构筛选和需求相关的目标文件软件开发工程师落地代码修改与功能实现测试执行员在沙箱环境运行测试反馈用例通过/失败结果技术主管统筹拆解任务、分配工作、审核结果全部修改验收完成后结束流程from crewai import Crew, Agent, Task, Process# 仓库勘探智能体explorer Agent( role代码仓库勘探员, goal梳理仓库目录结构筛选出和当前任务强相关的文件, backstory遍历文件夹与读取源码搭建项目整体代码图谱, tools[read_file, list_dir], llmllm,)# 工程师、测试员智能体配置逻辑同上# 主管智能体manager Agent( role技术主管, goal拆解需求为分步任务指派给对应专项智能体审核测试结果确认需求闭环, backstory统筹分工校验修改内容测试全部通过后收尾工作, llmllm, allow_delegationTrue, # 开启委派权限默认关闭必须手动开启)# 分层编排集群crew Crew( agents[explorer, coder, tester], tasks[task], manager_agentmanager, processProcess.hierarchical,)沙箱机制加固智能体执行安全具备终端命令执行权限的智能体有概率执行删除文件、篡改系统等高危指令单纯靠提示词约束模型自律无法做到本质防护。安全防护分为两层权限审批机制高危操作必须经过人工确认才可执行沙箱环境隔离即便指令被审批放行操作也只会在隔离环境内运行无法篡改宿主机本机系统Anthropic 也是采用这套双层防护方案。将代码执行完全移入沙箱可以大幅降低人工审批频次同时从底层保护宿主机环境。CrewAI 接入沙箱执行借助 E2B 服务实现沙箱能力每次会话启动一台独立虚拟机会话结束后销毁实例。所有 Shell 命令、Python 代码都在隔离环境内运行不会影响本地机器。from crewai_tools import E2BExecTool, E2BPythonTool# 沙箱终端执行工具、沙箱Python代码运行工具sandbox_tools [E2BExecTool(), E2BPythonTool()]人工介入审批流程给 Task 开启human_inputTrue智能体产出阶段性结果后流程会暂停等待人工审核可选择批准放行或是驳回并给出修改意见让智能体迭代优化。终端场景下会阻塞等待控制台输入如果对接网页端/聊天窗口可基于 Webhook 实现线上审核交互。from crewai import Tasktask Task( description在 ./workspace 工作目录内完成 {objective}先梳理项目结构完成代码修改执行测试并输出结果, expected_output汇总修改文件清单与最终测试执行日志, human_inputTrue,)记忆持久化与断点续跑默认情况下单次编排任务结束后智能体所有对话记录全部清空。隔天针对同一个项目修复新漏洞会完全丢失之前对项目的认知从头开始分析仓库。两类机制可以实现跨任务信息留存二者定位不同Checkpoint断点快照单次任务执行中途保存运行状态程序意外中断后可从快照位置恢复流程也可以基于当前进度尝试其他修改方案持久化记忆跨不同会话存储项目通用规则、历史结论例如「项目最终代码必须统一格式化后再提交」这类项目约定后续任务自动读取记忆信息CrewAI 持久化记忆开启集群级memoryTrue整个集群内所有智能体共享记忆空间。每轮任务结束后框架会调用大模型提炼本轮关键信息并入库后续新任务启动时自动检索匹配的历史记忆注入提示词。from crewai import Crewcrew Crew( agents[explorer, coder, tester], tasks[task], memoryTrue,)单个智能体也可单独配置私有记忆脱离集群公共记忆池。CrewAI 断点续跑断点会完整快照智能体配置、任务进度、记忆库、中间输出、入参与全量执行日志。默认每完成一项 Task 自动生成断点支持两种存储方案• JsonProvider每个断点单独生成 JSON 文件可读性强方便手动查看调试• SqliteProvider全部断点存入单条 SQLite 数据库高频快照、大规模任务场景稳定性更好from crewai import Crewcrew Crew( agents[explorer, coder, tester], tasks[task], checkpointTrue,)Crew、Flow、Agent 均支持单独配置断点开关子级组件会默认继承父级配置可单独覆盖自定义。全模块整合完整版代码整合执行循环、工具集、全局规划、分层子智能体、沙箱隔离、记忆存储、断点存档全套能力from crewai import Agent, Crew, LLM, Process, Taskfrom crewai.tools import toolfrom crewai_tools import (DirectoryReadTool, FileReadTool, FileWriterTool, E2BExecTool, E2BPythonTool)# 绑定目标大模型llm LLM(modelanthropic/claude-sonnet-4.6)# 限定工作根目录list_dir DirectoryReadTool(directory./workspace)filesystem_tools [FileReadTool(), FileWriterTool(), list_dir]exec_tool E2BExecTool()sandbox_tools [exec_tool, E2BPythonTool()]# 自定义测试工具tool(run_tests)defrun_tests(path: str tests/) - str: 将本地 ./workspace 目录同步至沙箱环境并执行pytest测试用例 return exec_tool.run(commandsync_and_test_command(path))# 1. 仓库勘探智能体explorer Agent( role代码仓库勘探员, goal梳理仓库整体结构定位需求对应的核心关联文件, tools[FileReadTool(), list_dir], llmllm)# 2. 代码开发智能体coder Agent( role软件开发工程师, goal根据需求落地代码修改与功能实现, toolsfilesystem_tools, reasoningTrue, llmllm)# 3. 测试执行智能体tester Agent( role测试运行专员, goal在沙箱环境执行自动化测试反馈用例通过/失败情况, toolssandbox_tools [FileReadTool()] [run_tests], llmllm)# 4. 主管委派智能体manager Agent( role技术主管, goal拆解任务并分配给对应专项智能体校验测试结果全部用例通过后结束任务, allow_delegationTrue, llmllm)# 主任务配置task Task( description在 ./workspace 目录内完成 {objective}先调研代码结构执行代码修改运行测试并汇总结果, expected_output修改文件清单 完整测试输出报告, human_inputTrue,)# 编排集群开启所有核心能力crew Crew( agents[explorer, coder, tester], tasks[task], manager_agentmanager, processProcess.hierarchical, planningTrue, memoryTrue, checkpointTrue,)# 启动流程并传入需求result crew.kickoff(inputs{objective: 修复 account.py 中所有执行失败的测试用例})编码智能体最适合以自动化测试用例作为效果验收标准测试套件可以给出明确可量化的目标智能体能够自主规划、改代码、跑测试、迭代修复直至全部用例通过。本文方案基于一套小型项目做验证项目包含 BankAccount 账户类预设2个程序漏洞、5条测试用例其中3条用例执行失败。约束规则仅允许修改业务实现代码禁止改动测试脚本。整套运行框架最终将5条测试用例全部修复至执行通过严格遵守不修改测试代码的限制没有走捷径规避问题。这套验收思路也和 Anthropic 内部评测编码智能体的方式一致官方公开案例中Claude 曾基于大量报错测试用例从零复刻 claude.ai 官网前端页面。仍需要开发者自主落地的核心工作框架只能提供基础编排能力以下核心环节无法通过配置一键实现必须手动定制开发提示词工程每个智能体的角色、目标、背景描述直接决定行为逻辑。提示词需要反复调试迭代优化不存在可以一劳永逸的配置参数执行环境搭建无论是选用 E2B 托管沙箱还是自行搭建虚拟机容器沙箱都需要完成环境部署与工具链路对接工具权限划分哪些智能体可以调用哪些工具、权限范围如何管控属于架构设计决策框架不会自动做权限分配同时整套框架本身会产生调用成本全局规划、多子智能体委派、多轮循环重试都会额外消耗大模型接口调用次数。简单需求如果强行套用重型多智能体架构开销会远高于单轮模型直接调用。还有一项长期演进层面的局限随着大模型本身能力迭代很多框架层的冗余脚手架会被逐步淘汰。当下很多运行框架的设计本质是为了弥补现有模型上下文记忆、长链路规划的短板并非永久刚需架构。例如 Anthropic 曾依靠上下文重置机制防止 Claude Sonnet 4.5 提前终止任务而能力更强的 Claude Opus 4.5 就不再需要该兜底机制。总结整套编码智能体的核心竞争力绝大部分来源于外层运行框架而非模型本身。借助 CrewAI 这类编排框架循环调度、任务规划、任务委派、沙箱隔离、记忆存储、断点续存都可以通过配置快速启用而提示词设计、运行环境部署、工具权限体系是需要开发者自主打磨的核心工程部分。学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】