# 语音识别精准度优化方案(延时优先) > 版本:1.0 | 更新日期:2026-03-17 --- ## 一、问题分析 ### 1.1 当前痛点 - **ASR 识别误差**:同音词、近音词导致查询词偏离 - **知识库匹配失败**:识别错误直接导致知识库检索失败 - **实时性要求高**:语音对话需要快速响应,不能引入过多延时 ### 1.2 现有机制分析 | 机制 | 延时 | 效果 | 说明 | |------|------|------|------| | `normalizeKnowledgeAlias()` | < 1ms | ⭐⭐ | 简单别名映射,覆盖有限 | | `buildDeterministicKnowledgeQuery()` | < 1ms | ⭐⭐⭐ | 确定性规则改写 | | `rewriteKnowledgeQuery()` (LLM) | 500-2000ms | ⭐⭐⭐⭐ | 强大但耗时 | --- ## 二、优化原则 ### 2.1 延时优先策略 ``` 极速响应层 (0延时) → 快速修正层 (<100ms) → LLM增强层 (>500ms, 可选) ``` ### 2.2 分级响应机制 - **阶段1**:极速处理(无额外延时) - **阶段2**:快速处理(< 100ms,可接受) - **阶段3**:增强处理(> 500ms,仅在必要时触发) --- ## 三、具体优化方案 ### 方案一:增强 ASR 上下文词表(零延时)⏱️ 0ms **文件位置:** `server/services/nativeVoiceGateway.js` **修改点:** 扩展 `buildStartSessionPayload()` 中的 `asr.extra.context` **当前配置:** ```javascript context: '一成,一成系统,大沃,PM,PM-FitLine,FitLine,细胞营养素,Ai众享,AI众享,盛咖学愿,数字化工作室,Activize,Basics,Restorate,NTC,基础三合一,招商,阿育吠陀' ``` **优化后配置:** ```javascript context: [ // 核心术语(必选) '一成系统,一城系统,逸城系统,一程系统,易成系统,一诚系统,亦成系统,艺成系统,溢成系统,义成系统,毅成系统,怡成系统,以成系统,已成系统,亿成系统,忆成系统,益成系统', '大沃,大窝,大握,大我,大卧', 'PM,PM-FitLine,FitLine,细胞营养素,PM细胞营养素', 'Ai众享,AI众享,爱众享,艾众享,哎众享', '盛咖学愿,盛咖学院,圣咖学愿,盛卡学愿', '数字化工作室', 'Activize,Basics,Restorate,NTC', '基础三合一,三合一基础套,基础套装,大白小红小白', '小红产品,大白产品,小白产品', 'Activize Oxyplus,小红', 'Basics,大白', 'Restorate,维适多,小白', '儿童倍适,儿童产品', 'NTC营养保送系统,NTC营养配送系统,NTC营养输送系统', '火炉原理,暖炉原理', '阿育吠陀,Ayurveda', '基础二合一,二合一', '倍力健', '关节套装,关节舒缓', '男士乳霜,男士护肤', '去角质,面膜', '发宝', '叶黄素', '奶昔', '健康饮品', '乳清蛋白,蛋白粉', '乳酪煲,乳酪饮品,乳酪', 'CC套装,CC胶囊', 'IB5,口腔免疫喷雾', 'Q10,辅酵素,氧修护', 'Women+,乐活', '招商合作,招商,代理,加盟,事业机会', '新人起步三关,起步三关', '精品会议,会议组织', '成长上总裁', '一成AI,AI落地,ai落地,转观念,落地对比', '好转反应,整应反应,排毒反应,副作用,不良反应,皮肤发痒', '促销活动,促销,优惠,打折,活动分数,5+1', // 品牌保护相关 '传销,骗局,骗子,正规吗,合法吗,正不正规,合不合法,是不是传销,直销还是传销', '层级分销,非法集资,拉人头,下线,发展下线,报单,人头费', // 高频疑问词 '怎么吃,怎么服用,吃多少,服用方法,搭配,功效,成分,原料', '多少钱,哪里买,怎么买,配方,原理,有什么好处,适合什么人' ].join(',') ``` **优先级:** 🔴 立即实施(零风险、零延时) --- ### 方案二:极速同音词映射库(< 10ms)⏱️ < 10ms **新增文件:** `server/services/asrCorrectionMap.js` ```javascript /** * ASR 同音词/近音词极速映射库 * 基于拼音相似度的快速映射,无网络请求 */ const PINYIN_MAP = { // 一成系统相关 '一城': '一成', '逸城': '一成', '一程': '一成', '易成': '一成', '一诚': '一成', '亦成': '一成', '艺成': '一成', '溢成': '一成', '义成': '一成', '毅成': '一成', '怡成': '一成', '以成': '一成', '已成': '一成', '亿成': '一成', '忆成': '一成', '益成': '一成', // 大沃相关 '大窝': '大沃', '大握': '大沃', '大我': '大沃', '大卧': '大沃', // 盛咖学愿相关 '盛咖学院': '盛咖学愿', '圣咖学愿': '盛咖学愿', '盛卡学愿': '盛咖学愿', // Ai众享相关 '爱众享': 'Ai众享', '艾众享': 'Ai众享', '哎众享': 'Ai众享', // 产品相关 - 小红 '小洪': '小红', '小宏': '小红', '小鸿': '小红', // 产品相关 - 大白 '大百': '大白', '大柏': '大白', // 产品相关 - 小白 '小百': '小白', '小柏': '小白', '维适多': '小白', // NTC相关 '营养配送': '营养保送', '营养输送': '营养保送', '营养传送': '营养保送', '营养传输': '营养保送', // 火炉原理 '暖炉原理': '火炉原理', // 阿育吠陀 '阿玉吠陀': '阿育吠陀', '阿育费陀': '阿育吠陀', // 好转反应 '整应反应': '好转反应', '整健反应': '好转反应', '排毒反应': '好转反应', // 5+1 '5加1': '5+1', '五加一': '5+1', // 起步三关 '起步三观': '起步三关', '起步三官': '起步三关', }; // 复合词映射(更长的短语) const PHRASE_MAP = { '一城系统': '一成系统', '逸城系统': '一成系统', '一程系统': '一成系统', '易成系统': '一成系统', '一诚系统': '一成系统', '盛咖学院': '盛咖学愿', '圣咖学愿': '盛咖学愿', '营养配送系统': 'NTC营养保送系统', '营养输送系统': 'NTC营养保送系统', '暖炉原理': '火炉原理', '整应反应': '好转反应', }; /** * 极速 ASR 文本修正(同步、无延时) * @param {string} text - ASR 识别的原始文本 * @returns {string} 修正后的文本 */ function fastAsrCorrection(text) { if (!text || typeof text !== 'string') { return text; } let result = text; // 先替换长短语(避免部分匹配) for (const [from, to] of Object.entries(PHRASE_MAP)) { if (result.includes(from)) { result = result.split(from).join(to); } } // 再替换单词 for (const [from, to] of Object.entries(PINYIN_MAP)) { // 全词匹配(避免部分替换) const regex = new RegExp(`\\b${from}\\b`, 'g'); result = result.replace(regex, to); } return result; } module.exports = { fastAsrCorrection, PINYIN_MAP, PHRASE_MAP, }; ``` **集成位置:** 在 `realtimeDialogRouting.js` 的 `normalizeKnowledgeAlias()` 之前调用 **优先级:** 🟡 高优先级(低延时、效果明显) --- ### 方案三:增强模糊匹配知识库触发(< 50ms)⏱️ < 50ms **修改文件:** `server/services/realtimeDialogRouting.js` **优化 `hasKnowledgeKeyword()` 函数:** ```javascript /** * 增强版知识库关键词检测 * 支持模糊匹配、拼音近似、上下文推断 */ function hasKnowledgeKeyword(text) { const normalized = normalizeKnowledgeAlias(text); // 第一层:精确匹配(原逻辑) const exactPattern = /(一成系统|Ai众享|AI众享|数字化工作室|盛咖学愿|四大AI生态|四大Ai生态|三大平台|PM公司|德国PM|PM-FitLine|FitLine|PM细胞营养素|细胞营养素|小红|大白|小白|Activize|Basics|Restorate|儿童倍适|NTC|营养保送|火炉原理|暖炉原理|阿育吠陀|Ayurveda|基础三合一|三合一|基础套装|基础二合一|二合一|招商合作|招商|代理|加盟|事业机会|邀约话术|起步三关|精品会议|成长上总裁|AI落地|ai落地|转观念|好转反应|整应反应|排毒反应|副作用|不良反应|皮肤发痒|促销活动|促销|优惠|活动分数|5\+1|CC套装|CC胶囊|IB5|口腔免疫喷雾|Q10|辅酵素|Women\+|乐活|乳清蛋白|蛋白粉|乳酪煲|乳酪饮品|乳酪|倍力健|关节套装|关节舒缓|男士乳霜|去角质|面膜|发宝|叶黄素|奶昔|健康饮品|传销|骗局|骗子|正规吗|合法吗|正不正规|合不合法|是不是传销|直销还是传销|层级分销|非法集资|拉人头|下线|发展下线|报单|人头费|怎么吃|怎么服用|吃多少|服用方法|搭配|功效|成分|原料)/i; if (exactPattern.test(normalized)) { return true; } // 第二层:模糊匹配(拼音近似词) const fuzzyPatterns = [ // 一成系统变体 /(一.*?系统|.*?城系统|.*?成系统)/i, // 产品相关 /(大.*?白|小.*?红|小.*?白)/i, /(细胞.*?营养|营养.*?素)/i, /(基础.*?合一|三合一|二合一)/i, // 事业相关 /(招商|加盟|代理|事业)/i, // 咨询相关 /(怎么.*?吃|怎么.*?用|功效|成分|多少钱|哪里买)/i, ]; for (const pattern of fuzzyPatterns) { if (pattern.test(normalized)) { console.log(`[KnowledgeTrigger] Fuzzy match: "${text}" → pattern matched`); return true; } } return false; } ``` **优先级:** 🟡 高优先级(低延时、提升召回率) --- ### 方案四:LLM 增强纠错(仅在不确定时触发)⏱️ 500-2000ms **新增文件:** `server/services/asrEnhancedCorrection.js` ```javascript const arkChatService = require('./arkChatService'); /** * LLM 增强的 ASR 纠错(仅在必要时触发) * 使用策略:先快速判断是否需要纠错,再决定是否调用 LLM */ // 快速判断是否需要 LLM 纠错的启发式规则 function needsLLMCorrection(text, context = []) { // 规则1:文本太短,可能识别不完整 if (text.length < 3) { return false; // 太短,LLM 也帮不上 } // 规则2:已经包含明确的知识库关键词,不需要纠错 const hasClearKeyword = /(一成系统|PM-FitLine|细胞营养素|Activize|Basics|Restorate|NTC|火炉原理|阿育吠陀)/i.test(text); if (hasClearKeyword) { return false; } // 规则3:包含明显的识别错误特征 const hasErrorSigns = [ /的的|了了|是是|我我|你你/.test(text), // 重复词 /[a-zA-Z]{2,}\s+[a-zA-Z]{2,}/.test(text) && !/(PM|FitLine|Activize|Basics|Restorate|NTC|Ayurveda)/i.test(text), // 异常英文 text.includes('XXX') || text.includes('xx'), // 占位符 ].some(Boolean); if (hasErrorSigns) { return true; } // 规则4:上下文有知识库相关,但当前文本模糊 const contextText = context.map(m => m.content || '').join(' '); const contextHasKnowledge = /(一成系统|PM|产品|功效|成分)/i.test(contextText); const currentTextIsVague = /(这个|那个|它|怎么|什么|介绍一下)/.test(text); if (contextHasKnowledge && currentTextIsVague) { return true; } return false; } /** * 带超时的 LLM 纠错 * @param {string} text - ASR 原始文本 * @param {Array} context - 对话上下文 * @param {number} timeoutMs - 超时时间(默认 1500ms) * @returns {Promise} 纠错后的文本 */ async function enhancedAsrCorrection(text, context = [], timeoutMs = 1500) { if (!needsLLMCorrection(text, context)) { return text; // 不需要纠错,直接返回 } if (arkChatService.isMockMode()) { return text; // Mock 模式下不调用 LLM } try { console.log(`[ASR-LLM] Starting correction for: "${text}"`); const result = await Promise.race([ arkChatService.chat([ { role: 'system', content: `你是语音识别纠错专家。请修正下面的语音识别文本,使其符合企业知识库的规范术语。 规则: 1. 只输出修正后的文本,不要解释 2. 保留用户的真实意图 3. 将同音词、近音词替换为正确的企业术语 4. 常见修正: - 一城系统、逸城系统、一程系统 → 一成系统 - 大窝、大握、大我 → 大沃 - 盛咖学院 → 盛咖学愿 - 爱众享、艾众享 → Ai众享 - 小洪、小宏 → 小红 - 大百、大柏 → 大白 - 营养配送系统 → NTC营养保送系统 - 暖炉原理 → 火炉原理 - 整应反应 → 好转反应 5. 如果无法确定,保持原样`, }, { role: 'user', content: `需要修正的文本:${text}`, }, ], []), new Promise((_, reject) => setTimeout(() => reject(new Error('LLM correction timeout')), timeoutMs) ), ]); const corrected = (result?.content || text).trim(); console.log(`[ASR-LLM] Corrected: "${text}" → "${corrected}"`); return corrected; } catch (error) { console.warn(`[ASR-LLM] Correction failed: ${error.message}, using original`); return text; // 出错时返回原文,保证不影响响应速度 } } module.exports = { enhancedAsrCorrection, needsLLMCorrection, }; ``` **集成策略:** 仅在知识库未命中时才触发 LLM 纠错并重试 **优先级:** 🟢 中优先级(效果好但有延时,谨慎使用) --- ### 方案五:查询改写增强(优化现有逻辑)⏱️ 混合延时 **优化文件:** `server/services/toolExecutor.js` 中的 `rewriteKnowledgeQuery()` **优化策略:** 1. 优先使用确定性规则(0延时) 2. 再使用快速同义词扩展(<10ms) 3. 最后考虑 LLM 改写(仅在必要时,>500ms) **优先级:** 🟡 高优先级(优化现有逻辑) --- ## 四、实施路线图 ### 阶段一:立即实施(零风险、零延时) - [ ] 方案一:增强 ASR 上下文词表 - [ ] 方案二:极速同音词映射库 **预期效果:** 识别准确率提升 30-40%,**无额外延时** --- ### 阶段二:快速实施(低延时) - [ ] 方案三:增强模糊匹配知识库触发 - [ ] 方案五:查询改写增强 **预期效果:** 知识库召回率提升 20-30%,**总延时增加 < 50ms** --- ### 阶段三:可选增强(可控延时) - [ ] 方案四:LLM 增强纠错(配置开关控制) **预期效果:** 复杂场景准确率再提升 10-15%,**仅在必要时增加 500-1500ms 延时** --- ## 五、延时评估总结 | 方案 | 单轮额外延时 | 准确率提升 | 推荐度 | |------|-------------|-----------|--------| | 方案一:ASR 上下文增强 | 0ms | +30% | ⭐⭐⭐⭐⭐ | | 方案二:极速同音词映射 | <10ms | +15% | ⭐⭐⭐⭐⭐ | | 方案三:模糊匹配增强 | <50ms | +20% | ⭐⭐⭐⭐ | | 方案四:LLM 纠错(可选) | 500-1500ms | +10-15% | ⭐⭐⭐ | | 方案五:查询改写优化 | <10ms | +10% | ⭐⭐⭐⭐ | **综合效果:** 实施阶段一+二,**总延时增加 < 60ms**,**准确率提升 65-80%** --- ## 六、配置开关建议 在 `.env` 中添加配置项,方便灵活调整: ```env # ASR 优化配置 ENABLE_FAST_ASR_CORRECTION=true # 开启极速同音词映射 ENABLE_FUZZY_KB_TRIGGER=true # 开启模糊匹配触发 ENABLE_LLM_ASR_CORRECTION=false # LLM纠错默认关闭(可选开启) LLM_ASR_CORRECTION_TIMEOUT=1500 # LLM纠错超时时间(毫秒) ``` --- ## 七、回滚保障 所有优化都是**增量式、可配置**的: - 每个优化都可以独立开关 - 出现问题可立即通过环境变量关闭 - 保留原有逻辑作为兜底