#!/usr/bin/env node const { CASE_PATTERNS, PATTERN_LIBRARY, extractPatternHits } = require('../mcp/src/features/tihao-sourcing/brief-rule-patterns'); const { parseBrief } = require('../mcp/src/features/tihao-sourcing/brief-parser'); function main() { // 13 个真实案例结构化 assert(CASE_PATTERNS.length === 13, `应有 13 个真实案例,实际 ${CASE_PATTERNS.length}`); assert(CASE_PATTERNS.some(item => item.id === 'case-2-dha'), '应包含 DHA 案例'); assert(CASE_PATTERNS.some(item => item.id === 'case-6-zelimei'), '应包含泽立美案例'); assert(CASE_PATTERNS.every(item => item.caseName && item.accountTypes), '每个案例应有 caseName 和 accountTypes'); // 规则模式库 assert(PATTERN_LIBRARY.cpc && PATTERN_LIBRARY.cpv && PATTERN_LIBRARY.recentPlays, '应包含 CPC/CPV/近3条播放模式'); assert(PATTERN_LIBRARY.ipMustBe && PATTERN_LIBRARY.sameProvince, '应包含地域硬约束模式'); assert(PATTERN_LIBRARY.underAgeRatio && PATTERN_LIBRARY.interestTags, '应包含低龄占比/兴趣标签模式'); // 模式提取 const dha = extractPatternHits('女性25-44岁占比70%以上,兴趣前三标签含2个:母婴/萌娃/记录生活,CPE≤3,阅读中位数≥4000,预估阅读单价≤1.0'); assert(dha.some(item => item.key === 'interestTags'), '应识别兴趣标签模式'); assert(dha.some(item => item.key === 'ageRatio'), '应识别年龄占比模式'); const region = extractPatternHits('达人ip必须为宁夏'); assert(region.some(item => item.key === 'ipMustBe'), '应识别达人IP硬约束'); // parseBrief 端到端识别真实案例表达 const dhaBrief = parseBrief({ briefText: '产品DHA,账号类型干货科普营养师妈妈。CPE≤3,阅读中位数≥4000,CPC≤0.8,近3条视频平均播放>30万,女性25-44岁占比70%以上,兴趣前三标签含2个,达人ip必须宁夏' }); assert(dhaBrief.performanceRequirements.some(item => /CPE≤3/.test(item)), '应解析 CPE≤3'); assert(dhaBrief.performanceRequirements.some(item => /CPC≤0.8/.test(item)), '应解析 CPC≤0.8'); assert(dhaBrief.performanceRequirements.some(item => /近3条平均播放>30万/.test(item)), '应解析近3条播放'); assert(dhaBrief.performanceRequirements.some(item => /25-44岁占比70%以上/.test(item)), '应解析年龄占比'); assert(dhaBrief.performanceRequirements.some(item => /兴趣前三标签含2个/.test(item)), '应解析兴趣标签'); assert(dhaBrief.performanceRequirements.some(item => /达人IP必须宁夏/.test(item)), '应解析达人IP'); assert(Array.isArray(dhaBrief.briefRulePatterns) && dhaBrief.briefRulePatterns.length > 0, '应输出 briefRulePatterns'); console.log(JSON.stringify({ ok: true, caseCount: CASE_PATTERNS.length, patternCount: Object.keys(PATTERN_LIBRARY).length, parsedRequirementCount: dhaBrief.performanceRequirements.length, matchedPatternCount: dhaBrief.briefRulePatterns.length }, null, 2)); } function assert(condition, message) { if (!condition) throw new Error(message); } if (require.main === module) main();