news 2026/9/12 17:01:27

从代码复用到行为约束:在Agent系统中重新理解继承、封装、多态

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从代码复用到行为约束:在Agent系统中重新理解继承、封装、多态

进入智能体开发时代,特别是在最近一年,我才开始意识到一件事:我们并不是突然进入了一个“全新的编程时代”,而是开始频繁地遇到一些用旧范式已经解释不清、约束不住的问题。这些问题并不发生在 Demo 阶段,而几乎都出现在同一个时间点之后——当智能体开始长期运行、开始参与协作、开始在系统中承担连续责任的时候。也正是在这个阶段,我第一次认真地回头看自己用了二十年的那套东西:面向对象、模块划分、接口抽象、继承体系、状态封装。它们没有“失效”,但开始显得不够了。

一、Agent很聪明,但不确定性让我不安

在很多Agent项目早期,我们下意识会沿用非常熟悉的工程方式。

比如:

  • 把Agent当成一个 service

  • Prompt 当成构造参数

  • Tool 调用当成方法

  • Memory 当成内部状态

从代码结构上看,这一切非常自然,甚至可以说非常“优雅”。但问题往往出现在系统跑了一段时间之后。你会发现,很多你原本以为很清楚的边界,开始变得模糊:

  • 这个 Agent 的行为,到底是“实例状态”导致的,还是“上下文输入”导致的

  • 两个 Agent 看起来职责相同,但决策风格已经明显不同

  • 你很难回答:它现在的行为,是继承自哪一次设计,还是运行中“长出来”的

在传统面向对象系统里,这类问题很少出现,因为对象的行为边界是相对稳定的。

而 Agent 不是。

二、面向对象前提假设:行为是可预期的

如果我们冷静一点回看,面向对象编程真正解决的是什么问题?它试图用几个核心概念,帮我们控制复杂度:

  • 封装隔离内部实现

  • 继承复用稳定结构

  • 多态应对变化行为

但这一切都隐含了一个非常重要的前提:对象的行为,是由代码完全决定的。也就是说,只要类定义不变、输入一致、状态可控,那么对象的行为是可预测、可推理、可复现的。而这恰恰是智能体系统开始松动的地方。

三、当行为不再完全由代码决定时,“对象”这个抽象开始吃力

在 Agent 系统里,一个智能体的行为往往由多种因素共同决定:

  • 当前 Prompt 结构

  • 上下文中残留的信息

  • 工具调用历史

  • 模型版本

  • 环境反馈

  • 甚至是一些概率性选择

这些因素,有些是代码控制的,有些不是;有些是显式状态,有些是隐性条件;有些你能回溯,有些你只能推测。你会发现一个很微妙的变化:Agent 的行为,开始具有“运行期生成性”,而不是“定义期确定性”。在这种前提下,如果你还用“对象 = 行为载体”来理解Agent,就会开始感到不安。不是因为这个抽象错了,而是它假设的世界已经变了。

四、继承:从“复用代码”,变成“复用行为约束”

在传统 OOP 里,继承最核心的价值是代码复用和结构抽象。但在 Agent 系统里,如果你真的尝试用继承来组织智能体,你很快会遇到一个现实问题:你很少想继承“实现细节”,而更想继承“不允许做什么”。

比如两个Agent都处理客户请求:一个是客服 Agent,另一个是风控 Agent,它们使用的模型、工具甚至 Prompt 结构可能非常相似,但你真正关心的继承关系,往往不是“它们都能调用哪些工具”,而是:

  • 哪些决策边界是不能突破的

  • 哪些信息是绝对不能输出的

  • 哪些路径在任何情况下都要被禁止

这时候,继承更像是在传递一组行为约束与责任边界,而不是方法实现。如果你还试图用传统“基类 + 子类”的方式去理解它,就会发现结构越来越别扭。

五、封装:不再是隐藏实现,而是隔离不确定性

封装在 OOP 里的原始含义,是隐藏内部实现细节,只暴露稳定接口。但在 Agent 系统里,真正需要被“封装”的,往往不是实现,而是不确定性本身。你会越来越希望做到几件事:

  • 不让Agent的内部推理路径直接影响系统其他部分

  • 不让上下文污染跨越它本不该跨越的边界

  • 不让一次异常决策扩散成系统级行为漂移

封装的重点已经从“信息隐藏”转向了风险隔离与行为收敛你封装的不是代码,而是一个“可控的决策空间”。

六、多态:从“不同实现”变成“不同决策风格”

多态在传统编程里解决的是一个非常明确的问题:同一个接口,不同实现。但在 Agent 协作系统中,多态的真正价值发生了偏移。在Agent程序中,我们不关心到底使用哪个LLM大模型,底层调用的是哪个工具实现,而是关注在不确定信息,需求模糊,目标冲突的情况下,如果做出正确的决策。这些决策风格差异。而这类差异,往往并不适合被硬编码在方法里,而更像是系统层定义的一组策略参数。

七、“面向智能体编程”,并不是抛弃 OOP,而是上移一层抽象

我并不认为我们真的“从 OOP 进入了一个完全不同的范式”,更准确的说:OOP 解决的是“构件如何组织”,而 Agent 编程开始关心“行为如何被治理”。在我现在认可的架构里:对象仍然存在、模块仍然存在、接口仍然存在。但它们不再是系统的最高抽象层。在它们之上,多了一层以前并不存在东西:行为边界、决策责任、风格约束、反馈机制。这层东西才是“面向智能体编程”真正试图处理的对象。

OOP

智能体

继承

代码复用

责任与约束的传递

封装

实现隐藏

决策风险的隔离

多态

实现差异

可被治理的行为风格差异

它们并没有消失,只是被重新放到了一个更贴近真实系统风险的位置上。所以我并不认为“从 OOP 到 Agent 编程的革命”。它更像是一种工程反应:当系统开始承担更大不确定性时,我们本能地开始寻找新的约束结构。Agent 只是让这种不确定性显性化了。如果你真的上线过智能体系统,你会知道,Agent编程从来不是模型不够聪明,而是你不知道它明天会不会“换一种方式聪明”,工程的意义在于让聪明可控,让行为可解释,让系统在变化中仍然站得住。所以“面向智能体编程”,并不是对过去的否定,而是更加重视工程责任。相比OOP编程,我们要约束的,不再只是代码。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/12 15:32:28

智能人脸识别批量裁剪:告别手动修图的自动化革命

智能人脸识别批量裁剪:告别手动修图的自动化革命 【免费下载链接】autocrop :relieved: Automatically detects and crops faces from batches of pictures. 项目地址: https://gitcode.com/gh_mirrors/au/autocrop 想象一下,你需要为500名员工制…

作者头像 李华
网站建设 2026/9/8 8:46:36

终极uesave使用指南:5步掌握Unreal引擎存档编辑核心技巧

终极uesave使用指南:5步掌握Unreal引擎存档编辑核心技巧 【免费下载链接】uesave-rs 项目地址: https://gitcode.com/gh_mirrors/ue/uesave-rs 你是否曾经遇到过游戏进度意外丢失的困扰?或者想要调整游戏参数却无从下手?Unreal引擎生…

作者头像 李华
网站建设 2026/9/4 18:53:17

23、C++ 响应式编程与微服务开发

C++ 响应式编程与微服务开发 1. C++ 响应式编程基础 在响应式编程中,我们可以通过一些特定的步骤来构建基本的程序。在主函数中,一般会执行以下任务: 1. 创建 EventBus<T> 的实例。 2. 创建生产者(Producers)的实例。 3. 创建消费者(Consumers)的实例。 4…

作者头像 李华
网站建设 2026/9/9 22:54:39

24、C++ 中的反应式微服务开发:JSON、REST 服务与 RxCurl 库的应用

C++ 中的反应式微服务开发:JSON、REST 服务与 RxCurl 库的应用 1. 从 URL 获取 HTML 内容 在 C++ 中,我们可以通过以下代码实现对 URL 的阻塞调用并获取 HTML 内容: observable<string> response_message; request.as_blocking().subscribe([&] (observable…

作者头像 李华
网站建设 2026/9/3 1:25:27

计算机毕设java出租车服务管理信息系统 基于Java的出租车运营管理信息化平台设计与实现 Java技术驱动的出租车服务管理系统开发与应用

计算机毕设java出租车服务管理信息系统01nn59&#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。随着城市化进程的加速&#xff0c;出租车作为城市交通的重要组成部分&#xff0c;在…

作者头像 李华
网站建设 2026/9/11 2:43:16

40、商业智能应用:预测、仪表盘、警报与门户的全面解析

商业智能应用:预测、仪表盘、警报与门户的全面解析 1. 预测输出设置与结果查看 在进行预测输出时,图底部表格的行对应着我们希望在预测输出中显示的列。以特定场景为例,我们期望在预测输出中展示三列内容:客户键、音乐以及预测概率。 - 第一行表示在输出中显示 dm_purc…

作者头像 李华