full-engine-r1.json 197 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672
  1. {
  2. "companyId": 338,
  3. "includeTravelChain": true,
  4. "includeTravelStress": true,
  5. "startedAt": "2026-06-23 06:24:17",
  6. "sections": {
  7. "engineHealth": {
  8. "passed": true,
  9. "health": {
  10. "companyId": 338,
  11. "healthy": true,
  12. "missingCore": [
  13. ],
  14. "missingOptional": [
  15. ],
  16. "passThreshold": 120
  17. },
  18. "message": "core beans wired"
  19. },
  20. "integrationTests": {
  21. "passed": false,
  22. "summary": "2/4 tests passed in 1720ms",
  23. "details": [
  24. "[FAIL] NodeTypeService: START node not found",
  25. "[FAIL] DynamicNodeExecutor: Judgment node execution failed",
  26. "[PASS] MultiModelWorkflowGenerator: All tests passed",
  27. "[PASS] ModelConfigService: All tests passed"
  28. ],
  29. "executionTimeMs": 1720,
  30. "message": "2/4 tests passed in 1720ms"
  31. },
  32. "phase2Replay": {
  33. "passed": true,
  34. "verify": {
  35. "companyId": 338,
  36. "archiveTableExists": false,
  37. "hotIndexExists": true,
  38. "hotReplayRows": 78,
  39. "eventLogRows": 78,
  40. "archiveRows": 0,
  41. "archiveNote": "table missing or query failed",
  42. "status": "ok"
  43. },
  44. "message": "phase2 replay verify ok"
  45. },
  46. "pageLinkProbes": {
  47. "totalPages": 29,
  48. "requiredTotal": 15,
  49. "requiredPassed": 15,
  50. "optionalSkipped": 0,
  51. "failures": [
  52. ],
  53. "passed": true,
  54. "durationMs": 4621,
  55. "pages": [
  56. {
  57. "path": "/lobster/company-workflowLobster",
  58. "title": "Workflow templates",
  59. "probe": "templateList",
  60. "required": true,
  61. "passed": true,
  62. "status": "OK",
  63. "message": "templates=44"
  64. },
  65. {
  66. "path": "/lobster/workflow-execution",
  67. "title": "Workflow execution tasks",
  68. "probe": "instanceList",
  69. "required": true,
  70. "passed": true,
  71. "status": "OK",
  72. "message": "instances=568"
  73. },
  74. {
  75. "path": "/lobster/instance",
  76. "title": "Instance monitor",
  77. "probe": "instanceMonitor",
  78. "required": true,
  79. "passed": true,
  80. "status": "OK",
  81. "message": "monitor list ok, count=568"
  82. },
  83. {
  84. "path": "/lobster/prompt",
  85. "title": "Prompt management",
  86. "probe": "promptList",
  87. "required": true,
  88. "passed": true,
  89. "status": "OK",
  90. "message": "prompt rows=50"
  91. },
  92. {
  93. "path": "/lobster/sensitive-words",
  94. "title": "Sensitive words",
  95. "probe": "sensitiveWords",
  96. "required": true,
  97. "passed": true,
  98. "status": "OK",
  99. "message": "words=141"
  100. },
  101. {
  102. "path": "/lobster/forbidden-words",
  103. "title": "Forbidden words",
  104. "probe": "forbiddenWords",
  105. "required": false,
  106. "passed": true,
  107. "status": "OK",
  108. "message": "forbidden=32"
  109. },
  110. {
  111. "path": "/lobster/typo-words",
  112. "title": "Typo words",
  113. "probe": "typoWords",
  114. "required": false,
  115. "passed": true,
  116. "status": "OK",
  117. "message": "typo=3"
  118. },
  119. {
  120. "path": "/lobster/conversation-summary",
  121. "title": "Conversation summary",
  122. "probe": "conversationSummary",
  123. "required": true,
  124. "passed": true,
  125. "status": "OK",
  126. "message": "summaries=18"
  127. },
  128. {
  129. "path": "/lobster/profile-config",
  130. "title": "Profile config",
  131. "probe": "profileConfig",
  132. "required": false,
  133. "passed": true,
  134. "status": "OK",
  135. "message": "profile fields=16"
  136. },
  137. {
  138. "path": "/lobster/channel-config",
  139. "title": "Channel config",
  140. "probe": "channelTypes",
  141. "required": true,
  142. "passed": true,
  143. "status": "OK",
  144. "message": "channels=15"
  145. },
  146. {
  147. "path": "/lobster/channel-plugin",
  148. "title": "Channel plugins",
  149. "probe": "channelPlugins",
  150. "required": true,
  151. "passed": true,
  152. "status": "OK",
  153. "message": "plugins=3"
  154. },
  155. {
  156. "path": "/lobster/api-registry",
  157. "title": "API registry",
  158. "probe": "apiRegistry",
  159. "required": true,
  160. "passed": true,
  161. "status": "OK",
  162. "message": "apis=0"
  163. },
  164. {
  165. "path": "/lobster/sales-corpus",
  166. "title": "Sales corpus",
  167. "probe": "salesCorpus",
  168. "required": false,
  169. "passed": false,
  170. "status": "WARN",
  171. "message": "\r\n### Error querying database. Cause: java.sql.SQLSyntaxErrorException: Unknown column \u0027optimized_answer\u0027 in \u0027field list\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/LobsterSalesCorpusMapper.xml]\r\n### The error may involve defaultParameterMap\r\n### The error occurred while setting parameters\r\n### SQL: select id, dialog_text, customer_question, sales_answer, optimized_answer, ai_feedback, scenario, score, source_type, external_user_id, company_id, task_id, salesperson_name, tags, status, quality_status, kb_written, enabled, create_by, create_time, update_by, update_time from lobster_sales_corpus where company_id = ? order by create_time desc limit ? offset ?\r\n### Cause: java.sql.SQLSyntaxErrorException: Unknown column \u0027optimized_answer\u0027 in \u0027field list\u0027\n; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: Unknown column \u0027optimized_answer\u0027 in \u0027field list\u0027"
  172. },
  173. {
  174. "path": "/lobster/chat-aggregate",
  175. "title": "Chat aggregate",
  176. "probe": "chatAggregate",
  177. "required": false,
  178. "passed": true,
  179. "status": "OK",
  180. "message": "sessions=0"
  181. },
  182. {
  183. "path": "/lobster/industry-bootstrap",
  184. "title": "Industry bootstrap",
  185. "probe": "industryPacks",
  186. "required": true,
  187. "passed": true,
  188. "status": "OK",
  189. "message": "packs=28"
  190. },
  191. {
  192. "path": "/lobster/identity-config",
  193. "title": "External role config",
  194. "probe": "identityConfig",
  195. "required": false,
  196. "passed": true,
  197. "status": "OK",
  198. "message": "identity config loaded"
  199. },
  200. {
  201. "path": "/lobster/semantic-keywords",
  202. "title": "Semantic keywords",
  203. "probe": "semanticKeywords",
  204. "required": true,
  205. "passed": true,
  206. "status": "OK",
  207. "message": "keywords=0"
  208. },
  209. {
  210. "path": "/lobster/optimization",
  211. "title": "AI optimization audit",
  212. "probe": "optimization",
  213. "required": true,
  214. "passed": true,
  215. "status": "OK",
  216. "message": "optimization stats=5"
  217. },
  218. {
  219. "path": "/lobster/dynamic-impl",
  220. "title": "Dynamic node approval",
  221. "probe": "dynamicImpl",
  222. "required": true,
  223. "passed": true,
  224. "status": "OK",
  225. "message": "pending impls=0"
  226. },
  227. {
  228. "path": "/lobster/dashboard",
  229. "title": "Engine dashboard",
  230. "probe": "dashboard",
  231. "required": true,
  232. "passed": true,
  233. "status": "OK",
  234. "message": "dashboard keys=8"
  235. },
  236. {
  237. "path": "/lobster/token-stats",
  238. "title": "Token stats",
  239. "probe": "tokenStats",
  240. "required": false,
  241. "passed": false,
  242. "status": "WARN",
  243. "message": "\r\n### Error querying database. Cause: java.sql.SQLSyntaxErrorException: Table \u0027ylrz_saas.lobster_token_consumption\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/company/LobsterTokenConsumptionMapper.xml]\r\n### The error may involve defaultParameterMap\r\n### The error occurred while setting parameters\r\n### SQL: SELECT DATE(request_time) AS date, SUM(token_count) AS totalTokens, SUM(estimated_cost) AS totalCost, COUNT(1) AS requestCount FROM lobster_token_consumption WHERE company_id = ? AND request_time BETWEEN ? AND ? GROUP BY DATE(request_time) ORDER BY date DESC\r\n### Cause: java.sql.SQLSyntaxErrorException: Table \u0027ylrz_saas.lobster_token_consumption\u0027 doesn\u0027t exist\n; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: Table \u0027ylrz_saas.lobster_token_consumption\u0027 doesn\u0027t exist"
  244. },
  245. {
  246. "path": "/lobster/evolution",
  247. "title": "Evolution engine",
  248. "probe": "evolution",
  249. "required": true,
  250. "passed": true,
  251. "status": "OK",
  252. "message": "evolution metrics=5"
  253. },
  254. {
  255. "path": "/lobster/chat-test",
  256. "title": "Chat test",
  257. "probe": "chatTest",
  258. "required": false,
  259. "passed": true,
  260. "status": "OK",
  261. "message": "e2e test service ready"
  262. },
  263. {
  264. "path": "/lobster/ab-test",
  265. "title": "AB / GEPA optimization",
  266. "probe": "abTest",
  267. "required": false,
  268. "passed": true,
  269. "status": "OK",
  270. "message": "active ab tests=0"
  271. },
  272. {
  273. "path": "/lobster/profile",
  274. "title": "Customer profile hub",
  275. "probe": "userProfile",
  276. "required": false,
  277. "passed": true,
  278. "status": "OK",
  279. "message": "profiles=27, domain=true"
  280. },
  281. {
  282. "path": "/lobster/profile-domain",
  283. "title": "Unified profile domain",
  284. "probe": "profileDomain",
  285. "required": false,
  286. "passed": true,
  287. "status": "OK",
  288. "message": "profile domain ready, mode=async"
  289. },
  290. {
  291. "path": "/lobster/qdrant",
  292. "title": "Vector knowledge base",
  293. "probe": "qdrant",
  294. "required": false,
  295. "passed": true,
  296. "status": "OK",
  297. "message": "vectors=0"
  298. },
  299. {
  300. "path": "/lobster/global-stats",
  301. "title": "Global evolution stats",
  302. "probe": "globalStats",
  303. "required": false,
  304. "passed": true,
  305. "status": "OK",
  306. "message": "global metrics=5"
  307. },
  308. {
  309. "path": "/lobster/event-audit",
  310. "title": "Event node audit",
  311. "probe": "eventAudit",
  312. "required": false,
  313. "passed": true,
  314. "status": "OK",
  315. "message": "audits=0"
  316. }
  317. ]
  318. },
  319. "travelFullChain": {
  320. "companyId": 338,
  321. "includeStress": true,
  322. "dialogueIndustry": "travel",
  323. "startedAt": "2026-06-23 06:24:23",
  324. "sections": {
  325. "enginePrompts": {
  326. "expectedCatalogKeys": 50,
  327. "newlyInserted": 0,
  328. "missingKeys": [
  329. ],
  330. "platformKeyCount": 50,
  331. "passed": true,
  332. "message": "platform engine prompts complete (50 keys)"
  333. },
  334. "triggerExclude": {
  335. "passed": true,
  336. "errors": [
  337. ],
  338. "message": "trigger exclude/sarcasm/schedule checks ok"
  339. },
  340. "runtimeCapabilities": {
  341. "capabilityTags": [
  342. "product",
  343. "weather",
  344. "logistics",
  345. "survey",
  346. "live",
  347. "article",
  348. "order",
  349. "order_list",
  350. "coupon",
  351. "crm",
  352. "sms"
  353. ],
  354. "toolCount": 11,
  355. "intentChecks": [
  356. {
  357. "message": "这几条线路看起来不错",
  358. "expectedTool": "query_product",
  359. "matchedTool": "query_product",
  360. "passed": "true"
  361. },
  362. {
  363. "message": "云南天气怎么样",
  364. "expectedTool": "query_weather",
  365. "matchedTool": "query_weather",
  366. "passed": "true"
  367. },
  368. {
  369. "message": "我的快递发货了吗",
  370. "expectedTool": "query_logistics",
  371. "matchedTool": "query_logistics",
  372. "passed": "true"
  373. },
  374. {
  375. "message": "满意度打分",
  376. "expectedTool": "start_survey",
  377. "matchedTool": "start_survey",
  378. "passed": "true"
  379. },
  380. {
  381. "message": "有没有新线路优惠",
  382. "expectedTool": "query_product",
  383. "matchedTool": "query_product",
  384. "passed": "true"
  385. },
  386. {
  387. "message": "有直播吗",
  388. "expectedTool": "push_live",
  389. "matchedTool": "push_live",
  390. "passed": "true"
  391. },
  392. {
  393. "message": "发我看看文章",
  394. "expectedTool": "push_article",
  395. "matchedTool": "push_article",
  396. "passed": "true"
  397. }
  398. ],
  399. "surveySmoke": true,
  400. "issues": [
  401. ],
  402. "passed": true,
  403. "message": "运行时能力校验通过"
  404. },
  405. "capabilityDialogue": {
  406. "lines": [
  407. {
  408. "message": "云南7月份天气怎么样,需要带什么衣服",
  409. "matchedTool": "query_weather",
  410. "triggered": true,
  411. "toolStatus": "ok",
  412. "summary": "已查询 云南 天气"
  413. },
  414. {
  415. "message": "快递发货了吗,帮我查一下物流",
  416. "matchedTool": "query_logistics",
  417. "triggered": true,
  418. "toolStatus": "ok",
  419. "summary": "{success=false, error=未找到物流单号,请确认是否已发货}"
  420. },
  421. {
  422. "message": "有没有适合带老人的新线路推荐",
  423. "matchedTool": "query_product",
  424. "triggered": true,
  425. "toolStatus": "ok",
  426. "summary": "{products=[], count=0}"
  427. },
  428. {
  429. "message": "今晚有直播吗,发我直播间链接",
  430. "matchedTool": "push_live",
  431. "triggered": true,
  432. "toolStatus": "ok",
  433. "summary": "暂无可用直播,请稍后再试"
  434. },
  435. {
  436. "message": "有没有出行攻略文章发我看看",
  437. "matchedTool": "push_article",
  438. "triggered": true,
  439. "toolStatus": "ok",
  440. "summary": "暂无可用文章,请稍后再试"
  441. },
  442. {
  443. "message": "满意度打5分,服务挺好的",
  444. "matchedTool": "start_survey",
  445. "triggered": true,
  446. "toolStatus": "ok",
  447. "summary": "已记录客户参与「satisfaction」问卷意向,请在对话中自然引导完成反馈"
  448. }
  449. ],
  450. "lineCount": 6,
  451. "warnings": [
  452. ],
  453. "issues": [
  454. ],
  455. "passed": true,
  456. "message": "capabilityTriggers 联调通过"
  457. },
  458. "template": {
  459. "passed": true,
  460. "workflowId": 1,
  461. "templateCode": "TRAVEL_TOP_SALES_001_C338",
  462. "source": "existing",
  463. "message": "travel template found"
  464. },
  465. "lifecycleCoverage": {
  466. "coverageRatio": 1.0,
  467. "minCoverage": 0.75,
  468. "nodeCount": 16,
  469. "requiredNodeCount": 15,
  470. "missingNodes": [
  471. ],
  472. "passed": true,
  473. "message": "lifecycle nodes covered"
  474. },
  475. "sopDefaults": {
  476. "qwSopTempId": "LOBSTER_TRAVEL_POST_BOOKING",
  477. "wxSopTempId": "LOBSTER_TRAVEL_POST_BOOKING_WX",
  478. "tenantHint": "Create qw_sop/wx_sop tasks with temp_id matching the values above",
  479. "sopEnrollNodeConfig": "{\"sopTempId\":\"LOBSTER_TRAVEL_POST_BOOKING\",\"wxSopTempId\":\"LOBSTER_TRAVEL_POST_BOOKING_WX\",\"plannedIndustry\":\"travel\",\"systemPromptKey\":\"node_TRAVEL_TOP_SALES_001_C338_SOP_ENROLL_system\",\"preferContactAccount\":true,\"plannedRole\":\"MESSAGE\",\"instructionPromptKey\":\"node_TRAVEL_TOP_SALES_001_C338_SOP_ENROLL_instruction\",\"actionOnly\":true,\"promptPlanned\":true}",
  480. "hasSopEnrollNode": true,
  481. "passed": true,
  482. "message": "travel SOP defaults and SOP_ENROLL node present"
  483. },
  484. "sopEnrollment": {
  485. "qwTaskConfigured": true,
  486. "wxTaskConfigured": true,
  487. "tenantSopReady": true,
  488. "qwChannel": {
  489. "success": false,
  490. "skipped": null,
  491. "channelType": "QW",
  492. "message": "未找到企微客户(需 contactId 或 externalUserId+corpId)",
  493. "tempId": null,
  494. "sopId": "lobster-travel-val-qw",
  495. "reachable": true
  496. },
  497. "wxChannel": {
  498. "success": false,
  499. "skipped": null,
  500. "channelType": "WX",
  501. "message": "未找到 CRM 客户(需 customerId 或 wx_contact 关联)",
  502. "tempId": null,
  503. "sopId": 1,
  504. "reachable": true
  505. },
  506. "passed": true,
  507. "notes": [
  508. ],
  509. "message": "QW/WX SOP enrollment routing ok"
  510. },
  511. "nodePromptsPlanned": {
  512. "promptNodeTarget": 6,
  513. "promptNodeFilled": 6,
  514. "emptyPromptNodes": [
  515. ],
  516. "passed": true,
  517. "message": "key node prompts present"
  518. },
  519. "lifecycleSimulation": {
  520. "waitPreTripConfigured": true,
  521. "tagAutoConfigured": true,
  522. "orderActionConfigured": true,
  523. "holidayWaitConfigured": true,
  524. "passed": true,
  525. "message": "lifecycle orchestration nodes configured"
  526. },
  527. "lifecycleRuntime": {
  528. "simMinuteUnit": 10,
  529. "simDayEqualsMinutes": 10,
  530. "schedulerWakeWaitMs": 3500,
  531. "preTripWaitSchedule10m": {
  532. "waitUntil": 1782167400000,
  533. "expectedWaitAt": 1782167400000,
  534. "travelAt": "2026-06-23T07:24:35.109038200",
  535. "waitInRealMinutes": 5,
  536. "diffMinutes": 0,
  537. "simTimeScale": true,
  538. "passed": true,
  539. "message": "T-5 10m sim schedule ok"
  540. },
  541. "preTripWaitWake": {
  542. "passed": true,
  543. "message": "lifecycle wait wake ok",
  544. "statusAfter": "running",
  545. "resumeIndex": 8,
  546. "currentIndexAfter": 9,
  547. "instanceId": 2
  548. },
  549. "preTripSchedulerWake10m": {
  550. "scheduledWakeAt": 1782167082631,
  551. "schedulerWaitMs": 3500,
  552. "passed": true,
  553. "message": "scheduler 10m sim wake ok",
  554. "statusAfter": "running",
  555. "resumeIndex": 8,
  556. "currentIndexAfter": 9,
  557. "instanceId": 3
  558. },
  559. "holidayWaitSchedule10m": {
  560. "waitUntil": 1782184800000,
  561. "expectedWaitAt": 1782184800000,
  562. "waitInRealMinutes": 295,
  563. "simHolidayDays": 30,
  564. "simRealMinutes": 300,
  565. "diffMinutes": 0,
  566. "passed": true,
  567. "message": "holiday 10m sim schedule ok"
  568. },
  569. "holidayWaitWake": {
  570. "passed": true,
  571. "message": "lifecycle wait wake ok",
  572. "statusAfter": "completed",
  573. "resumeIndex": 13,
  574. "currentIndexAfter": 13,
  575. "instanceId": 4
  576. },
  577. "holidaySchedulerWake10m": {
  578. "scheduledWakeAt": 1782167090740,
  579. "schedulerWaitMs": 3500,
  580. "passed": true,
  581. "message": "scheduler 10m sim wake ok",
  582. "statusAfter": "completed",
  583. "resumeIndex": 13,
  584. "currentIndexAfter": 13,
  585. "instanceId": 5
  586. },
  587. "passed": true,
  588. "message": "lifecycle 10m sim schedule/wake ok"
  589. },
  590. "lifecycleFullFlowSim": {
  591. "instanceId": 6,
  592. "finalStatus": "completed",
  593. "finalNodeIndex": 13,
  594. "milestones": [
  595. "STARTED",
  596. "T5_SCHEDULED",
  597. "T5_WAITING",
  598. "PRE_TRIP_CARE",
  599. "PRE_TRIP_MULTITURN",
  600. "HOLIDAY_WAITING",
  601. "HOLIDAY_PROMO"
  602. ],
  603. "errors": [
  604. ],
  605. "passed": true,
  606. "message": "full lifecycle 10m sim flow ok",
  607. "simMinuteUnit": 10
  608. },
  609. "lifecycleExceptions": {
  610. "waitNotExpired": {
  611. "passed": true,
  612. "message": "not-expired wait rejected advance",
  613. "statusAfter": "waiting"
  614. },
  615. "prematureScheduler": {
  616. "passed": true,
  617. "message": "premature scheduler did not wake"
  618. },
  619. "blockedSchedulerSkip": {
  620. "passed": true,
  621. "message": "blocked instance skipped by scheduler"
  622. },
  623. "blockedForceWake": {
  624. "passed": true,
  625. "message": "blocked force wake rejected"
  626. },
  627. "overdueT5SkipWait": {
  628. "waitUntil": 1782165000000,
  629. "overdue": true,
  630. "wouldSkipSchedule": true,
  631. "passed": true,
  632. "message": "overdue T-5 skips wait schedule"
  633. },
  634. "missingTravelDate": {
  635. "waitUntil": 1782167884578,
  636. "expectedFallbackMinutes": 10,
  637. "passed": true,
  638. "message": "missing travel_date sim fallback ok"
  639. },
  640. "completedRejectWake": {
  641. "passed": true,
  642. "message": "completed instance rejects wake"
  643. },
  644. "missingResumeIndex": {
  645. "passed": true,
  646. "message": "missing resume index fallback ok"
  647. },
  648. "doubleWake": {
  649. "passed": true,
  650. "message": "double wake idempotent",
  651. "statusAfter": "running"
  652. },
  653. "passed": true,
  654. "message": "lifecycle exception handling ok"
  655. },
  656. "lifecycleMultiTurnDialogue": {
  657. "bookingTurnCount": 10,
  658. "postBookingTurnCount": 9,
  659. "dialogueSource": "bookingFunnel+postBookingLifecycle",
  660. "consultMultiTurn": {
  661. "turns": 5,
  662. "avgScore": 63.4,
  663. "minScore": 0.0,
  664. "passed": true,
  665. "message": "node multiTurn ok",
  666. "instanceId": 14,
  667. "inputCount": 6
  668. },
  669. "postBookingMultiTurnFlow": {
  670. "instanceId": 15,
  671. "preTripMultiTurn": {
  672. "turns": 3,
  673. "avgScore": 78.66666666666667,
  674. "minScore": 78.0,
  675. "passed": true,
  676. "message": "node multiTurn ok"
  677. },
  678. "holidayMultiTurn": {
  679. "turns": 1,
  680. "avgScore": 79.0,
  681. "minScore": 79.0,
  682. "earlyCompletion": true,
  683. "passed": true,
  684. "message": "node multiTurn ok"
  685. },
  686. "milestones": [
  687. "PRE_TRIP",
  688. "PRE_TRIP_MT",
  689. "HOLIDAY",
  690. "HOLIDAY_MT"
  691. ],
  692. "errors": [
  693. ],
  694. "dialogueTurns": 9,
  695. "passed": true,
  696. "message": "post-booking multi-turn flow ok"
  697. },
  698. "passed": true,
  699. "message": "lifecycle multi-turn dialogue ok"
  700. },
  701. "e2eDialogue": {
  702. "dialogueStage": "bookingFunnel",
  703. "dialogueTurnCount": 10,
  704. "runId": "b9dbfc0a80584425b3663c46f5208ab0",
  705. "status": "SUCCESS",
  706. "instanceId": 16,
  707. "totalScore": 69.88,
  708. "passedNodeCnt": 9,
  709. "totalNodeCnt": 10,
  710. "evolutionCount": 1,
  711. "nodeTraces": 10,
  712. "minNodeScore": 73.125,
  713. "maxNodeScore": 79.375,
  714. "nodesBelowTarget": 1,
  715. "nodesBelowMin": 0,
  716. "nodeScoreDetail": [
  717. {
  718. "nodeCode": "初始化咨询阶段",
  719. "score": 73.125,
  720. "passed": false
  721. },
  722. {
  723. "nodeCode": "直播加微推直播间",
  724. "score": 78.125,
  725. "passed": true
  726. },
  727. {
  728. "nodeCode": "推送出行攻略文章",
  729. "score": 77.5,
  730. "passed": true
  731. },
  732. {
  733. "nodeCode": "推送出行攻略文章",
  734. "score": 76.25,
  735. "passed": true
  736. },
  737. {
  738. "nodeCode": "推送出行攻略文章",
  739. "score": 79.375,
  740. "passed": true
  741. },
  742. {
  743. "nodeCode": "推送出行攻略文章",
  744. "score": 79.375,
  745. "passed": true
  746. },
  747. {
  748. "nodeCode": "推送出行攻略文章",
  749. "score": 78.75,
  750. "passed": true
  751. },
  752. {
  753. "nodeCode": "推送出行攻略文章",
  754. "score": 77.5,
  755. "passed": true
  756. },
  757. {
  758. "nodeCode": "推送出行攻略文章",
  759. "score": 78.75,
  760. "passed": true
  761. }
  762. ],
  763. "passed": true,
  764. "message": "e2e ok"
  765. },
  766. "qualityGate": {
  767. "enabled": true,
  768. "targetScorePercent": 75.0,
  769. "minE2eAvgScorePercent": 75.0,
  770. "minNodeScorePercent": 60.0,
  771. "passScorePercent": 75,
  772. "rawTotalScore": 69.88,
  773. "scoredNodeAvg": 77.63888888888889,
  774. "totalScore": 77.63888888888889,
  775. "nodesBelowTarget": 1,
  776. "nodesBelowMin": 0,
  777. "minNodeScore": 73.125,
  778. "maxNodeScore": 79.375,
  779. "nodeScoreDetail": [
  780. {
  781. "nodeCode": "初始化咨询阶段",
  782. "score": 73.125,
  783. "passed": false
  784. },
  785. {
  786. "nodeCode": "直播加微推直播间",
  787. "score": 78.125,
  788. "passed": true
  789. },
  790. {
  791. "nodeCode": "推送出行攻略文章",
  792. "score": 77.5,
  793. "passed": true
  794. },
  795. {
  796. "nodeCode": "推送出行攻略文章",
  797. "score": 76.25,
  798. "passed": true
  799. },
  800. {
  801. "nodeCode": "推送出行攻略文章",
  802. "score": 79.375,
  803. "passed": true
  804. },
  805. {
  806. "nodeCode": "推送出行攻略文章",
  807. "score": 79.375,
  808. "passed": true
  809. },
  810. {
  811. "nodeCode": "推送出行攻略文章",
  812. "score": 78.75,
  813. "passed": true
  814. },
  815. {
  816. "nodeCode": "推送出行攻略文章",
  817. "score": 77.5,
  818. "passed": true
  819. },
  820. {
  821. "nodeCode": "推送出行攻略文章",
  822. "score": 78.75,
  823. "passed": true
  824. }
  825. ],
  826. "passed": false,
  827. "message": "1 node(s) below production target 75.0"
  828. },
  829. "summary": {
  830. "instanceId": 16,
  831. "externalUserId": "999338001",
  832. "asyncDbSummary": true,
  833. "historyLines": 20,
  834. "syncSummaryLength": 61,
  835. "microSummaryLength": 210,
  836. "cachedSummaryOk": true,
  837. "dbSummaryRows": 1,
  838. "passed": true,
  839. "message": "summary persisted to DB"
  840. },
  841. "memoryPipeline": {
  842. "externalUserId": "999338001",
  843. "instanceId": 16,
  844. "summaryOk": true,
  845. "factCount": 4,
  846. "factKeys": [
  847. ],
  848. "passed": true,
  849. "message": "summary or customer_fact persisted"
  850. },
  851. "evolutionAnalyze": {
  852. "e2eEvolutionCount": 1,
  853. "evolutionLogsBefore": 58,
  854. "analyzeInvoked": true,
  855. "analyzeMessage": "analyzeAndSuggest ok",
  856. "evolutionLogsAfter": 58,
  857. "evolutionLogsDelta": 0,
  858. "pendingSuggestions": 0,
  859. "passed": true,
  860. "message": "evolution analyze ok"
  861. },
  862. "sensitiveWord": {
  863. "scopeNote": "lobster SensitiveWordService + evolve step9; not live/call/CompanyAiSensitiveWord AC",
  864. "layers": {
  865. "defaultLib": {
  866. "detectCount": 1,
  867. "filtered": "推荐云南精品线,***,欢迎咨询",
  868. "passed": true
  869. },
  870. "customCrud": {
  871. "word": "LOBSTER_VAL_338",
  872. "hit": true,
  873. "filtered": "行程含***内容",
  874. "passed": true
  875. },
  876. "highRisk": {
  877. "word": "LOBSTER_FRAUD_338",
  878. "highRisk": true,
  879. "passed": true
  880. },
  881. "evolveStep9Simulation": {
  882. "rawHasSensitive": true,
  883. "wouldTransferToHuman": true,
  884. "finalReply": "欢迎咨询,预期收益,***",
  885. "passed": true
  886. },
  887. "wordListLoaded": {
  888. "count": 143,
  889. "passed": true
  890. }
  891. },
  892. "passed": true,
  893. "message": "sensitive word pipeline ok"
  894. },
  895. "executionPolicy": {
  896. "scopeNote": "resolve() strict/content/flow gates used by executor + prompt fallback",
  897. "strictFixedWorkflow": false,
  898. "contentPersonalization": true,
  899. "flowPersonalization": true,
  900. "allowContent": true,
  901. "allowFlow": true,
  902. "executionMode": "HYBRID",
  903. "issues": [
  904. ],
  905. "passed": true,
  906. "message": "execution policy gates ok"
  907. },
  908. "aiGenerate": {
  909. "recordNo": "LOB_1782167602701",
  910. "generateUseLlm": false,
  911. "fallbackGenerate": true,
  912. "finalStatus": 1,
  913. "detail": {
  914. "conversationModel": {
  915. "defaultStage": "consult",
  916. "description": "旅游全链路:会话常驻,节点负责打标/签单/出行关怀/满意度/节日营销",
  917. "version": 2,
  918. "stages": [
  919. {
  920. "code": "consult",
  921. "promptHint": "你是小美,测试旅行社旅行顾问。客户来自直播间,先破冰并了解是否已有出行计划。",
  922. "label": "直播加微破冰",
  923. "goals": [
  924. ]
  925. },
  926. {
  927. "code": "collect",
  928. "promptHint": "逐步询问目的地、日期、人数、预算;一次只问一个关键问题。",
  929. "label": "需求采集打标",
  930. "goals": [
  931. {
  932. "collected": false,
  933. "label": "目的地",
  934. "required": true,
  935. "field": "destination"
  936. },
  937. {
  938. "collected": false,
  939. "label": "出行日期",
  940. "required": true,
  941. "field": "travel_date"
  942. },
  943. {
  944. "collected": false,
  945. "label": "预算",
  946. "required": true,
  947. "field": "budget"
  948. },
  949. {
  950. "collected": false,
  951. "label": "出行人数",
  952. "required": true,
  953. "field": "pax"
  954. }
  955. ]
  956. },
  957. {
  958. "code": "offer",
  959. "promptHint": "基于采集信息推荐云南精品线,突出亮点与优惠,自然引导签单。",
  960. "label": "线路推荐促单",
  961. "goals": [
  962. ]
  963. },
  964. {
  965. "code": "pre_trip",
  966. "promptHint": "出行前5天提醒证件、行李、当地天气与注意事项。",
  967. "label": "出行前关怀",
  968. "goals": [
  969. ]
  970. },
  971. {
  972. "code": "in_trip",
  973. "promptHint": "行程中主动问候,询问是否遇到问题,给出景点玩要建议。",
  974. "label": "行中关怀",
  975. "goals": [
  976. ]
  977. },
  978. {
  979. "code": "post_trip",
  980. "promptHint": "行程结束后收集满意度与改进建议。",
  981. "label": "满意度回访",
  982. "goals": [
  983. ]
  984. },
  985. {
  986. "code": "repurchase",
  987. "promptHint": "大节日前30天关怀,了解是否有新的出行计划并推荐产品。",
  988. "label": "节日营销",
  989. "goals": [
  990. ]
  991. }
  992. ],
  993. "sideTasks": [
  994. {
  995. "triggerIntents": [
  996. "purchase",
  997. "high_intent",
  998. "booked"
  999. ],
  1000. "nodeCode": "TAG_AUTO",
  1001. "nodeType": 9,
  1002. "action": "add_tag"
  1003. },
  1004. {
  1005. "triggerIntents": [
  1006. "purchase",
  1007. "order",
  1008. "book"
  1009. ],
  1010. "nodeCode": "ORDER_ACTION",
  1011. "nodeType": 7,
  1012. "action": "create_order"
  1013. }
  1014. ]
  1015. },
  1016. "variables": [
  1017. {
  1018. "varName": "客户姓名",
  1019. "label": "客户姓名",
  1020. "source": "user_profile",
  1021. "type": "string",
  1022. "required": 0,
  1023. "varType": "string",
  1024. "sourceType": "user_profile",
  1025. "name": "customerName",
  1026. "varCode": "customerName"
  1027. },
  1028. {
  1029. "varName": "目的地",
  1030. "label": "目的地",
  1031. "source": "conversation",
  1032. "type": "string",
  1033. "required": 0,
  1034. "varType": "string",
  1035. "sourceType": "conversation",
  1036. "name": "destination",
  1037. "varCode": "destination"
  1038. },
  1039. {
  1040. "varName": "出行日期",
  1041. "label": "出行日期",
  1042. "source": "conversation",
  1043. "type": "date",
  1044. "required": 0,
  1045. "varType": "date",
  1046. "sourceType": "conversation",
  1047. "name": "travel_date",
  1048. "varCode": "travel_date"
  1049. },
  1050. {
  1051. "varName": "预算",
  1052. "label": "预算",
  1053. "source": "conversation",
  1054. "type": "string",
  1055. "required": 0,
  1056. "varType": "string",
  1057. "sourceType": "conversation",
  1058. "name": "budget",
  1059. "varCode": "budget"
  1060. },
  1061. {
  1062. "varName": "出行人数",
  1063. "label": "出行人数",
  1064. "source": "conversation",
  1065. "type": "number",
  1066. "required": 0,
  1067. "varType": "number",
  1068. "sourceType": "conversation",
  1069. "name": "pax",
  1070. "varCode": "pax"
  1071. },
  1072. {
  1073. "varName": "测试旅行社",
  1074. "label": "测试旅行社",
  1075. "source": "manual",
  1076. "type": "string",
  1077. "required": 0,
  1078. "varType": "string",
  1079. "sourceType": "manual",
  1080. "name": "company_short_name",
  1081. "varCode": "company_short_name"
  1082. },
  1083. {
  1084. "varName": "小美",
  1085. "label": "小美",
  1086. "source": "manual",
  1087. "type": "string",
  1088. "required": 0,
  1089. "varType": "string",
  1090. "sourceType": "manual",
  1091. "name": "advisor_name",
  1092. "varCode": "advisor_name"
  1093. },
  1094. {
  1095. "varName": "云南精品线",
  1096. "label": "云南精品线",
  1097. "source": "manual",
  1098. "type": "string",
  1099. "required": 0,
  1100. "varType": "string",
  1101. "sourceType": "manual",
  1102. "name": "main_product",
  1103. "varCode": "main_product"
  1104. },
  1105. {
  1106. "varName": "当前阶段",
  1107. "label": "当前阶段",
  1108. "source": "manual",
  1109. "type": "string",
  1110. "required": 0,
  1111. "varType": "string",
  1112. "sourceType": "manual",
  1113. "name": "workflowStage",
  1114. "varCode": "workflowStage"
  1115. },
  1116. {
  1117. "varName": "客户意向",
  1118. "label": "客户意向",
  1119. "source": "conversation",
  1120. "type": "string",
  1121. "required": 0,
  1122. "varType": "string",
  1123. "sourceType": "conversation",
  1124. "name": "customerIntent",
  1125. "varCode": "customerIntent"
  1126. },
  1127. {
  1128. "varName": "行业类型",
  1129. "defaultValue": "travel",
  1130. "label": "行业类型",
  1131. "source": "manual",
  1132. "type": "string",
  1133. "required": 0,
  1134. "varType": "string",
  1135. "sourceType": "manual",
  1136. "name": "industryType",
  1137. "varCode": "industryType"
  1138. },
  1139. {
  1140. "varName": "企微SOP模板ID",
  1141. "defaultValue": "LOBSTER_TRAVEL_POST_BOOKING",
  1142. "label": "企微SOP模板ID",
  1143. "source": "manual",
  1144. "type": "string",
  1145. "required": 0,
  1146. "varType": "string",
  1147. "sourceType": "manual",
  1148. "name": "sopTempId",
  1149. "varCode": "sopTempId"
  1150. },
  1151. {
  1152. "varName": "个微SOP模板ID",
  1153. "defaultValue": "LOBSTER_TRAVEL_POST_BOOKING_WX",
  1154. "label": "个微SOP模板ID",
  1155. "source": "manual",
  1156. "type": "string",
  1157. "required": 0,
  1158. "varType": "string",
  1159. "sourceType": "manual",
  1160. "name": "wxSopTempId",
  1161. "varCode": "wxSopTempId"
  1162. }
  1163. ],
  1164. "edges": [
  1165. {
  1166. "targetNodeCode": "INIT_STAGE",
  1167. "sourceNodeCode": "START",
  1168. "edgeLabel": "启动"
  1169. },
  1170. {
  1171. "targetNodeCode": "LIVE_PUSH",
  1172. "sourceNodeCode": "INIT_STAGE",
  1173. "edgeLabel": "直播加微推直播间"
  1174. },
  1175. {
  1176. "targetNodeCode": "ARTICLE_PUSH",
  1177. "sourceNodeCode": "LIVE_PUSH",
  1178. "edgeLabel": "推送攻略文章"
  1179. },
  1180. {
  1181. "targetNodeCode": "TAG_AUTO",
  1182. "sourceNodeCode": "ARTICLE_PUSH",
  1183. "edgeLabel": "进入采集打标"
  1184. },
  1185. {
  1186. "targetNodeCode": "JUDGE",
  1187. "sourceNodeCode": "TAG_AUTO",
  1188. "edgeLabel": "分支"
  1189. },
  1190. {
  1191. "targetNodeCode": "ORDER_ACTION",
  1192. "sourceNodeCode": "JUDGE",
  1193. "edgeLabel": "签单"
  1194. },
  1195. {
  1196. "targetNodeCode": "WAIT_PRE_TRIP",
  1197. "sourceNodeCode": "JUDGE",
  1198. "edgeLabel": "已订"
  1199. },
  1200. {
  1201. "targetNodeCode": "WAIT_HOLIDAY",
  1202. "sourceNodeCode": "JUDGE",
  1203. "edgeLabel": "培育"
  1204. },
  1205. {
  1206. "targetNodeCode": "SOP_ENROLL",
  1207. "sourceNodeCode": "ORDER_ACTION",
  1208. "edgeLabel": "SOP入营"
  1209. },
  1210. {
  1211. "targetNodeCode": "WAIT_PRE_TRIP",
  1212. "sourceNodeCode": "SOP_ENROLL",
  1213. "edgeLabel": "进入出行前"
  1214. },
  1215. {
  1216. "targetNodeCode": "PRE_TRIP_CARE",
  1217. "sourceNodeCode": "WAIT_PRE_TRIP",
  1218. "edgeLabel": "T-5触达"
  1219. },
  1220. {
  1221. "targetNodeCode": "WEATHER_TIPS",
  1222. "sourceNodeCode": "PRE_TRIP_CARE",
  1223. "edgeLabel": "天气建议"
  1224. },
  1225. {
  1226. "targetNodeCode": "IN_TRIP_CARE",
  1227. "sourceNodeCode": "WEATHER_TIPS",
  1228. "edgeLabel": "行中"
  1229. },
  1230. {
  1231. "targetNodeCode": "SURVEY",
  1232. "sourceNodeCode": "IN_TRIP_CARE",
  1233. "edgeLabel": "满意度"
  1234. },
  1235. {
  1236. "targetNodeCode": "WAIT_HOLIDAY",
  1237. "sourceNodeCode": "SURVEY",
  1238. "edgeLabel": "节日等待"
  1239. },
  1240. {
  1241. "targetNodeCode": "HOLIDAY_PROMO",
  1242. "sourceNodeCode": "WAIT_HOLIDAY",
  1243. "edgeLabel": "节日营销"
  1244. },
  1245. {
  1246. "targetNodeCode": "END",
  1247. "sourceNodeCode": "HOLIDAY_PROMO",
  1248. "edgeLabel": "结束"
  1249. }
  1250. ],
  1251. "description": "旅游公司销冠全流程:直播加微→破冰→采集出行需求→线路推荐→促单签单→出行前关怀→旅途中关怀→回访调研→节日营销→循环推荐",
  1252. "templateCode": "TRAVEL_TOP_SALES_001",
  1253. "errorMsg": "已使用行业兜底模板: validation fast fallback",
  1254. "brandContext": {
  1255. "advisorName": "小美",
  1256. "companyShortName": "测试旅行社",
  1257. "advisorRole": "金牌旅行顾问",
  1258. "mainProduct": "云南精品线"
  1259. },
  1260. "_fallbackSource": "travel_lifecycle_full",
  1261. "nodes": [
  1262. {
  1263. "nodeName": "开始",
  1264. "nextNodeCode": "INIT_STAGE",
  1265. "nodeCode": "START",
  1266. "maxRounds": 0,
  1267. "nodeType": 1,
  1268. "nodeConfig": "{\"autoAdvance\":true,\"channelHint\":\"QW\"}",
  1269. "sortNo": 1,
  1270. "conditionExpr": "",
  1271. "messageTemplate": "您好${customerName},我是小美,测试旅行社旅行顾问。看到您从直播间过来,打算去哪里玩呢?"
  1272. },
  1273. {
  1274. "nodeName": "初始化咨询阶段",
  1275. "nextNodeCode": "LIVE_PUSH",
  1276. "nodeCode": "INIT_STAGE",
  1277. "maxRounds": 0,
  1278. "nodeType": 16,
  1279. "nodeConfig": "{\"assignments\":{\"workflowStage\":\"consult\"},\"stageGate\":true}",
  1280. "sortNo": 2,
  1281. "conditionExpr": "",
  1282. "messageTemplate": ""
  1283. },
  1284. {
  1285. "nodeName": "直播加微推直播间",
  1286. "nextNodeCode": "ARTICLE_PUSH",
  1287. "nodeCode": "LIVE_PUSH",
  1288. "maxRounds": 0,
  1289. "nodeType": 54,
  1290. "nodeConfig": "{\"delivery\":\"proactive\",\"channelHint\":\"QW\",\"actionOnly\":false,\"keyword\":\"云南精品线\",\"liveBaseUrl\":\"/live/watch\"}",
  1291. "sortNo": 3,
  1292. "conditionExpr": "",
  1293. "messageTemplate": ""
  1294. },
  1295. {
  1296. "nodeName": "推送出行攻略文章",
  1297. "nextNodeCode": "TAG_AUTO",
  1298. "nodeCode": "ARTICLE_PUSH",
  1299. "maxRounds": 0,
  1300. "nodeType": 55,
  1301. "nodeConfig": "{\"delivery\":\"proactive\",\"actionOnly\":false,\"keyword\":\"云南精品线\",\"articleBaseUrl\":\"/article/detail\"}",
  1302. "sortNo": 4,
  1303. "conditionExpr": "",
  1304. "messageTemplate": ""
  1305. },
  1306. {
  1307. "nodeName": "自动打标",
  1308. "nextNodeCode": "JUDGE",
  1309. "nodeCode": "TAG_AUTO",
  1310. "maxRounds": 0,
  1311. "nodeType": 9,
  1312. "nodeConfig": "{\"sideTask\":true,\"actionOnly\":true,\"action\":\"add_tag\",\"tags\":[\"travel_lead\",\"qw_live\"],\"triggerIntents\":[\"purchase\",\"high_intent\"]}",
  1313. "sortNo": 5,
  1314. "conditionExpr": "",
  1315. "messageTemplate": ""
  1316. },
  1317. {
  1318. "nodeName": "签单动作",
  1319. "nextNodeCode": "SOP_ENROLL",
  1320. "nodeCode": "ORDER_ACTION",
  1321. "maxRounds": 0,
  1322. "nodeType": 7,
  1323. "nodeConfig": "{\"sideTask\":true,\"actionOnly\":true,\"action\":\"create_order\",\"triggerIntents\":[\"purchase\",\"order\"]}",
  1324. "sortNo": 6,
  1325. "conditionExpr": "",
  1326. "messageTemplate": ""
  1327. },
  1328. {
  1329. "nodeName": "签单后SOP入营",
  1330. "nextNodeCode": "WAIT_PRE_TRIP",
  1331. "nodeCode": "SOP_ENROLL",
  1332. "maxRounds": 0,
  1333. "nodeType": 50,
  1334. "nodeConfig": "{\"sopTempId\":\"LOBSTER_TRAVEL_POST_BOOKING\",\"wxSopTempId\":\"LOBSTER_TRAVEL_POST_BOOKING_WX\",\"preferContactAccount\":true,\"actionOnly\":true}",
  1335. "sortNo": 7,
  1336. "conditionExpr": "",
  1337. "messageTemplate": ""
  1338. },
  1339. {
  1340. "nodeName": "出行前5天等待",
  1341. "nextNodeCode": "PRE_TRIP_CARE",
  1342. "nodeCode": "WAIT_PRE_TRIP",
  1343. "maxRounds": 0,
  1344. "nodeType": 4,
  1345. "nodeConfig": "{\"waitType\":\"date_offset\",\"offsetDays\":-5,\"dateField\":\"travel_date\",\"timeoutHours\":720}",
  1346. "sortNo": 8,
  1347. "conditionExpr": "",
  1348. "messageTemplate": ""
  1349. },
  1350. {
  1351. "nodeName": "出行前提醒",
  1352. "nextNodeCode": "WEATHER_TIPS",
  1353. "nodeCode": "PRE_TRIP_CARE",
  1354. "maxRounds": 0,
  1355. "nodeType": 10,
  1356. "nodeConfig": "{\"delivery\":\"proactive\",\"careType\":\"pre_trip\",\"awaitReply\":true}",
  1357. "sortNo": 9,
  1358. "conditionExpr": "",
  1359. "messageTemplate": "您好,离您的云南精品线出行还有5天啦!请准备好身份证/护照、常用药品和舒适鞋服。需要我帮您核对行程清单吗?"
  1360. },
  1361. {
  1362. "nodeName": "天气与玩要建议",
  1363. "nextNodeCode": "IN_TRIP_CARE",
  1364. "nodeCode": "WEATHER_TIPS",
  1365. "maxRounds": 0,
  1366. "nodeType": 14,
  1367. "nodeConfig": "{\"apiKey\":\"weather_travel_tips\",\"sideTask\":false,\"smartApi\":true}",
  1368. "sortNo": 10,
  1369. "conditionExpr": "",
  1370. "messageTemplate": "根据您目的地近期天气和同行人员情况,建议您注意防晒补水、老人小孩备常用药。具体玩游项目我会结合天气给您建议。"
  1371. },
  1372. {
  1373. "nodeName": "行中关怀",
  1374. "nextNodeCode": "SURVEY",
  1375. "nodeCode": "IN_TRIP_CARE",
  1376. "maxRounds": 0,
  1377. "nodeType": 10,
  1378. "nodeConfig": "{\"delivery\":\"proactive\",\"careType\":\"in_trip\",\"awaitReply\":true}",
  1379. "sortNo": 11,
  1380. "conditionExpr": "",
  1381. "messageTemplate": "旅途还顺利吗?景点玩得怎么样?如有任何问题随时告诉我,小美一直在线。"
  1382. },
  1383. {
  1384. "nodeName": "满意度调查",
  1385. "nextNodeCode": "WAIT_HOLIDAY",
  1386. "nodeCode": "SURVEY",
  1387. "maxRounds": 0,
  1388. "nodeType": 11,
  1389. "nodeConfig": "{\"surveyType\":\"satisfaction\",\"awaitReply\":true}",
  1390. "sortNo": 12,
  1391. "conditionExpr": "",
  1392. "messageTemplate": "感谢您选择测试旅行社!方便用1分钟做个满意度调查吗?您的反馈帮我们做得更好。"
  1393. },
  1394. {
  1395. "nodeName": "节日营销等待",
  1396. "nextNodeCode": "HOLIDAY_PROMO",
  1397. "nodeCode": "WAIT_HOLIDAY",
  1398. "maxRounds": 0,
  1399. "nodeType": 32,
  1400. "nodeConfig": "{\"delayDays\":30,\"cronHint\":\"holiday_minus_30d\"}",
  1401. "sortNo": 13,
  1402. "conditionExpr": "",
  1403. "messageTemplate": ""
  1404. },
  1405. {
  1406. "nodeName": "节日营销触达",
  1407. "nextNodeCode": "END",
  1408. "nodeCode": "HOLIDAY_PROMO",
  1409. "maxRounds": 0,
  1410. "nodeType": 13,
  1411. "nodeConfig": "{\"repurchaseType\":\"holiday\",\"delivery\":\"proactive\"}",
  1412. "sortNo": 14,
  1413. "conditionExpr": "",
  1414. "messageTemplate": "您好!临近节日,想了解下您近期有没有出行计划?云南精品线有新线路优惠,感兴趣我发您看看。"
  1415. },
  1416. {
  1417. "nodeName": "意向分支",
  1418. "nextNodeCode": "",
  1419. "nodeCode": "JUDGE",
  1420. "maxRounds": 0,
  1421. "nodeType": 3,
  1422. "nodeConfig": "{}",
  1423. "sortNo": 15,
  1424. "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\"}",
  1425. "messageTemplate": ""
  1426. },
  1427. {
  1428. "nodeName": "结束",
  1429. "nextNodeCode": "",
  1430. "nodeCode": "END",
  1431. "maxRounds": 0,
  1432. "nodeType": 5,
  1433. "nodeConfig": "{}",
  1434. "sortNo": 16,
  1435. "conditionExpr": "",
  1436. "messageTemplate": ""
  1437. }
  1438. ],
  1439. "industryType": "travel",
  1440. "templateName": "旅游销冠全链路(A旅游公司)",
  1441. "_generateParam": {
  1442. "advisorName": "小美",
  1443. "companyShortName": "测试旅行社",
  1444. "industryType": "travel",
  1445. "advisorRole": "金牌旅行顾问",
  1446. "mainProduct": "云南精品线"
  1447. },
  1448. "status": 1
  1449. },
  1450. "usedFallback": true,
  1451. "passed": true,
  1452. "workflowId": 2,
  1453. "message": "generate and confirm ok"
  1454. },
  1455. "phase2Learning": {
  1456. "hotReplayRowsBefore": 0,
  1457. "hotReplayRowsAfter": 0,
  1458. "delta": 0,
  1459. "passed": false,
  1460. "status": "pending_or_failed",
  1461. "hint": "increase wait-ms or check learning mapper/DB",
  1462. "message": "increase wait-ms or check learning mapper/DB",
  1463. "verify": {
  1464. "companyId": 338,
  1465. "archiveTableExists": false,
  1466. "hotIndexExists": false,
  1467. "hotReplayRows": 0,
  1468. "eventLogRows": 0,
  1469. "archiveRows": 0,
  1470. "archiveNote": "table missing or query failed",
  1471. "status": "ok"
  1472. }
  1473. },
  1474. "stress": {
  1475. "multiTurn": {
  1476. "dialogueStage": "stressMultiTurn",
  1477. "turns": 6,
  1478. "avgScore": 65.33333333333333,
  1479. "minScore": 0.0,
  1480. "passed": true,
  1481. "message": "multiTurn ok"
  1482. },
  1483. "rateLimit": {
  1484. "cooldownAt": 6,
  1485. "passed": true,
  1486. "message": "rate limit triggered",
  1487. "instanceId": 18
  1488. },
  1489. "waitWake": {
  1490. "passed": true,
  1491. "message": "lifecycle wait wake ok",
  1492. "statusAfter": "running",
  1493. "resumeIndex": 8,
  1494. "currentIndexAfter": 9,
  1495. "instanceId": 19
  1496. },
  1497. "longMessage": {
  1498. "passed": true,
  1499. "message": "long message handled",
  1500. "code": 200,
  1501. "messageLength": 11000
  1502. },
  1503. "concurrentStart": {
  1504. "passed": true,
  1505. "successCount": 3,
  1506. "instanceIds": [
  1507. 21,
  1508. 22,
  1509. 23
  1510. ],
  1511. "message": "3 burst starts ok"
  1512. },
  1513. "emptyMessage": {
  1514. "passed": true,
  1515. "code": 200,
  1516. "message": "empty message handled"
  1517. },
  1518. "completedReentry": {
  1519. "statusBeforeReentry": "completed",
  1520. "responseMsg": "工作流实例不在运行状态",
  1521. "passed": true,
  1522. "message": "completed reentry handled"
  1523. },
  1524. "instanceState": {
  1525. "passed": true,
  1526. "state": {
  1527. "variables": {
  1528. "_lobsterSimMinuteUnit": 10,
  1529. "workflowStage": "consult",
  1530. "channelType": "TEST",
  1531. "_actionOutcomes": [
  1532. ],
  1533. "activeGoals": [
  1534. ],
  1535. "_recentOutbound": [
  1536. ],
  1537. "conversationMode": "active",
  1538. "_conversationModel": "{\"stages\":[{\"code\":\"consult\",\"promptHint\":\"你是小美,测试旅行社旅行顾问。客户来自直播间,先破冰并了解是否已有出行计划。\",\"label\":\"直播加微破冰\",\"goals\":[]},{\"code\":\"collect\",\"promptHint\":\"逐步询问目的地、日期、人数、预算;一次只问一个关键问题。\",\"label\":\"需求采集打标\",\"goals\":[{\"field\":\"destination\",\"collected\":false,\"label\":\"目的地\",\"required\":true},{\"field\":\"travel_date\",\"collected\":false,\"label\":\"出行日期\",\"required\":true},{\"field\":\"budget\",\"collected\":false,\"label\":\"预算\",\"required\":true},{\"field\":\"pax\",\"collected\":false,\"label\":\"出行人数\",\"required\":true}]},{\"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\",\"action\":\"add_tag\",\"nodeType\":9},{\"triggerIntents\":[\"purchase\",\"order\",\"book\"],\"nodeCode\":\"ORDER_ACTION\",\"action\":\"create_order\",\"nodeType\":7}],\"defaultStage\":\"consult\",\"description\":\"旅游全链路:会话常驻,节点负责打标/签单/出行关怀/满意度/节日营销\",\"version\":2}",
  1539. "validation": true
  1540. },
  1541. "instanceId": 26,
  1542. "completedNodes": 0,
  1543. "heartbeat": {
  1544. "instanceId": 26,
  1545. "registered": true,
  1546. "lastHeartbeatTime": "Tue Jun 23 06:34:43 CST 2026",
  1547. "lastHeartbeatTimestamp": 1782167683572,
  1548. "elapsedMinutes": 0,
  1549. "timeoutMinutes": 1440,
  1550. "active": true,
  1551. "status": "active",
  1552. "message": "实例心跳正常"
  1553. },
  1554. "currentNodeName": "开始",
  1555. "startTime": "2026-06-23 06:34:41",
  1556. "currentNodeIndex": 0,
  1557. "lastActivityTime": "2026-06-23 06:34:41",
  1558. "status": "running",
  1559. "totalNodes": 16
  1560. },
  1561. "message": "instance state ok"
  1562. },
  1563. "qualityDirect": {
  1564. "rawScore": 117,
  1565. "normalizedPercent": 73.125,
  1566. "passThreshold": 120,
  1567. "passScorePercent": 75,
  1568. "floorRaw": 96,
  1569. "productionTargetMet": false,
  1570. "passed": true,
  1571. "message": "score ok but below production target 120"
  1572. }
  1573. }
  1574. },
  1575. "dialogueScript": {
  1576. "industryType": "travel",
  1577. "industryLabel": "旅游销冠全链路",
  1578. "stageKeys": [
  1579. "postBookingPreTripMultiTurn",
  1580. "capabilityTriggers",
  1581. "consultMultiTurn",
  1582. "postBookingLifecycle",
  1583. "bookingFunnel",
  1584. "stressMultiTurn",
  1585. "holidayPromoMultiTurn",
  1586. "preTripCareMultiTurn"
  1587. ],
  1588. "stageLineCounts": {
  1589. "postBookingPreTripMultiTurn": 3,
  1590. "capabilityTriggers": 6,
  1591. "consultMultiTurn": 6,
  1592. "postBookingLifecycle": 9,
  1593. "bookingFunnel": 10,
  1594. "stressMultiTurn": 6,
  1595. "holidayPromoMultiTurn": 3,
  1596. "preTripCareMultiTurn": 3
  1597. }
  1598. },
  1599. "qualityGateConfig": {
  1600. "enabled": true,
  1601. "passScorePercent": 75,
  1602. "targetScorePercent": 75,
  1603. "minNodeScorePercent": 60,
  1604. "minE2eAvgScorePercent": 75,
  1605. "multiturnMinAvgScorePercent": 45
  1606. },
  1607. "failures": [
  1608. "qualityGate: 1 node(s) below production target 75.0",
  1609. "phase2Learning: increase wait-ms or check learning mapper/DB"
  1610. ],
  1611. "passed": false,
  1612. "durationMs": 624016,
  1613. "templateIdUsed": 1
  1614. },
  1615. "profileDomain": {
  1616. "enabled": true,
  1617. "projectionMode": "async",
  1618. "searchMode": "db",
  1619. "esEnabled": false,
  1620. "mqConsumerEnabled": true,
  1621. "missingBeans": [
  1622. ],
  1623. "beansOk": true,
  1624. "simulationMode": "basic",
  1625. "runtime": {
  1626. "unifiedSearchTotal": 38,
  1627. "unifiedSearchMode": "db",
  1628. "searchTotal": 38,
  1629. "searchMode": "db",
  1630. "identityCount": 38,
  1631. "orderStatsSample": 0,
  1632. "qwContactSample": 0
  1633. },
  1634. "passed": true,
  1635. "message": "profile domain ready"
  1636. }
  1637. },
  1638. "integrationWarning": "2/4 tests passed in 1720ms",
  1639. "failures": [
  1640. "travel.qualityGate: 1 node(s) below production target 75.0",
  1641. "travel.phase2Learning: increase wait-ms or check learning mapper/DB"
  1642. ],
  1643. "passed": false,
  1644. "durationMs": 630567,
  1645. "pageCount": 29,
  1646. "requiredPagesPassed": "15/15"
  1647. }