从 Uncle Bob 的 Agent 协作实战,到 Microsoft Agent Framework,再到 OpenClaw.NET 的治理层运行时——一条清晰的 .NET AI 技术路线正在浮现。
最近,Clean Code 作者 Robert C. Martin(Uncle Bob)与 Matt Pocock 的一次对谈在技术圈刷屏。核心观点很尖锐:Agent 擅长战术、糟糕于战略。基本功在 AI 时代依然不可弃。
这句话像一盆冷水,浇醒了那些认为"AI 会取代程序员"的人,也恰好指明了 .NET 在 AI 编程时代的独特位置。
Bob 从去年底开始用 Grok 等 Agent 写代码,最初的体验很糟糕——Agent "很快但让我变慢",到处留下"混乱的代码、未清理的依赖、破碎的测试"。
他很快发现一个关键事实:智能体和人类一样,会被脏代码拖垮。 代码足够混乱后,Agent 会陷入"改一处坏另一处"的循环,甚至直接放弃。
Bob 最初尝试用冗长的 prompt(TDD、Clean Code 规则等)"驯化"Agent,但发现模型把这些规则当成"加勒比海盗式的指南"——可遵守可不遵守。技术原因是 "lost in the middle" 现象:上下文窗口中段的内容会被忽略。
于是他做了一个关键转向:放弃冗长 prompt,转向确定性工具链。
他搭建了多 Agent "流水线":
单 Agent 5 分钟的任务,这条链约 1 小时;人类则需约半天。质量远高于人类通常会投入的水平。
Bob 的核心论断是:
可以把人类价值观强加给智能体,但不要把人类的行为纪律强加给智能体。
换句话说:Agent 需要约束(价值观),但不需要手把手教(行为纪律)。
Bob 特别推崇 John Ousterhout 的 "深模块" 理念:小接口、深实现。模型可以只读接口而不用读实现,只要代码一致即可。
这对 .NET 来说是天然优势:
interface、record、依赖注入,让 Agent 通过类型签名就能理解模块边界Bob 将 CRAP 阈值从人类的 4 上调到 6,甚至考虑推到 8——因为 Agent 的短期记忆更大。但阈值可以调,规则不能丢。.NET 的强类型生态,正是"规则不丢"的最佳土壤。
这里需要更新一个关键信息:Semantic Kernel 已进入维护模式,其团队开发的 Microsoft Agent Framework 1.0 已正式发布,作为 Semantic Kernel 和 AutoGen 的直接后继者。
特性 | 对多 Agent 流水线的价值 |
|---|---|
Graph-based Workflows | 显式定义 Agent 流转,避免"迷失" |
Session-based State | 长周期任务的状态持久化 |
Native MCP + A2A | Agent 间工具调用标准化 |
Type Safety (.NET 原生) | 强类型契约,Agent 读接口即可 |
OpenTelemetry + DevUI | 可观测性,确定性工具链必备 |
MAF 解决了"多 Agent 如何编排"的问题,但它不负责执行治理——Agent 调用了工具,工具做了什么?是否符合规则?谁审批?如何审计?这些 MAF 不管。
这就留下了一个空白。
OpenClaw.NET 是一个 NativeAOT-friendly 的自托管 AI Agent 运行时和网关。它的定位非常精准:
不是"又一个 Agent 框架",而是 .NET AI 的"治理层运行时"。
它主动拥抱 MAF(Runtime.Orchestrator=maf),在 MAF 之下、.NET Runtime 之上,构建了一套完整的战术执行治理基础设施。
Bob 的实践原则 | OpenClaw 的工程实现 |
|---|---|
放弃冗长 prompt,转向确定性工具链 | Passive Harness Contracts + Evidence Bundles——规则在 harness 里,不在 prompt 里 |
多 Agent 流水线 | Plan-Execute-Verify Mode + Shared Harness State——跨 Agent 的读写集、冲突检测 |
不要把人类行为纪律强加给 Agent | Passive Governance Ledger——被动审计,不实时打断 Agent 工作流 |
上下文压缩避免污染 | TokenJuice——确定性规则压缩工具输出,减少"lost in the middle" |
1. Harness Contracts(执行前契约)
Agent 工作计划在执行前就被静态检查。不通过则不进入 runtime。这比"让 Agent 自己记住 Clean Code 规则"可靠得多——规则在 harness 里,不在 prompt 里。
2. Evidence Bundles(证据包)
每次工具调用的证据、风险、校验结果都被结构化记录。Bob 说的"确定性质量门禁"直接内置——Agent 做了什么,留下了什么痕迹,一目了然。
3. TokenJuice(上下文压缩)
工具输出(日志、文件、数据库查询结果)往往极度冗长,直接塞进 LLM 上下文会触发 "lost in the middle"。TokenJuice 用确定性规则做压缩,保证关键信息不丢失的同时减少噪声。
这是典型的 ".NET 式工程思维"——用类型安全、确定性规则解决问题,而不是再加一层 AI。
4. /goal + /loop:战略与战术的分层
/goal:人类设定战略目标,session-scoped auto-continuation,Agent 在边界内持续战术执行/loop:周期性战术执行,TickerQ 定时注入,适合构建健康检查、日志轮询等自动化任务这完美回应了 Bob 的警告:人类做战略,Agent 做战术。
如果你关注 DDD 限界上下文、JSON-LD Ontology、MetaSkill DAG,OpenClaw.NET 提供了一个现成的 .NET 宿主来落地:
层级 | 技术映射 |
|---|---|
战略层 | MetaSkill DAG + DDD 限界上下文——人类定义"做什么" |
规格层 | JSON-LD Ontology ——领域知识的结构化语义 |
战术层 | OpenClaw SkillKit + Harness Contracts——Agent 编排"怎么做" |
执行层 | .NET Runtime + ONNX Runtime——类型安全、高性能、可观测 |
openclaw harness map 可以生成仓库的静态映射(projects、modules、endpoints、tools),相当于把 DDD 的限界上下文和依赖方向显式化,然后作为 harness contract 约束 Agent 的行为——Agent 不会"越界"修改不属于自己的聚合。

上图展示了从战略到执行的完整四层架构:
.NET 在 AI 编程时代的机会,不是"让 Agent 替代 .NET 开发者写代码",而是:
.NET 凭借强类型、成熟的确定性工具链、Microsoft Agent Framework 的编排能力、以及 OpenClaw.NET 的治理基础设施,成为"人类做战略、Agent 做战术"这一模式的最佳技术栈之一。
几个具体建议:
Bob 在访谈中引用 Dijkstra:软件是人类尝试过最复杂的事物。 基本功是把复杂性组织成可被构想的形式——不仅人能构想,模仿人类的模型也能。
那些认为基本功不再重要的人,"会以痛苦的方式学到,且不会太久"。Bob 亲眼见过智能体撞上那堵墙。
.NET 开发者有一个独特的优势:我们的语言、运行时、工具链,从一开始就是为"管理复杂性"设计的。在 AI 时代,这个优势不仅没有消失,反而因为 Agent 对确定性、可观测性、治理能力的渴求而变得更加重要。
AI 不会取代程序员,但会取代那些不理解"为什么需要基本功"的程序员。 .NET 社区,正好站在一个绝佳的位置上。
本文部分观点参考 Uncle Bob 与 Matt Pocock 的对谈、Microsoft Agent Framework 官方文档、以及 OpenClaw.NET 开源项目。
相关资源: