本文探讨了使用领域驱动设计(DDD)开发大模型 Agent 的必要性,指出了传统 Agent 开发方式在工程化中遇到的问题。文章详细阐述了如何划定 Agent 领域边界,区分聚合根、实体和值对象,并给出了具体的领域模型拆解示例。此外,还介绍了模型之间的协作流程和工程落地的实操建议,最后总结了该模型能支撑的高级能力,为开发生产级 Agent 提供了实用指导。
一、先回答一个核心问题:为什么 Agent 需要 DDD?
传统写 Agent 的方式是过程式思维: 接收用户消息 → 交给 LLM 思考 → 选择工具 → 执行工具 → 拼接结果返回。
这套思路跑 Demo 没问题,但一旦进入工程化,会遇到一堆典型问题:
会话只是一串消息数组,没有区分 “用户输入、模型思考、工具入参、工具返回、系统通知”;
Agent 状态是零散变量,存 Redis 的时候不知道哪些要持久、哪些是临时计算值;
工具只是一个个函数,没有统一描述、权限、限流、版本、超时定义;
任务指令没有生命周期,没有待执行、执行中、成功、失败、取消这些状态流转;
多 Agent 委派场景下,主管 Agent 下发任务,Worker 接收任务,没有统一的领域契约。
DDD 的核心价值,就是把 Agent 的业务能力和底层执行逻辑分开。 我们先定义领域里有什么 “东西”,这些东西有什么属性、能发生什么行为、互相怎么关联,再去写框架代码、做存储、做通信。
一句话总结:LLM 只是领域里的一个 “能力组件”,而不是整个系统的中心。
二、划定 Agent 领域边界:限界上下文
做 DDD 第一步,先划限界上下文,避免无限膨胀。 我们这里聚焦独立执行单元 Agent 上下文(单 Agent,后续多 Agent 委派、A2A 通信属于另外一个限界上下文,不要混在一起)。
✅ 当前上下文包含的内容:
- 用户发起的指令(任务)
- Agent 会话,所有交互消息记录
- Agent 自身运行时状态
- 工具定义、工具调用请求与结果
- 记忆快照(短期记忆、摘要记忆)
- 校验规则、权限标签
❌ 不属于这个上下文,要剥离出去:
- 消息总线、A2A 跨 Agent 通信(多 Agent 上下文)
- 向量库检索底层实现(RAG 基础设施上下文)
- 日志链路追踪、计费统计(可观测上下文)
- 用户账号、租户权限主数据(用户中心上下文)
边界划清楚,建模才不会越写越杂。
很多项目翻车,就是把跨上下文逻辑揉在一起:Agent 里面直接写 MQ 发送逻辑、直接写向量库连接代码,领域模型和基础设施耦合死。
三、领域模型拆解:区分聚合根、实体、值对象
DDD 里有两个基础概念,这里简单说清楚,不用晦涩术语:
聚合根:整个聚合的入口,是外部唯一可以直接引用的对象,拥有独立全局 ID;
实体:有唯一标识,会持续变化;
值对象:没有独立 ID,只描述属性,不可变,依附于实体。
我们直接落地 Agent 领域的模型清单。
- 1 聚合根:AgentSession 会话聚合根
聚合根:会话 Session
所有本次任务相关的消息、状态、子指令、工具调用记录,都归属在这个会话下。外部只能通过 Session ID 访问这一组数据。
核心属性:
- sessionId:全局唯一 ID(聚合根标识)
- tenantId:租户标识(多租户场景必备)
- agentCode:Agent 类型编码(不同业务 Agent 区分)
- status:会话状态枚举:CREATED / RUNNING / PAUSED / COMPLETED / FAILED / CANCELLED
- createdAt、updatedAt、expireAt:时间戳
- parentSessionId:父会话 ID,用于支持任务委派(A2A 场景,主管 Agent 会话关联 Worker 会话)
- metadata:扩展标签,比如触发渠道、优先级
内部包含子实体 / 值对象:
- 消息实体 Message
- 运行状态实体 AgentState
- 指令实体 Instruction
- 工具调用记录 ToolCallRecord
规则约束(聚合内不变性): 会话一旦标记完成 / 失败,不允许新增消息和工具调用; 所有子对象不能脱离 Session 单独存在。
- 2 实体 1:Instruction 指令(任务)
指令就是 Agent 要完成的目标,是用户或者上级 Agent 下发的任务,这是 Agent 领域里非常核心的实体。 很多 Demo 直接把指令塞在 prompt 里,工程上必须抽成独立实体,管理生命周期。
属性:
- instructionId:指令唯一标识
- sessionId:归属会话
- content:原始指令文本
- goal:结构化目标(拆解后的目标,方便校验是否完成)
- status:指令状态:PENDING / PLANNING / EXECUTING / VERIFYING / DONE / REJECTED
- plan:执行计划(LLM 输出的分步方案,值对象)
- deadline:截止时间
- retryCount:重试次数
- assignee:执行 Agent 标识(A2A 委派时使用)
行为:
- 生成执行计划
- 校验目标是否达成
- 标记失败 / 重派
- 取消任务
区分:用户输入的一句话,只是指令的来源;Instruction 实体承载的是这个任务完整生命周期。
- 3 实体 2:Message 交互消息
消息是会话里每一轮交互记录,不要简单存纯字符串数组,这是最常见的坏习惯。
属性:
- messageId:消息 ID
- sessionId
- senderType:发送方枚举 USER / LLM / TOOL / SYSTEM / AGENT_PEER
- senderId:发送方标识,工具 ID、AgentID、用户 ID
- messageType:消息类型 TEXT / TOOL_CALL_REQUEST / TOOL_CALL_RESULT / ERROR / NOTICE
- payload:结构化内容(json)
- rawContent:原始文本
- tokenUsage:本次消耗 token(值对象)
- createdAt
重点好处: 后续做检索、过滤、可观测、成本统计,不需要去解析文本,直接按类型筛选。
- 4 实体 3:Tool 工具定义 & ToolCallRecord 调用记录
这里分成两块:工具定义(领域实体)和单次调用记录(会话内实体)。
Tool(工具定义,全局实体,跨会话复用)
- toolId、toolCode、name、description
- inputSchema、outputSchema
- authRule:权限标签
- timeout、rateLimit、retryPolicy
- provider:工具提供者(MCP 服务地址、本地函数标识)
ToolCallRecord(单次调用记录,归属会话聚合)
- recordId、sessionId、instructionId
- toolId
- inputArgs:入参
- output:返回结果
- status:INIT / RUNNING / SUCCESS / ERROR / TIMEOUT
- cost、costTime
划重点:Tool 是 “能力定义”,ToolCallRecord 是 “这一次的执行流水”。 对接 MCP 的时候,MCP 服务就是 Tool 的一个 provider 实现,模型完全不用改动,这也是之前 A2A+MCP 链路能顺畅打通的底层原因。
- 5 实体 4:AgentState 运行状态
AgentState,就是大家常说的 Agent 状态,属于会话内实体,保存 Agent 思考过程中的中间变量。区分临时状态和持久化状态,是做断点续传的关键。
属性:
- stateId
- sessionId
- memorySnapshot:摘要记忆快照(值对象)
- variableMap:业务中间变量(结构化 KV,比如查询出来的数据、临时计算结果)
- nextStepHint:下一步要执行的动作标记
- checkpointVersion:快照版本号(断点续传用)
⚠️ 重要原则: 不要把大模型的完整思考日志塞进 State;State 只存结构化、机器可读的数据,用来恢复执行。大模型思考文本放在 Message 里面。
- 6 值对象清单(无独立 ID,不可变)
- TokenUsage:输入 token、输出 token、花费
- PlanStep:计划单步内容、顺序、依赖项
- MemorySummary:摘要内容、摘要范围、生成时间
- ErrorInfo:错误码、错误信息、根因标签
- PermissionTag:权限标签集合
四、模型之间的协作流程(一条完整链路)
我们用一个简单场景串一遍:用户下发一条指令,Agent 调用 MCP 工具查询数据库。
用户提交需求,系统创建Session(聚合根),同时生成一条Instruction(指令实体),状态 PENDING;
Agent 读取 Instruction,生成执行 Plan(值对象),指令状态变为 PLANNING;
写入 Message(LLM 类型消息,内容是执行方案),更新 AgentState 快照;
生成 ToolCallRecord,关联对应 Tool 定义,通过 MCP 协议发起工具调用;
MCP 返回结果,写入新的 Message 和 ToolCallRecord,状态更新 SUCCESS;
Agent 校验指令目标是否达成,达成后 Instruction 标记 DONE,Session 标记 COMPLETED;
每一步都可以打 Checkpoint,保存 AgentState,支持暂停、断点恢复。
如果是 A2A 委派场景: 主管 Agent 创建新的子 Session,下发子 Instruction,通过 A2A 协议把指令发给 Worker Agent,Worker 内部复用同一套领域模型。通信协议(A2A)只是传输层,两边 Agent 的领域模型保持统一。
这就是这套模型强大的地方:单 Agent、多 Agent 委派,一套领域模型复用。
五、工程落地的实操建议 & 避坑点
坑 1:不要把领域模型和框架数据结构绑定
LangGraph 有 State,Spring AI 有 ChatMemory。这些是框架运行载体,不是领域模型。 正确做法:领域模型是独立 POJO / 数据类,框架 state 只负责映射领域模型,框架换了,领域模型不动。
坑 2:状态里面塞满非结构化文本
很多开发者直接把历史消息字符串全部塞状态,导致快照巨大、恢复慢、难以检索。 遵循我们的模型:Message 存交互文本,AgentState 只存结构化变量和摘要快照。
坑 3:指令没有生命周期,无法做任务管控
没有 Instruction 实体,你就没法做:任务超时提醒、任务取消、任务重分配、委派失败回滚。 这也是生产 Agent 和 Demo Agent 最核心分界线。
坑 4:工具和调用记录混在一起
Tool 定义全局统一管理,方便权限、限流、版本管理;调用记录归属会话,用来审计、重试、回放。对接 MCP 的时候,只需要新增一类 Tool Provider,不用改动指令、会话逻辑。
存储落地建议
- Session、Instruction、ToolCallRecord、Message:数据库持久化(PostgreSQL、MySQL)
- AgentState 快照:Redis,配合版本号做断点
- Tool 定义:配置中心或者数据库,支持动态注册 MCP 工具
六、这套模型能支撑哪些高级能力?
建好这套领域模型之后,后面很多高级功能是自然而然生长出来的,而不是硬编码:
✅ 会话断点续传、暂停恢复
✅ 指令超时、失败重试、人工介入
✅ 工具调用审计、回放测试
✅ A2A 跨 Agent 任务委派(主管→Worker)
✅ Agent 评测:基于 Instruction 的目标结果做自动化校验
✅ 记忆分层:会话绑定记忆快照,长期记忆单独领域模块
✅ 多租户隔离:tenantId 作为顶层过滤条件
七、本篇小结
DDD 不是玄学,放到 Agent 开发里,本质就是一句话:把模糊的智能行为,拆成有身份、有生命周期、有明确行为的对象。
我们这一篇,划定了 Agent 单执行单元的限界上下文,定义了聚合根 Session,以及指令、消息、工具、运行状态四大核心实体,区分了实体和值对象,打通了从用户任务下发到工具执行的模型流转。
LLM 负责思考和生成方案,但是任务是谁、进度到哪、有哪些交互记录、工具怎么调用、能不能断点恢复,全部由领域模型接管。 这是从写 Demo,走向可维护、可扩展生产级 Agent 架构非常关键的一步。
大模型的知识又多又杂,到底怎么学?
做这行久了,被问最多的问题就一个:大模型的知识又多又杂,我到底先学啥?翻了一堆资料,看啥都像重点,结果啥都没学进去。今天把我自己一路摸出来的顺序捋一遍,零基础、应届生、转行的都适用。跟着走,至少方向不乱、不瞎忙,学完拿得出手。
第一阶段(10天):初阶应用
这一阶段就一个目标:把大模型真正"玩明白",不是只会聊天那种,而是能调教它、能用代码把大模型和业务接起来。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
这阶段正式进实战,目标很实在:做出两个能拿出手的东西——一个私有知识库,一个 agent 对话机器人。
为什么要做 RAG
搭建一个简单的 ChatPDF
检索的基础概念
什么是向量表示(Embeddings)
向量数据库与向量检索
基于向量检索的 RAG
搭建 RAG 系统的扩展知识
混合检索与 RAG-Fusion 简介
向量模型本地部署
…
走完这 30 天,Python 或 JavaScript 背景的基本能独立做一套 RAG 应用,简历上也敢写"大模型应用开发"了。
第三阶段(约20天):动手微调
学到这,你已经开始 “造” 模型了 —— 通过微调,搞出垂直领域的专用小模型。
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你从 “只会用” 变成 “能造” 的 AI 小子。那么你还想往下探索吗?
想要入局AI大模型赛道、抢占行业红利的朋友,微信扫描下方CSDN官方认证二维码,即可100%免费领取全套学习资料!
第四阶段(20天):商业闭环,部署落地
技术学完,落地才算数。这阶段带你搞明白大模型怎么真正跑起来、用起来。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
想要入坑大模型的朋友,给大家准备了一份2026 年最新 AI 大模型全套学习资料:
1、大模型系统化学习路线
2、大模型学习视频教程
3、大模型学习书籍&电子文档
4、AI大模型最新行业报告
5、大模型项目实战&配套源码
6、2026大模型大厂面试真题
7、为什么要学习大模型?
我国在A大模型领域面临人才短缺,数量与质量均落后于发达国家。2023年,人才缺口已超百万,凸显培养不足。随着AI技术飞速发展,预计到2025年,这一缺口将急剧扩大至400万,严重制约我国AI产业的创新步伐。加强人才培养,优化教育体系,国际合作并进是破解困局、推动AI发展的关键。
8、适合谁学?
- 传统后端 / Java / 前端开发,想转型 AI 应用
- 大学生、应届生,想拿更好的 offer
- 产品经理、运营,想武装职业竞争力
- 技术负责人,想给团队落地提效
学习是反人性的,但回报是真金白银。技术会更新,赛道会切换,但只要你先动手,机会就永远站在你这边。
9、这些资料真的有用吗?
这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理,现任上海殷泊信息科技CEO,其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证,服务航天科工、国家电网等1000+企业,以第一作者在IEEE Transactions发表论文50+篇,获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。
资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的技术人员,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。
想要入局AI大模型赛道、抢占行业红利的朋友,微信扫描下方CSDN官方认证二维码,即可100%免费领取全套学习资料!
好了,就写到这。路线是死的,人是活的,卡住了随时来问我。觉得有用就点个收藏,别让它进收藏夹吃灰——动起来比啥都强。