NET+AI | Harness | MAF 1.4 发布,Harness Engineering 如约而至,智能体工程化更进一步
这样理解不算错但只停在这里基本会把它看小。因为当智能体还只是“调一次模型回一段答案”的时候Prompt、Tool Calling、Memory 这些词确实差不多够用了。但一旦智能体开始进入真实任务比如连续执行多步操作、访问文件系统、管理中间状态、处理中断、接受审批甚至把部分任务委托给子智能体问题就变了。这时候真正决定系统能不能落地的往往已经不是模型本身而是模型外面那层执行骨架。这层骨架就是 Harness。而 MAF 1.4 值得看的地方也正是在这儿。它补的不是一个零散能力点而是一层更接近工程现实的运行时控制面。这篇文章我想按一个很顺的顺序来讲四件事什么是 Harness Engineering它为什么会变成智能体工程里的关键概念MAF 1.4 是怎么把这套机制落下来的我们怎么通过一个简单的 .NET 示例看懂 Harness 的价值一、什么是 Harness Engineering先说我更认同的一个定义。结合现有资料来看Harness Engineering 本质上是在模型外面补一层“可执行的脚手架”把 AI 的能力约束成稳定产出。它不只是让模型更聪明而是让系统更可执行。再直白一点Harness Engineering 关心的不是“模型会不会回答”而是“智能体能不能稳定把事情做完”。如果按现有 Wiki 里的定义来压缩它至少要满足四件事有输入、有步骤、有验收、有兜底。我觉得这个定义很准。因为智能体一旦进入真实世界马上就会遇到几类很具体的问题。它怎么接任务不是所有输入都应该直接扔给模型。有些是业务任务有些是控制命令有些只是环境反馈。它怎么拆任务复杂任务不能全靠模型一口气想完。你得拆步骤知道先做什么、后做什么。它怎么管理状态任务做到一半当前进度是什么已经产出了什么中间文件在哪哪些步骤完成了这些都不能只靠上下文硬记。它怎么安全访问环境只要智能体开始读写文件、调用外部工具、修改资源就一定会碰到权限边界、路径校验、审批和回滚。它怎么处理长上下文短对话里模型还能勉强记住过程。长任务一跑起来上下文越来越长噪声越来越多没有压缩和收敛机制最后大概率会跑偏。它怎么失败后恢复如果每次出错都只能整段重来那这个系统就谈不上工程价值。所以我更愿意把 Harness Engineering 看成一层“执行治理”。如果说 Prompt Engineering 更接近“怎么提问”那么 Harness Engineering 更接近“怎么让系统按流程、安全、稳定地执行”。这里可以先用一张图把这个概念压缩一下。用户目标Harness 执行脚手架任务输入治理步骤拆解状态管理环境访问边界验收与兜底模型/Agent这张图想表达的核心很简单。模型当然还是核心能力源但真正让它变成工程系统的是外面这层 Harness。这一节先收一下。Harness Engineering 不是给智能体多装一个功能插件而是在给智能体补一套“可执行、可治理、可验收”的运行壳。它解决的不是“模型答得好不好”而是“系统跑得稳不稳”。二、MAF 1.4 在做什么把 Harness 拉进主线理解了 Harness Engineering再回头看 MAF 1.4就更容易抓住重点。很多人看到 release note 里出现 Harness第一反应可能是微软又加了个新特性。但如果顺着现有材料往下看我觉得更准确的判断是MAF 1.4 不是简单“支持了 Harness”而是开始把智能体开发从“能力拼装”往“执行系统工程化”推。这件事为什么重要因为 MAF 之前已经在补另一条线就是 Skills。Skills 更像能力包。它解决的是智能体会什么。比如给它一套 instructions、scripts、references、assets让它具备某个领域能力。而 Harness 解决的是另一件事智能体怎么干。这两者不是替代关系而是前后关系。Skills 解决“会什么”。Harness 解决“怎么稳定地把事做完”。这也是为什么我会觉得MAF 的路线到 1.4 开始清楚了不少先把能力模块化再把执行工程化。换句话说Skills 更像能力封装层Harness 更像运行时执行层。这一节的小结也很关键。如果你只把 Harness 当成一个 API或者一个 sample就会看小 MAF 1.4。它真正补上的是一层更像“控制面”的东西。三、MAF 1.4 是怎么实现这套机制的接下来把视角从概念切到实现。从现有两篇材料里能看到MAF 1.4 至少在四个方向上给了很明确的信号。命令平面把任务输入和控制输入分开这是我觉得最值得注意的一点。从材料来看MAF 在 Harness 相关实现里引入了 ICommandHandler 这样的控制接口同时暴露了像 /mode、/todos 这样的命令入口。这意味着什么意味着框架开始明确区分两类输入要交给智能体执行的任务输入要交给运行时处理的控制命令这个区分非常关键。因为一旦所有输入都被当成自然语言 prompt系统就永远停留在“聊天盒子”阶段。你没法让用户清晰地查看模式、检查待办、切换执行状态也很难构建稳定的运行时交互。但一旦有了命令平面智能体就不再只是一个对话对象而是一个可被操控的执行单元。这其实就是 Harness 思维的典型体现。不是所有东西都交给模型理解而是把一部分系统行为显式拉回框架侧处理。状态平面把状态从上下文里解耦出来第二个很明显的信号是一批 Provider 的出现或增强比如TodoProviderAgentModeProviderFileMemoryProviderFileAccessProvider单看名字就能看出来这不是在单纯扩 API而是在把原本可能混在上下文里的东西拆成独立可治理的状态模块。这件事为什么重要因为很多智能体 demo 都有一个通病所有东西都塞进聊天历史。任务计划塞进去。中间结果塞进去。执行状态塞进去。文件访问记录也塞进去。短任务还能撑住任务一长系统就开始失真。而 TodoProvider、AgentModeProvider 这一类组件的意义就是把“任务计划”“当前模式”“外部文件状态”这些要素从对话历史中拆出来变成显式管理对象。这说明 MAF 正在从“单轮推理器”往“带状态机的执行体”走。我觉得这是个很关键的变化。因为真正能做长任务的智能体一定不是只靠上下文堆起来的。它必须有显式状态层。上下文治理开始正面处理长任务问题第三个信号是 context compaction strategy。这个词听起来很工程化但翻译成人话其实很简单任务长了上下文不能无上限膨胀必须有压缩、摘要和收敛机制。这一点我很认同。因为很多人现在谈智能体还停留在“模型上下文变长了所以长任务就能解决”的想象里。真正做过的人都知道不是这样。长上下文不是银弹。上下文一长真正的问题会变成历史信息越来越多噪声越来越多模型开始抓不住重点前面做过的决策和后面的执行越来越容易脱节所以一个能跑长任务的系统必须主动处理上下文膨胀。不是一股脑全塞进去而是要知道什么该保留什么该摘要什么该收敛成状态。MAF 在 Harness 里引入这类机制说明它已经开始正面处理长任务执行的核心难题而不是只停留在 sample 层。环境边界与委托能力从“会调工具”走向“安全执行任务”第四个方向也很重要。材料里能看到一些明显的边界治理信号比如path validationapproval helpersFileAccessProvidersubagents provider这几件事放在一起看其实就能看出 MAF 的判断了智能体真正进入环境执行层后问题不再是“它能不能调用工具”而是“它能不能在边界内、安全地调用工具”。这是两回事。会调用工具只说明模型有动作能力。会在权限边界内调用工具才说明系统具备工程能力。同样subagents provider 也不是简单“支持多 Agent”这么轻描淡写。它真正说明的是框架开始为任务分工、委托执行和协同收敛预留统一入口。这意味着 Harness 不只是单体 Agent 的壳更是在为执行网络做准备。这里我建议用一张图把上面四层机制合起来看。用户任务Harness 控制层命令处理 Command Handlers状态管理 Providers上下文压缩与收敛环境访问与权限边界子智能体委托Agent Runtime模型推理工具调用任务结果这张图背后的判断是MAF 1.4 补的不是一个零散 API而是一层真正的运行时控制面。这一节收一下。如果你从 Harness Engineering 的视角回看 MAF 1.4会发现它在做四件很“工程”的事区分命令与任务、显式管理状态、治理长上下文、建立环境边界和委托能力。这几件事放在一起智能体才开始像一个系统而不只是一个聊天玩具。四、一个最小 .NET 代码示例Harness 到底比普通调用多了什么光讲概念还是有点虚。所以这一节我想用一个最小代码示例把这个问题讲透。场景很简单。给定多个研究主题先收集原始材料再生成摘要。这个场景看起来不复杂但很适合说明 Harness 的价值。因为它天然包含两个阶段收集信息汇总结果如果不用 Harness我们通常会怎么写大概率就是写一个普通方法里面顺序调用两个对象。这样当然能跑但任务名、输入输出、执行入口、后续扩展点都会比较松散。而用了 Harness 之后重点不是“少写几行代码”而是先把执行骨架立起来。先看代码。先定义两个最小子能力using System;using System.Linq;using System.Threading;using System.Threading.Tasks;public class ResearchAgent{public Taskstring[] CollectAsync(string[] topics, CancellationToken cancellationToken){var results topics.Select(topic $“Collected raw information about: {topic}”).ToArray();return Task.FromResult(results); }}public class SummaryAgent{public Taskstring[] SummarizeAsync(string[] rawResults, CancellationToken cancellationToken){var summaries rawResults.Select(item $“Summary {item}”).ToArray();return Task.FromResult(summaries); }}这段代码很简单。ResearchAgent 负责“收集原始信息”。SummaryAgent 负责“汇总成摘要”。如果只是写 demo到这里其实已经够了。但问题也在这里这只是两个普通类还没有形成一个明确的任务执行结构。所以第二步定义 Harness。用 Harness 把任务注册起来using Microsoft.MAF.Harness;public class ResearchHarness : TaskHarness{public ResearchHarness(){RegisterTaskHandlerstring[], string[](“ResearchAndSummarize”,async (topics, token) {var researcher new ResearchAgent();var summarizer new SummaryAgent();var rawResults await researcher.CollectAsync(topics, token); var summaries await summarizer.SummarizeAsync(rawResults, token); return summaries; }); }}这段代码里我觉得有 4 个点特别值得注意。第一任务名被显式定义了。不是“随手调一个方法”而是注册了一个明确的任务ResearchAndSummarize。这件事在 demo 里看起来像形式感但在工程里很重要。因为任务一旦被命名后面你才能围绕它做日志、状态、监控、审批和调度。第二输入输出边界被显式定义了。这里的输入是 string[] topics输出是 string[] summaries。这意味着任务边界开始清晰了。系统知道这个任务吃什么、吐什么。后面你要做校验、测试、扩展就都有抓手。第三步骤结构被显式固化了。先 CollectAsync再 SummarizeAsync。这听起来像废话其实不是。因为很多智能体系统一开始都是靠 prompt 让模型“自己想步骤”。这种方式灵活但不稳定。Harness 的价值之一就是把那些已经稳定下来的执行骨架显式化。第四后续扩展点变清楚了。现在这个示例很小但你已经很容易想象后面能加什么在 rawResults 之后加中间状态持久化在 SummarizeAsync 之前加人工审批在执行中写入 todo 更新在任务过长时做上下文压缩把 CollectAsync 拆给多个 subagent 并行执行这就是 Harness 的意义。它不是让今天这段代码突然变聪明而是让明天这段代码更容易演进成系统。统一执行入口接着看执行代码。var harness new ResearchHarness();var topics new[]{“Microsoft Agent Framework”,“Harness Engineering”,“.NET Agent Runtime”};var summaries await harness.ExecuteTaskAsyncstring[], string[](“ResearchAndSummarize”,topics,CancellationToken.None);Console.WriteLine(“Final Summaries:”);foreach (var summary in summaries){Console.WriteLine(summary);}如果你只看表面这段代码和普通方法调用差别不大。但真正值得关注的是它背后的组织方式已经变了。以前可能是main 方法→ new 两个对象→ 顺序调用→ 输出结果现在则变成了统一执行入口→ 按任务名调度→ 按输入输出边界执行→ 产出统一结果这背后的变化是你已经不只是“调用几个类”而是在“执行一个被框架托管的任务”。为了更直观一点我把这个最小示例再画成一张时序图。SummaryAgentResearchAgentResearchHarness调用方SummaryAgentResearchAgentResearchHarness调用方ExecuteTaskAsync(“ResearchAndSummarize”, topics)CollectAsync(topics)rawResultsSummarizeAsync(rawResults)summariesfinal summaries这张图看起来很朴素但已经足够说明一个关键差别Harness 不是替你完成业务逻辑而是替你把业务逻辑装进一个可注册、可执行、可扩展的任务壳里。这段代码为什么比普通方法调用更“工程化”我想把这一点再讲透一点。因为很多人看到这种示例第一反应会是“这不就是把普通方法包了一层吗”从代码行数看确实像。但从工程视角看不是。区别主要在这里普通方法调用更像临时脚本你当然能跑通但任务身份不明确执行结构也没有被系统化管理。Harness 注册更像运行时契约任务名、输入输出、执行入口都开始标准化。普通方法不天然具备治理入口你后面想加日志、审批、恢复、模式切换往往要自己东拼西补。Harness 天然适合继续往“控制面”演进这才是 MAF 1.4 真正值得关注的地方。所以这段示例代码最重要的不是它完成了“研究并汇总”这个动作而是它展示了一个很关键的姿势先把任务执行骨架搭起来再往里面持续加状态、治理和边界。这一节收一下。Harness 的价值不在于让一个简单 demo 看起来更高级而在于让它从“一次性脚本”变成“可扩展的任务运行单元”。五、怎么理解 Skills 和 Harness 的关系写到这里很多人会自然问一个问题那 Skills 和 Harness 到底是什么关系我更愿意用一句最简单的话来概括Skills 解决“会什么”Harness 解决“怎么干”。这两者放在一起刚好构成了智能体工程里最重要的两层。第一层能力层。也就是 Skills。把 instructions、scripts、references、assets 这些能力资产模块化封装起来让智能体获得特定领域能力。第二层执行层。也就是 Harness。把任务输入、步骤编排、状态管理、上下文治理、权限边界、委托执行这些能力组织起来让智能体能稳定执行。所以我觉得MAF 1.4 值得关注不是因为它新增了一个术语而是因为它让这两层开始形成配合关系了。有 Skills智能体才不至于空心。有 Harness智能体才不至于失控。这一节也收一句更直白的。没有 Skills智能体可能什么都不会。没有 Harness智能体可能什么都想干但干不稳。六、最后怎么评价 MAF 1.4如果让我做一个比较克制的判断我会这么说MAF 1.4 释放出的方向是对的而且信号很明确但生态还在早期。为什么说方向对因为它开始补的是智能体工程里真正难、也真正值钱的那部分能力命令控制显式状态长任务上下文治理环境边界子任务委托这些东西都不 flashy也不适合拿来做特别炫的 demo但它们恰恰决定了一个框架能不能进生产主线。为什么又说还在早期因为从框架支持到真正形成成熟生态中间还差很多层更强的可观测性

相关新闻

宁波这些口碑超棒的婚姻律师,你知道都有谁吗

宁波这些口碑超棒的婚姻律师,你知道都有谁吗

在婚姻家事领域,存在着诸多核心技术挑战。据相关数据显示,在离婚财产分割案件中,有超过60%的案件涉及复杂财产类型,如房产、股权、隐匿财产等,这给财产的准确评估和合理分割带来了巨大困难。在孩子抚养权争夺方面&…

2026/8/15 17:19:38 阅读更多 →
Unlock-Music:浏览器内一键解锁加密音乐文件的终极解决方案

Unlock-Music:浏览器内一键解锁加密音乐文件的终极解决方案

Unlock-Music:浏览器内一键解锁加密音乐文件的终极解决方案 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: …

2026/8/16 18:55:50 阅读更多 →
Python焚诀之函数

Python焚诀之函数

Python焚诀之函数题目1:简单问候函数 编写一个函数 say_hello(name),接收一个名字参数,返回 "你好,{name}!" 格式的字符串。 要求: 定义函数,带一个参数使用 return 返回结果调用函数…

2026/8/13 1:48:03 阅读更多 →

最新新闻

Linux内存排查:当top显示内存不足却找不到占用进程时如何解决

Linux内存排查:当top显示内存不足却找不到占用进程时如何解决

1. 问题引入:当TOP告诉你一个“谎言”在Linux系统运维和性能调优的日常里,top命令是我们最信赖的“仪表盘”。它能实时告诉我们CPU在忙什么,内存被谁吃了。但有时候,这个仪表盘会显示一个令人困惑的读数:系统的内存使用…

2026/8/16 20:08:16 阅读更多 →
Photoshop 2020新手入门:从安装到核心工具与图层蒙版详解

Photoshop 2020新手入门:从安装到核心工具与图层蒙版详解

1. 项目概述:从零开始的PS学习与安装指南 如果你刚接触设计,或者想给自己的照片、社交媒体内容加点料,Photoshop(简称PS)这个名字你一定不陌生。它几乎是图像处理领域的代名词,功能强大到让人又爱又怕。爱的…

2026/8/16 20:08:16 阅读更多 →
Anaconda安装后Path环境变量配置全解析与排错指南

Anaconda安装后Path环境变量配置全解析与排错指南

1. 为什么你的Anaconda总是“装上了又好像没装上”?如果你在搜索引擎里敲下“Anaconda安装”这几个字,大概率是因为你刚经历了一场小小的挫败:明明看着教程一步步点完了安装程序,可一打开命令行,输入conda或者python&a…

2026/8/16 20:08:16 阅读更多 →
逻辑回归中最大似然到底是怎么转换为交叉熵损失的(带你彻底搞懂逻辑回归的损失函数)

逻辑回归中最大似然到底是怎么转换为交叉熵损失的(带你彻底搞懂逻辑回归的损失函数)

逻辑回归中最大似然估计的理解从 lny1−ywxbln\frac{y}{1-y}wxb ln1−yy​wxb到最大化似然函数(其实就是最小化损失)的过程理解和简单推导. 很多课件在这里跳得太快,导致很多人不知道逻辑回归是怎么从最大似然估计推导到了经典的二元交叉熵损失函数的。其实中间缺了…

2026/8/16 20:08:16 阅读更多 →
GPT大模型在数学建模中的实战应用:从思路启发到代码生成

GPT大模型在数学建模中的实战应用:从思路启发到代码生成

1. 从“算盘”到“副驾驶”:数学建模的范式革新 十几年前,我参加数学建模竞赛时,工具是MATLAB、SPSS和一堆纸质文献,解题过程更像是在“推演”和“试错”。如今,当GPT这类大语言模型闯入这个领域,它带来的远…

2026/8/16 20:08:16 阅读更多 →
那些打不开的 .brd 文件,都欠一个免费开源查看器

那些打不开的 .brd 文件,都欠一个免费开源查看器

那些打不开的 .brd 文件,都欠一个免费开源查看器 【免费下载链接】OpenBoardView View .brd files 项目地址: https://gitcode.com/gh_mirrors/op/OpenBoardView 周六晚上,维修店的老周收到客户发来的一份 .brd 文件,附言只有一句&…

2026/8/16 20:07:16 阅读更多 →

日新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/16 0:00:54 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/16 0:00:55 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/16 0:03:55 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/16 0:00:54 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/16 0:00:55 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/16 0:03:55 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/16 6:00:23 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/16 6:00:24 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/16 6:00:27 阅读更多 →