数字员工 (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 单测 |
| 调度器 |
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):
lobster:
latency:
mode: quality # 质量优先
cache:
enabled: true
profile-ttl-minutes: 5
knowledge-ttl-minutes: 10
# ... 见 application-common.yml
运维建议
- 生产默认
quality:已改为全局默认,保留全量评分与重生成,不降质。
- Redis 必须可用:
lobster.cache.enabled=true 时上下文热路径走 Redis;Redis 不可用自动降级 DB 直查。
- 高并发/客服高峰:若可接受略降质,对指定租户设
lobster_latency_mode=balanced。
- 排查慢请求:搜日志
[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/ |