Files
bigwo/test2/server/services/knowledgeKeywords.js

1082 lines
18 KiB
JavaScript
Raw Normal View History

const COMPANY_ENTITY_KEYWORDS = [
'德国PM',
'德国PM公司',
'PM公司',
'PM国际',
'PM-International',
'PM-International AG',
'Rolf Sorg',
'邓白氏',
'AAA+',
'DSN',
'BFH',
'ELAB',
'科隆名单',
'GMP',
'Halal',
'宣明会',
'世界宣明会',
'斯派尔',
'Speyer',
'卢森堡',
'培安(烟台)日用品有限责任公司',
'培安烟台',
'烟台',
];
const SYSTEM_ENTITY_KEYWORDS = [
'一成系统',
'一成AI',
'一成Ai',
'Ai众享',
'AI众享',
'数字化工作室',
'盛咖学愿',
'三大平台',
'四大AI生态',
'四大Ai生态',
'四大生态',
'盟主社区',
'AI智能生产力',
'AI生产力',
'智能生产力',
'行动圈',
'批发式晋级',
'身未动,梦已成',
'身未动梦已成',
'零成本高效率',
'零成本高效率运行',
'赋能团队',
'团队赋能',
'团队发展',
'文化解析',
'故事分享',
'自我介绍',
'邀约话术',
'线上拓客',
'线上成交',
'陌生客户',
'陌生人沟通',
];
const PRODUCT_ENTITY_KEYWORDS = [
'PM产品',
'PM-FitLine',
'FitLine',
'PM细胞营养素',
'细胞营养素',
'基础套装',
'基础三合一',
'三合一',
'基础二合一',
'二合一',
'小红产品',
'小红',
'艾特维',
'Activize Oxyplus',
'Activize Serum',
'Activize',
'小红精华液',
'大白产品',
'大白',
'倍适',
'Basics',
'Basic Power',
'PowerCocktail',
'小白产品',
'小白',
'维适多',
'Restorate',
'儿童倍适',
'PowerCocktail Junior',
'NTC营养保送系统',
'NTC',
'Nutrient Transport Concept',
'火炉原理',
'暖炉原理',
'阿育吠陀',
'Ayurveda',
'Med Dental+',
'草本护理牙膏',
'Men Face',
'全效男士护肤抗衰乳霜',
'CC-Cell',
'CC-Cell胶囊',
'CC-Cell乳霜',
'CC套装',
'CC胶囊',
'D-Drink',
'小绿排毒饮',
'14天排毒D饮料Plus',
'ProShape Amino',
'ProShape® Amino',
'氨基酸',
'支链氨基酸',
'BCAA',
'MEN+',
'Men+',
'倍力健 MEN+',
'倍力健',
'小黑',
'Herbal Tea',
'草本茶',
'Hair+',
'med Hair+',
'口服发宝',
'外用发健',
'发宝',
'Fitness-Drink',
'运动饮料健康饮品',
'运动饮料',
'健康饮品',
'TopShape',
'孅萃TopShape纤萃减肥',
'纤萃减肥',
'乐活50+',
'Generation 50+',
'Apple Antioxy',
'苹果细胞抗氧素',
'Antioxy',
'Zellschutz',
'细胞抗氧素',
'胶原蛋白肽',
'胶原蛋白',
'Women+',
'乐活奶昔',
'乐活',
'乳清蛋白',
'蛋白粉',
'乳酪煲',
'乳酪饮品',
'乳酪',
'IB5',
'口腔免疫喷雾',
'Q10',
'辅酵素',
'Q10辅酵素氧修护',
'关节套装',
'关节舒缓',
'男士乳霜',
'男士护肤',
'去角质',
'面膜',
'叶黄素',
'葡萄籽',
'白藜芦醇',
'益生菌',
'肽美',
'德丽',
'德维',
'宝丽',
'美固健',
'CitrusCare',
'NutriSunny',
'Omega',
'Young Care',
'骨骼健',
'顾心',
'舒采健',
'衡醇饮',
'小粉C',
'小粉',
'异黄酮',
'Isoflavon',
'眼霜',
'Eye Cream',
'洁面',
'洁面乳',
'爽肤水',
'Tonic',
'餐代餐',
'代餐奶昔',
'美白霜',
'修护膜',
'Antioxy',
'Apple Antioxy',
'苹果细胞抗氧素',
];
const BUSINESS_ENTITY_KEYWORDS = [
'PM事业',
'做PM',
'加入PM',
'招商合作',
'招商与代理',
'招商稿',
'招商',
'招募',
'代理',
'代理商',
'代理政策',
'加盟',
'招商加盟',
'合作加盟',
'事业合作',
'事业机会',
'创业',
'培训新人起步三关',
'起步三关',
'培训打造精品会议具体如下',
'精品会议',
'会议组织',
'培训成长上总裁',
'成长上总裁',
];
const ROUTE_TOPIC_KEYWORDS = [
// 公司相关
'公司介绍',
'公司背景',
'公司实力',
'公司地址',
'公司电话',
'联系方式',
'总部',
'分公司',
'公司成立',
'公司历史',
'公司规模',
'全球布局',
'信用评级',
'行业排名',
'获奖',
'慈善',
'慈善事业',
'社会责任',
'Rolf Sorg',
'RolfSorg',
'斯派尔',
'不上市',
'汽车奖励',
'退休金',
'旅行',
'福利',
'企业性质',
'发展历程',
// 产品相关
'产品介绍',
'产品说明',
'产品推荐',
'产品有哪些',
'产品列表',
'产品图片',
'产品外观',
// 语音口语化触发词
'你们公司',
'你们的公司',
'你们产品',
'你们的产品',
'你们那个',
'咱们公司',
'咱们产品',
'咱们的',
'你们这个',
'你们卖的',
'你们的东西',
'这个东西',
'这东西',
'那玩意',
// 口语化动词
'说说',
'讲讲',
'介绍介绍',
'查查',
'帮我查',
'帮我问',
'帮我看看',
'有啥用',
'咱吃',
'咱用',
'咱回事',
'咱样',
'啥意思',
'有啥',
'咱办',
// 营养品/保健品通用词
'营养素',
'营养品',
'保健品',
'保健食品',
'营养补充',
'营养剂',
'膏营养',
// 直销事业
'直销',
'直销公司',
'直销事业',
// 健康/症状/功效相关触发KB总入口
'排毒',
'排毒产品',
'减肥',
'减肥产品',
'瘦身',
'护肤',
'护肤品',
'护发',
'脱发',
'掉发',
'头发',
'牙膏',
'喷雾',
'关节痛',
'关节',
'眼睛',
'视力',
'叶黄素',
'抗氧化',
'抗衰',
'抗衰老',
'胶原蛋白',
'运动饮料',
'免疫力',
'能量',
'抗疲劳',
'疲劳',
'睡眠',
'失眠',
'消化',
'肠胃',
'便秘',
'皮肤',
'美容',
'美白',
'祠斑',
'祠痘',
'痘痘',
'补钹',
'补铁',
'补血',
'骨密度',
'补钙',
// 特定人群触发FAQ或产品库
'孕妇',
'哺乳期',
'怀孕',
'孕期',
'儿童',
'小孩',
'孩子',
'老人',
'老年人',
'过敏',
'过敏体质',
// 事业/招商
'事业',
'做这个事业',
'怎么做这个',
'怎么赚钱',
'能赚钱吗',
'收入',
'奖金',
'奖金制度',
'纪念品',
'服务商',
'合作伙伴',
'为什么选择德国PM',
// 合法性/传销相关
'正规性',
'合法性',
'传销',
'骗局',
'骗子',
'是不是传销',
'直销还是传销',
'合不合法',
'正不正规',
'正规吗',
'合法吗',
'层级分销',
'非法集资',
'拉人头',
'发展下线',
'报单',
'人头费',
'安全吗',
'合规吗',
'有许可证吗',
// 好转反应/副作用
'好转反应',
'整健反应',
'排毒反应',
'副作用',
'不良反应',
'皮肤发痒',
'皮肤微痒',
// 促销活动
'促销活动',
'活动分数',
'5+1活动分数',
'5+1',
// 产品使用方法
'怎么吃',
'怎么用',
'怎么服用',
'服用方法',
'吃法',
'用法',
'用量',
'搭配',
'空腹吃',
'饭前吃',
'饭后吃',
'温水冲',
'冷水冲',
'一天吃几次',
'一次吃多少',
// 产品属性
'功效',
'作用',
'成分',
'原料',
'配方',
'多少钱',
'价格',
'适合谁',
'适用人群',
'区别',
'哪个好',
'多久见效',
'见效',
'多久能见效',
'哪里买',
'怎么买',
'保质期',
'储存',
// 效果/评价相关
'效果怎么样',
'有效果吗',
'有没有用',
'好不好',
'靠谱吗',
'值得买吗',
'值得做吗',
'真的有用吗',
'真的假的',
'有科学依据吗',
// 加入/参与
'怎么加入',
'如何加入',
'怎么报名',
'怎么参与',
'怎么做',
'如何开始',
// 科普/培训/认证
'科普',
'误区',
'认证',
'检测',
'检测报告',
'安全认证',
'培训',
'新人',
'起步',
'成长',
// 疾病/健康状况触发FAQ
'高血压',
'糖尿病',
'胆固醇',
'心脏病',
'肾病',
'肝病',
'痛风',
'贫血',
'肥胖',
// 能不能吃/用类问题
'能吃吗',
'可以吃吗',
'能喝吗',
'可以喝吗',
'能用吗',
'可以用吗',
'一起吃',
'同时吃',
'混着吃',
'搭配吃',
'吃药',
'药物',
// 产品剂型/形态(用户质疑/纠正时常提及)
'粉末',
'粉剂',
'粉状',
'冲剂',
'冲泡',
'片剂',
'药片',
'胶囊',
'软胶囊',
'颗粒',
'口服液',
'膏状',
// 质疑/纠正/确认/怀疑/复查类口语词(全覆盖)
// 直接否定
'不是的',
'才不是',
'不是不是',
'不是这么回事',
// 指出错误
'搞错了',
'说错了',
'弄错了',
'记错了',
'搞混了',
'搞反了',
'记岔了',
'说反了',
'张冠李戴',
'答非所问',
// 说AI不对
'不对',
'不是这样',
'不准确',
'不正确',
'有误',
'说的不对',
'回答有误',
'不太对',
'不太准',
// 与认知矛盾
'不一样',
'不一致',
'前后矛盾',
'自相矛盾',
// 怀疑/不信
'不信',
'骗人',
'忽悠',
'吹牛',
'太夸张',
'离谱',
'扯淡',
'瞎扯',
// 确认/复查
'你确定吗',
'确定吗',
'真的吗',
'当真',
'再查一下',
'再确认一下',
'再核实',
'重新查',
'核实一下',
'查清楚',
'搞清楚',
// 委婉质疑
'好像不是',
'好像不对',
'我觉得不对',
'恐怕不是',
'感觉不对',
// 质问来源
'谁说的',
'谁告诉你',
'有什么根据',
'有什么依据',
'有证据吗',
'有依据吗',
// 不可能/反问
'怎么可能',
'不可能',
'不会吧',
'不是吧',
'开玩笑',
'别逗了',
'胡说',
'瞎说',
'乱说',
// 纠正句式
'到底是',
'究竟是',
'应该是',
'明明是',
'其实是',
'本来是',
'怎么变成',
'不应该是',
// 产品形态/使用方式
'冲着喝',
'泡着喝',
'直接吞',
'是喝的',
'是吃的',
];
const CANONICAL_KNOWLEDGE_TERMS = [
'一成系统',
'德国PM',
'PM-FitLine',
'FitLine',
'PM细胞营养素',
'NTC营养保送系统',
'Activize Oxyplus',
'Basics',
'Restorate',
'儿童倍适',
'火炉原理',
'阿育吠陀',
];
function escapeRegExp(text) {
return String(text || '').replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
}
function uniqueKeywords(keywords) {
const seen = new Set();
const result = [];
for (const keyword of Array.isArray(keywords) ? keywords : []) {
const normalized = String(keyword || '').trim();
if (!normalized) continue;
const lower = normalized.toLowerCase();
if (seen.has(lower)) continue;
seen.add(lower);
result.push(normalized);
}
return result.sort((a, b) => b.length - a.length);
}
function buildKeywordRegex(keywords, flags = 'i') {
const terms = uniqueKeywords(keywords).map(escapeRegExp);
return new RegExp(`(?:${terms.join('|')})`, flags);
}
function dedupeMatches(matches) {
const result = [];
const seen = new Set();
for (const item of Array.isArray(matches) ? matches : []) {
const normalized = String(item || '').trim();
if (!normalized) continue;
const lower = normalized.toLowerCase();
if (seen.has(lower)) continue;
seen.add(lower);
result.push(normalized);
}
return result;
}
const KNOWLEDGE_ENTITY_KEYWORDS = uniqueKeywords([
...COMPANY_ENTITY_KEYWORDS,
...SYSTEM_ENTITY_KEYWORDS,
...PRODUCT_ENTITY_KEYWORDS,
...BUSINESS_ENTITY_KEYWORDS,
]);
const COMPANY_ROUTE_KEYWORDS = uniqueKeywords([
...COMPANY_ENTITY_KEYWORDS,
'公司介绍',
'公司背景',
'公司实力',
'公司地址',
'公司电话',
'联系方式',
'总部',
'分公司',
'公司成立',
'公司历史',
'公司规模',
'全球布局',
'全球业务',
'信用评级',
'行业排名',
'获奖',
'获奖情况',
'慈善',
'慈善事业',
'社会责任',
'不上市',
'为什么不上市',
'汽车奖励',
'退休金',
'旅行奖励',
'旅行',
'福利',
'企业性质',
'发展历程',
'发展史',
'创始人',
'创办人',
'老板',
'总裁',
'年营业额',
'营收',
'市场份额',
'品牌实力',
'品牌介绍',
'各国地址',
'各国电话',
'哪个国家',
'哪些国家',
'多少个国家',
'业务覆盖',
]);
const SYSTEM_ROUTE_KEYWORDS = uniqueKeywords([
...SYSTEM_ENTITY_KEYWORDS,
'故事分享',
'自我介绍',
'邀约话术',
'AI赋能',
'AI落地',
'转观念',
'如何开展业务',
'开展业务',
'邀约客户',
'邀约方法',
'邀约技巧',
'邀约模板',
'线上拓客',
'线上成交',
'陌生客户',
'陌生人沟通',
'团队发展',
'团队赋能',
'团队建设',
'团队管理',
'批发式晋级',
'系统文化',
'系统介绍',
'系统是什么',
'一成是什么',
'数字化',
'智能工具',
'AI工具',
'AI众享是什么',
'盟主社区',
'行动圈',
'零成本',
'高效率',
]);
const PRODUCT_ROUTE_KEYWORDS = uniqueKeywords([
...PRODUCT_ENTITY_KEYWORDS,
'产品介绍',
'产品说明',
'产品推荐',
'产品有哪些',
'产品列表',
'产品图片',
'产品外观',
'搭配',
'功效',
'作用',
'成分',
'原料',
'配方',
'怎么吃',
'怎么服用',
'服用方法',
'吃法',
'用法',
'用量',
'适合谁',
'适用人群',
'区别',
'哪个好',
'多少钱',
'价格',
'多久见效',
'哪里买',
'怎么买',
'图片',
'外观',
'规格',
'套装',
'暖炉原理',
'火炉原理',
'NTC',
'活动分数',
'专利',
'细胞营养',
// 产品功效词
'免疫力',
'能量',
'抗疲劳',
'睡眠',
'消化',
'排毒',
'护肤',
'护发',
'脱发',
'抗氧化',
'抗衰老',
'美容',
'美白',
'祠斑',
'祠痘',
'瘦身',
'减肥',
'关节',
'骨密度',
'胶原蛋白',
// 产品使用方式
'空腹吃',
'饭前吃',
'饭后吃',
'温水冲',
'冷水冲',
'一天吃几次',
'一次吃多少',
'保质期',
'储存',
'冷藏',
// 产品类别
'营养素',
'营养品',
'保健品',
'保健食品',
'营养补充',
// 产品对比
'哪个产品',
'推荐产品',
'入门产品',
'必买产品',
'明星产品',
'最畅销',
'热卖',
]);
const FAQ_ROUTE_KEYWORDS = uniqueKeywords([
// 疑问词
'怎么办',
'为什么',
'能不能',
'有没有',
'怎么回事',
'咱回事',
'正常吗',
'安全吗',
'有害吗',
'有毒吗',
// 好转反应/副作用
'好转反应',
'整健反应',
'排毒反应',
'副作用',
'不良反应',
'不舒服',
'身体反应',
'身体不适',
// 症状词
'皮肤发痒',
'皮肤微痒',
'发痒',
'头晕',
'便秘',
'腹泻',
'拉肚子',
'恶心',
'呕吐',
'长痘',
'出疹子',
'红肿',
'口干',
'上火',
'胃痛',
'胃不舒服',
'抽筋',
'浮肿',
'心悸',
'气短',
'失眠',
'多梦',
'发热',
'出汗',
'拉肃子',
// 疾病/健康状况
'高血压',
'糖尿病',
'胆固醇',
'心脏病',
'肾病',
'肝病',
'痛风',
'贫血',
'肥胖',
'甲亢',
'甲减',
'胃炎',
'肠炎',
'哮喘',
'湿疹',
'过敏',
'结石',
'癌症',
'肿瘤',
'水肿',
'尿酸',
// 特定人群问题
'孕妇',
'哺乳期',
'怀孕',
'孕期',
'儿童',
'小孩',
'孩子',
'老人',
'老年人',
'手术后',
'化疗',
'放疗',
'术后',
'月子',
'吃药',
'药物',
'与药物',
'跟药一起',
'问答',
'问题',
// 能不能吃/用类问题
'能吃吗',
'可以吃吗',
'能喝吗',
'可以喝吗',
'能用吗',
'可以用吗',
'一起吃',
'同时吃',
'混着吃',
'搭配吃',
'能混合吗',
// 效果评价
'有效果吗',
'有没有用',
'好不好',
'靠谱吗',
'真的有用吗',
'真的假的',
'有科学依据吗',
'多久见效',
'多久能看到效果',
'吃多久',
'要吃多久',
// 价格/性价比
'贵不贵',
'性价比',
'划算吗',
'值得买吗',
]);
const SCIENCE_TRAINING_ROUTE_KEYWORDS = uniqueKeywords([
...BUSINESS_ENTITY_KEYWORDS,
// 科普知识
'科普',
'误区',
'营养误区',
'健康误区',
'保健品误区',
'认证',
'检测',
'检测报告',
'安全认证',
'GMP认证',
'Halal认证',
'科学依据',
'临床试验',
'研究报告',
// 招商相关
'招商',
'招商稿',
'代理',
'加盟',
'加入',
'怎么加入',
'如何加入',
'怎么报名',
'怎么参与',
'赚钱',
'收入',
'奖金',
'奖金制度',
'事业机会',
'创业',
'创业机会',
'副业',
'兼职',
// 培训相关
'新人',
'新人入门',
'新人指南',
'培训',
'起步',
'起步三关',
'会议',
'精品会议',
'会议组织',
'会议运营',
'促销',
'促销活动',
'成长',
'总裁',
'成长上总裁',
'纪念品',
'服务商',
'合作伙伴',
'营销技巧',
'销售技巧',
'打思维导图',
'团队建设',
'如何开始',
'怎么做',
'怎么做这个',
'怎么赚钱',
'能赚钱吗',
'值得做吗',
'投资多少',
'门槛',
'起步费',
'报单',
]);
const KNOWLEDGE_ROUTE_KEYWORDS = uniqueKeywords([
...KNOWLEDGE_ENTITY_KEYWORDS,
...ROUTE_TOPIC_KEYWORDS,
...FAQ_ROUTE_KEYWORDS,
]);
const TRACKER_KEYWORD_GROUPS = [
SYSTEM_ENTITY_KEYWORDS,
COMPANY_ENTITY_KEYWORDS,
PRODUCT_ENTITY_KEYWORDS,
BUSINESS_ENTITY_KEYWORDS,
];
const CANONICAL_KNOWLEDGE_REGEX = buildKeywordRegex(CANONICAL_KNOWLEDGE_TERMS, 'i');
const KNOWLEDGE_ROUTE_REGEX = buildKeywordRegex(KNOWLEDGE_ROUTE_KEYWORDS, 'i');
const KNOWLEDGE_ENTITY_REGEX = buildKeywordRegex(KNOWLEDGE_ENTITY_KEYWORDS, 'gi');
function hasKeywordFromList(text, keywords) {
return buildKeywordRegex(keywords, 'i').test(String(text || ''));
}
function hasCanonicalKnowledgeTerm(text) {
return CANONICAL_KNOWLEDGE_REGEX.test(String(text || ''));
}
function hasKnowledgeRouteKeyword(text) {
return KNOWLEDGE_ROUTE_REGEX.test(String(text || ''));
}
function extractKnowledgeEntityMatches(text) {
return dedupeMatches(String(text || '').match(KNOWLEDGE_ENTITY_REGEX) || []);
}
module.exports = {
COMPANY_ENTITY_KEYWORDS,
SYSTEM_ENTITY_KEYWORDS,
PRODUCT_ENTITY_KEYWORDS,
BUSINESS_ENTITY_KEYWORDS,
ROUTE_TOPIC_KEYWORDS,
CANONICAL_KNOWLEDGE_TERMS,
KNOWLEDGE_ENTITY_KEYWORDS,
COMPANY_ROUTE_KEYWORDS,
SYSTEM_ROUTE_KEYWORDS,
PRODUCT_ROUTE_KEYWORDS,
FAQ_ROUTE_KEYWORDS,
SCIENCE_TRAINING_ROUTE_KEYWORDS,
KNOWLEDGE_ROUTE_KEYWORDS,
TRACKER_KEYWORD_GROUPS,
buildKeywordRegex,
hasKeywordFromList,
hasCanonicalKnowledgeTerm,
hasKnowledgeRouteKeyword,
extractKnowledgeEntityMatches,
};