Files
life-echo/api/agents/prompts/conversation_prompts.py

116 lines
6.1 KiB
Python
Raw Normal View History

2026-01-07 11:56:53 +08:00
"""
对话 Agent 提示词模板和访谈问题库
"""
from enum import Enum
from typing import List, Dict
class ConversationStage(str, Enum):
"""对话阶段枚举"""
CHILDHOOD = "childhood" # 童年
EDUCATION = "education" # 教育
CAREER = "career" # 事业
FAMILY = "family" # 家庭
BELIEFS = "beliefs" # 信念
SUMMARY = "summary" # 人生总结
# 访谈问题库
INTERVIEW_QUESTIONS: Dict[ConversationStage, List[str]] = {
ConversationStage.CHILDHOOD: [
"你是在哪里长大的?小时候周围的环境是什么样的,有哪些让你印象深刻的童年记忆?",
"童年时期的你是个怎样的孩子?有没有做过什么淘气或有趣的事情,现在想起来还会让你发笑?",
"能聊聊你小时候的家庭吗?比如父母是怎样的人,他们对你的成长有什么影响吗?",
"小时候你有过什么梦想?那时候你最想长大后做什么?",
],
ConversationStage.EDUCATION: [
"上学的时候你是个怎么样的学生?你喜欢学校生活吗?",
"在求学过程中,有没有哪位老师或同学对你影响特别大?能说说他们的故事吗?",
"学生时代你参加过什么课外活动或者比赛吗?有没有哪段经历让你特别难忘?",
"那时候你对未来有什么打算吗?比如毕业后想从事什么职业,或者希望过怎样的生活?",
],
ConversationStage.CAREER: [
"第一次走出校园开始工作时,你还记得当时的情景吗?当时你的心情怎么样,有发生什么难忘的事吗?",
"你当初是怎么选择进入现在这个行业的?其中有什么契机或故事吗?",
"在工作中有没有遇到过特别大的挑战或低谷?当时你是怎么挺过来的?",
"职业生涯中有没有哪个成就或时刻让你特别自豪?能跟我分享一下那个故事吗?",
"在事业的发展过程中,有哪些重要的转折点?比如跳槽、升职或者创业,这些经历对你意味着什么?",
"回顾这一路,有哪些人对你的事业帮助最大或者影响最深?有没有特别想感谢的贵人或伙伴?",
],
ConversationStage.FAMILY: [
"可以聊聊你和你伴侣的故事吗?你们是怎么认识的,又是什么让你决定与他/她携手一生?",
"孩子在你的生活中意味着什么?做父母的过程中,有没有让你特别骄傲或者难忘的瞬间?",
"在家庭生活中,有没有什么传统或者特别的习惯,让你感到温馨和快乐?",
"平时你和家人喜欢一起做些什么?周末或假日你们通常会怎么度过?",
"你觉得家庭在你的人生中扮演了一个怎样的角色?",
"工作和家庭要怎么兼顾呢?你是如何平衡事业和家庭的?在两边兼顾的时候有没有遇到困难,后来又是怎么克服的?",
],
ConversationStage.BELIEFS: [
"你人生中有没有一些一直坚守的信念或者座右铭?这些信念给了你怎样的力量或者影响?",
"对你来说,哪些价值观是最重要的?这些价值观是受到哪些人或经历的影响而形成的呢?",
"当你遇到困难和低谷的时候,是什么支撑着你坚持下去?",
"你如何看待‘成功’和‘幸福’?对你来说它们分别意味着什么?",
],
ConversationStage.SUMMARY: [
"回顾你走过的路,你觉得这一生中最重要的经验或教训是什么?",
"在你的生活中,你最感激的人和事有哪些?有没有特别觉得自己很幸运的地方?",
"如果能对年轻时候的自己说几句话,你会想告诉他/她什么?",
"展望未来,你还有什么愿望或目标吗?有没有一直想尝试但还没来得及做的事情?",
"最后,你希望家人和后代记住你是一个怎样的人?",
],
}
def get_system_prompt(current_stage: ConversationStage, covered_topics: List[str], user_latest_response: str) -> str:
"""
生成对话 Agent 的系统提示词
Args:
current_stage: 当前对话阶段
covered_topics: 已聊过的话题列表
user_latest_response: 用户最新回答
Returns:
系统提示词字符串
"""
stage_name_map = {
ConversationStage.CHILDHOOD: "童年",
ConversationStage.EDUCATION: "教育",
ConversationStage.CAREER: "事业",
ConversationStage.FAMILY: "家庭",
ConversationStage.BELIEFS: "信念",
ConversationStage.SUMMARY: "人生总结",
}
covered_topics_str = "".join(covered_topics) if covered_topics else "暂无"
prompt = f"""你是一位专业的人生故事访谈助手,擅长通过轻松自然的对话引导用户讲述他们的人生故事。
你的职责
1. 根据用户已讲述的内容判断当前应处于哪个访谈阶段童年/教育/事业/家庭/信念/人生总结
2. 在用户停顿或完成一个话题后自然地提出下一个相关问题
3. 使用温暖鼓励的语气让用户感到被倾听和理解
4. 当用户讲述不够详细时通过追问引导深入"能多说一些关于...的细节吗?"
5. 识别对话的自然结束时机或引导进入下一个阶段
对话原则
- 一次只问一个问题不要连续提问
- 问题要自然口语化避免生硬
- 根据用户的回答灵活调整不要机械地按顺序提问
- 当用户偏离话题时温和地引导回来
- 在用户讲述精彩故事时给予积极反馈"这个故事真有意思!"
当前对话阶段{stage_name_map.get(current_stage, current_stage.value)}
已聊话题{covered_topics_str}
用户最新回答{user_latest_response}
请根据以上信息生成一个自然温暖的回应或下一个问题"""
return prompt
def get_questions_for_stage(stage: ConversationStage) -> List[str]:
"""获取指定阶段的所有问题"""
return INTERVIEW_QUESTIONS.get(stage, [])