什么是Harness Engineering?——最小的Agent Harness
Harness Engineering 背景介绍1. 概念起源Harness套具/挽具 这个词最早来自领域含义马具控制马的装备让马的力量被正确引导电气工程测试套具Test Harness- 连接被测系统与测试设备的中间层软件测试自动测试框架负责执行测试用例并收集结果在 AI Agent 领域Harness 沿用了同样的隐喻Harness 控制 AI 能力的挽具让 AI 的输出被正确引导和执行2. 发展脉络阶段一纯 API 调用2022-2023用户 → LLM API → 返回文本 → 结束模型直接输出结果无法执行真实操作应用场景有限阶段二工具调用 Function Calling2023用户 → LLM API → 决定调用工具 → Harness 执行 → 返回结果 → 结束模型开始具备调用工具的能力但缺乏循环和状态管理阶段三完整 Agent Harness2023-至今用户 → [模型思考 → Harness 执行 → 模型思考 → Harness 执行 → ...] → 完成循环直到任务完成完整的上下文管理多工具协作错误恢复机制为什么需要 Harness核心问题模型不是万能的模型能做的模型实际不能做的理解自然语言真正读取你的文件生成代码真正运行代码推理和规划真正访问互联网写回答真正修改数据库Harness 的价值 把说和做分离模型负责决策Harness 负责执行。模型只负责思考和决策Harness 负责真正执行、管理上下文、控制循环。┌─────────────────────────────────────────────────────────────┐ │ Harness │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ 工具注册表 (TOOL_FUNCTIONS) │ │ │ │ - read_file() - calculate() - ... │ │ │ └─────────────────────────────────────────────────────┘ │ │ ▲ │ │ │ 调用工具 │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ Agent Loop (循环) │ │ │ │ 1. 发消息给模型 │ │ │ │ 2. 模型决定: 调用工具 or 给出答案 │ │ │ │ 3. 如果调用工具 → Harness 执行 → 返回结果 │ │ │ │ 4. 循环回到第1步 │ │ │ └─────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────┘ │ ▼ ┌───────────────┐ │ AI Model │ │ (Claude) │ │ 思考和决策 │ └───────────────┘以下是代码示例 最小 Agent Harness 示例 核心思想:模型只负责思考和决定调用什么工具, harness 负责真正执行工具、管理上下文、控制循环。 import json from anthropic import Anthropic client Anthropic() # 需要设置 ANTHROPIC_API_KEY 环境变量 # ---------- 1. 工具定义 ---------- # harness 里真正干活的函数。模型自己不能读文件、不能算数, # 它只能请求harness 帮它做,这就是工具存在的意义。 def read_file(path: str) - str: 读取一个文本文件的内容。 try: with open(path, r, encodingutf-8) as f: return f.read() except Exception as e: return f读取失败: {e} def calculate(expression: str) - str: 计算一个数学表达式,比如 2 * (3 4)。 try: # 生产环境别用 eval,这里只是演示。用 ast 或专用库更安全。 result eval(expression, {__builtins__: {}}, {}) return str(result) except Exception as e: return f计算失败: {e} # 工具的注册表:把函数名映射到真正的 Python 函数 TOOL_FUNCTIONS { read_file: read_file, calculate: calculate, } # 工具的 schema:告诉模型有哪些工具、怎么调用、参数是什么。 # 这段描述写得好不好,直接影响模型用不用得对工具。 TOOL_SCHEMAS [ { name: read_file, description: 读取指定路径的文本文件内容, input_schema: { type: object, properties: { path: {type: string, description: 文件路径} }, required: [path], }, }, { name: calculate, description: 计算一个数学表达式并返回结果, input_schema: { type: object, properties: { expression: { type: string, description: 要计算的表达式,如 2 * (3 4), } }, required: [expression], }, }, ] # ---------- 2. Agent Loop ---------- # 这是 harness 的心脏。 def run_agent(user_task: str, max_turns: int 10) - str: # messages 就是上下文。harness 的核心工作之一 # 就是决定这个列表里放什么、怎么增长。 messages [{role: user, content: user_task}] for turn in range(max_turns): # (a) 把当前上下文 工具列表发给模型,让它决定下一步 response client.messages.create( modelclaude-sonnet-4-20250514, max_tokens1024, toolsTOOL_SCHEMAS, messagesmessages, ) # (b) 把模型这一轮的输出加回上下文(关键:保持对话连续) messages.append({role: assistant, content: response.content}) # (c) 判断模型是想调用工具,还是已经给出最终答案 if response.stop_reason ! tool_use: # 模型没有要求调工具 → 认为任务完成,返回文本 final_text .join( block.text for block in response.content if block.type text ) return final_text # (d) 模型要求调用一个或多个工具 → harness 真正执行它们 tool_results [] for block in response.content: if block.type tool_use: fn TOOL_FUNCTIONS[block.name] print(f [调用工具] {block.name}({block.input})) result fn(**block.input) # 真正执行 tool_results.append({ type: tool_result, tool_use_id: block.id, # 对应上模型的请求 id content: result, }) # (e) 把工具执行结果作为一条 user 消息喂回去,进入下一轮 messages.append({role: user, content: tool_results}) return 达到最大轮次,未完成任务。 # ---------- 3. 跑起来 ---------- if __name__ __main__: answer run_agent(帮我算一下 (128 256) * 3 等于多少) print(\n最终回答:, answer)1. 工具定义Lines 13-70TOOL_FUNCTIONS { read_file: read_file, calculate: calculate, }为什么需要工具模型本身不能真正读取文件、做计算它只能请求Harness 帮它做工具 模型与真实世界交互的桥梁TOOL_SCHEMAS [ { name: read_file, description: 读取指定路径的文本文件内容, input_schema: {...} }, ... ]Schema 的重要性 描述写得越好模型用工具越准确。2. Agent LoopLines 73-118这是 Harness 的心脏for turn in range(max_turns): # (a) 发消息给模型让它决定下一步 response client.messages.create(...) # (b) 把模型输出加回上下文 messages.append({role: assistant, content: response.content}) # (c) 判断是调用工具还是给出答案 if response.stop_reason ! tool_use: return final_text # 完成 # (d) Harness 真正执行工具 for block in response.content: if block.type tool_use: result fn(**block.input) # 执行 # (e) 把结果喂回去进入下一轮 messages.append({role: user, content: tool_results})3. 运行示例Lines 122-125answer run_agent(帮我算一下 (128 256) * 3 等于多少)执行流程 模型收到任务 → 我需要调用 calculate 工具 Harness 执行 → calculate((128 256) * 3) → 1152 模型收到结果 → 给出最终回答答案是 1152总结Harness Engineering 的兴起是 LLM 应用成熟的必然结果从玩具到生产力 - LLM 需要真正做事而不只是说话安全与可控 - 把危险操作隔离在 Harness 层可靠性保障 - 模型可能出错Harness 需要兜底工程化需求 - 可测试、可监控、可迭代

相关新闻

博容安可4G定位室内实测:地下车库、电梯、隧道求救信号能发出吗?

博容安可4G定位室内实测:地下车库、电梯、隧道求救信号能发出吗?

摘要:卫星定位在室内、地下车库等场景常失效。本文解析博容安可多模定位技术的补盲机制,验证其在卫星信号盲区内的求救可靠性。一、卫星定位的物理局限GPS与北斗卫星信号强度仅为手机信号的万分之一,无法穿透钢筋混凝土建筑、金属电梯轿厢与山…

2026/10/17 20:08:28 阅读更多 →
山西人做阳光房,别再拿南方货凑数了!

山西人做阳光房,别再拿南方货凑数了!

你是不是也曾憧憬过一个阳光房? 冬日暖阳洒满全身,夏夜抬头就是星空,喝茶、养花、发呆,好不惬意。 可真装完才发现,理想有多丰满,现实就有多骨感 —— 冬天,冰得像露天阳台,型材凉得…

2026/10/12 21:33:33 阅读更多 →
ChatGPT写单元测试,从入门到上线:覆盖Spring Boot/React/Python三大生态,附13个生产级可复用测试片段

ChatGPT写单元测试,从入门到上线:覆盖Spring Boot/React/Python三大生态,附13个生产级可复用测试片段

更多请点击: https://kaifayun.com 第一章:ChatGPT写单元测试:认知跃迁与工程价值重定义 传统单元测试编写长期被视作“必要但低效”的负担——开发者需在功能实现后回溯设计用例、构造边界条件、维护断言逻辑,耗时且易遗漏。而当…

2026/10/7 22:10:41 阅读更多 →

最新新闻

基于协同过滤的个性化电影推荐研究

基于协同过滤的个性化电影推荐研究

前言今天所阅读的这一个人, 是《电脑知识与技术》这本期刊在2019年的9月份所发表的一篇文章。这篇文章的标题叫做《基于的协同过滤算法的研究与应用实现》, 文章内容是关于协同过滤算法的一个研究与实际应用的呈现。摘要随着科学技术快速地发展, 并且知识产权变得日益重要, 绝大…

2026/10/18 6:33:52 阅读更多 →
Rust重写文字处理内核,开放AI可调用的文档处理库wordcraft实践

Rust重写文字处理内核,开放AI可调用的文档处理库wordcraft实践

最近在 GitHub 上看到一个很有意思的项目,叫 wordcraft,一句话概括就是:用 Rust 重写了一套兼容主流文档格式的文字处理内核,并且把编辑能力以库和接口的形式开放出来,让 AI Agent 可以直接调用。这个方向的想象力很大…

2026/10/18 6:33:52 阅读更多 →
Claude Code权限配置实战:用启动参数与规则告别确认弹窗,实现批量重构自动化

Claude Code权限配置实战:用启动参数与规则告别确认弹窗,实现批量重构自动化

用 Claude Code 做批量重构之前,我以为最大的成本是模型“理不理解需求”。真正上手之后才发现,成本是终端里一个接一个的确认弹窗:改一个文件弹一次,跑一条命令再弹一次,有时候同一个操作还会被拆成两次确认。本来是几…

2026/10/18 6:33:52 阅读更多 →
OpenClaw龙虾养殖指南精读:参数化养殖与水质管理实操

OpenClaw龙虾养殖指南精读:参数化养殖与水质管理实操

简介:面向AI从业者、开发者和普通用户的OpenClaw入门指南,以2026年初爆火的开源自主智能体项目为对象,系统讲解其产品定位、出圈原因、整体架构、Agent调度层、通讯层、记忆系统、技能工具链与运行流程,并覆盖国内平替、安全挑战和…

2026/10/18 6:33:52 阅读更多 →
Python 如何统一处理不同复权方式的 K 线?从 Pandas 数据处理到 QuantDash API 实战

Python 如何统一处理不同复权方式的 K 线?从 Pandas 数据处理到 QuantDash API 实战

一句话结论: 统一处理不同复权方式的 K 线,关键不是简单地把多个 DataFrame 拼在一起,而是明确价格口径、统一数据结构,并确保指标计算和回测使用的价格序列具有一致的复权规则。 摘要 在 Python 量化开发中,同一只股…

2026/10/18 6:33:52 阅读更多 →
跨境电商前端HTML模板:多语言多币种可落地骨架

跨境电商前端HTML模板:多语言多币种可落地骨架

简介:这是一套面向前端初学者与电商项目开发者的跨境电商网站前端模板代码,基于HTMLCSSJS构建,可快速搭建具备商品展示、购物车、响应式布局等基础功能的电商页面。资源共188个文件,包含26个结构清晰的HTML页面、7个核心CSS样式表…

2026/10/18 6:32:52 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →