Copilot SDK 的 Agent Harness

GitHub Copilot SDK 与 Microsoft Agent Framework 组合后,Harness 到底补了什么?本文拆解架构、权限边界、故障点和落地路线。

GitHub Copilot SDK 接入微软 Agent Framework

很多“搭一个 Agent”的演示,到函数调用成功就结束了。可到了真实项目,麻烦才刚开始:任务怎么拆、进度放哪、敏感命令谁批准、进程挂了如何续跑、多个 Agent 怎么交接、最后又凭什么相信它真的跑过测试?

Microsoft Agent Framework 对 GitHub Copilot SDK 的价值,正是在这些不够炫、却决定系统能否上线的地方。Copilot 负责有编码能力的执行后端;Agent Framework 则提供统一接口、Harness、工作流、状态、Middleware 和可观测性。

先说结论

  • 想把 Copilot 的文件、Shell、URL、MCP 能力嵌入自己的产品,二者组合很合适。
  • 任务需要计划、Todo、模式、记忆、审批和后台子 Agent 时,才真正需要 Harness。
  • 统一接口不代表行为完全一致;换 Provider 之前必须做契约测试。
  • 文件和 Shell 都是高权限能力,不能只靠 Prompt 约束。
  • 先把单 Agent 做稳,再根据可测量的缺口增加多 Agent。

这次集成究竟做了什么

微软在 2026 年 1 月发布了 GitHub Copilot SDK 集成,Python 和 .NET 都能把 Copilot 包装成 Agent Framework 中的 Agent。这样一来,Copilot Agent 可以进入顺序、并发、Handoff 或 Group Chat 工作流,也能接上统一的 Middleware 与 OpenTelemetry。

微软发布 GitHub Copilot SDK 与 Agent Framework 集成 这层集成是适配器,不是拿 Agent Framework 替换 Copilot 的执行能力。来源:Microsoft Agent Framework Blog

Copilot 原有的流式输出、多轮会话、函数调用、文件操作、Shell、URL 抓取和 MCP 仍由 Copilot SDK 提供。Agent Framework 负责让它与其他 Agent 和确定性节点使用同一套编排方式。

别把 SDK、Agent 和 Harness 混成一层

层次主要职责最常见的坑
GitHub Copilot SDK编码会话与原生执行能力工具与会话语义有 Provider 差异
Framework Agent统一消息、Run、Session、工具与 Middleware适配器漏掉特定事件或参数
Agent Harness长任务循环、计划、模式、记忆、审批与子 Agent自主性扩大后难以审计

普通 Agent 更像“一轮对话加若干工具调用”。Harness 则给它补上持续工作的机械结构。近几个版本里,Python 的 create_harness_agent 陆续加入文件访问、文件记忆、Shell、Todo、模式、工具审批、循环、后台 Agent、MCP 渐进披露和运行中消息注入。

Microsoft Agent Framework 仓库 Agent Framework 同时覆盖 Python、.NET、工作流、Checkpoint、Middleware 与多种 Provider。来源:microsoft/agent-framework

这些功能不会让模型突然更聪明,却会让它的工作更容易治理:Todo 把剩余任务摆到明面上;Mode 分开规划与执行;Memory 把长期状态从上下文窗口中拿出来;Approval 则在副作用发生前留下一个真人决策点。

一套更接近生产的架构

Issue 或用户请求
  -> 应用层身份与策略
  -> Agent Framework HarnessAgent
       - Mode / Todo
       - 工具审批 Middleware
       - 限定范围的文件与记忆
       - OpenTelemetry
  -> GitHubCopilotAgent / Copilot SDK
  -> 仓库沙箱与获准的 MCP Server
  -> Patch、测试证据、人工评审

可写目录、命令白名单、凭据范围、最大运行时间与审批规则,都应该由应用和沙箱决定,不能交给 Prompt。Prompt 可以解释政策,但无法执行政策。

系统还应保存一条完整证据链:原始请求、工具调用、文件变化、测试输出、人工批准和最终回复必须能相互对应。否则 Agent 写出的总结再像真的,也无法证明它实际做过什么。

真正的收益是组合,而不只是换模型

假设你在做自动修复流程:Copilot Agent 负责诊断和改代码;策略 Agent 只读 Diff,检查组织规则;确定性函数运行测试并打包证据。Agent Framework 可以表达这条流程,而且不需要把每一步都包装成 LLM。

构建、Schema 校验、权限判断和部署闸门通常更适合普通代码。需要理解语境、面对变化做判断时,才交给 Agent。这个区分能明显降低成本,也减少“同一个输入为何今天通过、明天失败”的困惑。

Checkpoint 对长任务同样关键。人工审批 20 分钟后才到,工作流应该从已记录状态继续,而不是让模型从聊天记录里猜测上次做到哪一步。

三个容易踩中的坑

统一接口,不等于统一语义

某个 Provider 的 Shell 可能是原生能力,另一个则是应用注册的函数;附件、流式工具事件、取消、推理内容和 Session 恢复也可能不同。Python Changelog 中持续出现 Provider 专属修复,恰好说明抽象层没有消灭底层差异。

Agent Framework Changelog 中的 Harness 与 Copilot 更新 近期版本让 Harness、审批、文件记忆和 Copilot Package 逐步稳定,同时仍在修复适配差异。来源:Python Changelog

至少要测:部分流式输出后取消、审批拒绝、附件转发、Session 恢复、工具报错传递。只验证“接口能调用”远远不够。

内建能力未必经过你监控的工具入口

2026 年 7 月的一条 Harness 拦截问题 提出了很实际的风险:内建文件、搜索或记忆能力,可能没有经过应用自定义工具所使用的观测入口。该问题已经处理,但它留下的检查方法很重要。

每项高权限能力都要确认:Middleware 能否看到参数;副作用前能否拒绝;可访问哪些文件和主机;日志里留下什么;取消和超时如何收场。不确定时,宁可关闭内建能力,换成权限更窄的应用自有工具。

Agent 越多,责任越容易模糊

多 Agent 架构图很漂亮,因为箭头不会展示冲突。落地时必须说清:谁能写文件、谁只能评审、意见冲突由谁裁决、什么条件代表流程结束。两个 Coding Agent 并发修改同一个 Worktree,通常不是效率优化,而是协调事故。

更稳妥的方式是按产物划边界:一个 Agent 生成 Patch;另一个只读不可变 Diff,输出 Findings;最后由确定性 Gate 决定是否推进。

一条不容易自欺的上线路线

第一阶段只做只读诊断,要求结论引用具体文件并复现失败。第二阶段允许在临时 Worktree 中写 Patch,同时强制保存 Diff 与测试输出。第三阶段给联网、安装依赖、使用 Secret 和白名单外命令加审批。第四阶段再引入 Checkpoint、可恢复人工评审和 Trace 关联,并故意在中途杀掉 Worker,检查恢复后是否重复副作用。

只有单 Agent 在评测集上暴露出稳定缺口,才进入第五阶段,增加评审或专项 Agent。

评测集别只放“改一个函数”这类顺风题。应该包含 Flaky Test、仓库文件中的提示注入、逃逸工作区的符号链接、执行到一半失败的 Shell,以及超时后才返回的审批。这些才会暴露 Harness 是否可靠。

谁适合用,谁不必用

如果团队使用 Python 或 .NET,已经购买 GitHub Copilot,又希望把编码能力嵌进内部平台、工单系统或长流程,这套组合很有吸引力。尤其当 Copilot Agent、其他 Provider、确定性步骤、持久状态和企业 Trace 必须共用一层编排时,Agent Framework 的价值很明确。

但个人开发者的一次性本地编码会话,没有必要为了架构整齐再套一层 Framework。原生 Copilot CLI 或宿主更简单。单 Agent 加可靠工具能解决的问题,也不值得强行拆成“Agent 团队”。

这和我们在 Google、LiteLLM 与 OpenRouter 的模型路由对比 里看到的规律相同:表面问题是接口,真正的选择是团队愿意承担哪一层运行责任。

常见问题

Agent Framework 会替代 GitHub Copilot SDK 吗?

不会。它把 Copilot 适配进统一 Agent 与 Workflow 抽象,底层编码会话和原生能力仍来自 Copilot SDK。

HarnessAgentGitHubCopilotAgent 是一回事吗?

不是。后者连接 Copilot Backend;前者给 Agent Loop 组合 Mode、Todo、Memory、File、Approval、Loop 与后台 Agent 等运行能力。

能把 Copilot 和其他模型放在同一流程吗?

可以,这正是 Framework 的主要用途之一。但统一接口之下仍有 Provider 差异,必须写契约测试。

开了 Approval,Shell 就安全吗?

不一定。你还要确认真实执行路径确实经过 Approval,并限制沙箱、凭据、命令和网络范围。

Coding Workflow 都应该改成多 Agent 吗?

不应该。只有新增 Agent 拥有清晰的产物或决策边界,并且能改善可测量指标时,复杂度才值得。

最后的判断

GitHub Copilot SDK 加 Microsoft Agent Framework,本质上是把“能写代码”与“如何可靠运行”拆开。Copilot 提供编码执行能力,Framework 让这份能力可组合、可恢复、可观测,也更容易接受人工审查。

真正决定能否上线的,不是 Harness 功能列表有多长,而是高权限路径是否都被约束并验证过。一个拥有宽泛文件和 Shell 权限、却没测过审批覆盖的 Harness,只是运行时间更长、爆炸半径更大的 Agent。