feat(api): 叙事 prompt、职业上下文、读路径章节、WS 解耦与错误脱敏

- 回忆录:事实边界补充允许清单;传记文体示例与 JSON 叙事要求对齐
- default 职业提示 occupation_context;cadre/military 退休语境
- GET 章节读路径零写入,prepare_chapter_read_view + markdown_for_response
- 文本归一抽到 core/text_normalize;移除弃用 reply 策略与 recompose_chapters_for_story
- ConversationService:WS 连接/用户段落/结束对话;对外错误固定文案
- 测试:HTTP 脱敏契约、章节读视图、occupation 与 background_voice
This commit is contained in:
Kevin
2026-04-01 11:49:33 +08:00
parent a5473e8fe2
commit 53d9e003af
28 changed files with 598 additions and 397 deletions

View File

@@ -94,14 +94,16 @@ def get_background_voice_chat_block(voice: str | None) -> str:
"## 背景语气:军队语境(仅语气,不编造事实)\n"
"称呼得体、句子简洁利落、条理清楚;避免网络梗与油滑套话。\n"
"先简短接住对方,再**最多一个**具体问题;不写命令式、不做思想政治表态。\n"
"涉及纪律、集体、任务等措辞,**仅当用户口述已出现相关事实时**自然呼应,禁止堆砌军事化辞藻或虚构经历。"
"涉及纪律、集体、任务等措辞,**仅当用户口述已出现相关事实时**自然呼应,禁止堆砌军事化辞藻或虚构经历。\n"
"用户已退役/转业,以回忆军旅岁月为基调,不要预设其仍在服役。"
)
# cadre
return (
"## 背景语气:干部/机关语境(仅语气,不编造事实)\n"
"稳重、有分寸,敬语适度;句子可略完整,但仍控制总字数,避免官样文章与排比空话。\n"
"先回应对方内容,再**最多一个**具体问题;不写公文套话、不做政治评价。\n"
"涉及职务与组织时,**不得编造**用户未提及的职级、单位与荣誉。"
"涉及职务与组织时,**不得编造**用户未提及的职级、单位与荣誉。\n"
"用户已退休,以回顾和怀念工作岁月为基调,不要预设其仍在岗。"
)
@@ -114,10 +116,12 @@ def get_background_voice_narrative_block(voice: str | None) -> str:
return (
"## 背景文体(军队,须遵守上文事实边界)\n"
"叙事紧凑、层次清楚;若口述已出现纪律、集体、任务等语境,可适度用书面语呼应,**禁止**堆砌口号式军事辞藻或虚构军旅细节。\n"
"不新增军衔、单位番号、表彰等口述未出现的信息。"
"不新增军衔、单位番号、表彰等口述未出现的信息。\n"
"用户已退役/转业,以回忆军旅岁月为基调,不要预设其仍在服役。"
)
return (
"## 背景文体(干部/机关,须遵守上文事实边界)\n"
"段落层次清晰,用语庄重自然,避免口语碎词与段子感;**不得编造**职务、荣誉、单位名称与组织细节。\n"
"文采服务于真实内容,不写成公文或汇报腔。"
"文采服务于真实内容,不写成公文或汇报腔。\n"
"用户已退休,以回顾和怀念工作岁月为基调,不要预设其仍在岗。"
)