为什么 AI Agent 需要“预设配置驱动”的动态装配?
在搭建 AI Agent 时,常见的疑问是:既然模型已经可以自主判断、调用工具,为什么还要预先配置模型、MCP、提示词和知识库?为什么不让 Agent 在运行时自己决定一切?
答案是:模型负责“在能力范围内思考和选择”,而系统必须先定义“它拥有哪些能力、能够在哪些边界内行动”。这正是预设配置驱动动态装配的意义。
一、动态装配解决“怎么组”,预设配置解决“组什么”
动态装配不是让系统随机创建对象,而是根据一份明确配置,在运行时组合出所需组件。
预设配置:定义组件清单和关联关系
动态装配:读取配置并创建、连接、组合组件
运行执行:模型在已授权的能力范围内完成任务
可以把它类比为产品制造:配置是 BOM 清单,动态装配是生产线,最终的 ChatClient 或 Agent 是装配完成的产品。
例如,一份技术博客 Agent 配置可能是:
模型:model_2001
模型 API:api_1001
MCP:搜索、博客 CMS、文章记录
Advisor:历史文章检索、对话记忆
系统提示词:技术编辑规范
发布策略:必须人工确认
系统据此创建模型 Client、连接 MCP 服务、加载顾问能力,并把它们组合为一个可使用的 Agent。没有配置,装配器无法知道应选择哪个模型、连接哪一个内容平台,也无法判断哪些工具允许开放。
二、为什么不直接写死在代码里
对于单一、稳定的 AI 功能,直接编码是合理选择:
ChatClient.builder(chatModel)
.defaultSystem("你是一名技术博客助手")
.defaultToolCallbacks(searchTool, cmsTool)
.build();
问题出现在系统开始支持多种任务时。假设同时存在:
| Agent | 模型 | 工具 | 角色 |
|---|---|---|---|
| 技术博客助手 | 写作模型 | 搜索、CMS | 技术编辑 |
| 客服助手 | 客服模型 | 订单查询、工单 | 客服专员 |
| 数据分析助手 | 分析模型 | 数据库、图表 | 数据分析师 |
若全部写死,每新增或调整一套 Agent,都要改 Java 配置、测试和重新发布服务。改为配置驱动后,管理员可以在后台调整 Agent 与模型、Prompt、MCP 的关联,再由装配器生成新的运行实例。
这并不意味着配置可以无约束地修改。相反,配置应成为受权限、校验、审计和版本控制保护的“能力清单”。
三、Agent 的能力边界必须由系统预先定义
模型可以判断“是否需要检索资料”或“是否应该调用发布工具”,但模型不应决定:
- 要连接哪个任意地址的 MCP 服务;
- 要使用哪份 API Key;
- 是否可以访问整个文件系统;
- 是否可以绕过审批直接发布文章。
正确的职责划分是:
配置:声明允许模型使用哪些能力
装配器:将这些能力连接为实际组件
模型:在允许工具中选择是否调用
后端策略:校验权限、参数、审批和幂等性
因此,一个博客 Agent 可以拥有 search_articles、create_post_draft 和 publish_post,但 publish_post 仍可被后端规则要求附带用户确认令牌。提示词能指导模型行为,却不能替代权限控制。
四、配置驱动如何支持多对多组合
动态装配常出现于多对多关系,但多对多本身不是目的。关键在于关系是否需要由配置决定。
一个模型可关联多个 MCP:搜索、知识库、CMS
一个 MCP 可被多个模型复用:搜索服务可供写作、客服和分析 Agent 使用
一个 Agent 可关联多个 Prompt 与多个 Advisor
装配器读取这些关联后,构建一张运行时组件图:
Agent 配置
├─ ChatModel
│ └─ Model API Client
├─ ToolCallback
│ └─ MCP Client × N
├─ Advisor × N
└─ System Prompt × N
如果这种关系永远固定在代码中,普通依赖注入即可;当关系因 Agent、租户、环境或版本而变化时,才需要动态装配。
五、预设配置还带来哪些工程价值
版本与回滚
将模型、工具集合和提示词作为 agentId + version 管理。新版 Prompt 或 MCP 出现问题时,可以切回旧版本,并准确追溯每次 AgentRun 使用的配置。
多租户隔离
不同租户可以使用自己的模型账号、知识库、内容平台和工具权限。配置既描述能力,也构成隔离边界。
性能与稳定性
模型 Client、MCP Client 和连接池通常可以在装配阶段预热、复用。用户首次发起对话时无需重复建立连接和发现工具。
可运营性
产品或运营人员可以调整角色、选择模型、启停工具;研发人员仍然负责底层组件、Schema、权限规则和故障处理。两者的职责边界清晰。
六、不是任何系统都需要动态装配
动态装配增加了配置管理、生命周期管理和调试成本。以下情况通常没必要使用:
- 只有一个固定模型和一组固定工具;
- 所有依赖只会随代码发布变更;
- 对象只在单次请求中临时使用;
- 每个用户都需要创建数量巨大的独立组件。
特别是在 Spring 中,不应为每次对话或每个用户随意注册 Bean。共享且数量可控的 Client 可以动态注册或放入 Registry;短生命周期状态则应存放在请求上下文、缓存或数据库中。
结语
预设配置驱动,并不是限制 Agent 的智能,而是为它建立可靠的行动边界。
配置定义“可用能力”;动态装配把能力变成可运行的组件;模型在这些组件之上完成推理与工具选择;后端工作流负责权限、审批、状态和可靠性。
当这四层各司其职,AI Agent 才能从一个简单的聊天 Demo,成长为可以安全接入模型、知识库、MCP 工具和业务系统的长期产品。