- 访谈:新增 interview_state_hints,联动 orchestrator 与提示词 - 回忆录:story_pipeline_sync/state/memory/post_commit 与 Celery 任务调整 - 基建:开发用 celery broker、compose/development 脚本、依赖注入 - eval-web:移除数据集/实验/版本等页面与流式轮询,突出 Playground - 文档与单测同步
53 lines
2.1 KiB
Python
53 lines
2.1 KiB
Python
"""
|
||
访谈 Agent 可配置性格(Persona):仅影响语气,不替代事实边界与槽位约束。
|
||
"""
|
||
|
||
from __future__ import annotations
|
||
|
||
from typing import Final
|
||
|
||
# 与 settings.chat_interview_persona 及文档保持一致
|
||
VALID_INTERVIEW_PERSONAS: Final[frozenset[str]] = frozenset(
|
||
{"default", "warm_listener", "curious_guide"}
|
||
)
|
||
|
||
|
||
def normalize_interview_persona(raw: str | None) -> str:
|
||
"""未知或空值回退 default,避免部署拼写错误导致空提示。"""
|
||
key = (raw or "default").strip().lower()
|
||
if key in VALID_INTERVIEW_PERSONAS:
|
||
return key
|
||
return "default"
|
||
|
||
|
||
def get_interview_persona_tone_hint(persona: str) -> str:
|
||
"""访谈性格提示,融入主 system prompt。"""
|
||
key = normalize_interview_persona(persona)
|
||
if key == "default":
|
||
return (
|
||
"语气像好朋友微信聊天:自然、温暖、偶尔俏皮;"
|
||
"接话时允许带一点画面感或感官细节(一两句即可,不要堆砌);"
|
||
"追问优先顺着对方刚说的**具体细节**往里走一层,不要跳到泛泛的新问题。"
|
||
)
|
||
if key == "warm_listener":
|
||
return (
|
||
"偏倾听与承接,语气柔和、少打断;不审问感,一次最多一个具体问题。"
|
||
"对方愿意展开时,可温和多问一层意义或影响。"
|
||
"接话时允许带一点画面感或感官细节(一两句即可),让对方觉得你真的在跟着想象。"
|
||
)
|
||
return (
|
||
"爱把人往一个具体细节里带;事实清楚后可追问对自我认知或后来选择的影响;"
|
||
"短句像微信,一次最多一个具体问题,不重复上文已清楚的事。"
|
||
"允许用一两句场景感的短描写承接对方画面,不要只用干巴巴的确认句。"
|
||
)
|
||
|
||
|
||
def get_interview_persona_block(persona: str) -> str:
|
||
"""兼容旧名:返回空串,请改用 get_interview_persona_tone_hint。"""
|
||
return ""
|
||
|
||
|
||
def get_opening_persona_line(persona: str) -> str:
|
||
"""兼容旧名:与访谈轮次共用一句性格提示。"""
|
||
return get_interview_persona_tone_hint(persona)
|