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

86 lines
4.6 KiB
JavaScript
Raw Normal View History

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}。你的回答必须严格依据知识库内容不得补充知识库未提及的信息不得猜测不得编造。若知识库中没有明确答案就直接说明知识库未提及或暂未找到相关信息。回答保持口语化、简洁、专业200字内。${personalInfoBlock}`;
}
module.exports = {
DEFAULT_VOICE_ASSISTANT_PROFILE,
resolveAssistantProfile,
buildVoiceSystemRole,
buildVoiceGreeting,
buildKnowledgeAnswerPrompt,
};