Files
life-echo/api/agents/prompts/conversation_prompts.py
2026-01-07 11:56:53 +08:00

116 lines
6.1 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.
"""
对话 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, [])