{ "companyId": 338, "includeTravelChain": true, "includeTravelStress": false, "startedAt": "2026-06-19 12:21:26", "sections": { "engineHealth": { "passed": true, "health": { "companyId": 338, "healthy": true, "missingCore": [ ], "missingOptional": [ ], "passThreshold": 120 }, "message": "core beans wired" }, "integrationTests": { "passed": false, "summary": "2/4 tests passed in 1222ms", "details": [ "[FAIL] NodeTypeService: START node not found", "[FAIL] DynamicNodeExecutor: Judgment node execution failed", "[PASS] MultiModelWorkflowGenerator: All tests passed", "[PASS] ModelConfigService: All tests passed" ], "executionTimeMs": 1222, "message": "2/4 tests passed in 1222ms" }, "phase2Replay": { "passed": true, "verify": { "companyId": 338, "archiveTableExists": false, "hotIndexExists": true, "hotReplayRows": 64, "eventLogRows": 64, "archiveRows": 0, "archiveNote": "table missing or query failed", "status": "ok" }, "message": "phase2 replay verify ok" }, "pageLinkProbes": { "totalPages": 32, "requiredTotal": 19, "requiredPassed": 17, "optionalSkipped": 0, "failures": [ "/lobster/forbidden-words: \r\n### Error querying database. Cause: java.sql.SQLSyntaxErrorException: Table \u0027fs_tenant_cs1.company_lobster_replace_word\u0027 doesn\u0027t exist\r\n### The error may exist in URL [jar:file:/D:/ylrz_saas_new/java/fs-saas-company/target/fs-saas-company.jar!/BOOT-INF/lib/fs-service-1.1.0.jar!/mapper/lobster/LobsterReplaceWordMapper.xml]\r\n### The error may involve defaultParameterMap\r\n### The error occurred while setting parameters\r\n### SQL: SELECT id, tenant_id, word_type, content, replace_text, enabled, sort, create_time FROM company_lobster_replace_word WHERE (tenant_id = 0 OR tenant_id = ?) AND word_type = ? ORDER BY tenant_id, sort DESC, id DESC\r\n### Cause: java.sql.SQLSyntaxErrorException: Table \u0027fs_tenant_cs1.company_lobster_replace_word\u0027 doesn\u0027t exist\n; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: Table \u0027fs_tenant_cs1.company_lobster_replace_word\u0027 doesn\u0027t exist", "/lobster/typo-words: \r\n### Error querying database. Cause: java.sql.SQLSyntaxErrorException: Table \u0027fs_tenant_cs1.company_lobster_replace_word\u0027 doesn\u0027t exist\r\n### The error may exist in URL [jar:file:/D:/ylrz_saas_new/java/fs-saas-company/target/fs-saas-company.jar!/BOOT-INF/lib/fs-service-1.1.0.jar!/mapper/lobster/LobsterReplaceWordMapper.xml]\r\n### The error may involve defaultParameterMap\r\n### The error occurred while setting parameters\r\n### SQL: SELECT id, tenant_id, word_type, content, replace_text, enabled, sort, create_time FROM company_lobster_replace_word WHERE (tenant_id = 0 OR tenant_id = ?) AND word_type = ? ORDER BY tenant_id, sort DESC, id DESC\r\n### Cause: java.sql.SQLSyntaxErrorException: Table \u0027fs_tenant_cs1.company_lobster_replace_word\u0027 doesn\u0027t exist\n; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: Table \u0027fs_tenant_cs1.company_lobster_replace_word\u0027 doesn\u0027t exist" ], "passed": false, "durationMs": 2449, "pages": [ { "path": "/lobster/company-workflowLobster", "title": "Workflow templates", "probe": "templateList", "required": true, "passed": true, "status": "OK", "message": "templates=37" }, { "path": "/lobster/workflow-execution", "title": "Workflow execution tasks", "probe": "instanceList", "required": true, "passed": true, "status": "OK", "message": "instances=413" }, { "path": "/lobster/instance", "title": "Instance monitor", "probe": "instanceMonitor", "required": true, "passed": true, "status": "OK", "message": "monitor list ok, count=413" }, { "path": "/lobster/prompt", "title": "Prompt management", "probe": "promptList", "required": true, "passed": true, "status": "OK", "message": "prompt rows=49" }, { "path": "/lobster/sensitive-words", "title": "Sensitive words", "probe": "sensitiveWords", "required": true, "passed": true, "status": "OK", "message": "words=87" }, { "path": "/lobster/forbidden-words", "title": "Forbidden words", "probe": "forbiddenWords", "required": true, "passed": false, "status": "FAIL", "message": "\r\n### Error querying database. Cause: java.sql.SQLSyntaxErrorException: Table \u0027fs_tenant_cs1.company_lobster_replace_word\u0027 doesn\u0027t exist\r\n### The error may exist in URL [jar:file:/D:/ylrz_saas_new/java/fs-saas-company/target/fs-saas-company.jar!/BOOT-INF/lib/fs-service-1.1.0.jar!/mapper/lobster/LobsterReplaceWordMapper.xml]\r\n### The error may involve defaultParameterMap\r\n### The error occurred while setting parameters\r\n### SQL: SELECT id, tenant_id, word_type, content, replace_text, enabled, sort, create_time FROM company_lobster_replace_word WHERE (tenant_id = 0 OR tenant_id = ?) AND word_type = ? ORDER BY tenant_id, sort DESC, id DESC\r\n### Cause: java.sql.SQLSyntaxErrorException: Table \u0027fs_tenant_cs1.company_lobster_replace_word\u0027 doesn\u0027t exist\n; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: Table \u0027fs_tenant_cs1.company_lobster_replace_word\u0027 doesn\u0027t exist" }, { "path": "/lobster/typo-words", "title": "Typo words", "probe": "typoWords", "required": true, "passed": false, "status": "FAIL", "message": "\r\n### Error querying database. Cause: java.sql.SQLSyntaxErrorException: Table \u0027fs_tenant_cs1.company_lobster_replace_word\u0027 doesn\u0027t exist\r\n### The error may exist in URL [jar:file:/D:/ylrz_saas_new/java/fs-saas-company/target/fs-saas-company.jar!/BOOT-INF/lib/fs-service-1.1.0.jar!/mapper/lobster/LobsterReplaceWordMapper.xml]\r\n### The error may involve defaultParameterMap\r\n### The error occurred while setting parameters\r\n### SQL: SELECT id, tenant_id, word_type, content, replace_text, enabled, sort, create_time FROM company_lobster_replace_word WHERE (tenant_id = 0 OR tenant_id = ?) AND word_type = ? ORDER BY tenant_id, sort DESC, id DESC\r\n### Cause: java.sql.SQLSyntaxErrorException: Table \u0027fs_tenant_cs1.company_lobster_replace_word\u0027 doesn\u0027t exist\n; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: Table \u0027fs_tenant_cs1.company_lobster_replace_word\u0027 doesn\u0027t exist" }, { "path": "/lobster/conversation-summary", "title": "Conversation summary", "probe": "conversationSummary", "required": true, "passed": true, "status": "OK", "message": "summaries=13" }, { "path": "/lobster/summary-config", "title": "Summary config", "probe": "summaryConfig", "required": false, "passed": true, "status": "OK", "message": "summary configs=0" }, { "path": "/lobster/profile-config", "title": "Profile config", "probe": "profileConfig", "required": false, "passed": true, "status": "OK", "message": "profile fields=0" }, { "path": "/lobster/channel-config", "title": "Channel config", "probe": "channelTypes", "required": true, "passed": true, "status": "OK", "message": "channels=14" }, { "path": "/lobster/channel-plugin", "title": "Channel plugins", "probe": "channelPlugins", "required": true, "passed": true, "status": "OK", "message": "plugins=14" }, { "path": "/lobster/api-registry", "title": "API registry", "probe": "apiRegistry", "required": true, "passed": true, "status": "OK", "message": "apis=0" }, { "path": "/lobster/sales-corpus", "title": "Sales corpus", "probe": "salesCorpus", "required": false, "passed": true, "status": "OK", "message": "corpus=0" }, { "path": "/lobster/chat-aggregate", "title": "Chat aggregate", "probe": "chatAggregate", "required": false, "passed": true, "status": "OK", "message": "sessions=29" }, { "path": "/lobster/industry-bootstrap", "title": "Industry bootstrap", "probe": "industryPacks", "required": true, "passed": true, "status": "OK", "message": "packs=7" }, { "path": "/lobster/execution-config", "title": "Execution config", "probe": "executionConfig", "required": true, "passed": true, "status": "OK", "message": "execution config loaded" }, { "path": "/lobster/identity-config", "title": "Identity config", "probe": "identityConfig", "required": false, "passed": true, "status": "OK", "message": "identity config loaded" }, { "path": "/lobster/semantic-keywords", "title": "Semantic keywords", "probe": "semanticKeywords", "required": true, "passed": true, "status": "OK", "message": "keywords=1" }, { "path": "/lobster/dedup-config", "title": "Dedup config", "probe": "dedupConfig", "required": false, "passed": true, "status": "OK", "message": "dedup configs=0" }, { "path": "/lobster/model-route", "title": "Model route", "probe": "modelRoute", "required": true, "passed": true, "status": "OK", "message": "workflow model=gpt-4" }, { "path": "/lobster/optimization", "title": "AI optimization audit", "probe": "optimization", "required": true, "passed": true, "status": "OK", "message": "optimization stats=5" }, { "path": "/lobster/dynamic-impl", "title": "Dynamic node approval", "probe": "dynamicImpl", "required": true, "passed": true, "status": "OK", "message": "pending impls=0" }, { "path": "/lobster/dashboard", "title": "Engine dashboard", "probe": "dashboard", "required": true, "passed": true, "status": "OK", "message": "dashboard keys=8" }, { "path": "/lobster/token-stats", "title": "Token stats", "probe": "tokenStats", "required": false, "passed": true, "status": "OK", "message": "token summary loaded" }, { "path": "/lobster/evolution", "title": "Evolution engine", "probe": "evolution", "required": true, "passed": true, "status": "OK", "message": "evolution metrics=6" }, { "path": "/lobster/chat-test", "title": "Chat test", "probe": "chatTest", "required": false, "passed": true, "status": "OK", "message": "e2e test service ready" }, { "path": "/lobster/ab-test", "title": "AB / GEPA optimization", "probe": "abTest", "required": false, "passed": true, "status": "OK", "message": "active ab tests=0" }, { "path": "/lobster/profile", "title": "Customer profile hub", "probe": "userProfile", "required": false, "passed": true, "status": "OK", "message": "profile fields=0" }, { "path": "/lobster/qdrant", "title": "Vector knowledge base", "probe": "qdrant", "required": false, "passed": false, "status": "WARN", "message": "\r\n### Error querying database. Cause: java.sql.SQLSyntaxErrorException: Table \u0027fs_tenant_cs1.lobster_vector_store\u0027 doesn\u0027t exist\r\n### The error may exist in com/fs/company/mapper/LobsterVectorStoreMapper.java (best guess)\r\n### The error may involve com.fs.company.mapper.LobsterVectorStoreMapper.selectByCompanyAndCategory-Inline\r\n### The error occurred while setting parameters\r\n### SQL: SELECT * FROM lobster_vector_store WHERE company_id = ? AND category = ?\r\n### Cause: java.sql.SQLSyntaxErrorException: Table \u0027fs_tenant_cs1.lobster_vector_store\u0027 doesn\u0027t exist\n; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: Table \u0027fs_tenant_cs1.lobster_vector_store\u0027 doesn\u0027t exist" }, { "path": "/lobster/global-stats", "title": "Global evolution stats", "probe": "globalStats", "required": false, "passed": true, "status": "OK", "message": "global metrics=6" }, { "path": "/lobster/event-audit", "title": "Event node audit", "probe": "eventAudit", "required": false, "passed": true, "status": "OK", "message": "audits=0" } ] }, "travelFullChain": { "companyId": 338, "includeStress": false, "startedAt": "2026-06-19 12:21:30", "sections": { "enginePrompts": { "expectedCatalogKeys": 49, "newlyInserted": 0, "missingKeys": [ ], "platformKeyCount": 49, "passed": true, "message": "platform engine prompts complete (49 keys)" }, "triggerExclude": { "passed": true, "errors": [ ], "message": "trigger exclude/sarcasm/schedule checks ok" }, "template": { "passed": true, "workflowId": 46, "templateCode": "LOB_1781748230288", "source": "existing", "message": "travel template found" }, "lifecycleCoverage": { "coverageRatio": 1.0, "minCoverage": 0.75, "nodeCount": 13, "requiredNodeCount": 12, "missingNodes": [ ], "passed": true, "message": "lifecycle nodes covered" }, "nodePromptsPlanned": { "promptNodeTarget": 6, "promptNodeFilled": 6, "emptyPromptNodes": [ ], "passed": true, "message": "key node prompts present" }, "lifecycleSimulation": { "waitPreTripConfigured": true, "tagAutoConfigured": true, "orderActionConfigured": true, "holidayWaitConfigured": true, "passed": true, "message": "lifecycle orchestration nodes configured" }, "lifecycleRuntime": { "simMinuteUnit": 10, "simDayEqualsMinutes": 10, "schedulerWakeWaitMs": 3500, "preTripWaitSchedule10m": { "waitUntil": 1781843400000, "expectedWaitAt": 1781843400000, "travelAt": "2026-06-19T13:21:46.242324600", "waitInRealMinutes": 8, "diffMinutes": 0, "simTimeScale": true, "passed": true, "message": "T-5 10m sim schedule ok" }, "preTripWaitWake": { "passed": true, "message": "lifecycle wait wake ok", "statusAfter": "running", "resumeIndex": 5, "currentIndexAfter": 6, "instanceId": 414 }, "preTripSchedulerWake10m": { "scheduledWakeAt": 1781842910623, "schedulerWaitMs": 3500, "passed": true, "message": "scheduler 10m sim wake ok", "statusAfter": "running", "resumeIndex": 5, "currentIndexAfter": 6, "instanceId": 415 }, "holidayWaitSchedule10m": { "waitUntil": 1781860800000, "expectedWaitAt": 1781860800000, "waitInRealMinutes": 298, "simHolidayDays": 30, "simRealMinutes": 300, "diffMinutes": 0, "passed": true, "message": "holiday 10m sim schedule ok" }, "holidayWaitWake": { "passed": true, "message": "lifecycle wait wake ok", "statusAfter": "completed", "resumeIndex": 10, "currentIndexAfter": 10, "instanceId": 416 }, "holidaySchedulerWake10m": { "scheduledWakeAt": 1781842918857, "schedulerWaitMs": 3500, "passed": true, "message": "scheduler 10m sim wake ok", "statusAfter": "completed", "resumeIndex": 10, "currentIndexAfter": 10, "instanceId": 417 }, "passed": true, "message": "lifecycle 10m sim schedule/wake ok" }, "lifecycleFullFlowSim": { "instanceId": 418, "finalStatus": "completed", "finalNodeIndex": 10, "milestones": [ "STARTED", "T5_SCHEDULED", "T5_WAITING", "PRE_TRIP_CARE", "PRE_TRIP_MULTITURN", "HOLIDAY_WAITING", "HOLIDAY_PROMO" ], "errors": [ ], "passed": true, "message": "full lifecycle 10m sim flow ok", "simMinuteUnit": 10 }, "lifecycleExceptions": { "waitNotExpired": { "passed": true, "message": "not-expired wait rejected advance", "statusAfter": "waiting" }, "prematureScheduler": { "passed": true, "message": "premature scheduler did not wake" }, "blockedSchedulerSkip": { "passed": true, "message": "blocked instance skipped by scheduler" }, "blockedForceWake": { "passed": true, "message": "blocked force wake rejected" }, "overdueT5SkipWait": { "waitUntil": 1781841000000, "overdue": true, "wouldSkipSchedule": true, "passed": true, "message": "overdue T-5 skips wait schedule" }, "missingTravelDate": { "waitUntil": 1781843675530, "expectedFallbackMinutes": 10, "passed": true, "message": "missing travel_date sim fallback ok" }, "completedRejectWake": { "passed": true, "message": "completed instance rejects wake" }, "missingResumeIndex": { "passed": true, "message": "missing resume index fallback ok" }, "doubleWake": { "passed": true, "message": "double wake idempotent", "statusAfter": "running" }, "passed": true, "message": "lifecycle exception handling ok" }, "lifecycleMultiTurnDialogue": { "bookingTurnCount": 10, "postBookingTurnCount": 9, "consultMultiTurn": { "turns": 5, "avgScore": 62.0, "minScore": 0.0, "passed": true, "message": "node multiTurn ok", "instanceId": 426, "inputCount": 6 }, "postBookingMultiTurnFlow": { "instanceId": 427, "preTripMultiTurn": { "turns": 3, "avgScore": 78.66666666666667, "minScore": 78.0, "passed": true, "message": "node multiTurn ok" }, "holidayMultiTurn": { "turns": 1, "avgScore": 79.0, "minScore": 79.0, "passed": false, "message": "node multiTurn below threshold" }, "milestones": [ "PRE_TRIP", "PRE_TRIP_MT", "HOLIDAY" ], "errors": [ "HOLIDAY_MT" ], "dialogueTurns": 9, "passed": false, "message": "post-booking multi-turn failed: [HOLIDAY_MT]" }, "passed": false, "message": "lifecycle multi-turn dialogue failed" }, "e2eDialogue": { "dialogueTurnCount": 10, "runId": "7317026354b84c85aef7a08d222ed3c8", "status": "SUCCESS", "instanceId": 428, "totalScore": 69.75, "passedNodeCnt": 10, "totalNodeCnt": 10, "evolutionCount": 1, "nodeTraces": 10, "minNodeScore": 76.875, "maxNodeScore": 76.875, "nodesBelowTarget": 0, "nodesBelowMin": 0, "nodeScoreDetail": [ { "nodeCode": "初始化咨询阶段", "score": 76.875, "passed": true } ], "passed": true, "message": "e2e ok" }, "qualityGate": { "enabled": true, "targetScorePercent": 75.0, "minE2eAvgScorePercent": 75.0, "minNodeScorePercent": 60.0, "passScorePercent": 75, "totalScore": 69.75, "nodesBelowTarget": 0, "nodesBelowMin": 0, "minNodeScore": 76.875, "maxNodeScore": 76.875, "nodeScoreDetail": [ { "nodeCode": "初始化咨询阶段", "score": 76.875, "passed": true } ], "passed": false, "message": "avg 69.75 \u003c min 75.0" }, "summary": { "instanceId": 428, "externalUserId": "999338001", "asyncDbSummary": false, "historyLines": 20, "syncSummaryLength": 73, "microSummaryLength": 109, "cachedSummaryOk": false, "dbSummaryRows": 0, "historyPersistError": "\r\n### Error querying database. Cause: java.sql.SQLSyntaxErrorException: Unknown column \u0027channel_type\u0027 in \u0027where clause\u0027\r\n### The error may exist in URL [jar:file:/D:/ylrz_saas_new/java/fs-saas-company/target/fs-saas-company.jar!/BOOT-INF/lib/fs-service-1.1.0.jar!/mapper/company/LobsterConversationSummaryMapper.xml]\r\n### The error may involve defaultParameterMap\r\n### The error occurred while setting parameters\r\n### SQL: SELECT summary_text FROM lobster_conversation_summary WHERE external_user_id = ? AND channel_type = ? AND (instance_id = ? OR instance_id IS NULL) AND del_flag = 0 ORDER BY create_time DESC LIMIT 1\r\n### Cause: java.sql.SQLSyntaxErrorException: Unknown column \u0027channel_type\u0027 in \u0027where clause\u0027\n; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: Unknown column \u0027channel_type\u0027 in \u0027where clause\u0027", "passed": false, "message": "async DB summary missing or too short" }, "memoryPipeline": { "externalUserId": "999338001", "instanceId": 428, "summaryOk": false, "factError": "\r\n### Error querying database. Cause: java.sql.SQLSyntaxErrorException: Unknown column \u0027channel_type\u0027 in \u0027where clause\u0027\r\n### The error may exist in URL [jar:file:/D:/ylrz_saas_new/java/fs-saas-company/target/fs-saas-company.jar!/BOOT-INF/lib/fs-service-1.1.0.jar!/mapper/lobster/CustomerFactMapper.xml]\r\n### The error may involve defaultParameterMap\r\n### The error occurred while setting parameters\r\n### SQL: SELECT fact_key, fact_value, create_time FROM customer_fact WHERE company_id = ? AND external_user_id = ? AND channel_type = ? ORDER BY create_time DESC LIMIT 20\r\n### Cause: java.sql.SQLSyntaxErrorException: Unknown column \u0027channel_type\u0027 in \u0027where clause\u0027\n; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: Unknown column \u0027channel_type\u0027 in \u0027where clause\u0027", "factCount": 0, "factKeys": [ ], "passed": false, "message": "no summary and no customer_fact rows" }, "evolutionAnalyze": { "e2eEvolutionCount": 1, "evolutionLogsBefore": 68, "analyzeInvoked": true, "analyzeMessage": "analyzeAndSuggest ok", "evolutionLogsAfter": 68, "evolutionLogsDelta": 0, "pendingSuggestions": 0, "passed": true, "message": "evolution analyze ok" }, "sensitiveWord": { "scopeNote": "lobster SensitiveWordService + evolve step9; not live/call/CompanyAiSensitiveWord AC", "layers": { "defaultLib": { "detectCount": 1, "filtered": "推荐云南精品线,***,欢迎咨询", "passed": true }, "customCrud": { "word": "LOBSTER_VAL_338", "hit": true, "filtered": "行程含***内容", "passed": true }, "highRisk": { "word": "LOBSTER_FRAUD_338", "highRisk": true, "passed": true }, "evolveStep9Simulation": { "rawHasSensitive": true, "wouldTransferToHuman": true, "finalReply": "欢迎咨询,预期收益,***", "passed": true }, "wordListLoaded": { "count": 89, "passed": true } }, "passed": true, "message": "sensitive word pipeline ok" }, "aiGenerate": { "recordNo": "LOB_1781843386086", "generateUseLlm": false, "fallbackGenerate": true, "finalStatus": 1, "detail": { "conversationModel": { "defaultStage": "consult", "description": "旅游全链路:会话常驻,节点负责打标/签单/出行关怀/满意度/节日营销", "version": 2, "stages": [ { "code": "consult", "promptHint": "你是小美,测试旅行社旅行顾问。客户来自直播间,先破冰并了解是否已有出行计划。", "label": "直播加微破冰", "goals": [ ] }, { "code": "collect", "promptHint": "逐步询问目的地、日期、人数、预算;一次只问一个关键问题。", "label": "需求采集打标", "goals": [ { "collected": false, "label": "目的地", "required": true, "field": "destination" }, { "collected": false, "label": "出行日期", "required": true, "field": "travel_date" }, { "collected": false, "label": "预算", "required": true, "field": "budget" }, { "collected": false, "label": "出行人数", "required": true, "field": "pax" } ] }, { "code": "offer", "promptHint": "基于采集信息推荐云南精品线,突出亮点与优惠,自然引导签单。", "label": "线路推荐促单", "goals": [ ] }, { "code": "pre_trip", "promptHint": "出行前5天提醒证件、行李、当地天气与注意事项。", "label": "出行前关怀", "goals": [ ] }, { "code": "in_trip", "promptHint": "行程中主动问候,询问是否遇到问题,给出景点玩要建议。", "label": "行中关怀", "goals": [ ] }, { "code": "post_trip", "promptHint": "行程结束后收集满意度与改进建议。", "label": "满意度回访", "goals": [ ] }, { "code": "repurchase", "promptHint": "大节日前30天关怀,了解是否有新的出行计划并推荐产品。", "label": "节日营销", "goals": [ ] } ], "sideTasks": [ { "triggerIntents": [ "purchase", "high_intent", "booked" ], "nodeCode": "TAG_AUTO", "nodeType": 9, "action": "add_tag" }, { "triggerIntents": [ "purchase", "order", "book" ], "nodeCode": "ORDER_ACTION", "nodeType": 7, "action": "create_order" } ] }, "variables": [ { "varName": "客户姓名", "label": "客户姓名", "source": "user_profile", "type": "string", "varType": "string", "sourceType": "user_profile", "name": "customerName", "varCode": "customerName" }, { "varName": "目的地", "label": "目的地", "source": "conversation", "type": "string", "varType": "string", "sourceType": "conversation", "name": "destination", "varCode": "destination" }, { "varName": "出行日期", "label": "出行日期", "source": "conversation", "type": "date", "varType": "date", "sourceType": "conversation", "name": "travel_date", "varCode": "travel_date" }, { "varName": "预算", "label": "预算", "source": "conversation", "type": "string", "varType": "string", "sourceType": "conversation", "name": "budget", "varCode": "budget" }, { "varName": "出行人数", "label": "出行人数", "source": "conversation", "type": "number", "varType": "number", "sourceType": "conversation", "name": "pax", "varCode": "pax" }, { "varName": "测试旅行社", "label": "测试旅行社", "source": "manual", "type": "string", "varType": "string", "sourceType": "manual", "name": "company_short_name", "varCode": "company_short_name" }, { "varName": "小美", "label": "小美", "source": "manual", "type": "string", "varType": "string", "sourceType": "manual", "name": "advisor_name", "varCode": "advisor_name" }, { "varName": "云南精品线", "label": "云南精品线", "source": "manual", "type": "string", "varType": "string", "sourceType": "manual", "name": "main_product", "varCode": "main_product" }, { "varName": "当前阶段", "label": "当前阶段", "source": "manual", "type": "string", "varType": "string", "sourceType": "manual", "name": "workflowStage", "varCode": "workflowStage" }, { "varName": "客户意向", "label": "客户意向", "source": "conversation", "type": "string", "varType": "string", "sourceType": "conversation", "name": "customerIntent", "varCode": "customerIntent" } ], "edges": [ { "targetNodeCode": "INIT_STAGE", "sourceNodeCode": "START", "edgeLabel": "启动" }, { "targetNodeCode": "TAG_AUTO", "sourceNodeCode": "INIT_STAGE", "edgeLabel": "采集后打标" }, { "targetNodeCode": "JUDGE", "sourceNodeCode": "TAG_AUTO", "edgeLabel": "分支" }, { "targetNodeCode": "ORDER_ACTION", "sourceNodeCode": "JUDGE", "edgeLabel": "签单" }, { "targetNodeCode": "WAIT_PRE_TRIP", "sourceNodeCode": "JUDGE", "edgeLabel": "已订" }, { "targetNodeCode": "WAIT_HOLIDAY", "sourceNodeCode": "JUDGE", "edgeLabel": "培育" }, { "targetNodeCode": "WAIT_PRE_TRIP", "sourceNodeCode": "ORDER_ACTION", "edgeLabel": "进入出行前" }, { "targetNodeCode": "PRE_TRIP_CARE", "sourceNodeCode": "WAIT_PRE_TRIP", "edgeLabel": "T-5触达" }, { "targetNodeCode": "WEATHER_TIPS", "sourceNodeCode": "PRE_TRIP_CARE", "edgeLabel": "天气建议" }, { "targetNodeCode": "IN_TRIP_CARE", "sourceNodeCode": "WEATHER_TIPS", "edgeLabel": "行中" }, { "targetNodeCode": "SURVEY", "sourceNodeCode": "IN_TRIP_CARE", "edgeLabel": "满意度" }, { "targetNodeCode": "WAIT_HOLIDAY", "sourceNodeCode": "SURVEY", "edgeLabel": "节日等待" }, { "targetNodeCode": "HOLIDAY_PROMO", "sourceNodeCode": "WAIT_HOLIDAY", "edgeLabel": "节日营销" }, { "targetNodeCode": "END", "sourceNodeCode": "HOLIDAY_PROMO", "edgeLabel": "结束" } ], "description": "旅游公司销冠全流程:直播加微→破冰→采集出行需求→线路推荐→促单签单→出行前关怀→旅途中关怀→回访调研→节日营销→循环推荐", "templateCode": "TRAVEL_TOP_SALES_001", "errorMsg": "已使用行业兜底模板: validation fast fallback", "brandContext": { "advisorName": "小美", "companyShortName": "测试旅行社", "advisorRole": "金牌旅行顾问", "mainProduct": "云南精品线" }, "_fallbackSource": "travel_lifecycle_full", "nodes": [ { "nodeName": "开始", "nextNodeCode": "INIT_STAGE", "nodeCode": "START", "maxRounds": 0, "nodeType": 1, "nodeConfig": "{\"autoAdvance\":true,\"channelHint\":\"QW\"}", "sortNo": 1, "conditionExpr": "", "messageTemplate": "您好${customerName},我是小美,测试旅行社旅行顾问。看到您从直播间过来,打算去哪里玩呢?" }, { "nodeName": "初始化咨询阶段", "nextNodeCode": "TAG_AUTO", "nodeCode": "INIT_STAGE", "maxRounds": 0, "nodeType": 16, "nodeConfig": "{\"assignments\":{\"workflowStage\":\"consult\"},\"stageGate\":true}", "sortNo": 2, "conditionExpr": "", "messageTemplate": "" }, { "nodeName": "自动打标", "nextNodeCode": "JUDGE", "nodeCode": "TAG_AUTO", "maxRounds": 0, "nodeType": 9, "nodeConfig": "{\"sideTask\":true,\"actionOnly\":true,\"action\":\"add_tag\",\"tags\":[\"travel_lead\",\"qw_live\"],\"triggerIntents\":[\"purchase\",\"high_intent\"]}", "sortNo": 3, "conditionExpr": "", "messageTemplate": "" }, { "nodeName": "签单动作", "nextNodeCode": "WAIT_PRE_TRIP", "nodeCode": "ORDER_ACTION", "maxRounds": 0, "nodeType": 7, "nodeConfig": "{\"sideTask\":true,\"actionOnly\":true,\"action\":\"create_order\",\"triggerIntents\":[\"purchase\",\"order\"]}", "sortNo": 4, "conditionExpr": "", "messageTemplate": "" }, { "nodeName": "出行前5天等待", "nextNodeCode": "PRE_TRIP_CARE", "nodeCode": "WAIT_PRE_TRIP", "maxRounds": 0, "nodeType": 4, "nodeConfig": "{\"waitType\":\"date_offset\",\"offsetDays\":-5,\"dateField\":\"travel_date\",\"timeoutHours\":720}", "sortNo": 5, "conditionExpr": "", "messageTemplate": "" }, { "nodeName": "出行前提醒", "nextNodeCode": "WEATHER_TIPS", "nodeCode": "PRE_TRIP_CARE", "maxRounds": 0, "nodeType": 10, "nodeConfig": "{\"delivery\":\"proactive\",\"careType\":\"pre_trip\",\"awaitReply\":true}", "sortNo": 6, "conditionExpr": "", "messageTemplate": "您好,离您的云南精品线出行还有5天啦!请准备好身份证/护照、常用药品和舒适鞋服。需要我帮您核对行程清单吗?" }, { "nodeName": "天气与玩要建议", "nextNodeCode": "IN_TRIP_CARE", "nodeCode": "WEATHER_TIPS", "maxRounds": 0, "nodeType": 14, "nodeConfig": "{\"apiKey\":\"weather_travel_tips\",\"sideTask\":false,\"smartApi\":true}", "sortNo": 7, "conditionExpr": "", "messageTemplate": "根据您目的地近期天气和同行人员情况,建议您注意防晒补水、老人小孩备常用药。具体玩游项目我会结合天气给您建议。" }, { "nodeName": "行中关怀", "nextNodeCode": "SURVEY", "nodeCode": "IN_TRIP_CARE", "maxRounds": 0, "nodeType": 10, "nodeConfig": "{\"delivery\":\"proactive\",\"careType\":\"in_trip\",\"awaitReply\":true}", "sortNo": 8, "conditionExpr": "", "messageTemplate": "旅途还顺利吗?景点玩得怎么样?如有任何问题随时告诉我,小美一直在线。" }, { "nodeName": "满意度调查", "nextNodeCode": "WAIT_HOLIDAY", "nodeCode": "SURVEY", "maxRounds": 0, "nodeType": 11, "nodeConfig": "{\"surveyType\":\"satisfaction\",\"awaitReply\":true}", "sortNo": 9, "conditionExpr": "", "messageTemplate": "感谢您选择测试旅行社!方便用1分钟做个满意度调查吗?您的反馈帮我们做得更好。" }, { "nodeName": "节日营销等待", "nextNodeCode": "HOLIDAY_PROMO", "nodeCode": "WAIT_HOLIDAY", "maxRounds": 0, "nodeType": 32, "nodeConfig": "{\"delayDays\":30,\"cronHint\":\"holiday_minus_30d\"}", "sortNo": 10, "conditionExpr": "", "messageTemplate": "" }, { "nodeName": "节日营销触达", "nextNodeCode": "END", "nodeCode": "HOLIDAY_PROMO", "maxRounds": 0, "nodeType": 13, "nodeConfig": "{\"repurchaseType\":\"holiday\",\"delivery\":\"proactive\"}", "sortNo": 11, "conditionExpr": "", "messageTemplate": "您好!临近节日,想了解下您近期有没有出行计划?云南精品线有新线路优惠,感兴趣我发您看看。" }, { "nodeName": "意向分支", "nextNodeCode": "", "nodeCode": "JUDGE", "maxRounds": 0, "nodeType": 3, "nodeConfig": "{}", "sortNo": 12, "conditionExpr": "{\"branches\":[{\"nextNodeCode\":\"ORDER_ACTION\",\"condition\":{\"field\":\"customerIntent\",\"operator\":\"eq\",\"value\":\"purchase\"},\"desc\":\"\\u7b7e\\u5355\"},{\"nextNodeCode\":\"WAIT_PRE_TRIP\",\"condition\":{\"field\":\"customerIntent\",\"operator\":\"eq\",\"value\":\"booked\"},\"desc\":\"\\u5df2\\u8ba2\\u8fdb\\u5165\\u51fa\\u884c\\u524d\"},{\"nextNodeCode\":\"HOLIDAY_PROMO\",\"condition\":{\"field\":\"customerIntent\",\"operator\":\"eq\",\"value\":\"inquiry\"},\"desc\":\"\\u7ee7\\u7eed\\u57f9\\u80b2\"}],\"defaultNodeCode\":\"WAIT_HOLIDAY\"}", "messageTemplate": "" }, { "nodeName": "结束", "nextNodeCode": "", "nodeCode": "END", "maxRounds": 0, "nodeType": 5, "nodeConfig": "{}", "sortNo": 13, "conditionExpr": "", "messageTemplate": "" } ], "industryType": "travel", "templateName": "旅游销冠全链路(A旅游公司)", "_generateParam": { "advisorName": "小美", "companyShortName": "测试旅行社", "industryType": "travel", "advisorRole": "金牌旅行顾问", "mainProduct": "云南精品线" }, "status": 1 }, "usedFallback": true, "passed": true, "workflowId": 47, "message": "generate and confirm ok" }, "phase2Learning": { "hotReplayRowsBefore": 64, "hotReplayRowsAfter": 66, "delta": 2, "passed": true, "status": "ok", "hint": "async write ok", "message": "learning replay ok", "verify": { "companyId": 338, "archiveTableExists": false, "hotIndexExists": true, "hotReplayRows": 66, "eventLogRows": 66, "archiveRows": 0, "archiveNote": "table missing or query failed", "status": "ok" } } }, "qualityGateConfig": { "enabled": true, "passScorePercent": 75, "targetScorePercent": 75, "minNodeScorePercent": 60, "minE2eAvgScorePercent": 75, "multiturnMinAvgScorePercent": 45 }, "failures": [ "lifecycleMultiTurnDialogue: lifecycle multi-turn dialogue failed", "qualityGate: avg 69.75 \u003c min 75.0", "summary: async DB summary missing or too short", "memoryPipeline: no summary and no customer_fact rows" ], "passed": false, "durationMs": 498016, "templateIdUsed": 46 } }, "failures": [ "integrationTests: 2/4 tests passed in 1222ms", "page./lobster/forbidden-words: \r\n### Error querying database. Cause: java.sql.SQLSyntaxErrorException: Table \u0027fs_tenant_cs1.company_lobster_replace_word\u0027 doesn\u0027t exist\r\n### The error may exist in URL [jar:file:/D:/ylrz_saas_new/java/fs-saas-company/target/fs-saas-company.jar!/BOOT-INF/lib/fs-service-1.1.0.jar!/mapper/lobster/LobsterReplaceWordMapper.xml]\r\n### The error may involve defaultParameterMap\r\n### The error occurred while setting parameters\r\n### SQL: SELECT id, tenant_id, word_type, content, replace_text, enabled, sort, create_time FROM company_lobster_replace_word WHERE (tenant_id = 0 OR tenant_id = ?) AND word_type = ? ORDER BY tenant_id, sort DESC, id DESC\r\n### Cause: java.sql.SQLSyntaxErrorException: Table \u0027fs_tenant_cs1.company_lobster_replace_word\u0027 doesn\u0027t exist\n; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: Table \u0027fs_tenant_cs1.company_lobster_replace_word\u0027 doesn\u0027t exist", "page./lobster/typo-words: \r\n### Error querying database. Cause: java.sql.SQLSyntaxErrorException: Table \u0027fs_tenant_cs1.company_lobster_replace_word\u0027 doesn\u0027t exist\r\n### The error may exist in URL [jar:file:/D:/ylrz_saas_new/java/fs-saas-company/target/fs-saas-company.jar!/BOOT-INF/lib/fs-service-1.1.0.jar!/mapper/lobster/LobsterReplaceWordMapper.xml]\r\n### The error may involve defaultParameterMap\r\n### The error occurred while setting parameters\r\n### SQL: SELECT id, tenant_id, word_type, content, replace_text, enabled, sort, create_time FROM company_lobster_replace_word WHERE (tenant_id = 0 OR tenant_id = ?) AND word_type = ? ORDER BY tenant_id, sort DESC, id DESC\r\n### Cause: java.sql.SQLSyntaxErrorException: Table \u0027fs_tenant_cs1.company_lobster_replace_word\u0027 doesn\u0027t exist\n; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: Table \u0027fs_tenant_cs1.company_lobster_replace_word\u0027 doesn\u0027t exist", "travel.lifecycleMultiTurnDialogue: lifecycle multi-turn dialogue failed", "travel.qualityGate: avg 69.75 \u003c min 75.0", "travel.summary: async DB summary missing or too short", "travel.memoryPipeline: no summary and no customer_fact rows" ], "passed": false, "durationMs": 501746, "pageCount": 32, "requiredPagesPassed": "17/19" }