小白程序员也能轻松打造自己的编码 Agent:掌握大模型核心技术
2026/9/15 7:56:36 网站建设 项目流程

本文详细介绍了如何通过构建模型外围的 Harness(工作框架)来打造高效的编码 Agent。文章指出,真正的差异不在模型本身,而在于模型外围的 Harness,它负责规划、工具调度、记忆管理、安全控制与上下文维护。通过分析 Claude Code Harness 的结构和功能,文章阐述了记忆模块、技能模块、协议模块和 Harness 核心的作用,并强调了模型决策与执行分离的重要性。此外,文章还介绍了 CrewAI 框架如何帮助开发者从零构建自己的编码 Agent,并详细解释了规划能力、文件系统工具、子 Agent 协作机制、记忆管理和权限控制与沙盒系统的应用。最后,文章总结了编码 Agent 的能力主要存在于 Harness 中,并鼓励读者利用开源框架 CrewAI 来实现自己的编码 Agent。

你是否曾尝试打造自己的编码 Agent?
接入文件读写工具、Shell 执行能力后,让它处理真实代码库——结果往往在十几步工具调用内就崩溃了:

  • 读错关键文件;
  • 中途遗忘原始目标;
  • 上下文被大量过期输出塞满,有效信息被淹没。

而同样的任务交给 Claude Code,却能干净利落地完成。
人们容易归因于“Anthropic 的模型更强”,但这种判断忽略了真正决定成败的关键部分。

真正的差异不在模型本身,而在模型外围的 Harness(工作框架)。
Harness 是围绕大语言模型编写的普通代码层,负责规划、工具调度、记忆管理、安全控制与上下文维护;模型自身只做一件事:根据当前状态,决定下一步该执行哪个动作。

以下是 Claude Code Harness 的整体结构示意图:

图中模块看似复杂,实则可清晰划分为四个核心部分:

  • 记忆模块:为模型提供当前任务上下文,并持久化跨会话积累的事实性知识;
  • 技能模块:定义 Agent 的行为逻辑,包括执行流程、硬性约束与启发式规则;
  • 协议模块:统一处理 Agent 与用户、工具、其他 Agent 之间的交互契约;
  • Harness 核心:通过子 Agent 编排、沙盒隔离、评估器反馈、审批循环、可观测性追踪及上下文压缩等能力,将前三者有机整合。

Anthropic 将这一分工形象地比作“大脑”与“双手”:

  • 模型是大脑,专注决策;
  • Harness 是双手,负责执行、校验与兜底,确保整个过程始终可控、可追溯、可恢复。

因此,你的 Agent 与 Claude Code 的差距,并非源于模型能力的高下,而在于模型周围这套工程化框架的完备程度。

Claude Code 是目前生产环境中功能最强大的 Harness 之一,其全部能力,仅依赖上图所示架构中非常有限的几层实现。为了厘清你需要从零构建多少内容,我基于开源 Agent 编排框架 CrewAI 重建了该系统。

结果令人惊讶:

  • 大部分基础能力已直接映射到 CrewAI 的内置特性中;
  • 那些尚未覆盖的部分,恰恰正是真正需要投入工程精力攻克的难点。

接下来,我们将从最底层的核心循环出发,逐层叠加关键能力:
→ 规划 → 子 Agent → 沙盒 → 记忆
每一步都会明确标注:哪些由 CrewAI 原生支持,哪些需你自行实现。

Claude Code Harness 的工作原理

Claude Code 的核心是一个标准 Agent 循环:
你发送一条消息,模型据此决定下一步动作——要么直接返回文本响应,要么请求调用一个或多个工具;若发起工具调用,则执行工具并将结果返回对话历史,模型再基于更新后的上下文做出下一轮决策。

该循环持续运行,直到模型输出纯文本且不再请求任何工具调用为止。

在此循环中,模型可执行的操作(如读取文件、编辑代码、运行 Shell 命令、执行测试)并非独立模式,而是同一循环下的不同工具调用类型。

但仅靠这个基础循环,尚不足以支撑可靠的编码 Agent。Claude Code 在其外围叠加了五大增强层:

  • 规划能力(Plan before act)
  • 文件系统工具(File I/O with context-awareness)
  • 子 Agent 协作机制(Delegation to specialized sub-Agents)
  • 记忆管理(Short- and long-term memory)
  • 权限控制与沙盒系统(Sandboxed execution + approval gates)

这些增强层并未替换核心循环,而是对其进行加固与延展,使其足够稳健、安全,得以胜任真实开发场景。

这正是我们要重建的架构路径:
先实现最小可行的核心循环,再逐层添加各增强模块

核心 Agent 循环

该循环按以下五步持续运行,直至任务完成:

  1. 1. 向模型提交当前对话历史与可用工具列表;

  2. 2. 模型返回纯文本响应,或包含一个/多个工具调用请求;

  3. 3. 若存在工具调用,则并行执行全部请求,并将结果追加至对话历史;

  4. 4. 使用更新后的完整对话历史,重新进入步骤 1;

  5. 5. 当模型返回纯文本且未发起任何工具调用时,循环终止,任务完成。

对应的伪代码如下:

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)]

每次工具调用完成一个原子操作,为模型注入新信息,并驱动其后续决策。简单问题可能一次迭代即解决;而修复复杂 Bug 或重构大型代码库,则可能需数十次迭代,直至模型获得足够信息生成最终答案。

构建第一个 Agent

我们来创建一个简单的 Bug Fixer Agent:

from crewai import LLM, Agent, Crew, Task bug_fixer = Agent( role="Bug Fixer", goal="在代码库中定位并描述所报告 Bug 的修复方案。", backstory="你通过读取目录与文件,构建对代码结构的准确理解。", llm="claude-sonnet-4-6", ) task = Task( description="寻找 {objective} 的修复方案。", expected_output="一段简短的修复说明,以及该修复应应用的具体文件。", ) result = Crew(agents=[bug_fixer], tasks=[task]).kickoff( inputs={"objective": "account.py 中的透支 Bug"} )

这里需理解三个核心概念:

  • Agent 定义“谁来干活”:通过角色(role)、目标(goal)、语言模型(LLM)及可用工具共同刻画其能力边界;
  • Task 描述“干什么活”:明确任务输入、预期输出与执行要求;
  • Crew 将 Agent 与 Task 组织起来:调用kickoff()即启动前述 Agent 循环,且该循环与底层模型厂商无关(无论 Anthropic、OpenAI、Google 或其他模型均可运行)。

为 Agent 添加工具

工具是让一个仅能生成文本的模型真正具备代码库操作能力的关键。它们支持读取文件、写入文件、执行 Shell 命令以及调用外部 API。

CrewAI 开箱即用地提供了以下文件系统工具:

  • FileReadTool:用于读取指定路径的文件内容;
  • DirectoryReadTool:用于列出目录结构与文件名;
  • FileWriterTool:用于将内容写入指定路径的文件。
from crewai_tools import DirectoryReadTool, FileReadTool, FileWriterTool read_file = FileReadTool() write_file = FileWriterTool() list_dir = DirectoryReadTool() filesystem_tools = [read_file, write_file, list_dir]

这些工具还可充当外部记忆。与其将大量搜索结果保留在模型的上下文窗口中,Agent 可将其写入临时文件,仅保留文件名作为索引,并在需要时再读取。

要点: 与其将大量搜索结果保留在模型的上下文窗口中,Agent 可将其写入临时文件,仅保留文件名作为索引,并在需要时再读取。

这有助于缩小上下文窗口、提升模型专注度,也正是 Anthropic 所称的“上下文工程”。

内置工具仅覆盖常见工作流。对于更具体的需求,可通过@tool装饰器将任意 Python 函数暴露为工具。

函数的文档字符串即为使用说明,明确告知模型该工具的功能、适用时机及输入要求。

from crewai.tools import tool import subprocess @tool("run_tests") def run_tests(path: str = "tests/") -> str: """在指定路径运行 pytest 测试套件并返回结果。""" result = subprocess.run( ["pytest", path, "-q"], capture_output=True, text=True, timeout=120 ) output = result.stdout + result.stderr return output[-4000:] if len(output) > 4000 else output

长期任务的规划

随着任务复杂度上升,简单的执行循环会逐渐偏离原始目标。经过多次工具调用、文件读取和中间结果处理后,上下文被后续信息填满,原始目标反而被淹没。

这种缓慢退化现象被称为“上下文腐烂”(context rot)。

要点: 这种缓慢退化现象被称为“上下文腐烂”(context rot)。

规划直接应对这一问题:Agent 在执行任何操作前先构建分步计划,并在整个执行过程中持续将该计划保留在上下文中。

计划本身不执行任务,而是一张路线图,确保模型始终锚定原始目标——其作用与 Claude Code 的待办清单一致。

CrewAI 在 Crew 层级通过planning=True启用该能力:它会在执行前生成计划,并在任务推进过程中始终提供该计划。

from crewai import Crew, LLM crew = Crew( agents=self.agents, tasks=self.tasks, planning=True, planning_llm=LLM(model="gpt-4o-mini"), )
注意:CrewAI 默认使用 `gpt-4o-mini` 执行规划,您可按需替换为任意其他 LLM。

单个 Agent 也可通过启用reasoning=True对自身工作进行自主思考:

from crewai import Agent bug_fixer = Agent( role="Bug Fixer", goal="Find and describe the fix for the reported bug in the codebase.", backstory="You read directories and files to build an accurate picture of the code.", tools=[FileReadTool()], reasoning=True, max_reasoning_attempts=3 # 可选:设置最大推理尝试次数 )

规划与推理解决的是不同层面的问题:规划为整体任务构建高层级路线图;推理则赋予单个 Agent 在行动前充分梳理自身策略的时间。

启用推理后,Agent 将依次执行以下步骤:

  1. 1. 反思当前任务,草拟执行计划;

  2. 2. 判断该计划是否已完备;

  3. 3. 如未满足要求,则反复优化,直至满意或达到max_reasoning_attempts上限;

  4. 4. 将最终确定的推理计划注入任务上下文,再启动执行。

二者协同,使 Agent 在长期任务中始终保持目标导向,显著降低目标偏移风险。

通过子 Agent 进行任务委派

规划有助于保持 Agent 专注,但无法减少模型需承载的信息量。在大型代码库中,即使经过周密规划的任务,也可能超出单次上下文窗口容量。

定位一个 Bug 可能需读取数十个文件,而主 Agent 并不需要将全部内容保留在内存中。

子 Agent 通过任务委派解决此问题:主 Agent 将特定子任务交由辅助 Agent 处理,后者在独立上下文中完成工作并返回简明摘要;主 Agent 仅接收结论,无需了解中间过程。

CrewAI 通过分层工作流(hierarchical workflows)支持该机制:管理型 Agent 向专业型 Agent 分配任务,并整合其输出结果。

此前示例中,所有工作均由单一Bug FixerAgent 完成。现将职责拆分为一位管理者与三位专业 Agent:

  • Codebase Explorer:探索代码库并绘制仓库结构图;
  • Software Engineer:实施所请求的代码变更;
  • Test Runner:在沙盒环境中运行测试,并报告通过或失败;
  • Engineering Lead:统筹三位专业 Agent 的协作。

from crewai import Crew, Agent, Task, Process explorer = Agent( role="Codebase Explorer", goal="Map the repository and surface the files relevant to the task.", backstory="You read directories and files to build a picture of the code.", tools=[read_file, list_dir], llm=llm, ) # 其余两位专业 Agent 同理配置 manager = Agent( role="Engineering Lead", goal="Break the request into steps and delegate each to the right specialist.", backstory="You decide who does what, review tests, finish once change is done.", llm=llm, allow_delegation=True, ) crew = Crew( agents=[explorer, coder, tester], tasks=[task], manager_agent=manager, process=Process.hierarchical, )

需特别注意:allow_delegation默认为禁用状态,必须显式设为True才能在管理型 Agent 上启用委派能力。

沙盒化:保障 Agent 执行安全

具备 Shell 访问权限的 Agent 可能执行破坏性命令;仅靠提示词禁止某类行为,并不能构成有效防护。

真正的保护来自两层机制:

  1. 1. 一种权限系统,对敏感操作要求人工审批;

  2. 2. 一个沙盒环境,用于隔离代码执行——即使已获批准的命令,也无法访问宿主机。

Anthropic 也采用相同的设计思路。将代码执行移入沙盒,既能显著降低用户需手动审批操作的频率,又能持续保障宿主机的安全。

CrewAI 中的沙盒机制

在沙盒中而非宿主机上执行代码,即实现了上述第二层保护。在此配置下,所有代码均运行于 E2B 环境中:E2B 为每次会话启动一个全新的虚拟机,并在会话结束后立即销毁该虚拟机。

Shell 命令与 Python 代码完全在该隔离环境中执行。

from crewai_tools import E2BExecTool, E2BPythonTool sandbox_tools = [E2BExecTool(), E2BPythonTool()] # 运行测试 / 执行代码

人机协同审批(Human-in-the-loop approval)

在 Task 中设置human_input=True,会使 Crew 在生成答案后暂停执行。您可审查输出内容,再选择批准或退回重做。

当执行流程到达该任务时,CrewAI 将通过标准输入(stdin)等待您的反馈。

from crewai import Task task = Task( description=( "在工作目录 ./workspace 中,{objective}。 " "先探索代码结构,再实施修改,然后运行测试并汇报结果。" ), expected_output="一份变更文件摘要及最终测试输出。", human_input=True, )

若您的 Crew 运行于 Web 应用或聊天界面(而非终端),CrewAI 的基于 Webhook 的人机协同审批机制同样支持该审核步骤。

记忆与检查点机制

默认情况下,Agent 在一次运行结束后会清空全部上下文。次日若需在同一项目中修复另一个 Bug,它将从零开始重新理解整个代码库。

有两种机制可让 Agent 在多次运行间延续信息,且二者用途不同:

  • 检查点(Checkpointing):保存 Agent 在单次运行过程中的完整状态,使其可在中断后恢复执行,或沿不同路径继续推进至同一进度点;
  • 持久化记忆(Persistent memory):跨独立对话长期存储事实性信息,例如项目级偏好设置:“完成前始终格式化最终代码”。

CrewAI 中的记忆机制

CrewAI 提供统一的 Memory 接口,不区分短期、长期、实体或外部记忆等类型。在保存信息时,它调用 LLM 自动识别关键细节、组织语义结构,并确保后续可高效检索。

在 Crew 初始化时设置memory=True,即可启用跨轮次记忆能力。每项任务完成后,CrewAI 会从其输出中提取有用事实并存入记忆;后续运行中,系统将自动检索相关记忆,并将其注入当前任务的 Prompt 中。

from crewai import Crew crew = Crew( agents=[explorer, coder, tester], tasks=[task], memory=True, )

除非为某个 Agent 显式配置独立记忆,否则 Crew 内所有 Agent 共享同一份记忆。

CrewAI 中的检查点机制

检查点是 Agent 进度的一个完整快照,包含其配置、当前任务状态、内存内容、中间结果、输入数据以及完整执行历史。

默认情况下,CrewAI 在每项任务成功完成后自动生成检查点,以便工作流在意外中断后能从中断点恢复。

检查点可存储于以下两种内置存储后端之一:

  • JsonProvider:将每个检查点保存为独立 JSON 文件,便于人工阅读与调试。
  • SqliteProvider:将全部检查点集中存入单个 SQLite 数据库,更适合高频写入场景与大规模工作负载。

from crewai import Crew crew = Crew( agents=[explorer, coder, tester], tasks=[task], checkpoint=True, )

CrewFlowAgent均接受checkpoint参数;子组件默认继承父组件的设置,除非显式覆盖。

综合示例:完整执行链路

下面是一个完整任务的端到端实现,整合了执行循环、工具调用、规划能力、子 Agent 协作、沙盒执行与记忆机制:

from crewai import Agent, Crew, LLM, Process, Task from crewai.tools import tool from crewai_tools import (DirectoryReadTool, FileReadTool, FileWriterTool, E2BExecTool, E2BPythonTool) llm = LLM(model="anthropic/claude-sonnet-4.6") list_dir = DirectoryReadTool(directory="./workspace") filesystem_tools = [FileReadTool(), FileWriterTool(), list_dir] sandbox_tools = [E2BExecTool(), E2BPythonTool()] @tool("run_tests") def run_tests(path: str = "tests/") -> str: """同步 ./workspace 到沙盒环境,然后在其中运行 pytest。""" return E2BExecTool().run(command=sync_and_test_command(path)) explorer = Agent(role="Codebase Explorer", goal="Map repo, surface relevant files.", tools=[FileReadTool(), list_dir], llm=llm) coder = Agent(role="Software Engineer", goal="Implement requested change.", tools=filesystem_tools, reasoning=True, llm=llm) tester = Agent(role="Test Runner", goal="Run tests in sandbox, report pass/fail.", tools=sandbox_tools + [FileReadTool()] + [run_tests], llm=llm) manager = Agent(role="Engineering Lead", goal="Delegate steps, finish once tests pass.", allow_delegation=True, llm=llm) task = Task( description="In ./workspace, {objective}. Explore, edit, test, report.", expected_output="Summary of changes and test output.", human_input=True, ) crew = Crew( agents=[explorer, coder, tester], tasks=[task], manager_agent=manager, process=Process.hierarchical, planning=True, memory=True, checkpoint=True, ) result = crew.kickoff(inputs={"objective": "fix failing tests in account.py"})

Agent 执行效果最易评估的场景,是存在可自动验证的成功标准时。一套完备的测试套件能为 Agent 提供明确目标,使其可自主规划、编辑、测试并迭代,直至全部测试通过。

因此,该方案在一个小型代码库上进行了测试:一个BankAccount类,包含两个真实 Bug 和五个测试,其中三个测试失败。规则是仅修复实现部分,不得修改测试。

这与 Anthropic 内部评估编码 Agent 的方式一致。一个已公开的案例中,Claude 针对一大套失败的测试用例,重建了 claude.ai 界面的克隆版本。

在此场景中,Harness 将项目状态从“3 个测试失败、2 个通过”,提升至“全部 5 个测试均通过”;而“仅修改实现”的约束,也彻底封堵了通过编辑或删除失败测试来走捷径的可能性。

仍需你亲自负责的部分

系统中以下部分并非框架自动构建,而是由你主导:

  • Prompt。每个 Agent 的行为由其角色(role)、目标(goal)和背景设定(backstory)共同决定。调优这些要素需要反复测试与迭代,没有任何配置开关可替代这一过程。
  • 执行环境。无论是 E2B 沙盒还是自托管虚拟机,都需你自行搭建并完成集成。
  • 工具选择。每个 Agent 应配备哪些工具、哪些工具应开放给哪个 Agent——这类设计决策完全由你作出,框架不代为判断。

此外,Harness 本身也会带来额外开销:规划(planning)、子 Agent(subagents)和循环(looping)均会增加 API 调用次数,因此复杂 Agent 架构的实际成本,可能高于单次模型调用即可解决的任务。

还有一个长期需留意的限制:随着模型能力持续提升,部分当前 Harness 中的“脚手架”将逐渐失去必要性。因为今日嵌入 Harness 的许多机制,本质是对当前模型能力局限的临时规避,而非永久性需求。

例如,Anthropic 最初使用上下文重置(context resets)防止 Claude Sonnet 4.5 过早终止任务;但在更强大的 Claude Opus 4.5 上线后,该机制已不再需要。

总结

这就是核心发现:编码 Agent 的能力主要存在于其 Harness 中,而编排框架(orchestration framework)所提供的 Harness 支持,远超多数人的直观预期。

以下功能均可通过配置直接启用:

  • 循环(looping)
  • 规划(planning)
  • 委托(delegation)
  • 沙盒化(sandboxing)
  • 记忆(memory)

但与此同时,Prompt 设计、执行环境选择与工具链配置,仍完全由你掌控。

如果你想在自己的代码库上运行这套方案,CrewAI 文档完整覆盖本文所用全部功能,且整个框架完全开源。

最后

2026 年一晃已经过半,AI 大模型的热潮不仅没有降温,反而持续升温!

金融行业用大模型做风控、医疗依靠 AI 解析影像,电商、制造、教育各行各业,都在把 AI 融入日常业务。曾经热闹的 “百模大战”,早就告别单纯比拼模型参数,正式进入落地应用时代

现在企业疯狂紧缺一类人才:懂业务、懂 AI、能做出可上线项目的大模型开发工程师,岗位缺口大,薪资待遇十分可观。

风口再好,不如手握高薪 offer 实在。行情火热,普通人、程序员该怎样从零入门大模型,抓住这波机会?

今天整理好【2026 最新版】AI 大模型全套免费学习资源,覆盖零基础入门、项目实战、理论知识、大厂面试,从基础一路进阶。所有资料分类归档,没有多余杂料,无套路免费分享给想要入局 AI 赛道的程序员与零基础小白!

👇👇扫码免费领取全部内容👇👇

1、大模型系统化完整学习路线

2、大模型经典书籍&文档

3、AI 大模型最新行业研究报告

4、企业级实战项目 + 完整配套源码

5、大厂大模型面试真题汇总

6、这些资料真的有用吗?

这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理,现任上海殷泊信息科技CEO,其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证,服务航天科工、国家电网等1000+企业,以第一作者在IEEE Transactions发表论文50+篇,获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。

资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的技术人员,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询