上世纪 40 年代,Bell Labs 在建造全国电话网络——当时世界上最复杂的technical系统。数百万个开关、电缆、继电器和操作员必须协同工作。工程师们发现了一个将成为 80 年老教训的东西:你无法通过优化单个组件来优化系统。整体的行为(呼叫路由、可靠性、容量、成本)是从部件如何交互中涌现的。
他们称之为系统工程。
Agent 软件就是系统工程问题
Coding Agent 降低了写代码的门槛,但没有降低生产软件的门槛。
软件工程一直就是系统工程,Agent 软件也不例外。如果你在构建 Agent 软件,你的系统需要桥接五个层次:
五层架构
1. Agent 工程
Agent 或多 Agent 逻辑与执行流程。模型、系统指令、工具配置、交接、上下文管理、可观测性。
你的 Agent 行为应该在可能的地方保持确定性,在不可能的地方保持可观测性。
2. 数据工程
你的 Agent 只和它能访问的上下文一样好,而上下文本质就是数据。
Call it memory、storage、knowledge——你的 Agent 数据应该用数据工程原则来管理。设计良好的 schema、结构化查询、用于快速读写的数据库、用于长期存储的对象存储,以及保持知识和记忆更新的工作流。这些模式已经存在几十年了,用它们。
3. 安全工程
Auth、RBAC、治理、数据隔离、审计追踪。
你的 Agent 能力由其工具定义,工具应该用 JWT 支持的权限来限定范围。只读访问不是 Prompt 指令,是工具配置。
操作应该有审批层级:读取自由运行,写入需要用户批准,敏感操作需要管理员签署。大多数操作应该被记录并在产品生命周期内可查询。隔离请求——一个用户的上下文渗透到另一个用户不是「bug」,是数据泄露。
4. 接口工程
用户和其他 Agent 如何触达你的 Agent。
REST API、Slack、MCP server、终端、Chat UI。一个系统现在有多个表面,每个都有自己的身份系统。Slack 用户 ID 不等于你产品的用户 ID。MCP 客户端认证为另一个 Agent 不等于人类用户。接口工程是确保你的 auth、策略和访问控制在每个可触达表面上保持一致。
5. 基础设施工程
如何运行和扩展你的软件。容器、云部署、水平扩展——通常叫 DevOps。
好消息:95% 和运行任何其他服务完全相同。复用现有模式,会服务得很好。5% 的不同之处:Agent 请求耗时更长(增加负载均衡器超时),响应是流式的(规划 SSE 或 WebSocket),最好的 Agent 是主动的(定时任务、后台执行)。
关键认知
当你从系统视角看软件时,正确的决策变得显而易见:
- 给 Agent 精心限定范围的工具,而不是无限制的 bash 访问
- 在数据库里存储 session、memory 和 knowledge,而不是文件里,这样你可以利用数十年的多租户模式
- 当你孤立地设计一层,你会继承将级联到整个系统的约束;当从系统视角设计,每一层都强化其他层
实战:Dash 项目
Dash 是一个开源、自学习的数据 Agent。你用英文提问,它写 SQL、运行它、告诉你数字意味着什么。
它用三个 Agent 的团队工作:一个 Leader 路由请求给两个专家:Analyst(查询数据,只读)和 Engineer(构建计算资产如视图和汇总表)。
每个专家获得类似的工具,但接线和用途不同。Analyst 的 SQL 工具连接到只读数据库引擎。Engineer 的 SQL 工具连接到可写引擎,限定在单个 schema。相同接口,不同权限,由配置决定而非 Prompt。
六层上下文:
Dash 解决 LLMs 写 SQL 会碰壁的问题,靠六层 grounded context:
- 表元数据(schema、列、关系)
- 人类注释(指标、定义、业务规则)
- 查询模式(已知有效的 SQL)
- 组织知识(文档、wiki)
- 学习成果(错误模式和发现的修复)
- 运行时上下文(实时 schema 检查)
核心学习循环:Agent 运行查询,遇到类型错误,诊断修复,保存它。下次看到类似的列,第一次就做对了。当 Engineer 创建新视图,它把 schema 和示例查询记录到知识库。Analyst 在下次搜索时发现它并开始使用它。
Query 100 比 query 1 更好,不是因为模型改进了,而是因为数据层变好了。
安全靠系统而非 Prompt 强制:生产环境 auth 使用 RBAC + JWT 验证。每个查询按 user_id 范围限定。Eval 套件直接测试这些边界:提示 Agent 泄露凭证、执行破坏性 SQL、跨 schema 边界,然后验证它们无法做到。Analyst 的只读访问是 PostgreSQL 连接参数,数据库本身拒绝写入,不管模型生成什么。
一句话总结
Agentic 软件就是普通软件,只是业务逻辑被 Agent 替换了,其他一切都是系统工程。五个层次:Agent、数据、安全、接口、基础设施。每层影响其他层。一起设计它们,系统就会复合。孤立设计,你会花时间在不应该存在的约束上打补丁。
这篇文章的核心洞察是「Agent 替换的是业务逻辑,其他一切都是系统工程项目」。Dash 项目的六层上下文设计值得细读。