拆解AI应用领域模型
作为软件的Owner和开发人员,为了项目的可控性,笔者建议读者还是需要自行拆解,尽管拆解的实际步骤可以让模型来完成,但是我们需要知道其中过程是怎么样的。
以下是笔者实际如何完成核验的全过程,希望能给您的开发和设计起到帮助和启发。
场景表格化
作为软件项目的整个起始,按照DDD的原则,实际是需要拉取到相关利益方,坐下来一起讨论,软件应该满足哪些基本的需求。但是本书面向的是面向个人使用者和独立开发人员,其中利益相关方就是我们自己,所以这里完全就从简,由开发人员直接列举可能的场景,并将其格式化,形成软件需求说明书。
此步骤可交由模型完成,prompt如下
请根据我之前给出的应用场景描述,整理成表格,按照[场景,角色,交互形式]来整理,有不足的地方请帮我补充
回答如下:
AI问答系统场景分析表
场景分类 |
参与角色 |
交互形式 |
补充说明 |
推理生成 |
用户、推理引擎、工具代理 |
1. 用户提问 → 2. 引擎补全问题 → 3. 调用工具 → 4. 整理输出 |
需增加「结果校验」环节,确保工具返回数据的有效性 |
代码自生成执行 |
用户、代码引擎、沙箱环境 |
1. 用户需求 → 2. 生成初始代码 → 3. 沙箱执行 → 4. 错误修复 → 5. 返回结果 |
建议增加「执行历史」记录,支持代码片段复用 |
工具使用 |
用户、工具路由、MCP服务 |
1. 用户指令 → 2. 工具匹配 → 3. 鉴权调用 → 4. 结果适配 → 5. 响应输出 |
需补充「降级策略」,当首选工具不可用时自动切换备用方案 |
多工作流编排 |
用户、流程引擎、验证模块 |
1. 触发流程 → 2. 节点跳转 → 3. 自动验证 → 4. 人工复核 → 5. 流程归档 |
建议增加「版本快照」功能,支持流程回滚 |
知识库(RAG) |
用户、检索引擎、推理辅助 |
1. 提问向量化 → 2. 知识检索 → 3. 结果排序 → 4. 逻辑增强 → 5. 最终响应 |
需补充「反馈学习」机制,根据用户采纳率优化检索权重 |
补充场景(根据模型特性新增)
场景分类 |
参与角色 |
交互形式 |
补充说明 |
混合决策 |
用户、仲裁引擎、多机器人 |
1. 并行调用多个机器人 → 2. 结果对比 → 3. 置信度评估 → 4. 最优结果选择 |
适用于医疗/金融等高风险场景 |
持续学习 |
管理员、训练模块、日志系统 |
1. 收集交互日志 → 2. 标注典型case → 3. 增量训练 → 4. 模型热更新 |
需设置「灰度发布」机制,避免全量更新风险 |
跨场景路由 |
用户、分类器、各场景入口 |
1. 意图识别 → 2. 场景匹配 → 3. 上下文迁移 → 4. 无缝衔接目标场景流程 |
关键在「上下文保持」技术,避免重复询问 |
请注意,使用模型时候,一定要把干的事情描述清楚,不要意图让模型读空气。
表格整理
表格整理的目的在于,我们需要梳理场景,并且尝试将场景进行归类。初步形成核心领域,周围支撑领域,方便下一步工作。
领域模型的初步整理
此步骤依然可以交给语言模型整理,开发人员负责将内容进行收敛,给予以下prompt
根据场景和模型,按照DDD的方法,构建类,请按照类所处领域范围,生命周期,是否持久化,进行分类,形成表格。类内字段不需要展开。
以下是回复
DDD领域模型分类表
核心领域(Core Domain)
类名 |
生命周期 |
持久化 |
领域职责说明 |
UserContext |
用户会话周期 |
是 |
维护当前用户状态和安全上下文 |
Conversation |
交互会话周期 |
是 |
管理问答会话的生命周期 |
BotOrchestrator |
请求处理周期 |
否 |
协调多个机器人的执行流程 |
ExecutionTracker |
任务执行周期 |
部分 |
记录分布式执行的中间状态 |
支撑子领域(Supporting Subdomain)
类名 |
生命周期 |
持久化 |
领域职责说明 |
MessageBus |
系统运行周期 |
否 |
处理跨领域事件通信 |
AuthGateway |
请求处理周期 |
否 |
统一鉴权和访问控制 |
LogAggregator |
系统运行周期 |
是 |
集中处理操作日志和审计跟踪 |
通用子领域(Generic Subdomain)
类名 |
生命周期 |
持久化 |
领域职责说明 |
FileStorage |
资源访问周期 |
是 |
统一管理多媒体文件存储 |
Notification |
事件触发周期 |
部分 |
处理系统通知和用户提醒 |
ConfigManager |
系统运行周期 |
是 |
管理运行时配置和参数 |
推理生成场景(Reasoning Context)
类名 |
生命周期 |
持久化 |
领域职责说明 |
PromptEngine |
请求处理周期 |
否 |
问题补全和提示词优化 |
ToolBroker |
工具调用周期 |
否 |
外部工具的发现和适配 |
EvidenceValidator |
结果处理周期 |
部分 |
验证工具返回结果的合理性 |
代码执行场景(Coding Context)
类名 |
生命周期 |
持久化 |
领域职责说明 |
CodeGenerator |
任务执行周期 |
否 |
根据需求生成可执行代码 |
SandboxRuntime |
代码执行周期 |
否 |
隔离环境下的代码执行管理 |
DebugAssistant |
错误处理周期 |
部分 |
分析执行错误并提供修复建议 |
工作流场景(Workflow Context)
类名 |
生命周期 |
持久化 |
领域职责说明 |
FlowDesigner |
流程编辑周期 |
是 |
可视化流程编排和版本管理 |
NodeExecutor |
节点执行周期 |
否 |
负责单个工作流节点的执行 |
Compensation |
异常处理周期 |
是 |
实现分布式事务的补偿机制 |
知识库场景(Knowledge Context)
类名 |
生命周期 |
持久化 |
领域职责说明 |
VectorEngine |
检索处理周期 |
否 |
实现向量相似度计算 |
ChunkManager |
知识处理周期 |
是 |
管理知识分块和索引 |
FeedbackLearner |
训练周期 |
是 |
根据用户反馈优化检索模型 |
生命周期类型说明
- 用户会话周期:随用户登录到注销
- 交互会话周期:单个问答会话的存活期
- 请求处理周期:单个API调用过程
- 任务执行周期:跨服务的长时间运行任务
- 系统运行周期:与应用程序同生命周期
持久化策略
- 是:需要持久化到数据库
- 否:仅内存中存在
- 部分:部分数据需要持久化
- 部分:部分数据需要持久化
模型返回内容审查
此时我们必须要进行检查,经过瞪眼法检查,其内容缺失了关键部分,我们前序整理模型到当前模型的映射关系 ,所以我们应该prompt如下:
检查发现没有融合前面所生成的领域模型,现请格式不变,并请将前文所述的《增强版本地问答交互模型(领域分层设计)》融合进去。
此时可以得到真实的模型如下:
DDD领域模型分类表(融合增强版)
核心领域(Core Domain)
类名 |
生命周期 |
持久化 |
领域职责说明 |
对应前文模型 |
UserContext |
用户会话周期 |
是 |
维护当前用户状态和安全上下文 |
核心用户 |
Conversation |
交互会话周期 |
是 |
管理问答会话的生命周期 |
交互会话 |
BotOrchestrator |
请求处理周期 |
否 |
协调多个机器人的执行流程 |
机器人代理+执行编排 |
MessageRouter |
消息处理周期 |
否 |
路由不同类型消息到对应处理器 |
交互消息 |
推理子领域(Reasoning Subdomain)
类名 |
生命周期 |
持久化 |
领域职责说明 |
对应前文模型 |
ReasoningEngine |
任务执行周期 |
部分 |
实现多步推理和工具调用 |
推理引擎 |
ToolAdapter |
工具调用周期 |
否 |
标准化外部工具接口 |
工具网关 |
EvidenceCache |
系统运行周期 |
是 |
存储中间推理结果 |
媒体处理(分析结果) |
代码子领域(Coding Subdomain)
类名 |
生命周期 |
持久化 |
领域职责说明 |
对应前文模型 |
CodeGenerator |
任务执行周期 |
否 |
生成可执行代码 |
代码环境 |
SandboxController |
代码执行周期 |
否 |
管理隔离执行环境 |
代码环境(沙箱配置) |
DebugAnalyzer |
错误处理周期 |
部分 |
提供代码修复建议 |
代码环境(修复策略) |
工作流子领域(Workflow Subdomain)
类名 |
生命周期 |
持久化 |
领域职责说明 |
对应前文模型 |
FlowEngine |
流程执行周期 |
是 |
驱动工作流节点执行 |
工作流引擎 |
NodeRepository |
系统运行周期 |
是 |
存储可复用流程节点 |
工作流引擎(节点类型) |
VersionSnapshot |
流程变更周期 |
是 |
管理流程版本历史 |
工作流引擎(版本控制) |
知识子领域(Knowledge Subdomain)
类名 |
生命周期 |
持久化 |
领域职责说明 |
对应前文模型 |
VectorSearcher |
检索处理周期 |
否 |
执行向量相似度计算 |
知识融合 |
ChunkIndexer |
知识处理周期 |
是 |
管理知识分块和索引 |
知识融合(嵌入模型) |
HybridReasoner |
结果处理周期 |
否 |
结合检索结果与逻辑推理 |
知识融合(增强模式) |
支撑子领域(Supporting Subdomain)
类名 |
生命周期 |
持久化 |
领域职责说明 |
对应前文模型 |
MediaProcessor |
资源处理周期 |
部分 |
统一处理多媒体内容 |
媒体处理 |
PriorityScheduler |
系统运行周期 |
否 |
管理机器人执行优先级 |
机器人代理(执行优先级) |
DataBridge |
请求处理周期 |
否 |
å¤理跨领域数据转换 |
æ§行编排(数据传递规则) |
通用子领域(Generic Subdomain)
类名 |
生命周期 |
持久化 |
领域职责说明 |
对应前文模型 |
ConfigRegistry |
系统运行周期 |
是 |
管理系统配置参数 |
执行编排(超时设置) |
MetricCollector |
系统运行周期 |
是 |
收集运行时性能指标 |
工具网关(熔断机制) |
EventPublisher |
事件触发周期 |
否 |
处理领域事件分发 |
交互消息(时序标记) |
关键映射说明
- 领域整合:
持久化策略增强
存储类型 |
对应类 |
存储内容示例 |
关系型数据库 |
Conversation ,VersionSnapshot |
会话元数据、流程版本 |
文档数据库 |
ChunkIndexer ,EvidenceCache |
知识块、推理中间结果 |
键值存储 |
ConfigRegistry ,MetricCollector |
运行时配置、性能指标 |
对象存储 |
MediaProcessor |
多媒体文件和分析结果 |
经过以上整理,我们基本可以得到一个可用的顶层模型,一般而言,作为架构师的工作就接近结束了 ,但是作为独立软件的开发人员,目前仅仅是迈出了最重要的一步,得到一个可用的模型。
接下来我们需要验证模型,此时我们要为领域内模型定义出具体的行为,并按照场景逐个事例验证。
领域内模型行为整理
同样的,我们可以利用语言模型协助我们完成行为的初步整理。prompt如下:
至此,请为领域内的模型设计其行为,请在各子领域内的列表扩展三列,1. 模型的行为中文名,2. 模型行为英文命名,3. 模型行为说明。
返回如下:
DDD领域模型行为设计(完整版)
核心领域(Core Domain)
类名 |
行为中文名 |
行为英文命名 |
行为说明 |
对应模型 |
UserContext |
身份验证 |
authenticate |
验证用户token并加载权限上下文 |
核心用户 |
|
会话绑定 |
bindSession |
将用户与当前会话建立关联 |
|
|
权限检查 |
checkPermission |
验证用户对指定资源的操作权限 |
|
Conversation |
会话初始化 |
initialize |
创建新会话并设置默认参数 |
交互会话 |
|
状态转换 |
transitionState |
管理会话生命周期状态(进行中/挂起/结æ) |
|
|
超时处理 |
handleTimeout |
检测并处理空闲会话 |
|
BotOrchestrator |
机器人调度 |
scheduleBots |
根据优先级和依赖关系调度机器人执行 |
机器人代理+执行编排 |
|
结果聚合 |
aggregateResults |
合并多个机器人的输出结果 |
|
|
异常熔断 |
circuitBreak |
当连续失败时自动隔离故障机器人 |
|
推理子领域(Reasoning Subdomain)
类名 |
行为中文名 |
行为英文命名 |
行为说明 |
对应模型 |
ReasoningEngine |
问题重构 |
reformulateQuestion |
使用思维链技术优化原始问题 |
推理引擎 |
|
工具选择 |
selectTools |
根据问题类型匹配最佳工具集 |
|
|
结果验证 |
validateOutput |
检查工具返回值的逻辑合理性 |
|
ToolAdapter |
协议转换 |
convertProtocol |
将内部请求转换为目标工具API格式 |
工具网关 |
|
负载均衡 |
balanceLoad |
在多个工具实例间分配请求 |
|
|
结果标准化 |
normalizeResult |
将异构工具输出转为统一格式 |
|
EvidenceCache |
证据存储 |
storeEvidence |
缓存推理过程的中间结果 |
媒体处理 |
|
相关性过滤 |
filterRelevance |
根据当前会话筛选相关历史证据 |
|
|
版本快照 |
takeSnapshot |
保存特定时间点的完整推理上下文 |
|
代码子领域(Coding Subdomain)
类名 |
行为中文名 |
行为英文命名 |
行为说明 |
对应模型 |
CodeGenerator |
代码生成 |
generate |
根据自然语言描述生成可执行代码 |
代码环境 |
|
注释补充 |
addComments |
自动生成代码解释文档 |
|
|
代码优化 |
optimize |
应用性能优化模式重构代码 |
|
SandboxController |
环境隔离 |
isolateEnvironment |
创建安全的执行沙箱 |
代码环境(沙箱配置) |
|
资源限制 |
enforceLimits |
监控和控制CPU/内存使用量 |
|
|
环境回收 |
cleanup |
终止运行并释放所有资源 |
|
DebugAnalyzer |
错误分类 |
classifyError |
识别语法/逻辑/运行时异常 |
代码环境(修复策略) |
|
修复建议 |
suggestFix |
提供可执行的修复方案 |
|
|
模式学习 |
learnPattern |
从历史错误中归纳常见问题模式 |
|
工作流子领域(Workflow Subdomain)
类名 |
行为中文名 |
行为英文命名 |
行为说明 |
对应模型 |
FlowEngine |
流程驱动 |
driveFlow |
按节点顺序执行工作流 |
工作流引擎 |
|
条件评估 |
evaluateCondition |
计算节点转移条件的布尔值 |
|
|
自动回滚 |
autoRollback |
失败时执行预定的补偿操 |
|
NodeRepository |
节点注册 |
registerNode |
添加新的可复用流程节点 |
工作流引擎(节点类型) |
|
依赖解析 |
resolveDependencies |
检查节点间的输入输出匹配 |
|
|
性能分析 |
analyzePerformance |
统计节点执行耗时和资源占用 |
|
VersionSnapshot |
版本创建 |
createVersion |
保存当前流程的完整快照 |
工作流引擎(版本控制) |
|
差异比较 |
diffVersions |
显示两个版本间的变更点 |
|
|
版本回退 |
revertToVersion |
将流程恢复到指定历史版本 |
|
知识子领域(Knowledge Subdomain)
类名 |
行为中文名 |
行为英文命名 |
行为说明 |
对应模型 |
VectorSearcher |
向量检索 |
semanticSearch |
执行基于embedding的相似度搜索 |
知识融合 |
|
混合排序 |
hybridRanking |
结合关键词匹配和语义相似度综合排序 |
|
|
结果解释 |
explainScore |
生成检索结果的置信度说明 |
|
ChunkIndexer |
分块处理 |
chunkDocument |
将文档分割为带语义的段落 |
知识融合(嵌入模型) |
|
增量索引 |
incrementalIndex |
只更新变更部分的向量索引 |
|
|
质量评估 |
assessQuality |
检查知识块的信息完整性和准确性 |
|
HybridReasoner |
逻辑验证 |
logicalVerify |
对检索结果进行因果推理验证 |
知识融合(增强模式) |
|
矛盾检测 |
detectConflict |
识别结果中的逻辑矛盾点 |
|
|
证据加权 |
weightEvidence |
根据可信度调整不同来源的权重 |
|
行为设计原则
- 单一职责:每个行为对应一个明确的业务目标,三者形成递进关系但职责分离
# 典型调用链示例
class BotOrchestrator:
def execute(self):
self.scheduleBots() # 核心领域
ToolAdapter.convertProtocol() # 推理子领域
FlowEngine.driveFlow() # 工作流子领域
行为类型 |
重试策略 |
降级方案 |
工具调用 |
指数退避重试(3次) |
返回缓存结果+标记”可能过时” |
代码执行 |
立即重试(仅语法错误) |
提供等效API调用方案 |
知识检索 |
扩展查询条件重试 |
返回部分匹配结果+建议修正查询 |
- 性能关键行为:
- 向量检索:支持近似最近邻(ANN)算法
- 代码生成:使用预编译模板加速
- 流程驱动:异步执行独立节点
- 可观测性:
内容核验
我们可以要求模型将行为和场景联系在一起,此时我们检查的工作量会减少很多。
prompt如下:
回复如下:
AI问答系统场景行为映射表
场景分类 |
参与角色 |
交互形式 |
模型行为组合 |
补充说明 |
推理生成 |
用户、推理引擎、工具代理 |
1. 用户提问 → 2. 引擎补全问题 → 3. 调用工具 → 4. 整理输出 |
ReasoningEngine.reformulateQuestion + ToolAdapter.convertProtocol + EvidenceCache.storeEvidence |
需增加「结果校验」环节,确保工具返回数据的有效性 |
代码自生成执行 |
用户、代码引擎、沙箱环境 |
1. 用户需求 → 2. 生成初始代码 → 3. 沙箱执行 → 4. 错误修复 → 5. 返回结果 |
CodeGenerator.generate + SandboxController.isolateEnvironment + DebugAnalyzer.suggestFix |
建议增加「执行历史」记录,支持代码片段复用 |
工具使用 |
用户、工具路由、MCP服务 |
1. 用户指令 → 2. 工具匹配 → 3. 鉴权调用 → 4. 结果适配 → 5. 响应输出 |
ToolAdapter.balanceLoad + UserContext.checkPermission + ToolAdapter.normalizeResult |
需补充「降级策略」,当首选工具不可用时自动切换备用方案 |
多工作流编排 |
用户、流程引擎、验证模块 |
1. 触发流程 → 2. 节点跳转 → 3. 自动验证 → 4. 人工复核 → 5. 流程归档 |
FlowEngine.driveFlow + NodeRepository.resolveDependencies + VersionSnapshot.createVersion |
建议增加「版本快照」功能,支持流程回滚 |
知识库(RAG) |
用户、检索引擎、推理辅助 |
1. 提问向量化 → 2. 知识检索 → 3. 结果排序 → 4. 逻辑增强 → 5. 最终响应 |
VectorSearcher.semanticSearch + ChunkIndexer.incrementalIndex + HybridReasoner.logicalVerify |
需补充「反馈学习」机制,根据用户采纳率优化检索权重 |
混合决策 |
用户、仲裁引擎、多机器人 |
1. 并行调用多个机器人 → 2. 结果对比 → 3. 置信度评估 → 4. 最优结果选择 |
BotOrchestrator.scheduleBots + BotOrchestrator.aggregateResults + ReasoningEngine.validateOutput |
适用于医疗/金融等高风险场景 |
持续学习 |
管理员、训练模块、日志系统 |
1. 收集交互日志 → 2. 标注典型case → 3. 增量训练 → 4. 模型热更新 |
DebugAnalyzer.learnPattern + EvidenceCache.filterRelevance + VectorSearcher.hybridRanking |
需设置「灰度发布」机制,避免全量更新风险 |
跨场景路由 |
用户、分类器、各场景入口 |
1. 意图识别 → 2. 场景匹配 → 3. 上下文迁移 → 4. 无缝衔接目标场景流程 |
Conversation.transitionState + UserContext.bindSession + FlowEngine.evaluateCondition |
关键在「上下文保持」技术,避免重复询问 |
行为组合说明
推理生成场景
代码自修复场景
工具路由场景
典型行为参数映射
场景 |
关键行为参数 |
知识检索 |
semanticSearch(query: string, filters: {minScore: 0.7, maxResults: 5}) |
工作流编排 |
driveFlow(flowId: string, context: {timeout: 5000, retryPolicy: 3}) |
混合决策 |
aggregateResults(strategy: "weightedVote", weights: {botA: 0.6}) |
异常处理行为映射
异常类型 |
应对è¡ä¸º |
工具调用超时 |
ToolAdapter.circuitBreak + EvidenceCache.filterRelevance |
代码安全违规 |
SandboxController.enforceLimits + DebugAnalyzer.classifyError |
流程节点卡死 |
FlowEngine.autoRollback + VersionSnapshot.revertToVersion |
知识检索空结果 |
HybridReasoner.weightEvidence + ReasoningEngine.reformulateQuestion |
性能关键行为组合
感兴趣的读者可以自行核验一下。
至此,整个建模工作就可以结束了,接下来就是比较无聊的开发时间。后文不再赘述。
总结
纵观以上内容,我们可以总结出人与模型应该如何进行交互。
- 我们总是要将问题尽可能的收敛,此时模型的回复才可以尽可能的精确
- 我们要自行掌握校验模型内容的方法,可以将繁琐的表格工作交由模型,但是最后的核验如果不亲自上手,后续步骤会导致开发中问题发散
- 使用模型时候需要渐进式的提问,预期中一句话生成一个应用的想法既不现实,也不会可行。
我们也可以看看模型是怎么帮我们总结的:
总结:架构师如何与大模型互动及渐进式提问指南
1. 明确目标,分阶段拆解
架构师在利用大模型辅助设计时,需将复杂问题拆解为多个阶段,逐步细化。例如:
- 场景分析:先整理核心场景(如“推理生成”“代码执行”),再补充细节(如异常处理、性能优化)。
- 模型设计:从领域分类(核心/支撑子领域)到类定义,最后填充行为逻辑,避免一次性生成完整模型导致偏差。
2. 渐进式提问,逐步收敛
- 初始阶段:用宽泛问题获取框架(如“按DDD方法整理领域模型”)。
- 细化阶段:通过追加条件修正结果(如“检查并融合前文模型”)。
- 验证阶段:要求模型关联场景与行为(如“将行为映射到具体交互流程”)。
3. 模型为助手,人为决策者
- 生成内容:将重复性工作(表格整理、类定义)交给模型,提升效率。
- 核验关键:人工审查模型输出的逻辑一致性(如生命周期、持久化策略是否合理)。
- 补充上下文:通过迭代提问(如“增加异常处理行为”)完善细节,而非依赖单次生成。
4. 工具化协作模式
- 输入清晰:避免模糊描述,明确约束(如“按[场景,角色,交互形式]列表”)。
- 输出结构化:要求模型以表格、流程图(如Mermaid)或分层列表呈现,便于后续开发直接复用。
- 异常处理:针对高风险场景(如工具调用超时),单独提问设计降级策略。
5. 持续反馈与优化
- 动态调整:根据模型反馈修正问题描述(如发现缺失“版本快照”功能后补充提问)。
- 知识沉淀:将验证过的模型输出转化为文档,作为团队共识的领域语言(Ubiquitous Language)。
最终原则:大模型是架构设计的“加速器”,但核心决策(领域边界、关键行为)必须由架构师掌控。通过渐进式交互,既能发挥模型的高效性,又能确保系统的可控性与一致性。