← 返回
AI技术

什么是 Harness?

✍️ zhirenhun 📅 2026/9/21 👁 247 阅读 ⏱ 10 分钟
什么是 Harness?

围绕 LLM 的那一层

Harness 是一层软件,它负责组装要发送的内容,也负责把 LLM 的回复转化为实际行动。LLM 本身没有记忆——再聪明也不会保存历史,更不会执行操作:它只是发出信号,指出该做什么,动手执行的是 harness。可以说,发什么给模型、怎么发,都由 harness 决定。

如果你读过上一篇文章,应该还记得:模型接收文本,进行处理,再依据训练得来的权重返回回答。

上一篇文章里我们还列了一张“产品 × 模型”对照表,产品实现的正是 Harness——ChatGPT、Claude Code、Cursor、Codex 都在 LLM 外围实现了整套工程。

你的消息在 ChatGPT 中的旅程

你把消息发出去,但它并不会径直送到模型那里——外围有一套软件工程会先组装好 prompt,再发给模型。落到实际中:有一段通用代码负责拼装指令和可用工具清单(含每个工具的名称、描述和参数格式),还会在你每次与聊天交互时,把整场对话的内容和记忆一并拼进去,一直拼到你最新那条消息。

大致就是下面这样:

你先提出第一个问题或发起第一次交互:

“我们来开发一个网站”。

“Harness” 组装出将要发送给 LLM 的结构:

伪结构

第 01 块(PROMPT)

{
  "system": "Você é o GPT criado pela OpenAI. A data de hoje é 16/09/2026, localização...",
  "interação-01": "Vamos desenvolver um site",
  "tools": ["criar_arquivo", "buscar_web", "criar_diretorio"]
}

他发送这个块并获得LLM的回答, “这个网站是关于什么的?”, 现在当你进行新的互动,回答 “这是一个开发者的项目作品集” 他会构建一个新的块 “连接” 第二次互动与 块 01.

块 02 (提示)

{
  "system": "Você é o GPT criado pela OpenAI. A data de hoje é 16/09/2026, localização...",
  "interação-01": "Vamos desenvolver um site",
  "resposta-chat-01": "Sobre o que é o site?",
  "interação-02": "É sobre um portfólio de projetos de um desenvolvedor",
  "tools": ["criar_arquivo", "buscar_web", "criar_diretorio"]
}

您是否注意到,在第二次交互时,块01被完整地再次发送给LLM,伴随着这一次交互?每次交互块都会变得更大,这是因为LLM没有记忆,需要重新发送全部内容,而完成这件事的是Harness,也就是围绕LLM的软件工程。

这对您作为开发者或设计带有人工智能应用的人来说为什么重要?即便您只是在喜欢的聊天软件上闲聊,也同样值得关注。

对您作为用户而言,影响较小,但也有相关性——因为您在聊天中互动越多,发送给LLM的文本就越多;对话开始时,LLM只收到少量信息,经过几轮互动后,信息量相对增大;如果您混合了不同话题,模型答错的概率会上升,可能会把旧指令和新指令搞混。不过需要注意的是,随着模型的演进,这种影响正在逐渐减弱,但仍值得我们关注和确认。

对您作为开发者而言,影响更大——您需要管理这个上下文,收集必要的信息发送给LLM,在收到响应时协调操作并返回给用户,所有这些责任都落在构建与AI集成应用的人身上。因此,了解AI周围发生的事情至关重要。

工具

要点在于,一个 tool 本质上是你后端中的一个函数。请注意,在伪提示 "bloco01 e bloco02" 中,有一些被称为 tools 的名称列表 [criar_arquivo, buscar_web, criar_diretorio],实际上不仅仅传递名称,还会传递这些 tools/工具的其他属性,比如描述以及函数的参数。这些信息会随其他一起发送给 LLM。

别急,年轻人。

我不喜欢在 Miro 里手动创建便签,所以我不自己创建,替我做这件事的是 Harness,在 LLM 的帮助下。

在一次 MBA 作业中,我需要在 Miro 上创建一些表示流程的图示,于是我决定使用 Claude。

我根据图像把想要的内容发送到聊天中,图像中也已经显示了“Harness”所做的事情。你会注意到聊天本身会提示它将定位该看板,并表明将查找可用的工具。这一过程之所以可能,是因为我之前在聊天中配置了 Miro 的连接器——这一点很重要,LLM 不会保存这些信息,保存这些信息的是“Harness”,或者说是 Claude 应用的后端。你也会看到我的指令非常简略,LLM 会补全大部分指令,以便 Harness 执行操作,这就是我说的,我的便签是由 Harness 在 LLM 的辅助下创建的。

-- 请求聊天。

-- 工具: board_show

该图显示了一个Miro应用程序的截图,显示了一个Canvas Composer界面,包含一个文本框和一个按钮

请看第二张图片 "Tool - board_show",聊天本身请求使用工具 board_show 并请求我的许可而阻止执行。

这张图片还显示了两件事:一是 harness 和 LLM 之间的循环;二是不太明显的 MCP(Model Context Protocol),但这些内容留到另一篇文章中,当我们详细讲解并实现 Harness 并讨论代理时再谈。接下来,board_show 显示下面的屏幕。

-- 在聊天中由 tool board_show 展示的板块

-- 在 Miro 中创建的流程

模型没有执行任何操作,它只是写了一个结构化的文本,类似于 "我想调用 board_show 并带上这个 URL"。执行的是 harness,它取得返回值并将其作为一条消息放回上下文。于是模型被再次调用,现在知道发生了什么。这个循环会重复直到任务完成;在 Miro 的情况下,经过多次往返直到流程准备就绪。这种往返就是循环,是下一篇文章的主题。

最后一点:你可以在不同的 harness 中使用同一个模型 — — Cursor、GitHub Copilot、Claude Code — — 并得到不同的结果。今天关于最佳模型有很多讨论,但也有很多关于最佳 "Harness" 的讨论。

我希望这两篇关于 LLM 和 Harness 的初始文章——人工智能的基本概念——能帮助你理解并继续学习后续内容。

在下一篇文章中,我们将讨论循环、MCP 以及对代理的简要介绍。

——

广告 广告
🧑‍💻

zhirenhun

一个热爱技术的程序员,喜欢分享前沿AI知识和开发经验。

ai llm harness software