Files
bigwo/test2/server/services/assistantProfileConfig.js
User 9567eb7358 feat(server): KB prompt优化、字幕修复、S2S重连、助手配置API
- assistantProfileConfig: KB answer prompt改为分层策略(严格产品信息+灵活常识补充)
- nativeVoiceGateway: S2S upstream自动重连(最多50次)、event 351字幕debounce(800ms取最长文本)
- toolExecutor: 确定性query改写增强、KB查询传递session上下文
- contextKeywordTracker: 支持KB话题记忆优先enrichment
- contentSafeGuard: 新增品牌安全内容过滤服务
- assistantProfileService: 新增助手配置CRUD服务
- routes/assistantProfile: 新增助手配置API路由
- knowledgeKeywords: 扩展KB关键词词典
- fastAsrCorrector: ASR纠错规则更新
- tests/: KB prompt测试、保护窗口测试、Viking性能测试
- docs/: 助手配置API文档、系统提示词目录
2026-03-24 17:19:36 +08:00

86 lines
5.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const DEFAULT_VOICE_ASSISTANT_PROFILE = Object.freeze({
documents: '',
email: '',
nickname: '大沃',
wxl: '',
mobile: '',
wx_code: '',
intro: '',
sign: '',
story: '',
});
function normalizeAssistantProfileValue(value) {
return String(value || '').trim();
}
function resolveAssistantProfile(overrides = null) {
const merged = {
...DEFAULT_VOICE_ASSISTANT_PROFILE,
...(overrides && typeof overrides === 'object' ? overrides : {}),
};
return {
documents: normalizeAssistantProfileValue(merged.documents),
email: normalizeAssistantProfileValue(merged.email),
nickname: normalizeAssistantProfileValue(merged.nickname) || '大沃',
wxl: normalizeAssistantProfileValue(merged.wxl),
mobile: normalizeAssistantProfileValue(merged.mobile),
wx_code: normalizeAssistantProfileValue(merged.wx_code),
intro: normalizeAssistantProfileValue(merged.intro),
sign: normalizeAssistantProfileValue(merged.sign),
story: normalizeAssistantProfileValue(merged.story),
};
}
function buildProfileDocumentsClause(profile) {
return profile.documents
? `,拥有丰富的基础知识库信息${profile.documents}`
: ',拥有丰富的基础知识库信息';
}
function buildProfilePersonalInfoLines(profile) {
return [
profile.email ? `- 邮箱:${profile.email}` : '',
profile.nickname ? `- 姓名:${profile.nickname}` : '',
profile.wxl ? `- 微信号:${profile.wxl}` : '',
profile.mobile ? `- 手机号:${profile.mobile}` : '',
profile.wx_code ? `- 微信二维码:${profile.wx_code}` : '',
profile.intro ? `- 个人介绍:${profile.intro}` : '',
profile.sign ? `- 签名:${profile.sign}` : '',
profile.story ? `- 我的故事:${profile.story}` : '',
].filter(Boolean);
}
function buildVoiceSystemRole(profileOverrides = null) {
const profile = resolveAssistantProfile(profileOverrides);
const documentsClause = buildProfileDocumentsClause(profile);
const personalInfoLines = buildProfilePersonalInfoLines(profile);
const personalInfoBlock = personalInfoLines.length > 0
? ` 当用户询问“我”的联系方式、微信、手机号、个人介绍、签名或故事时,优先使用以下个人信息:${personalInfoLines.join(' ')}`
: '';
return `你是${profile.nickname}的智能助手${documentsClause}。你的任务是精准、全面地解答用户关于PM International公司产品、原理、活动、系统、招商等相关问题。你与客户互动时要有礼貌、有温度、适当共情、自然主动打招呼但不要总是重复相同的打招呼词可适当赞美和表扬让对方喜欢并享受开心愉快的专业交流。回答像懂行的朋友聊天直接给结论1-3句话口语化短句。有知识库信息就优先用自然转述不照念。不确定的如实说不猜不编。禁止输出思考过程或元描述。德国PM是1993年成立的合法直销企业邓白氏AAA+认证覆盖100+国家和地区问到传销必须正面肯定回答是合法企业。凡涉及“一部手机做天下、0门槛启动、0成本高效率、足不出户梦想横扫全球、身未动梦已成、批发式晋级”等表达必须明确这是“一成系统”的优势标签是对德国PM事业的软件赋能不要与德国PM公司、产品或品牌本身混淆。${personalInfoBlock}`;
}
function buildVoiceGreeting(profileOverrides = null) {
const profile = resolveAssistantProfile(profileOverrides);
return `嗨,你好呀,我是${profile.nickname}。你想了解德国PM产品、健康营养还是一成系统和合作这块我都可以跟你聊。`;
}
function buildKnowledgeAnswerPrompt(profileOverrides = null) {
const profile = resolveAssistantProfile(profileOverrides);
const documentsClause = buildProfileDocumentsClause(profile);
const personalInfoLines = buildProfilePersonalInfoLines(profile);
const personalInfoBlock = personalInfoLines.length > 0
? ` 对于${profile.nickname}本人的邮箱、微信号、手机号、个人介绍、签名或故事等个人资料,可优先使用以下系统资料:${personalInfoLines.join(' ')}`
: '';
return `你是${profile.nickname}的智能助手${documentsClause}。知识库涵盖近50款PM-FitLine产品的完整资料成分、用法、剂量、价格、规格、搭配方案、好转反应等及117个常见问答。回答规则产品相关具体信息必须严格依据知识库不得猜测或自行补充公司背景、健康常识可适当补充。产品常有别名小红=艾特维、大白=倍适、小白=维适多等请注意识别。不得编造产品名或数据。PM是营养品非药物涉及疾病建议咨询医生。若知识库无相关内容坦诚说明并建议咨询推荐人。回答口语化、简洁1-3句给结论150字内。${personalInfoBlock}`;
}
module.exports = {
DEFAULT_VOICE_ASSISTANT_PROFILE,
resolveAssistantProfile,
buildVoiceSystemRole,
buildVoiceGreeting,
buildKnowledgeAnswerPrompt,
};