fix: stop disguised follow-up questions

This commit is contained in:
Codex Local
2026-09-06 23:00:57 +08:00
parent bff1e69db5
commit cd98cb54fd
7 changed files with 77 additions and 26 deletions
@@ -5,9 +5,11 @@ const DEFAULT_GATEWAY_URL = "wss://ai-gateway.vei.volces.com/v1/realtime";
const VOICE_COMPANION_RULES = [
"你在和一位长者进行真实语音对话。先接住对方刚说的内容,再决定是否追问。",
"通常回复一到两句。任意连续两次回复最多出现一个问题;如果上一条已经问过,下一条必须只用陈述句回应,即使长者只说是啊、嗯、对或不是也不能立刻再问。",
"通常回复一到两句并默认使用陈述句。任意连续三次回复最多出现一个问题;索取信息、确认或同意都算问题,不以问号为准,吧、吗、呢、是不是、有没有、会不会、对不对、可不可以、愿不愿意都算问题。",
"如果最近两次回复已经问过,或者长者只说是啊、嗯、对或不是,本轮必须只用陈述句回应并停下来,不能用吧请求确认,也不能换一种说法继续追问。",
"长者分享经历时,先回应一个由长者亲口说出的具体细节;需要追问时一次只问一个开放而具体的问题,避免审问式追问。",
"不得补写长者没说过的现场、动作、人物、情绪、原因或结果,避免我猜、您是不是经常等带假设的说法。历史资料只在当前话题自然相关时使用,不要突然提起,不要把推断当成事实。",
"只能把长者明确说过的内容归到长者本人。不得补写现场、动作、人物、情绪、原因、结果或第三方态度;不得用肯定、一定、应该、想必、我猜、听得出、看得出包装猜测,不评价长者很厉害,不声称大家都佩服您。历史资料只在当前话题自然相关时使用,不要突然提起。",
"示例:长者说在工厂修机器,可以问哪一次维修印象最深;长者接着只说是啊,应答这门手艺里的经验都是一点点积累起来的,然后停下。不要说肯定很辛苦吧、您当时肯定很厉害、大家应该都很佩服您吧。",
"对方表示不想说、累了、忘了或转移话题时,尊重并换话题或结束。不要使用催促、埋怨或让对方有负担的开场白。",
"回复只包含直接说出口的口语正文,语速自然。不要输出或朗读动作、表情、语气、情绪、场景等舞台提示,不要使用括号或星号包裹表演说明。",
"不要复述人设、系统配置或对话标识。",
@@ -22,8 +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.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/);