# 数字员工 (Lobster Engine) 完整技术手册 > 最后更新:2026-06-07 > 涵盖:架构设计 / 模块清单 / 双端 UI / 节点能力 / 企微发送 / 自进化&学习闭环 / **响应延迟优化** / API / 剩余差距 --- ## 一、架构总览 ``` ┌──────────────────────────────────────────────────────────────┐ │ saasui (租户端30页) / saasadminui (平台端32页) │ │ Vue 2 + Element UI — 工作流/进化/学习/A-B/看板/渠道/测试 │ └──────────────────────────┬───────────────────────────────────┘ │ HTTP REST ┌──────────────────────────▼───────────────────────────────────┐ │ LobsterEngineController / LobsterAdminController / │ │ LobsterOptimizationController / PayCallbackController │ └──────────────────────────┬───────────────────────────────────┘ │ ┌──────────────────────────▼───────────────────────────────────┐ │ 数字员工核心 (fs-service) │ │ │ │ ┌─────────┐ ┌──────────┐ ┌──────────┐ ┌──────────────────┐ │ │ │进化引擎 │ │学习引擎 │ │A/B测试 │ │质量评分 8维度 │ │ │ │Evolution │ │Learning │ │Feedback │ │160分+重生成 │ │ │ │+Skill合成│ │+Replay │ │+自动胜出 │ │ │ │ │ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────────┬─────────┘ │ │ │ │ │ │ │ │ ┌────▼─────────────▼────────────▼─────────────────▼─────────┐│ │ │ ContextAssembler (9维上下文 + 租户学习策略注入) ││ │ │ 画像+摘要+多轮+知识库+变量+合规+事实记忆+断点续聊+学习策略 ││ │ └──────────────────────────┬───────────────────────────────┘│ │ │ │ │ ┌──────────────────────────▼───────────────────────────────┐│ │ │ DynamicNodeExecutor (38节点类型, 注册表全部 FULL) ││ │ └──────────────────────────┬───────────────────────────────┘│ │ │ │ │ ┌──────────────────────────▼───────────────────────────────┐│ │ │ MultiModelRouter → AiSceneDispatcher ││ │ │ AiModelGateway (豆包/千问/元宝/DeepSeek) ││ │ └──────────────────────────────────────────────────────────┘│ │ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────────────┐ │ │ │16 Message│ │13 Contact│ │智能API │ │支付链路 │ │ │ │Channel │ │Adapter │ │ScriptCache│ │PayService+Router │ │ │ └──────────┘ └──────────┘ └──────────┘ └──────────────────┘ │ └───────────────────────────────────────────────────────────────┘ ``` --- ## 二、完整模块清单(按目录) ### 2.1 核心执行层 (workflow/impl/) | 文件 | 职责 | |------|------| | `LobsterWorkflowExecutorImpl.java` | 工作流主执行器 + `enrichQwExtra()` 企微会话预填 + 学习样本回写 | | `DynamicNodeExecutorImpl.java` | **38**节点类型路由:支付/关怀/标签/调查/画像/复购/SOP/CID/物流等 | | `LobsterEvolutionEngineImpl.java` | 进化决策:12步流程 → AI生成 → 8维160分评分 → 合规/敏感词/身份隐藏;**延迟策略 + 分环节耗时 + 后置异步** | | `ContextAssemblerImpl.java` | **9维**上下文聚合 + **ParallelExecutor 并行加载** + **租户学习策略注入** | | `QualityScoringServiceImpl.java` | 8维度160分评分 + **LobsterLatencyPolicy 快路径(规则分/跳过重生成)** | | `MultiModelWorkflowGeneratorImpl.java` | AI工作流生成:自然语言 → 完整节点JSON → 三阶段流水线(生成/改进/验证) | | `ConditionEvaluatorImpl.java` | 判断节点:10+操作符(eq/ne/gt/lt/contains/in/between/notNull/empty/regex) | | `VariableStoreImpl.java` | 变量持久化:内存+DB双写,模板渲染 | | `SummaryGeneratorImpl.java` | 对话摘要:异步触发,5分钟间隔防频繁 | | `MultiTurnDialogueManagerImpl.java` | 多轮对话:追问/收集/完成/跳转 | | `PromptManagerImpl.java` | Prompt三级优先级:节点级 → 租户全局 → Fallback | | `SensitiveWordServiceImpl.java` | 敏感词:精确+正则+DB三级匹配 | | `ComplianceServiceImpl.java` | 合规过滤:severity≥2替换,≥3转人工 | | `SemanticTakeoverDetectorImpl.java` | 语义转人工:6类危险意图检测 | | `DuplicateReplyDetector.java` | 消息去重:精确(5条)+语义(2-gram Jaccard>70%) | | `ToolCallFrameworkImpl.java` | 工具调用框架:订单查询/短信/日志 | | `LobsterE2eTestServiceImpl.java` | E2E测试管理 | | `LobsterTestScenarioServiceImpl.java` | 测试场景管理 | | `LobsterNodeTypeServiceImpl.java` | 节点类型管理(DB驱动) | | `LobsterModelConfigServiceImpl.java` | 模型配置管理 | | `LobsterPromptServiceImpl.java` | Prompt模板CRUD | | `LobsterSalesCorpusServiceImpl.java` | 销售语料分析 | | `LobsterBillingServiceImpl.java` | 计费服务 | | `LobsterEventAuditServiceImpl.java` | 事件审计 | | `DynamicNodeImplServiceImpl.java` | 动态节点实现管理 | | `DynamicNodeAdjusterImpl.java` | 动态节点调整 | | `PendingAuditKnowledgeServiceImpl.java` | 待审核知识管理 | | `FactDecayScheduler.java` | 事实记忆衰减调度 | ### 2.2 进化引擎 (workflow/evolution/) | 文件 | 职责 | |------|------| | `EvolutionEngine.java` | 接口:recordInteraction / analyzeAndSuggest / applySuggestion / getEvolutionMetrics | | `EvolutionEngineImpl.java` | 低效节点识别(按不回复率排序) → AI分析 → 建议落库 → 可选自动应用 | | `UserNodeOptimizer.java` | 接口:用户级节点优化(千人千面,区别于全局 EvolutionEngine) | | `UserNodeOptimizerImpl.java` | 实现:千人千面优化 → 自动/审核双模式 → 批量审核 | | `EvolutionSchedulerImpl.java` | `@Scheduled` 每30分钟进化+**联动触发学习** + 凌晨2点A/B扫查 | ### 2.3 学习引擎 (workflow/learning/) | 文件 | 职责 | |------|------| | `TenantLearningEngine.java` | 接口:recordEvent / **recordEvolutionInteraction** / triggerLearningCycle / recommendStrategies / applyLearningResult | | `TenantLearningEngineImpl.java` | 4维度分析 + **ReplayBuffer** + **AI Skill合成** + 策略注入Context + Patch审核落盘 | | `SalesCorpusAnalyzer.java` | 销冠语料分析 → ingestCorpusKnowledge 喂给学习引擎 | | `DistributedLearningService.java` | 分布式学习接口 | | `DistributedLearningServiceImpl.java` | 跨租户模式共享 + 行业最佳实践库 + 高置信模式自动贡献 | ### 2.4 反馈进化/A-B测试 (workflow/feedback/) | 文件 | 职责 | |------|------| | `FeedbackDrivenEvolution.java` | 接口:recordFeedback / analyzeFeedback / A-B测试 | | `FeedbackDrivenEvolutionImpl.java` | 实现:反馈统计 → 自动生成A/B变体 + 分流(DB可配比例) + sample_count追踪 + 胜出自动应用 | ### 2.5 消息渠道 (workflow/channel/) | 文件 | 状态 | 说明 | |------|:---:|------| | `MessageChannel.java` | 接口 | sendMessage / isAvailable / supports(大小写不敏感) | | `MessageChannelRouter.java` | 路由器 | 自动发现 + **channelType 大小写不敏感路由** | | `QwMessageChannel.java` | ✅ | **Hook(`IQwMsgService.sendMsg`) → iPad(`WxWorkService`) → addAiMsg → legacy Socket** | | `WxMessageChannel.java` | ✅ | 微信客服 | | `ImMessageChannel.java` | ✅ | APP内IM(OpenIMService) | | `SmsMessageChannel.java` | ✅ | 短信通道(MessageChannel 统一路由) | | `EmailMessageChannel.java` | ⚠️ | 邮件通道(可配置 email_send API 真实发信) | | `WhatsAppMessageChannel.java` | ✅ | WhatsApp API | | `TmallMessageChannel.java` | ✅ | 千牛API | | `JdMessageChannel.java` | ✅ | 京东开放平台 | | `DouyinDmMessageChannel.java` | ✅ | 抖音私信API | | `DouyinEcMessageChannel.java` | ✅ | 抖音电商API | | `XiaohongshuDmMessageChannel.java` | ✅ | 小红书API | | `KuaishouDmMessageChannel.java` | ✅ | 快手API | | `LineMessageChannel.java` | ✅ | Line API | | `TelegramMessageChannel.java` | ✅ | Telegram API | | `AppImMessageChannel.java` | ✅ | APP私信 | ### 2.6 联系人适配 (workflow/contact/) | 文件 | 状态 | |------|:---:| | `ContactAdapter.java` | 接口 | | `ContactAdapterRouter.java` | 路由器 | | Wx/Qw/Im/WhatsApp/Tmall/Jd/DouyinDm/DouyinEc/Xiaohongshu/Kuaishou/Line/Telegram/AppIm | ✅ 全部对接 ChannelTypeRegistry + DB查询 | ### 2.7 外部数据 (workflow/data/) | 文件 | 职责 | |------|------| | `ExternalDataProvider.java` | 插拔接口:getSourceType() + fetch(params) | | `ExternalDataRouter.java` | 自动发现所有 Provider | | `WeatherDataProvider.java` | 天气:高德/和风API → 真实解析 | | `HolidayDataProvider.java` | 节假日:2025-2026法定节假日内置 | ### 2.8 智能API调用 (workflow/api/) | 文件 | 职责 | |------|------| | `ApiRegistryService.java` | API注册中心:MyBatis化 + priority排序 + 备份降级 | | `SmartApiCallNodeExecutor.java` | AI语义匹配API → 提取参数 → REST调用 → 脚本解析 | | `ScriptCache.java` | SpEL脚本编译缓存(零依赖,ConcurrentHashMap) | ### 2.9 支付 (workflow/pay/) | 文件 | 职责 | |------|------| | `PayProvider.java` | 插拔支付接口 | | `PayRouter.java` | 自动发现所有 PayProvider | | `WechatPayProvider.java` | 微信支付实现 | | `PayService.java` | 订单生命周期:创建→UUID订单号→支付链接→状态查询 | ### 2.10 监控看板 (workflow/monitor/) | 文件 | 职责 | |------|------| | `DashboardService.java` | 8项指标:24h实例/7d消息/进化/知识库排行/转换漏斗/渠道分布/死信/心跳 | ### 2.11 消息推送 (workflow/push/) | 文件 | 职责 | |------|------| | `MessagePushService.java` | 统一推送入口:用户级+公司级+在线计数 | ### 2.12 辅助模块 | 目录 | 职责 | |------|------| | `workflow/heartbeat/` | HeartbeatScheduler:`@Scheduled`每5分钟心跳 + 每15分钟清理 | | `workflow/expression/` | ExpressionEngine:SpEL布尔/对象求值,判断节点核心 | | `workflow/prompt/` | SystemPromptService:4级优先级(company+industry→company→industry→default) | | `workflow/dedup/` | MessageDedupService:精确+语义去重 | | `workflow/queue/` | DeadLetterQueue:死信入队/重试/删除 + DistributedDelayQueue | | `workflow/semantic/` | SemanticAnalyzer:意图分类+实体提取+租户关键词缓存 | | `workflow/vector/` | VectorPatternMatcher:向量嵌入存储+检索 | | `workflow/handoff/` | HumanHandoffDetector:人工接管检测+记录 | | `workflow/identity/` | IdentityHidingService:身份隐藏 | | `workflow/knowledge/` | KnowledgeVersionManager:知识版本管理+回滚 | | `workflow/personalization/` | PersonalizationEngine + UserSegmentService:千人千面+用户分群 | | `workflow/performance/` | **LobsterLatencyPolicy** + **LobsterContextCacheService** + ParallelExecutor | | `workflow/cache/` | **LobsterContextCacheService** — 上下文 Redis 缓存层 | | `workflow/scheduler/` | WorkflowTriggerScheduler + WorkflowTaskExecutor:定时触发+任务执行 | ### 2.13 节点能力注册 (workflow/capability/) | 文件 | 职责 | |------|------| | `LobsterNodeCapabilityRegistry.java` | **38**种节点类型注册表,当前 **38/38 FULL** | | `LobsterEngineController.java` | `/workflow/lobster/engine/integration-test` 集成自测端点 | **节点类型概览(节选)**: | type | code | 说明 | |:---:|:---:|------| | 1 | start | 开始 | | 2 | message | 消息(支持进化) | | 3 | judgment | 条件判断 | | 7 | order_success | 成单支付 | | 30 | qw_message | 企微消息(channelType=QW) | | 33 | ai_chat | AI对话(支持进化) | | 34 | sms_message | 短信 | | 35 | email_message | 邮件 | | 43 | sub_workflow | 子工作流 | | 50 | sop_execute | SOP执行 | | 100 | external_api | 外部API | 完整列表见 `LobsterNodeCapabilityRegistry.java`。 ### 2.14 单元测试 (fs-service/src/test/) | 文件 | 覆盖 | |------|------| | `LobsterNodeCapabilityRegistryTest.java` | 38节点注册完整性 | | `DynamicNodeExecutorImplTest.java` | 动态节点执行器路由 | --- ## 三、文件架构一览 ``` fs-service/src/main/java/com/fs/company/ ├── controller/ │ ├── LobsterAdminController.java # 12端点:进化/优化/A-B/学习/看板/支付 │ └── PayCallbackController.java # 2端点:微信/支付宝异步通知 ├── mapper/ │ ├── LobsterAuxiliaryMapper.java # 15张辅助表统一Mapper │ ├── LobsterEvolutionConfigMapper.java # 进化日志+建议+节点6张表 │ ├── LobsterTenantLearningMapper.java # 学习事件+模式+语料9张表 │ ├── LobsterToolCallMapper.java # 工具调用3张表 │ ├── LobsterApiRegistryMapper.java # API注册表 │ ├── LobsterFeedbackMapper.java # 反馈+A/B测试表 │ ├── LobsterChannelPluginConfigMapper.java # 渠道插件配置 │ ├── LobsterChannelRegistryMapper.java # 渠道类型注册 │ ├── LobsterChatSessionMapper.java # 会话表 │ ├── LobsterChatRecordMapper.java # 聊天记录表 │ ├── LobsterChatMsgMapper.java # 聊天消息表 │ ├── LobsterComplianceAuditMapper.java # 合规审计表 │ ├── LobsterComplianceRuleMapper.java # 合规规则表 │ ├── LobsterConversationSummaryMapper.java # 对话摘要表 │ ├── LobsterDedupConfigMapper.java # 去重配置表 │ ├── LobsterDialogueStateMapper.java # 对话状态表 │ ├── LobsterEventAuditMapper.java # 事件审计表 │ ├── LobsterHandoffEventMapper.java # 转人工事件表 │ ├── LobsterKnowledgeUsageLogMapper.java # 知识使用日志表 │ ├── LobsterLearningCorpusMapper.java # 学习语料表 │ ├── LobsterModelConfigMapper.java # 模型配置表 │ ├── LobsterMultiTurnDialogueMapper.java # 多轮对话表 │ ├── LobsterNodeExecutionLogMapper.java # 节点执行日志表 │ ├── LobsterPendingKnowledgeMapper.java # 待审核知识表 │ ├── LobsterProfileConfigMapper.java # 画像配置表 │ ├── LobsterSalesCorpusMapper.java # 销售语料表 │ ├── LobsterSegmentMapper.java # 用户分群表 │ ├── LobsterSensitiveWordMapper.java # 敏感词表 │ ├── LobsterSmartApiMapper.java # 智能API表 │ ├── LobsterSummaryConfigMapper.java # 摘要配置表 │ ├── LobsterSystemPromptMapper.java # 系统提示词表 │ ├── LobsterTokenConsumptionMapper.java # Token消耗表 │ ├── LobsterUserPreferenceMapper.java # 用户偏好表 │ ├── LobsterUserProfileMapper.java # 用户画像表 │ ├── LobsterWorkflowInstanceMapper.java # 工作流实例表 │ ├── LobsterWorkflowNodeTypeMapper.java # 节点类型表 │ ├── LobsterWorkflowVariableMapper.java # 工作流变量表 │ ├── ProfileEnrichmentMapper.java # 画像增强表 │ ├── CustomerFactMapper.java # 客户事实表 │ ├── CustomerHabitMapper.java # 客户习惯表 │ ├── WhatsAppContactMapper.java # WhatsApp联系人表 │ └── LobsterBillingMapper.java # 计费表 └── service/workflow/ (见第二章目录树) resources/mapper/lobster/ ├── LobsterAuxiliaryMapper.xml # 15表SQL ├── LobsterEvolutionConfigMapper.xml # 6表SQL ├── LobsterTenantLearningMapper.xml # 9表SQL ├── LobsterToolCallMapper.xml # 3表SQL ├── ...共29个XML └── ➕ 全部使用 MyBatis ${sql} 或 #{param}(JdbcTemplate 已清零) sql/ ├── lobster_tables_ddl.sql # 17张DDL ├── lobster_workflow_engine.sql # 引擎核心表 ├── lobster_evolution_engine.sql # 进化表 ├── ... └── lobster_company_menu_init.sql # 菜单初始化 ``` --- ## 四、前端菜单结构(saasui / saasadminui) ### 4.1 saasui(租户端 — 30 个 lobster 页面) | 路由 | 页面 | 说明 | |------|------|------| | `/company/workflowLobster` | 工作流主入口 | AI生成 + 模板管理(主菜单) | | `/lobster/workflow-canvas` | 画布编辑 | 拖拽节点 | | `/lobster/workflow-generate` | AI生成工作流 | NL → JSON | | `/lobster/chat-test` | 模拟聊天测试 | 全流程/逐节点 | | `/lobster/instance` | 实例监控 | 暂停/恢复/终止 | | `/lobster/optimization` | AI优化审核 | 批量通过/驳回 | | `/lobster/evolution` | AI进化引擎 | 指标/分析/应用建议 | | `/lobster/learning-results` | 学习结果 | 触发学习/应用模式 | | `/lobster/ab-test` | A/B测试 | 变体对比/应用胜出 | | `/lobster/dashboard` | 引擎看板 | 漏斗/渠道/死信 | | `/lobster/node-capabilities` | 节点能力矩阵 | 38节点成熟度 | | `/lobster/integration-test` | 集成测试 | 全量/节点/执行器 | | `/lobster/channel-config` | 渠道配置 | 16通道状态 | | `/lobster/model-route` | 多模型路由 | 场景模型链 | | `/lobster/prompt` / `template` / `sales-corpus` / `api-registry` | 资源管理 | 提示词/模板/语料/API | | `/lobster/dead-letter` / `event-audit` / `dynamic-impl` | 运维审核 | 死信/事件/动态节点 | | `/lobster/profile-config` / `summary-config` / `dedup-config` / `sensitive-words` | 引擎配置 | 画像/摘要/去重/敏感词 | | `/lobster/chat-aggregate` / `pay-manage` / `quality-verify` / `e2e-history` / `test-scenario` | 测试&运营 | 聚合聊天/支付/质量/E2E | | `/company/tag/binding` | 标签-工作流绑定 | **saasui 独有** | > 多数 `/lobster/*` 在 saasui 为 `hidden: true`,通过后端动态菜单或 workflowLobster 入口跳转。 ### 4.2 saasadminui(平台端 — 32 个 lobster 页面) 与 saasui 共享上述页面,另增: | 路由 | 页面 | 说明 | |------|------|------| | `/lobster/token-stats` | Token消耗统计 | **admin 独有**,按日/模型/实例 | | `/lobster/channel-plugin` | 渠道插件 | **admin 独有**,凭证配置/连通测试 | **差异摘要**: | 维度 | saasui | saasadminui | |------|--------|-------------| | 菜单 | 无顶级「数字员工」,主入口 workflowLobster | 完整 `/lobster` 静态菜单 | | 租户范围 | 当前登录租户 | 跨租户 company 下拉 | | API | 租户 scoped | + `lobster-admin.js` / `lobster-token.js` | --- ## 五、模块逻辑关系(数据流) ``` 客户消息 arrive │ ▼ ┌─ ChannelTypeRegistry.route(companyId, contactId) │ │ │ ┌──────────────────▼──────────────────┐ │ │ MessageDedupService │ │ │ 精确去重 → 语义去重(Jaccard>70%) │ │ └──────────────────┬──────────────────┘ │ │ │ ┌──────────────────▼──────────────────┐ │ │ SemanticTakeoverDetectorImpl │ │ │ 识别愤怒/投诉/法律威胁 → 转人工 │ │ └──────────────────┬──────────────────┘ │ │ │ ┌──────────────────▼──────────────────┐ │ │ ContextAssemblerImpl (9维聚合) │ │ │ 画像+摘要+多轮+知识库+变量+合规 │ │ │ +事实记忆+断点续聊+**租户学习策略** │ │ └──────────────────┬──────────────────┘ │ │ │ ┌──────────────────▼──────────────────┐ │ │ ModelRouter (意图分类) │ │ │ greeting/consult → lite模型 │ │ │ objection/complaint → pro模型 │ │ └──────────────────┬──────────────────┘ │ │ │ ┌──────────────────▼──────────────────┐ │ │ LobsterEvolutionEngine.evolve() │ │ │ AI生成 + QualityScoring 8维160分 │ │ └──────────────────┬──────────────────┘ │ │ │ ┌──────────────────▼──────────────────┐ │ │ recordEvolutionInteraction() │ ← 2026-06-07 新增 │ │ event_log + replay_buffer + skill │ │ └──────────────────┬──────────────────┘ │ │ │ ┌──────────────────▼──────────────────┐ ┌─────────────────┐ │ │ DynamicNodeExecutor.execute() │ │ │ **38**节点类型各自专属处理 │ │ │ type=30 qw_message → channelType=QW│ │ └──────────────────┬──────────────────┘ │ │ │ ┌──────────────────▼──────────────────┐ │ │ deliverMessage() + enrichQwExtra() │ │ │ MessageChannelRouter → 16渠道 │ │ │ QW: Hook/iPad/addAiMsg 三级降级 │ │ └──────────────────┬──────────────────┘ │ │ │ ┌──────────────────▼──────────────────┐ ┌─────────────────┐ │ │ SummaryGenerator (异步) │────→│ TenantLearning │ │ │ 5分钟间隔防频繁 │ │ Replay→Skill→AI │ │ └─────────────────────────────────────┘ │ → Patch审核 │ │ │ → 策略注入Prompt│ │ ┌─────────────────────────┴─────────────────┐ │ │ EvolutionScheduler 30min + Learning 1h │ │ │ A/B sweep 02:00 + DistributedLearning │ │ └──────────────────────────────────────────┘ ``` --- ## 六、JdbcTemplate → MyBatis 迁移历史 | 阶段 | 起始 | 结束 | 说明 | |------|:---:|:---:|------| | **第一轮** | 466处/44文件 | ~218处/26文件 | 热路径全量 MyBatis(对话/知识库/工具调用/API注册等) | | **第二轮** | ~218处/26文件 | ~175处/24文件 | EvolutionEngine/UserNodeOptimizer(43处) + TenantLearning(27处) | | **第三轮** | ~175处/24文件 | **0处/0文件** | 全量清零 + 新增 LobsterAuxiliaryMapper 覆盖15张辅助表 | **最终状态:workflow 目录零 JdbcTemplate,100% MyBatis 合规。** --- ## 七、三轮深度修复记录 ### 第一轮:Mock/Stub 消除 | # | 修复项 | 变更 | |:---:|------|------| | 1 | 9 ContactAdapter `return null` | → `ChannelTypeRegistry.resolveSourceUserId()` + DB查询 | | 2 | 6 MessageChannel 桩 | → `RestTemplate` 真实调用(Kuaishou/Line/Telegram/AppIm/DOUYIN_EC/Xiaohongshu) | | 3 | WeatherDataProvider 占位 | → 高德API `lives` / 和风API `now` 双格式解析 | | 4 | 支付链路创建 | → `PayService` + `PayRouter` + `WechatPayProvider` 完整链 | | 5 | REST API 创建 | → `LobsterAdminController`(12端点) + `PayCallbackController`(2端点) | | 6 | 监控看板 | → `DashboardService` 8项指标聚合 | | 7 | 5个前端页面 | → Dashboard/支付/A-B/学习/渠道 新增 | ### 第二轮:定时调度 + 逻辑闭环 | # | 修复项 | 变更 | |:---:|------|------| | 8 | EvolutionScheduler 无定时 | → `@Scheduled` 每30分钟遍历租户 + 凌晨2点扫查A/B | | 9 | HeartbeatScheduler 无定时 | → `@Scheduled` 每5分钟心跳 | | 10 | applyLearningResult NOP | → 写入 `lobster_workflow_patch` 表落地 | | 11 | A/B sample_count 未追踪 | → `update sample_count + 1` 每次分流累加 | | 12 | A/B 分流比例硬编码 | → `getAbSplitRatio(companyId)` DB可配 | | 13 | 模拟回复硬编码 | → `MultiModelRouter` AI动态生成 | | 14 | TenantLearning 无调度 | → `@Scheduled` 每小时自动触发 | ### 第三轮:空安全 + SQL注入 + 命名修正 | # | 修复项 | 变更 | |:---:|------|------| | 15 | `auxMapper.update(sql, ?,...)` 签名不匹配 | → 5处 `String.format` + `sqlEscape()` 修复 | | 16 | PayService SQL注入 | → `String.format` 参数化 | | 17 | `auxMapper.queryForList()` 不存在 | → 新增 `queryForList`/`queryForStringList`/`executeStatement` 兼容方法 | | 18 | `SystemPromptService` 用错Mapper | → 改用 `LobsterSystemPromptMapper.selectList()` | | 19 | `GroovyScriptCache` 误导命名 | → 删除,创建 `ScriptCache`(明确标为 SpEL) | | 20 | `SmartApiCallNodeExecutor` 引用更新 | → `groovyCache` → `scriptCache` | | 21 | ApiRegistryService.get() 多provider随机 | → `Stream.min(priority)` 主接口优先 | | 22 | PayService `Math.random` 冲突 | → `UUID.randomUUID()` | | 23 | 调度器异常级别太低 | → `debug` → `warn` | | 24 | 租户加载字段兼容 | → `id`/`company_id` 双字段 fallback | ### 第四轮:企微发送 + 自进化学习闭环(2026-06-07) | # | 修复项 | 变更 | |:---:|------|------| | 25 | QwMessageChannel 只写DB | → 复用平台链路:`IQwMsgService.sendMsg` → fs-qwhook `aiReplyMsg` WebSocket | | 26 | iPad 发送未接入 | → `WxWorkService.SendTextMsg()`,失败降级 Hook | | 27 | channelType 大小写 | → `MessageChannelRouter` + `DynamicNodeExecutor` 统一 `QW` | | 28 | 企微会话上下文缺失 | → `LobsterWorkflowExecutorImpl.enrichQwExtra()` 预填 qwExtId/qwSessionId | | 29 | 25 节点 PARTIAL | → `LobsterNodeCapabilityRegistry` **38/38 FULL** | | 30 | 学习样本无采集 | → `recordEvolutionInteraction()` 写入 event_log + replay_buffer | | 31 | 学习策略未注入 AI | → `ContextAssembler` 【租户学习策略】Prompt 段 | | 32 | AI Skill 合成缺失 | → `synthesizeSkillDocument()` 高置信模式 → Skill 文档 | | 33 | 学习定时只跑 companyId=0 | → 遍历活跃租户 | | 34 | applyLearning 忽略 resultId | → 按 ID 单条应用 + markPatternApplied | | 35 | saasadminui 页面缺口 | → 补齐 dashboard/evolution/learning 等 8 页 + 路由 | | 36 | 集成测试端点 | → `LobsterEngineController` integration-test | | 37 | JUnit 零覆盖 | → NodeCapabilityRegistry + DynamicNodeExecutor 单测 | --- ## 八、@Scheduled 全家桶 | 调度器 | Cron | 职责 | |------|:---:|------| | `EvolutionSchedulerImpl` | `0 */30 * * * ?` | 遍历租户:进化分析 + **自动应用高置信建议** + **触发学习周期** | | `EvolutionSchedulerImpl` | `0 0 2 * * ?` | 扫查胜出A/B变体自动应用 | | `HeartbeatSchedulerImpl` | `0 */5 * * * ?` | 引擎心跳 | | `HeartbeatSchedulerImpl` | `0 */15 * * * ?` | 清理过期心跳 | | `TenantLearningEngineImpl` | `0 0 */1 * * ?` | **遍历活跃租户**触发学习周期(非 companyId=0) | | `FactDecayScheduler` | `0 0 3 * * ?` | 清理过期事实记忆 | --- ## 八点五、响应延迟优化(LobsterLatencyPolicy) ### 问题根因 单次对话热路径 `LobsterEvolutionEngineImpl.evolve()` 在 **quality 模式**下可能触发 **7~9 次 LLM 调用**: | 环节 | 类 | 耗时来源 | |------|-----|---------| | 变量提取 | `SummaryGeneratorImpl.extractConversationVariables` | 同步 LLM | | 全局摘要 | `SummaryGeneratorImpl.generateGlobalSummary` | 超 500 字时再调 LLM | | 意图分析 | `SemanticAnalyzerImpl.analyzeIntent` | 默认先 LLM | | 动态节点 | `LobsterEvolutionEngineImpl.enrichWithDynamicNode` | 额外 LLM | | 主回复 | `generateAiReply` | 1 次 LLM | | 质量评分 | `QualityScoringServiceImpl.scoreWithRetry` | 多模型流水线 + 重生成 | | 后置学习 | `learnCustomerHabit` / `profileEnrichment` | 同步 DB | ### 三档延迟模式 配置项(全局默认 + 租户覆盖): | 配置 | 说明 | |------|------| | `lobster.latency.mode` (application.yml) | 全局默认:`fast` / `balanced`(默认) / `quality` | | `company_config.lobster_latency_mode` | 租户级覆盖,优先级更高 | | 模式 | LLM 次数(典型) | 行为 | |------|:---:|------| | **fast** | 1 | 规则质量评分;跳过变量提取/动态节点/摘要 LLM;关键词意图 | | **balanced** | 1~2 | 规则分达标跳过评分链;禁止重生成;并行上下文加载 | | **quality**(**默认**) | 7~9 | 保留全量 8 维评分 + 多模型重生成 + 同步变量提取 | ### 已落地优化点 | 优化 | 实现 | |------|------| | 延迟策略中心 | `LobsterLatencyPolicy.java`(**默认 quality**) | | **上下文 Redis 缓存** | `LobsterContextCacheService.java` — 见下表 | | 质量评分快路径 | `QualityScoringServiceImpl` — 仅 fast/balanced 生效 | | 语义快路径 | `SemanticAnalyzerImpl` — 仅 fast/balanced 生效 | | 上下文并行加载 | `ContextAssemblerImpl` + `ParallelExecutorImpl` | | 后置异步化 | 习惯学习/对话状态/画像融合异步 + **写时失效缓存** | | 分环节耗时日志 | `logEvolution` 输出 `steps={...}` | ### Redis 缓存覆盖(LobsterContextCacheService) | 数据 | Redis Key 前缀 | TTL | 写时失效 | |------|---------------|-----|---------| | 用户画像 | `lobster:ctx:profile:` | 5min | 摘要更新/对话后置 | | 最近对话 | `lobster:ctx:chats:` | 2min | 每轮对话结束 | | 知识库检索 | `lobster:ctx:kb:` | 10min | 知识 CRUD | | 历史事实 | `lobster:ctx:facts:` | 5min | 摘要写事实 | | 断点状态 | `lobster:ctx:state:` | 5min | 对话结束 | | 沟通习惯 | `lobster:ctx:habits:` | 5min | 对话结束 | | 学习策略 | `lobster:ctx:strategies:` | 10min | 学习周期/应用 | | 合规规则+Prompt | `lobster:ctx:compliance:` | 30min | 规则变更时需手动清 | | 向量行/Embedding | `lobster:ctx:vrows:` / `embed:` | 10~60min | 向量写入 | **已有 Redis(非本次新增)**:对话摘要、工作流变量、Prompt、敏感词、多轮状态、消息去重。 配置项(`application-common.yml`): ```yaml lobster: latency: mode: quality # 质量优先 cache: enabled: true profile-ttl-minutes: 5 knowledge-ttl-minutes: 10 # ... 见 application-common.yml ``` ### 运维建议 1. **生产默认 `quality`**:已改为全局默认,保留全量评分与重生成,不降质。 2. **Redis 必须可用**:`lobster.cache.enabled=true` 时上下文热路径走 Redis;Redis 不可用自动降级 DB 直查。 3. **高并发/客服高峰**:若可接受略降质,对指定租户设 `lobster_latency_mode=balanced`。 4. **排查慢请求**:搜日志 `[LobsterEvolution] 完成` 看 `steps` 哪一段最长;第二次同用户请求应明显更快(缓存命中)。 --- ## 九、剩余差距与联调项 | # | 项 | 优先级 | 说明 | |:---:|------|:---:|------| | 1 | 企微联调验证 | P0 | 代码已走 Hook/iPad 链路,需在测试环境验证与手动 `/qw/qwMsg/sendMsg` 行为一致 | | 2 | 邮件真实发信 | P2 | `EmailMessageChannel` 依赖外部 email_send API 配置 | | 3 | 短信通道配置 | P2 | `SmsMessageChannel` 需对接租户短信服务商 | | 4 | adminui 跨租户实例监控 | P2 | 部分跨租户查询可能 404,需对齐 `lobster-admin` API | | 5 | JUnit 覆盖率 | P3 | 目前仅 2 个核心单测,进化/学习/A-B 待补 | | 6 | SendMsg 双套逻辑 | P3 | `fs-ipad-task/SendMsg.sendLobsterQwMsg` 可统一走 MessageChannelRouter | **核心能力(工作流/进化/学习/A-B/38节点/16渠道)均已实现并闭合。** --- --- # 原理篇 --- ## 十一、数字员工核心原理 ### 11.1 进化决策原理(EvolutionEngine) 数字员工的"智能"来源于其**闭环进化决策流程**,每一次客户对话都在驱动引擎自我优化: ``` 客户消息到来 │ ▼ ┌─ ContextAssembler 聚合9维上下文 + 学习策略 ─────────────────┐ │ ① 用户画像 (profile) │ │ ② 对话摘要 (summary, 异步生成, 5分钟防抖) │ │ ③ 多轮对话状态 (MultiTurnDialogue) │ │ ④ 知识库检索 (本地LIKE + FastGPT向量双路RAG) │ │ ⑤ 工作流变量 (VariableStore, 内存+DB双写) │ │ ⑥ 合规规则 (severity 1/2/3 分级处理) │ │ ⑦ 跨实例事实记忆 + 客户沟通习惯 │ │ ⑧ 断点续聊 (lastState) │ │ ⑨ 租户学习策略 (learnedStrategies, 高置信 pattern 注入) │ └────────────────────────────┬───────────────────────────────┘ │ ▼ ┌─ ModelRouter 意图分类 ───────────────────────────────────────┐ │ greeting/confirm/reject ──→ lite 轻量模型 (快速低成本) │ │ consult/objection/complaint ──→ pro 旗舰模型 (高质量必要) │ └────────────────────────────┬───────────────────────────────┘ │ ▼ ┌─ AiSceneDispatcher 场景分发 ─────────────────────────────────┐ │ 场景编码 → AdminAiScene 模型链配置 │ │ workflow_execution / workflow_generation / quality_scoring │ │ 场景内逐模型尝试: 主模型失败 → 自动降级到次选 → 豆包兜底 │ │ 4厂商: 豆包(default) / 千问 / 元宝 / DeepSeek │ │ 全部 OpenAI-compatible API, AiModelGateway 统一网关 │ └────────────────────────────┬───────────────────────────────┘ │ ▼ ┌─ AiModelGateway 统一调用 ────────────────────────────────────┐ │ → 注入 prompt + systemPrompt + AdminAiScene 绑定模型 │ │ → 失败自动 fallback (circuit breaker 模式) │ │ → 返回文本 + Token用量 (精确计费) │ └────────────────────────────┬───────────────────────────────┘ │ ▼ ┌─ QualityScoringService 8维评分 ──────────────────────────────┐ │ relevance(20) + professionalism(20) + completeness(20) │ │ + naturalness(20) + compliance(20) │ │ + knowledgeConsistency(20) + goalAlignment(20) │ │ + humanLikeliness(20) = 满分160 │ │ │ │ 评分流水线: generator生成 → scorer评分 → 不达标重生成 │ │ 阈值: 第1次≥120分通过 ; 第2次≥104分通过 ; 否则降级兜底 │ │ 场景配置≥2个模型时启用流水线模式 │ └────────────────────────────┬───────────────────────────────┘ │ ▼ ┌─ ComplianceService 合规过滤 ─────────────────────────────────┐ │ severity 1: 轻微违规, 警告日志, 正常发送 │ │ severity 2: 中等违规, 敏感词替换后发送 │ │ severity 3: 严重违规, 丢弃回复, 触发转人工 │ └────────────────────────────┬───────────────────────────────┘ │ ▼ ┌─ DynamicNodeExecutor 节点执行 & 消息发送 ───────────────────┐ │ type=7 成单 → PayService → 订单持久化+支付链接生成 │ │ type=9 标签 → AI提取 + customer_tag写入 │ │ type=10 关怀 → AI动态生成个性化消息 │ │ → MessageChannelRouter → **16**渠道 (QW 三级降级) │ └────────────────────────────┬───────────────────────────────┘ │ ▼ ┌─ 异步闭环 ─┐ │ Feedback │ ← 客户反馈收集 │ Summary │ ← 对话摘要更新 │ Learning │ ← 4维度分析 │ Evolution │ ← 30min/天 调度 └────────────┘ ``` ### 11.2 模型路由原理 **三层路由架构**: | 层级 | 组件 | 职责 | |:---:|------|------| | L1 意图路由 | `ModelRouter` | 根据意图分类(问候/咨询/异议/订单等)选择 lite/pro 模型 | | L2 场景分发 | `AiSceneDispatcher` | 根据 systemPrompt 映射到场景编码(workflow_generation/quality_scoring/workflow_execution),按场景模型链逐模型调用 | | L3 统一网关 | `AiModelGateway` | 屏蔽厂商差异,全部 OpenAI-compatible API,单入口覆盖4厂商 | **降级熔断机制**(Failure Cascade): ``` 节点 A 请求 → 场景主模型(如豆包pro) ├─ 成功 → 返回结果 └─ 失败 → 场景次选模型(如千问) ├─ 成功 → 返回结果 └─ 失败 → 兜底模型(豆包lite) └─ 返回结果 (绝不抛异常) ``` **多模型流水线**(适用于工作流生成/质量评分): ``` 模型A(generator) → 生成原始输出 → 模型B(scorer) → 评分+反馈 → 模型C(regenerator) → 根据反馈重新生成 → 模型D(scorer) → 二次评分 → 达标? 发送 : 降级兜底 ``` ### 11.3 AI工作流生成原理 ``` 用户输入: "我是旅游行业的,需要给客户发早间问候,根据回复智能跟进" ▼ ┌─ Phase 1: Generator ─────────────────────────────────────────┐ │ Prompt = 行业模板(旅游SOP规则) + 14种节点类型说明 + 用户需求 │ │ AI生成原始JSON: { "nodes": [...], "edges": [...], ... } │ │ JSON鲁棒性治理: 截断自动补全 / 非法字符修复 / 缺失字段诊断 │ └────────────────────────────┬───────────────────────────────┘ │ ▼ ┌─ Phase 2: Improver ─────────────────────────────────────────┐ │ Prompt = 模型A输出 + "请优化: 补充话术模板/完善分支条件/ │ │ 添加变量绑定/优化节点连接" │ │ 输出: 优化后的完整节点JSON │ └────────────────────────────┬───────────────────────────────┘ │ ▼ ┌─ Phase 3: Validator ─────────────────────────────────────────┐ │ Prompt = 模型B输出 + "验证JSON完整性/节点引用合法性/ │ │ 分支条件可达性/话术模板变量正确性" │ │ 返回: { passed: true/false, score: "0-100", │ │ details: "...", suggestions: [...] } │ └────────────────────────────┬───────────────────────────────┘ │ ▼ ┌─ Auto-Generate Prompts ─────────────────────────────────────┐ │ 基于生成的工作流自动创建行业Prompt模板 → lobster_system_prompt │ │ 租户+行业双维度绑定, 后续同行业自动复用 │ └────────────────────────────────────────────────────────────┘ ``` ### 11.4 进化引擎闭环原理 数字员工的"进化"是指**让模型自己发现哪些话术/策略效果不好,并自动提出改进方案**: ``` ┌─ 事件日志 ─┐ │ instance │ 每次对话执行结果 │ 执行结果 │ 成单/失败/转人工/... └─────┬───────┘ │ ┌──────────────▼──────────────────────────────┐ │ EvolutionEngine.analyzeAndSuggest() │ │ 按节点分组统计, 识别低效节点 │ │ 规则①: 转人工率 > 30% → 话术可能太激进 │ │ 规则②: 成单率 < 5% → 促单话术需优化 │ │ 规则③: 平均停留时间异常 → 节点流程设计问题 │ └──────────────┬──────────────────────────────┘ │ ┌──────────────▼──────────────────────────────┐ │ AI分析低效节点 → 生成EvolutionSuggestion │ │ 提示词: "当前话术/流程导致XX%转人工率, │ │ 请生成3条优化方案..." │ │ 返回: { originalContent, optimizedContent, │ │ optimizationReason, confidence } │ └──────────────┬──────────────────────────────┘ │ ┌───────────▼───────────┐ │ autoApply=true │ autoApply=false │ → 自动写入节点配置 │ → 进入审核队列 │ → evolution_log 记录 │ → UserNodeOptimizer └───────────────────────┘ → 人工通过/驳回 ``` **UserNodeOptimizer 审核流程**: ``` 待审核列表(公司/分组/公司级数据范围) → 管理员批量选择 → 通过/驳回 → 通过: 更新节点话术 + 写入evolution_log → 驳回: 记录驳回原因 → 批量审核+单条审核双模式 ``` ### 11.5 A/B 测试原理 数字员工的 A/B 测试**完全自动化**——无需人工设计变体: ``` Feedback 收集 │ 客户反馈(点赞/点踩/投诉/成单) ▼ analyzeFeedback() │ 识别 positiveRate < 50% 的节点 │ 且 sample数 ≥ 10 ▼ generateVariants() │ AI生成变体话术 (3个候选) │ 基于 historical 数据给每个变体打分 │ 取最高分 → 写入 lobster_ab_tests ▼ resolveVariantForNode() ← Prompt组装时自动调用 │ sample_count++ (实时追踪样本量) │ 按 split_ratio 分流 (DB可配, 默认50%) │ 随机数 < ratio → 返回变体话术 │ 随机数 ≥ ratio → 返回原始话术 ▼ applyResult() │ 变体转化率 - 对照转化率 > WIN_THRESHOLD(10%) │ → 胜出 → 应用变体为正式话术 │ 变体转化率 ← 对照转化率 │ → 败北 → 归档, 重新生成新变体 ``` ### 11.6 学习引擎原理(2026-06-07 增强版) 借鉴 Hermes 式 **Skill 自进化**,保留企业 **Patch 审核门控**: ``` ┌─ 实时样本采集(每次 AI 进化回复后)─────────────────────────────┐ │ LobsterWorkflowExecutor.recordEvolutionOutcome() │ │ → TenantLearningEngine.recordEvolutionInteraction() │ │ → lobster_learning_event_log (事件 + qualityScore) │ │ → lobster_learning_replay_buffer (customerMessage/aiReply) │ │ → 高质量(≥120分) → 即时 upsert skill 模式 (EvolutionReplay) │ └────────────────────────────┬────────────────────────────────────┘ │ ▼ (EvolutionScheduler 30min 联动 OR 1h 定时 OR 手动) ┌─ triggerLearningCycle() ─────────────────────────────────────────┐ │ 前置: eventCount ≥ 10(不足则仅返回现有模式统计) │ │ │ │ ① analyzeMessageEffectiveness 高/低质量回复率 + 样例 │ │ ② analyzeTimingOptimization 时段高质量率 + best_window 推荐 │ │ ③ analyzeFlowBottlenecks 卡住节点/失败节点/低质量节点 │ │ ④ analyzeCustomerProfileCorrelations 画像标签×高质量率 │ │ ⑤ generateStrategyRecommendations 综合策略 pattern │ │ ⑥ synthesizeSkillDocument() AI 合成 Skill 文档 (learning_synthesizer) │ │ ⑦ contributeHighConfidencePatterns 贡献 DistributedLearning 库 │ └────────────────────────────┬────────────────────────────────────┘ │ ▼ ┌─ 策略注入 AI 上下文(运行时闭环)────────────────────────────────┐ │ ContextAssembler.assembleFullContext() │ │ → recommendStrategies(companyId, nodeCode) │ │ → context.learnedStrategies │ │ buildAiPrompt() 追加【租户学习策略(历史高置信模式)】 │ └────────────────────────────┬────────────────────────────────────┘ │ ▼ ┌─ 人工审核应用 ───────────────────────────────────────────────────┐ │ 前端 learning-results → applyLearningResult(companyId, resultId)│ │ → lobster_workflow_patch (WorkflowPatcher 审核) │ │ → markPatternApplied(status=applied) │ └──────────────────────────────────────────────────────────────────┘ ``` **学习模式类型(pattern_type)**: | type | 含义 | 应用 Patch 字段 | |------|------|----------------| | message | 话术有效性 | messageTemplate | | timing | 触达时机 | sendTimeWindow | | flow | 流程瓶颈 | nodeConfig | | profile | 画像关联 | learningPatch | | strategy | 综合策略 | learningPatch | | skill | Skill 文档/优质样例 | messageTemplate | | corpus | 销冠语料 | learningPatch | **关键表**: | 表 | 用途 | |----|------| | `lobster_learning_event_log` | 交互事件 + 质量分 | | `lobster_learning_replay_buffer` | 对话样本(分析原料) | | `lobster_learned_pattern` | 发现的模式/Skill(含 id/confidence/source/applied) | | `lobster_workflow_patch` | 审核落盘队列 | ### 11.7 安全合规原理 ``` 客户消息 │ ▼ ┌─ 第一层: 敏感词精确匹配 ─────────────────────────────────────┐ │ SensitiveWordService: 精确匹配 + 正则 + DB三级过滤 │ │ 命中 → 触发转人工 OR 关键词替换 (ContentReplaceService) │ └────────────────────────┬────────────────────────────────────┘ │ ▼ ┌─ 第二层: 语义转人工检测 ─────────────────────────────────────┐ │ SemanticTakeoverDetector (6类危险意图): │ │ • 愤怒/威胁 (投诉举报/找领导/律师函) │ │ • 法律风险 (虚假宣传/隐私泄露/医疗责任) │ │ • 竞品攻击 (诋毁竞品) │ │ • 自杀/自残信号 │ │ • 紧急医疗求助 │ │ • 儿童安全风险 │ │ 任一命中 → 状态变更为"人工接管" → 停止AI回复 │ └────────────────────────┬────────────────────────────────────┘ │ ▼ ┌─ 第三层: 合规输出过滤 ───────────────────────────────────────┐ │ ComplianceService: AI回复 → DB规则匹配 │ │ severity 1: 标记但发送 │ │ severity 2: 敏感内容替换后发送 │ │ severity 3: 丢弃, 触发转人工 │ │ │ │ ContentReplaceService: 词汇级最终精修 │ │ 示例: "癌症"→"严重疾病", "保证治愈"→"建议就诊" │ └────────────────────────────────────────────────────────────┘ ``` ### 11.8 消息去重原理 ``` AI生成回复 │ ▼ ┌─ 第一步: 精确去重 ───────────────────────────────────────────┐ │ 与最近5条已发送消息逐条对比 (equals) │ │ 完全相同 → 跳过发送, 记录日志 │ └────────────────────────┬────────────────────────────────────┘ │ ▼ ┌─ 第二步: 语义去重 ───────────────────────────────────────────┐ │ 2-gram 分词 → Jaccard 相似度计算 │ │ 相似度 > 70% → 替代发送策略: │ │ 调用 AI 用同义表达重写 (保留原意, 改变措辞) │ │ 重写后再次去重检查 │ │ 仍 > 70% → 跳过 (2小时内不重试) │ └────────────────────────────────────────────────────────────┘ ``` ### 11.9 多轮对话原理 ``` 客户消息到达多轮节点(type=2/7/10/11/13) │ ▼ ┌─ 检查对话状态 ───────────────────────────────────────────────┐ │ 新对话: 发送话术模板 → 进入等待状态 │ │ 进行中: 客户消息 → AI分析回答质量 │ │ a) 信息充分: conversationComplete=true │ │ → exitCondition? exitNodeCode : defaultNext │ │ b) 信息不足: conversationComplete=false │ │ → continueNodeCode (追问收集更多信息) │ └──────────────────────────────────────────────────────────────┘ 示例(旅游销售, type=2 消息节点): Round 1: AI "请问您计划什么时间去呢?" 客户 "下个月中旬" Round 2: AI "好的, 请问几个人出行呢?" 客户 "两个人" Round 3: AI "预算大概是多少呢?" 客户 "5000左右" → 信息充分 → 跳到推荐路线节点(type=12) ``` ### 11.10 千人千面原理 ``` PersonalizationEngine (用户个性化) │ ├─ 分群引擎 (UserSegmentService) │ 按画像字段(年龄段/消费力/活跃度/渠道来源)自动分群 │ 每群 → 独立的话术 override (lobster_segment_message_override) │ ├─ 偏好学习 (learnUserPreference) │ 记录客户偏好类型(价格/品牌/服务)和偏好值 │ → upsert 到 lobster_user_preference │ ├─ 消息重写 (personalizeMessage) │ 模板变量: {name}, {lastProduct}, {preference} │ → 变量替换 → 千人千面 │ └─ 画像长期更新 (handleTagOperation/UserProfile节点) AI从对话提取: 预算/偏好/家庭结构 → 写入 customer_tag + lobster_user_profile ``` ### 11.11 支付订单原理 ``` handleOrderSuccessNode (type=7) │ ▼ ┌─ PayService.createPayOrder() ────────────────────────────────┐ │ ① 生成订单号: LOB + timestamp + UUID(8位) │ │ ② 持久化DB: lobster_pay_order (order_no/amount/status) │ │ ③ 支付网关调用: PayRouter → PayProvider │ │ • 配置了WechatPayProvider → 统一下单API │ │ • 未配置 → Mock模式 (pay.example.com) │ │ ④ 返回: { orderNo, payUrl, amount, status, gateway } │ │ ⑤ push到客户: "点击链接完成支付: [payUrl]" │ └────────────────────────────┬───────────────────────────────┘ │ ┌──────────────────▼──────────────────┐ │ 微信支付异步通知 payNotify │ │ POST /api/lobster/pay/notify/wechat │ │ → checkPayStatus() │ │ → 更新order状态为PAID │ │ → 推送支付结果到前端 │ │ → 工作流自动推进到下个节点 │ └─────────────────────────────────────┘ ``` ### 11.12 定时调度体系原理 ``` 数字员工通过 6 个 @Scheduled 实现全自动闭环运营: ┌────────────────────────────────────────────────────────────────┐ │ 调度器 频率 职责 │ │───────────────────────────────────────────────────────────────│ │ EvolutionScheduler 30min 进化分析 + 自动应用 + **触发学习** │ │ TenantLearningEngine 1hour **遍历活跃租户** 学习周期 │ │ 4维分析 → Skill合成 → Patch落盘 │ │───────────────────────────────────────────────────────────────│ │ FactDecayScheduler 03:00am 清理过期事实记忆 │ │───────────────────────────────────────────────────────────────│ │ WorkflowTrigger 轮询 扫描待触发实例 │ │ Scheduler 创建执行记录 → 异步执行 │ └────────────────────────────────────────────────────────────────┘ ``` ### 11.13 企微消息发送链路 数字员工企微发送 **复用平台既有三条路径**,按 `QwUser.sendMsgType` 分流: ``` LobsterWorkflowExecutor.deliverMessage() │ ├─ enrichQwExtra() → qwExtId / qwUserId / qwSessionId │ ▼ MessageChannelRouter.route(channelType=QW) │ ▼ QwMessageChannel.sendMessage() │ ├─ resolveQwUser() ← extra.qwUserId / contact.qwUserId ├─ resolveOrCreateSession() ← extId+qwUserId 查/建 QwSession │ ├─ sendMsgType=1 + WxWork 可用 │ → WxWorkService.SendTextMsg() (同 SendMsg.sendLobsterQwMsg) │ → 失败且 appKey 存在 → 降级 Hook │ ├─ sendMsgType=0 + appKey + IQwMsgService │ → QwMsgServiceImpl.sendMsg() │ → fs-qwhook POST /app/qwmsg/sendMsg │ → WebSocket aiReplyMsg (type=101003) ← 真实下发 │ ├─ qwMsgService 可用 │ → addAiMsg() 写库 + UI 同步 │ └─ 兜底 legacy → insertQwMsg + receiveMsg Socket ``` **与手动发消息对齐的关键**:Hook 路径必须走 `IQwMsgService.sendMsg()`,而非仅写 DB。 ### 11.14 与 OpenClaw / Hermes 定位对比(简要) > 二者为外部开源 Agent 框架,**未集成到本仓库**。数字员工是企业 SaaS 销售自动化工作流引擎。 | 维度 | 数字员工 | OpenClaw | Hermes | |------|----------|----------|--------| | 定位 | B端多租户 SCRM 工作流 | 个人 AI Gateway | 自进化单 Agent | | 编排 | 38 业务节点 + 可视化画布 | Tool/Skill 插件 | 70+ Tool | | 自进化 | Evolution + Learning + A/B + **Patch审核** | ClawHub 社区 Skill | **自动 Skill 创建/补丁** | | 中国区渠道 | 企微/微信/电商私信 **16通道** | WeChat/QQ 等 | 较弱 | | 企业合规 | 三层合规 + 敏感词 + 转人工 | 插件依赖 | 自研安全模型 | **借鉴关系**:Hermes 的 Skill 闭环 → 龙虾 `synthesizeSkillDocument` + replay_buffer;OpenClaw 的 Gateway → 龙虾 `MessageChannelRouter`。 --- ## 十二、关键设计决策 | 决策 | 选择 | 理由 | |------|:---:|------| | 脚本引擎 | SpEL 而非 Groovy | 零额外依赖, Spring内置, 语法覆盖90%场景, 编译缓存在ConcurrentHashMap | | 持久化框架 | MyBatis 而非 JdbcTemplate | 类型安全/XML可读/参数绑定, 全量迁移完成(466→0) | | 模型路由 | 场景编码+Provider链 | 每个场景独立模型链, 配置驱动, 无需改代码 | | 多渠道 | 统一MessageChannel接口 | 新增渠道只需实现接口+注册, Spring自动注入 | | A/B分流 | 单例级ConcurrentHashMap | 无需分布式锁, sample_count实时追踪 | | 学习闭环 | Patch表统一落盘 | 学习/进化/A-B结果统一审核入口, 防止模型自我"跑偏" | | 自进化 Skill | AI合成 + 即时高质量沉淀 | 借鉴 Hermes Skill 机制,但强制 Patch 审核后才改生产话术 | | 企微发送 | 复用 IQwMsgService 而非重写 SDK | 与平台 `/qw/qwMsg/sendMsg` 行为一致,降低双套逻辑风险 | --- ## 十、API 端点清单 ### 10.1 Admin API (`/api/lobster/admin`) | Endpoint | 方法 | 说明 | |------|:---:|------| | `/dashboard/{companyId}` | GET | 全景看板 | | `/evolution/metrics/{companyId}` | GET | 进化指标(含 avgQualityScore) | | `/evolution/apply/{companyId}/{id}` | POST | 应用优化建议 | | `/optimization/pending/{companyId}` | GET | 待审核列表 | | `/optimization/audit/{companyId}` | POST | 批量审核 | | `/optimization/config/{companyId}` | POST | 优化开关配置 | | `/ab-test/active/{companyId}` | GET | A/B测试列表 | | `/ab-test/apply/{companyId}/{testId}` | POST | 应用变体 | | `/learning/trigger/{companyId}` | POST | 触发学习(返回 eventsAnalyzed/newDiscoveries 等) | | `/learning/results/{companyId}` | GET | 学习结果列表(含 id/learningType/status) | | `/learning/metrics/{companyId}` | GET | 学习指标(eventCount/avgQualityScore) | | `/learning/apply/{companyId}/{resultId}` | POST | 按 ID 应用单条学习结果 | | `/pay/status` | GET | 支付状态查询 | | `/scheduler/trigger` | POST | 手动触发进化+学习调度 | ### 10.2 引擎 API (`/workflow/lobster/engine`) | Endpoint | 方法 | 说明 | |------|:---:|------| | `/evolution/metrics` | GET | 租户进化指标 | | `/evolution/analyze?workflowId=` | GET | 触发进化分析 | | `/evolution/apply?suggestionId=` | POST | 应用进化建议 | | `/node-capabilities` | GET | 38节点能力矩阵 | | `/integration-test/run-all` | POST | 全量集成测试 | | `/integration-test/node-types` | POST | 节点类型测试 | | `/integration-test/dynamic-executor` | POST | 动态执行器测试 | | `/channels` | GET | 渠道列表 | | `/heartbeat/status` | GET | 心跳状态 | ### 10.3 执行 API (`/workflow/lobster-exec`) | Endpoint | 方法 | 说明 | |------|:---:|------| | `/start` | POST | 启动实例 | | `/next-node/{instanceId}` | POST | 推进一步 | | `/pause/{instanceId}` | POST | 暂停 | | `/resume/{instanceId}` | POST | 恢复 | | `/terminate/{instanceId}` | POST | 终止 | | `/instance/list` | GET | 实例列表 | | `/node-logs/{instanceId}` | GET | 节点日志 | ### 10.4 支付回调 | Endpoint | 方法 | 说明 | |------|:---:|------| | `/api/lobster/pay/notify/wechat` | POST | 微信支付回调 | | `/api/lobster/pay/notify/alipay` | POST | 支付宝支付回调 | --- ## 十三、关键源码索引 | 场景 | 入口文件 | |------|----------| | 工作流执行 | `LobsterWorkflowExecutorImpl.java` | | AI 对话进化 | `LobsterEvolutionEngineImpl.java` | | **响应延迟策略** | `LobsterLatencyPolicy.java` | | **上下文 Redis 缓存** | `LobsterContextCacheService.java` | | 全局进化分析 | `EvolutionEngineImpl.java` | | 租户学习 | `TenantLearningEngineImpl.java` | | A/B 测试 | `FeedbackDrivenEvolutionImpl.java` | | 企微发送 | `QwMessageChannel.java` | | 上下文组装 | `ContextAssemblerImpl.java` | | 节点路由 | `DynamicNodeExecutorImpl.java` | | 节点注册表 | `LobsterNodeCapabilityRegistry.java` | | 定时调度 | `EvolutionSchedulerImpl.java` | | 前端租户端 | `saasui/src/views/lobster/` | | 前端平台端 | `saasadminui/src/views/lobster/` |