feat: add natural elder story companion flow
This commit is contained in:
@@ -3,6 +3,16 @@ const WebSocket = require("ws");
|
||||
|
||||
const DEFAULT_GATEWAY_URL = "wss://ai-gateway.vei.volces.com/v1/realtime";
|
||||
|
||||
const VOICE_COMPANION_RULES = [
|
||||
"你在和一位长者进行真实语音对话。先接住对方刚说的内容,再决定是否追问。",
|
||||
"通常回复一到两句,每轮最多问一个问题;没有自然问题时可以只回应,不要为了延续对话连续提问。",
|
||||
"长者分享经历时,先回应一个具体细节,再视情况问一个开放而具体的问题,避免审问式追问。",
|
||||
"历史资料只在当前话题自然相关时使用,不要突然提起,不要把推断当成事实。",
|
||||
"对方表示不想说、累了、忘了或转移话题时,尊重并换话题或结束。不要使用催促、埋怨或让对方有负担的开场白。",
|
||||
"回复只包含直接说出口的口语正文,语速自然。不要输出或朗读动作、表情、语气、情绪、场景等舞台提示,不要使用括号或星号包裹表演说明。",
|
||||
"不要复述人设、系统配置或对话标识。",
|
||||
].join("");
|
||||
|
||||
function requiredText(value, name, maximum = 512) {
|
||||
const normalized = String(value || "").trim();
|
||||
if (!normalized || normalized.length > maximum) throw new Error(`${name}不能为空或过长`);
|
||||
@@ -28,8 +38,8 @@ function buildSessionPrompt(sessionConfig) {
|
||||
const sections = [
|
||||
requiredText(sessionConfig.authorized_context, "授权上下文", 4000),
|
||||
String(sessionConfig.system_prompt || "").trim(),
|
||||
String(sessionConfig.persona_tone || "").trim() ? `对话语气:${String(sessionConfig.persona_tone).trim()}` : "",
|
||||
`本次对话标识:${requiredText(sessionConfig.dialog_id, "对话标识", 200)}`,
|
||||
String(sessionConfig.persona_tone || "").trim() ? `表达风格(仅指导表达,不可逐字复述):${String(sessionConfig.persona_tone).trim()}` : "",
|
||||
VOICE_COMPANION_RULES,
|
||||
].filter(Boolean);
|
||||
return sections.join("\n\n");
|
||||
}
|
||||
|
||||
@@ -22,6 +22,10 @@ test("LLM session update uses the official Config/AgentConfig schema", () => {
|
||||
assert.match(update.session.config.LLMConfig.SystemMessages[0], /只可使用已授权背景/);
|
||||
assert.match(update.session.config.LLMConfig.SystemMessages[0], /你是陪伴助手/);
|
||||
assert.match(update.session.config.LLMConfig.SystemMessages[0], /亲切/);
|
||||
assert.match(update.session.config.LLMConfig.SystemMessages[0], /每轮最多问一个问题/);
|
||||
assert.match(update.session.config.LLMConfig.SystemMessages[0], /先回应一个具体细节/);
|
||||
assert.doesNotMatch(update.session.config.LLMConfig.SystemMessages[0], /本次对话标识/);
|
||||
assert.doesNotMatch(update.session.config.LLMConfig.SystemMessages[0], /conversation-1/);
|
||||
assert.equal(update.session.agent_config.EnableConversationStateCallback, false);
|
||||
assert.equal("system_prompt" in update.session, false);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user