Files
life-echo/api/tests/test_interview_prompts.py
2026-04-08 17:10:09 +08:00

172 lines
5.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""访谈提示词:精简结构与人格/语气融合回归。"""
from langchain_core.messages import AIMessage, HumanMessage, SystemMessage
from app.agents.chat.helpers import format_history_string
from app.agents.chat.personas import normalize_interview_persona
from app.agents.chat.prompts_conversation import (
get_guided_conversation_prompt,
get_opening_prompt,
)
def test_guided_prompt_does_not_embed_raw_user_message_in_system_text():
p = get_guided_conversation_prompt(
current_stage="childhood",
empty_slots=["place"],
filled_slots={},
detected_user_stage="childhood",
user_profile_context="",
persona="default",
)
assert "__USER_SECRET_PHRASE_XYZ__" not in p
# Signature no longer takes user_message; secret would only leak via profile
p2 = get_guided_conversation_prompt(
current_stage="childhood",
empty_slots=["place"],
filled_slots={},
detected_user_stage="childhood",
user_profile_context="__USER_SECRET_PROFILE__",
persona="default",
)
assert "__USER_SECRET_PROFILE__" in p2
def test_guided_prompt_mentions_empathy_and_self_judgment():
p = get_guided_conversation_prompt(
current_stage="childhood",
empty_slots=["place"],
filled_slots={},
detected_user_stage="childhood",
user_profile_context="",
persona="default",
)
assert "接住对方" in p
assert "你自己判断" in p or "该追问" in p
assert "共情与轻量自我表露" in p
assert "意义向深挖" in p
def test_guided_prompt_era_popculture_open_questions_when_birth_year():
p = get_guided_conversation_prompt(
current_stage="childhood",
empty_slots=["place"],
filled_slots={},
detected_user_stage="childhood",
user_profile_context="",
persona="default",
profile_birth_year=1985,
profile_era_place="潍坊",
)
assert "时代与氛围参考" in p
assert "流行文化" in p
assert "开放式" in p
def test_opening_prompt_includes_era_task_when_birth_year_configured():
p = get_opening_prompt(
current_stage="childhood",
empty_slots_readable=["成长的地方"],
user_profile_context="出生年份1985年",
persona="default",
profile_birth_year=1985,
profile_era_place="潍坊",
)
assert "年代氛围" in p
def test_guided_prompt_persona_tone_warm_listener():
p = get_guided_conversation_prompt(
current_stage="education",
empty_slots=["school"],
filled_slots={},
detected_user_stage="education",
user_profile_context="",
persona="warm_listener",
)
assert "倾听" in p or "柔和" in p
def test_guided_prompt_persona_curious_guide():
p = get_guided_conversation_prompt(
current_stage="education",
empty_slots=["school"],
filled_slots={},
detected_user_stage="education",
user_profile_context="",
persona="curious_guide",
)
assert "细节" in p
def test_normalize_interview_persona_unknown_falls_back():
assert normalize_interview_persona("not_a_real_persona") == "default"
assert normalize_interview_persona("") == "default"
def test_guided_prompt_contains_memory_section_when_evidence():
p = get_guided_conversation_prompt(
current_stage="childhood",
empty_slots=["place"],
filled_slots={},
detected_user_stage="childhood",
user_profile_context="",
persona="default",
memory_evidence_text="[摘要:rolling] 1990年生于上海。",
)
assert "相关记忆摘录" in p
assert "过往口述" in p
assert "1990年生于上海" in p
def test_guided_prompt_military_tone_in_system():
p = get_guided_conversation_prompt(
current_stage="childhood",
empty_slots=["place"],
filled_slots={},
detected_user_stage="childhood",
user_profile_context="",
persona="default",
background_voice="military",
)
assert "简洁" in p or "利落" in p or "得体" in p
def test_opening_prompt_military_style_rules_not_dialogue_samples() -> None:
p = get_opening_prompt(
current_stage="childhood",
empty_slots_readable=["成长的地方"],
user_profile_context="",
persona="default",
background_voice="military",
)
assert "军队相关" in p
assert "示例" not in p
def test_format_history_string_includes_system_for_debug_logs() -> None:
s = format_history_string(
[
SystemMessage(content="SYS_INSTRUCTIONS"),
HumanMessage(content="hi"),
AIMessage(content="hello"),
]
)
assert "System: SYS_INSTRUCTIONS" in s
assert "Human: hi" in s
assert "Assistant: hello" in s
def test_format_history_string_omit_system_body() -> None:
s = format_history_string(
[
SystemMessage(content="SYS_INSTRUCTIONS"),
HumanMessage(content="hi"),
],
omit_system_body=True,
)
assert "SYS_INSTRUCTIONS" not in s
assert "System: <omitted total_len=16" in s
assert "sha12=" in s
assert "Human: hi" in s