最近微软发布了Agent Framework 1.0,这个东西其实挺有意思的,它不是凭空冒出来的一个新项目,而是微软内部三个团队的经验融合到一起的产物。今天我们就来聊聊这个框架背后的设计理念和技术选择。
对,这三个团队分别是Semantic Kernel、Microsoft Extensions AI和AutoGen。其实故事要从2022年底说起,那时候生成式AI刚起步,.NET生态里几乎没有像样的AI开发工具。微软内部搞了一个秘密项目就是Semantic Kernel,核心想法是把大语言模型的能力变成可编排的插件和技能,让.NET开发者也能方便地用上AI。
等一下,那个时候不是已经有LangChain了吗?
有,但LangChain主要面向Python生态。你想想,大量企业客户用的是C#和.NET,他们需要一个有版本控制、无破坏性变更、能长期维护的生产级框架。这其实就是后来Agent Framework最大的护城河——企业级稳定性。
嗯,我记得早期在函数调用出现之前,开发者跟大模型打交道其实挺痛苦的。
哈哈,对,那时候简直是刀耕火种。团队当时用一种叫'规划'的方式,给模型提供示例,强迫它用XML或JSON格式回复。有时候能成功,有时候模型就完全跑偏了。直到2023年6月OpenAI推出了函数调用能力,模型可以自己判断什么时候该调用函数并生成结构化参数,这才彻底改变了游戏规则。
所以从Semantic Kernel到Agent Framework,中间经历了一个多团队融合的过程?
没错。Semantic Kernel负责核心的AI编排能力,AutoGen带来了多代理对话协作的经验——就是让多个AI代理通过对话来完成复杂任务。不过AutoGen更偏实验性质,缺乏企业级的版本管理。然后还有一个关键角色是Microsoft Extensions AI,它解决了一个特别实际的问题:不同AI提供商的SDK各不相同,开发者不想为每个都写一套客户端代码。
这个我理解,就像.NET里ILogger对日志框架的抽象一样?
你这个类比特别准确。Extensions AI定义了IChatClient这样的标准接口,不管你后端用的是OpenAI、Anthropic还是Google Gemini,应用代码都不用改。Roger说了一句特别精辟的话——'没人能拒绝.NET,但很容易拒绝陌生的Semantic Kernel'。所以把基础抽象放到.NET核心库层面,接受度就完全不一样了。
好,那我们来聊聊Agent Framework最核心的设计——中间件架构。我看到它借鉴了ASP.NET的中间件模式,这个选择挺巧妙的。
其实你可以把它想象成一个洋葱模型。每条消息在到达AI代理之前,会依次穿过一层层中间件,每层可以做不同的事情——比如第一层做PII检测,把用户消息里的身份证号、手机号这些敏感信息过滤掉;第二层做内容安全防护栏,防止模型生成有害内容;第三层记录日志和遥测数据。模型返回的响应也会反向穿过这些层。关键是这些中间件都是独立的组件,可以自由组合、复用,不用改代理的核心逻辑。
对于企业来说,这种设计确实太重要了,尤其是在GDPR这些数据保护法规下。那框架具体提供了哪几种扩展类型?
一共五种。第一种是代理中间件,最高级别的,直接接收原代理返回一个改造后的新代理。第二种是运行时中间件,在调用代理时修改或查看消息。第三种是依赖注入中间件,为代理提供DI服务。第四种是函数调用中间件,专门拦截函数调用过程。第五种是我个人觉得最巧妙的——AI上下文提供者。
这个上下文提供者有什么特别的?
它支持动态工具调用。你想,传统做法是每次API调用都把所有工具定义一股脑发给模型,工具多的时候可能占用几千个token,既费钱又浪费上下文窗口。AI上下文提供者实现了按需加载——只在模型确实需要某个工具时才把定义注入进去。在那种有几十上百个工具的企业场景里,这个'懒加载'策略能省下很可观的成本。
说到企业级,团队在API设计上有一个很有意思的理念叫'打破玻璃',能展开说说吗?
这个理念其实是在抽象便利和底层自由之间找平衡。好的抽象应该让你90%的时候很方便,但剩下10%你需要访问底层实现时,框架不应该拦着你。就像消防栓外面那层玻璃,紧急情况下你可以打破它直接用。而且Roger提到一个有趣的规律——当足够多的开发者在同一个地方'打破玻璃'时,团队就知道该在那里提供一个正式的抽象了。
这其实是一种很务实的API演进策略。那1.0版本发布时压力大吗?
压力非常大。因为一旦API定型,就必须保证向前兼容。对大企业来说,一次破坏性变更可能意味着几百个微服务要同步更新、几周的回归测试。Roger自己维护着80多个示例,发布前的维护工作特别繁琐,但他说'现在做总比事后到处修补要好,否则会彻底失去大企业的信任'。
嗯,这种态度确实是企业级框架该有的样子。团队的协作模式也挺特别的吧?
对,团队分布在荷兰、爱尔兰、美国、韩国,基本实现了全天候覆盖。每天都要沟通确保.NET和Python两个版本功能对等,同时又要尊重各自语言的惯用写法。项目完全开源,每周还有固定的办公时间让社区开发者来提问交流。
最后聊一个有意思的点——Roger自己日常怎么用AI工具的?
他说自己平时同时跑三四个AI代理,分别处理不同仓库和任务。他的建议是给每个代理分配特定职责——一个写测试、一个做质量保证、一个检查流水线——让它们各司其职协作,而不是指望一个代理包打天下。他还开源了一个叫Copilot Booster的小工具,专门解决多仓库工作时上下文混乱的问题,能管理多个会话、快速切换仓库和分支。
所以Agent Framework 1.0其实只是一个起点。三到六行代码就能跑起一个代理,门槛很低,但背后的中间件架构和企业级设计又足够深。Roger说未来token生成速度可能达到每秒数千,到时候代理会快到'点一下按钮瞬间一切就绪'。这个框架值得持续关注。