Agent 开发到底做什么:Agent、Harness 基础概念

文章主要基于最近很火 github.com/bojieli/ai-... 《深入理解 AI Agent》(作者和 Agent 合作完成的一本书)第一章和最近总结的 claude code 源码 分析的有感而写,前端失业转 Agent 开发中,有不对的地方感谢指出

Agent = 大模型 + 上下文 + 工具

那最近一直说的 Harness 又是什么?

通过 ReAct 循环很容易把 大模型 + 上下文 + 工具串起来,实现一个 Agent。

用户提出问题,模型先思考 当前应该做什么,然后调用工具行动,再观察工具返回的结果并继续思考下一步, 把整个过程的模型返回、工具执行结果这些上下文每次都带给模型,思考 -> 行动 -> 思考 -> 行动 ... ,直到完成任务。

把之前这篇文章 一文入门 Agent 的代码拿过来:

python 复制代码
def solve(self, question: str, verbose: bool = True) -> str:
        """
        使用 ReAct 模式解决问题
        
        Args:
            question: 用户问题
            verbose: 是否显示详细过程
            
        Returns:
            最终答案
        """
        messages = [
            {"role": "system", "content": self._get_system_prompt()},
            {"role": "user", "content": question}
        ]
        
        for step in range(self.max_steps):
            if verbose:
                print(f"\\n=== 步骤 {step + 1} ===")
                
            # 获取模型响应
            try:
                assistant_message = self._call_llm(messages)
                if verbose:
                    print(f"Assistant: {assistant_message}")
                    
                messages.append({"role": "assistant", "content": assistant_message})
                
                # 检查是否包含最终答案
                if"Final Answer:"in assistant_message:
                    final_answer = assistant_message.split("Final Answer:")[-1].strip()
                    if verbose:
                        print(f"\\n🎉 找到答案: {final_answer}")
                    return final_answer
                
                # 解析并执行行动
                action_result = self._parse_action(assistant_message)
                if action_result:
                    tool_name, params = action_result
                    observation = self._execute_tool(tool_name, params)
                    
                    if verbose:
                        print(f"🔧 执行工具: {tool_name}")
                        print(f"📋 参数: {params}")
                        print(f"👁️ 观察结果: {observation}")
                    
                    # 添加观察结果到对话历史
                    messages.append({
                        "role": "user", 
                        "content": f"Observation: {observation}"
                    })
                else:
                    # 如果没有找到有效的行动,继续下一轮
                    if verbose:
                        print("⚠️ 未找到有效的行动,继续思考...")
                        
            except Exception as e:
                error_msg = f"API 调用错误: {str(e)}"
                if verbose:
                    print(f"❌ {error_msg}")
                return error_msg
                
        return"达到最大步数限制,未能找到答案。"

然后看似就实现了一个非常通用的问答 Agent

程序不再限制用户可以问什么类型的问题、问题格式是什么,使用什么工具、拿到结果下一步怎么做也不再写死逻辑到代码里,变成了大模型指挥一切。

程序好像一下子附上了魔法,但这算实现了 Agent,到此结束了吗?

一个能跑的 Demo 和一个可靠的产品之间还有巨大的鸿沟,而这些脆弱点正是 Harness 工程要解决的问题。

模型可能产生幻觉(编造不存在的工具或参数)、选错工具,或在遇到错误时无法自我恢复,生产系统还要加入约束、验证和纠正。

Harness 负责把模型放进一个可控的运行环境里:

  • 给模型准备上下文:系统提示词 、工具定义、用户消息、模型回复、工具执行结果
  • 暴露工具接口:搜索、读写文件、调用 API、执行代码等。
  • 约束行为:哪些能做,哪些要用户确认,哪些绝对不能做。
  • 验证结果:工具调用是否成功,产物是否满足要求,状态是否真的改变。
  • 纠正失败:重试、回滚、换策略、熔断、交给人。

所以文章开头 「Agent = 大模型 + 上下文 + 工具」只是最小工程实现,一个真正能可靠做事的 Agent 应该是:

Agent = 大模型 + Harness

Harness = 上下文管理 + 工具接口 + 约束 + 验证 + 纠正

知道了 Harness 的概念,接下来就有另一个常常探讨的问题:如果模型持续变强,今天这些 Harness 会不会最终被模型「吃掉」?

模型可以通过后训练将工具调用能力内化为原生能力,慢慢的蚕食 Harness,公式未来可能再次简化为 Agent = 大模型,「模型即 Agent(Model as Agent)」

比如 KimiK3 通过强化学习训练,将工具调用的决策策略内化为原生能力------何时调用工具、调用哪个、传什么参数都由模型自主决定,从而能够自主完成网络搜索等任务。

GPT-5.6 通过后训练将 Deep Research 式的任务编排策略内化为原生能力------何时澄清用户意图、何时搜索网络、何时调用代码解释器分析数据、何时继续补充信息,都由模型自主决定。

坏消息是节奏确实是这么个节奏,好消息是此刻还没有,这个「吃」的过程远比想象中慢。模型无法一次内化真实业务中所有的约束与偏好,模型此刻的能力边界,就是 Harness 此刻的价值所在。

模型自主决策的空间越大,出错时的影响面也越大,因此需要更精细的约束、验证和纠正机制来确保可靠性。模型还做不稳的,Harness 先补上;模型每内化一层,Harness 就卸下一层,转而兜底新的能力前沿。

继续,Harness 是最终答案了吗?

最早大家做 Prompt Engineering,重点是「怎么把一句话写好」,让模型回答得更准。

后来发现光写 prompt 不够,于是进入 Context Engineering :不只是改一句提示词,而是管理模型能看到的全部信息,比如系统提示词、工具说明、历史对话、知识库、用户记忆。核心问题变成:模型该看到什么?

再往后是 Harness Engineering :光让模型看到还不够,还要让它「可靠地行动」。所以要设计工具接口、权限约束、结果验证、错误恢复、反馈循环。核心问题变成:模型运行在什么样的工程外壳里?

然后是 Loop Engineering :关注点从一次任务运行,扩展到长时间、多轮次的持续执行。比如 Agent 下一步该做什么、什么时候检查结果、什么时候才能真的停下来。核心问题变成:怎么让 Agent 持续推进任务,而不是中途偷懒、卡死或假装完成?

最后是 Graph Engineering :把多个 Agent 循环、普通程序、人类审批步骤都组织成一个明确的执行图。哪个节点做什么,结果流向哪里,什么时候持久化状态,都由图结构管理。核心问题变成:怎么把多个能力单元编排成一个可控系统?

概念越来越多,也不用担心之前的段子「AI 领域只要学的慢就不用学了」,这些概念并不是跳变,而是后者包含前者,层层包含,核心是一个共同目标「设计一个可靠、可验证、可持续运行的 Agent 产品」。

Agent 岗位的出现,也正是因为当各家模型的能力越来越接近、不再是决定性的差异因素时,竞争优势就转移到了模型之外的工程实践。

而工程实践可能要考虑到一些东西:

  • 选择模型:开源的、闭源的、多模态的、带推理的、成本、速度,要选最适合真实任务、预算、策略边界和交互形式的模型

  • 编排模式:上下文如何在多次模型调用之间流动,工具如何被调度,执行路径是预先写死(工作流模式),还是由模型动态决定(自主 Agent 模式)。

  • 安全性:降低提示注入、越权操作、隐私泄露、错误执行等问题。在信息进入上下文前过滤无关、有害或恶意内容;在工具调用或回复生效前检查权限、风险等级和输出内容,高风险操作可要求人工确认;通过数据库权限、行级安全、约束校验等机制阻止越权修改。

软件工程有设计模式,比如之前总结的前端设计模式 pattern.windliang.wang (时代的眼泪),Agent 工程当然也会发展出来:

  • 提议者---审核者:生成和评判分离:一个角色产出,另一个独立角色只看结果、测试或结构化证据来判断,避免同一个 Agent 自审。
  • 渐进式披露:不把所有信息一次性塞进上下文,而是先给目录,再按需加载细节,以节省上下文并提高选择精度。
  • 只增不改:状态以追加方式演进,已经写下的内容不轻易改动,从而便于缓存、重放和审计。
  • 边界集 + 保留集:每次修改同时验证「应该被改变的样本」和「不应该被影响的样本」,避免过拟合或无效修改。
  • 最小 diff + 可回滚:每次改动尽量小、来源清楚、可以单独撤回,方便出问题时定位和恢复。

最后再来三个原则:

  • 保持简单,从最直接的方案开始,只有确实需要时才增加框架和抽象,因为复杂度会增加调试盲区;
  • 保持透明,让 Agent 的计划、执行日志和关键决策可观察,方便调试,也让用户知道系统为什么这样做;
  • 设计好工具接口,从 Agent 的视角设计清晰、直观、不易误用的工具名称和参数,把错误尽量消除在接口设计阶段,而不是指望模型每次都猜对。

AI 时代的巨轮滚滚向前,前端经历了从切图仔、到从后端剥离为独立岗位、到欣欣向荣、到前端已死、再到现在的合并回后端岗位,和后端一起又回到了全栈岗位。

好消息是当然也带来了新的岗位「Agent 开发」,像之前所说的,工具在变,但核心还是解决问题。过去的积累也不是全部没用了,做工程化的东西很多东西都还在(处理状态、接入接口、权限控制、记录日志、做监控、优化体验等等),只是多在程序中引入了一个大脑,而且很多东西还可以和 AI 探讨、让 AI 实现。

当选择了程序员的道路,就代表拥抱了终身学习,加油、共勉。

相关推荐
MacroZheng1 小时前
腾讯又开源了一个新项目,用起来真优雅!
前端·vue.js·人工智能
linux-hzh1 小时前
百日算法修炼 · Day 13
算法
天天代码码天天1 小时前
lw.Web2Android v0.2.7 开源发布
人工智能
飞哥数智坊1 小时前
AI带来了技术平权,却让老师傅的经验越来越贵
人工智能
jikemaoshiyanshi1 小时前
多租户 AI Agent 云平台选型:哪些方案可兼顾弹性伸缩、安全隔离与成本优化?
人工智能
山顶望月川1 小时前
算力即底座|并行科技 MaaS 大模型 API:一站式解锁 GLM‑5.3 等主流模型能力
人工智能·科技
陈天伟教授1 小时前
【30天学会机械制图】项目一 从平面图形开始 任务1 按标准来画图,都懂你!
大数据·人工智能·平面·机器人·具身智能机器人技术
Raas1001 小时前
MAI Gateway (魔芋企业级AI网关)支持哪些模型?AI网关多模型统一接入实战指南
人工智能·安全·gateway·企业级·ai网关
如此这般英俊1 小时前
手搓Claude Code-第十三章 background_tasks
前端·人工智能·chrome·python·算法·语言模型·自然语言处理
FlagOS智算系统软件栈1 小时前
CUDA Tile IR 接入 FlagOS 多芯片统一编译器 FlagTree,加速 AI 芯片生态迈向“开放计算”
人工智能·深度学习·flagos