第2章:从模型到意图,软件工程的范式牵移

在传统软件工程领域,人们常常依赖"模式"来应对复杂性。然而,在当今的Agent时代,我们不得不重新审视这一观念:虽然规则依然重要,但意图才是更为关键的因素。模式仅能告诉我们"怎么做",而意图则能回答"为什么做"这一更为本质的问题。

函数与流

OOP

万物都是「对象」,把数据(属性)操作这些数据的行为(方法)绑死在同一个单元里,用真实业务的实体关系来映射代码结构。

它的根基是四个核心特性:封装(藏内部细节,只留对外接口) / 继承(复用共性逻辑) / 多态(同一接口不同实现) / 抽象(剥离无关细节)

复制代码

// 订单是个对象,自己的数据自己管 class Order { private List<Item> items; // 行为绑定在数据上 public double calcTotal() { double sum = 0; for (Item item : items) { sum += item.getPrice() * item.getQty(); } return sum; } }

FP

「函数」是第一等公民(可以像变量一样传参、返回值),拒绝可变状态、拒绝隐式副作用,所有逻辑本质都是「输入数据 → 纯计算 → 输出新数据」的管道,不会修改任何外部原有的东西。

复制代码

// 就是个纯计算过程,不绑在任何对象上,传什么数据进来只算结果,绝不改原items const calcTotal = (items) => items.reduce((sum, item) => sum + item.price * item.qty, 0);

LLM巨大的纯函数

LLM 本质上是一个巨大的、无状态的纯函数,可以用以下公式表示。

复制代码

输出 = f(权重,上下文)

权重(Weight):在推理阶段,模型的权重是冻结的。无论调用多少次,模型本身都不会发生任何改变。

上下文(Context): 这是唯一的变量。Agent 的 "记忆" 并非存储在模型内部(不像人类的海马体),而是每次以参数形式显式传入。

响应式的觉醒:从堵塞等待到异步实践

在传统的编程范式中,开发者的时间观是线性的:代码第1行执行完毕后,才会执行第2行。这种同步阻塞(Synchronous Blocking)的模型符合人类阅读清单的习惯,但在高延迟的数据时代,可能成为性能瓶颈,甚至引发系统性问题。

  • CPU 空转:主线程在 99% 的时间里干等着进度条,无法进行任何其他有用的工作。

  • 系统失聪:在这 10s 期间,如果用户试图取消任务或插入新指令,系统将完全无响应------因为它被牢牢地阻塞在那个漫长的 HTTP 请求上,对外界 "充耳不闻"。

数据流的哲学:世界不是快照

"快照思维"认为:真理是静态的,就存储在磁盘的某个扇区里。

然而,在 Agent 的世界观中,赫拉克利特是对的:世界并非一张静态的照片,而是一部不断演进的电影。

日志即真理

随着分布式系统(如 Kafka)和事件溯源(Event Sourcing)的兴起,软件工程界重新发现了一种"古老"的智慧:数据库只是日志的投影,日志才是真理本身。

  • 数据库:告诉我"现在是什么"(状态)。

  • 日志:告诉我"发生了什么"(事件)。

对 Agent 而言,"发生了什么"往往比"现在是什么"更重要。

为上下文工程铺路

静态视角:将知识库视为一个固定的书架,需要不断整理,把书摆放整齐。

流式视角:将上下文视为一条流动的河流------新的 Token 不断涌入,旧的 Token 则逐渐被冲刷到远处。

Agent 的核心能力,不再是对静态数据的增、删、改、查,而是在这条奔流不息的信息河流中,实时地捕捉(Capture)、过滤(Filter)和变换(Transform)有价值的信号。

微服务带来的API

API 的由来

2002 年,杰夫·贝索斯(Jeff Bezos)向亚马逊全体员工发出了一封著名的内部邮件,其大意是:"所有团队必须通过服务接口(Service Interface)对外公开数据和功能;禁止直接读取数据库;禁止使用后门访问。违者将被解雇。"

它确立了一项核心原则:功能必须解耦为服务,服务必须通过协议进行通信。

正是这场持续二十余年的"接口化"运动,将物理世界与数字世界封装成成千上万个标准化的 RESTful API 或远程过程调用(Remote Procedure Call,RPC)接口。

为机器准备的大餐

在 Agent 出现之前,API 主要是供开发者使用的工具。然而,随着 Agent 的出现,我们惊喜地发现:API 简直是为 LLM 量身定制的"触手"。

  • Swagger/OpenAPI 规范:最初旨在生成清晰的 API 文档,如今却直接成为 Agent 的 "工具说明书"。Agent 只需要读取一份 JSON 定义,便能理解如何调用该服务。

  • 无头服务(Headless Services):微服务倡导将用户界面与业务逻辑解耦。这意味着 Agent 可以绕过复杂的 HTML/CSS 渲染层,直接与后端业务逻辑交互。

相关推荐
疯狂打码的少年21 小时前
【软件工程】软件项目管理(人员/产品/过程/项目)
笔记·软件工程
叫我Paul就好1 天前
RAG 从入门到精通 - 基础版本
人工智能·软件工程·rag
ttod_qzstudio2 天前
【软考备考】软件工程详解:四大开发模型、黑盒白盒测试、McCabe 环路复杂度(附 10 道练习)
软件工程·软考·黑盒·白盒·mccabe 环路复杂度
梁辰兴2 天前
软件工程:软件开发环境
软件工程·ide集成·软件开发环境·环境组成·环境分类·case工具·现代趋势
疯狂打码的少年3 天前
【软件工程】软件测试阶段:单元测试与集成测试(高频对比考点)
笔记·单元测试·集成测试·软件工程
ttod_qzstudio3 天前
【软考备考】软件工程收官篇:耦合与内聚、维护四类型、关键路径计算(附 10 道练习)
软件工程·软考·耦合·内聚
疯狂打码的少年3 天前
【软件工程】软件测试:黑盒测试(等价类/边界值/因果图)
笔记·软件工程
qiyongwork3 天前
敏捷方法论的演进:从 Scrum 到规模化敏捷的变革
项目管理·软件工程·scrum
梁辰兴4 天前
软件工程:软件开发模型
软件工程·迭代模型·软件开发模型·模型选择·梁辰兴·经典模型·其他模型
昔柯的修炼日记4 天前
软件工程学习笔记
软件工程