AI 编程时代,.NET 的机会在哪里?
从 Uncle Bob 的 Agent 协作实战,到 Microsoft Agent Framework,再到 OpenClaw.NET 的治理层运行时------一条清晰的 .NET AI 技术路线正在浮现。
最近,Clean Code 作者 Robert C. Martin(Uncle Bob)与 Matt Pocock 的一次对谈在技术圈刷屏。核心观点很尖锐:Agent 擅长战术、糟糕于战略。基本功在 AI 时代依然不可弃。
这句话像一盆冷水,浇醒了那些认为"AI 会取代程序员"的人,也恰好指明了 .NET 在 AI 编程时代的独特位置。
一、Uncle Bob 发现了什么?
Bob 从去年底开始用 Grok 等 Agent 写代码,最初的体验很糟糕------Agent "很快但让我变慢",到处留下"混乱的代码、未清理的依赖、破碎的测试"。
他很快发现一个关键事实:智能体和人类一样,会被脏代码拖垮。 代码足够混乱后,Agent 会陷入"改一处坏另一处"的循环,甚至直接放弃。
从 Prompt 驯化到确定性工具链
Bob 最初尝试用冗长的 prompt(TDD、Clean Code 规则等)"驯化"Agent,但发现模型把这些规则当成"加勒比海盗式的指南"------可遵守可不遵守。技术原因是 "lost in the middle" 现象:上下文窗口中段的内容会被忽略。
于是他做了一个关键转向:放弃冗长 prompt,转向确定性工具链。
他搭建了多 Agent "流水线":
- Specifier:把需求转为 Gherkin 验收测试
- Coder:写单元测试与实现代码
- Cleaner:跑 CRAP 分析,清理烂摊子
- Hardener:跑变异测试,追求 100% 覆盖
- QA Agent:端到端验证
单 Agent 5 分钟的任务,这条链约 1 小时;人类则需约半天。质量远高于人类通常会投入的水平。
Bob 的核心论断是:
可以把人类价值观强加给智能体,但不要把人类的行为纪律强加给智能体。
换句话说:Agent 需要约束(价值观),但不需要手把手教(行为纪律)。
二、.NET 的强类型,恰好是 Agent 的"深模块"
Bob 特别推崇 John Ousterhout 的 "深模块" 理念:小接口、深实现。模型可以只读接口而不用读实现,只要代码一致即可。
这对 .NET 来说是天然优势:
- 接口即契约 :C# 的
interface、record、依赖注入,让 Agent 通过类型签名就能理解模块边界 - 编译器即门禁:代码不通过编译就无法运行,这是比任何 prompt 都更确定性的约束
- 架构可测试:NetArchTest 可以把模块依赖规则变成可执行测试,Agent 违反就自动修复
Bob 将 CRAP 阈值从人类的 4 上调到 6,甚至考虑推到 8------因为 Agent 的短期记忆更大。但阈值可以调,规则不能丢。.NET 的强类型生态,正是"规则不丢"的最佳土壤。
三、Microsoft Agent Framework:编排层的统一
这里需要更新一个关键信息: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:填补"治理层"的空白
OpenClaw.NET 是一个 NativeAOT-friendly 的自托管 AI Agent 运行时和网关。它的定位非常精准:
不是"又一个 Agent 框架",而是 .NET AI 的"治理层运行时"。
它主动拥抱 MAF(Runtime.Orchestrator=maf),在 MAF 之下、.NET Runtime 之上,构建了一套完整的战术执行治理基础设施。
Bob 的方法论,在 OpenClaw 中的工程化映射
| 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 做战术。
五、MetaSkill DAG + DDD + JSON-LD:你的技术栈正站在风口
如果你关注 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 生态架构全景

上图展示了从战略到执行的完整四层架构:
- 战略层:人类操作员通过 DDD 限界上下文和 MetaSkill DAG 定义目标边界
- 编排层:Microsoft Agent Framework 负责多 Agent 流水线的图编排
- 治理层:OpenClaw.NET 提供 Harness Contracts、Evidence Bundles、Governance Ledger 等治理基础设施
- 执行层:.NET Runtime 提供 NativeAOT、强类型约束、本地推理和确定性工具链
七、对 .NET 开发者的启示
.NET 在 AI 编程时代的机会,不是"让 Agent 替代 .NET 开发者写代码",而是:
.NET 凭借强类型、成熟的确定性工具链、Microsoft Agent Framework 的编排能力、以及 OpenClaw.NET 的治理基础设施,成为"人类做战略、Agent 做战术"这一模式的最佳技术栈之一。
几个具体建议:
- 不要把 TDD 的行为纪律强加给 Agent------让它们自由实现,然后用 Stryker.NET 变异测试倒逼质量
- 不要用冗长 prompt "驯化" Agent 写 Clean Code------直接给 NetArchTest 规则文件,让编译器和架构测试做确定性约束
- 不要过度前期规划------用垂直切片交付,让 Agent 边做边重构,配合 harness 的 checkpointing 和 human-in-the-loop
- 关注 OpenClaw.NET 的治理层设计------它是目前 .NET 生态中把"Agent 治理"作为第一性原理设计的运行时
结语
Bob 在访谈中引用 Dijkstra:软件是人类尝试过最复杂的事物。 基本功是把复杂性组织成可被构想的形式------不仅人能构想,模仿人类的模型也能。
那些认为基本功不再重要的人,"会以痛苦的方式学到,且不会太久"。Bob 亲眼见过智能体撞上那堵墙。
.NET 开发者有一个独特的优势:我们的语言、运行时、工具链,从一开始就是为"管理复杂性"设计的。在 AI 时代,这个优势不仅没有消失,反而因为 Agent 对确定性、可观测性、治理能力的渴求而变得更加重要。
AI 不会取代程序员,但会取代那些不理解"为什么需要基本功"的程序员。 .NET 社区,正好站在一个绝佳的位置上。
本文部分观点参考 Uncle Bob 与 Matt Pocock 的对谈、Microsoft Agent Framework 官方文档、以及 OpenClaw.NET 开源项目。
相关资源:
- OpenClaw.NET: https://github.com/clawdotnet/openclaw.net
- Microsoft Agent Framework: https://github.com/microsoft/agent-framework
- Uncle Bob 对谈: https://youtube.com/watch?v=zcLPGC-tvgk