OliveSensorAPI/generate_data/xinghuo/prompt.py

151 lines
6.8 KiB
Python
Raw Normal View History

2024-01-23 21:25:12 +08:00
import json
import random
import re
import copy
# new_data = [{'role': 'user', 'content': '你好'}, {'role': 'assistant', 'content': '你好!有什么我可以帮助您的吗?'}, {'role': 'user', 'content': '生成一段心理医生和病人的对话'}, {'role': 'assistant', 'content': '心理医生:你好,我是你的心理医生。请问你的名字是?\n\n病人我叫李明。\n\n心理医生很高兴见到你李明先生。你来咨询是因为什么问题呢\n\n病人最近我总是感觉很焦虑睡眠也不好。\n\n心理医生好的可以跟我具体说说你的情况吗你有什么压力或者担忧的事情吗\n\n病人其实我一直在担心工作上的表现觉得自己做得不够好还有家庭的问题。\n\n心理医生这些都是很常见的问题。你可以告诉我你在工作中遇到了什么困难吗我们可以一起探讨一下如何解决。\n\n病人我觉得自己的工作能力不够强经常被领导批评。而且我家里的情况也不是很好父母经常吵架让我很难受。\n\n心理医生我理解你的感受。这些问题确实会让人感到压力和焦虑。不过我们可以通过一些方法来缓解这种情况。比如说你可以尝试一些放松的活动比如瑜伽或者冥想来减轻压力和焦虑。同时你也可以考虑寻求家人或者朋友的帮助让他们给你提供一些支持和鼓励。\n\n病人好的我会试试的。谢谢你的建议。\n\n心理医生不用客气如果你有任何问题或者需要进一步的帮助随时可以联系我。'}]
# text2 = []
# data = {'system':'现在你是一个心理专家,我有一些心理问题,请你用专业的知识帮我解决。', 'input':'', 'output':''}
# for val in new_data:
# if val['role'] == 'user':
# continue
#
# print(text2)
def save_jsonl(conversations, path_file):
# 把对话写入文件
with open(path_file, 'a+', encoding='utf-8') as f:
for conversation in conversations:
Json_String = json.dumps(conversation, ensure_ascii=False) + '\n'
f.write(Json_String)
# 生成输入提示词
def prompt(life_type=0):
emotions_lis = [
"钦佩",
"崇拜",
"欣赏",
"娱乐",
"焦虑",
"敬畏",
"尴尬",
"厌倦",
"冷静",
"困惑",
"渴望",
"厌恶",
"同情",
"痛苦",
"着迷",
"嫉妒",
"兴奋",
"恐惧",
"痛恨",
"有趣",
"快乐",
"怀旧",
"浪漫",
"悲伤",
"满意",
"性欲",
"同情",
"满足"
]
areas_of_life = [
"工作",
"学业(小学,初中,高中,大学,研究生,博士)",
"生活(衣,食,住,行等等)",
"身体",
"家人",
"朋友",
"社交",
"恋爱",
"就业",
"责任",
"爱好",
"环境",
"隐私",
"安全",
"梦想",
"自由"
]
# 输入数据处理
if life_type < 0:
raise ValueError('life_type must > 0')
emo = random.choice(emotions_lis)
life_type %= 16
Input = f'''你是一个研究过无数具有心理健康问题的病人与心理健康医生对话的专家,请你构造一些符合实际情况的具有心理健
康问题的病人和心理健康医生的连续的一段多轮对话记录要求病人的问题属于{areas_of_life[life_type]}场景具有{emo}情感医生的回复尽可能包含心理辅导知识并且能够一步步诱导病人说出自己的问题进而提供解决问题的可行方案注意构造的数据必须以医生的陈述为结束语请只返回完整的对话内容请以如下格式返回生成的数据
病人病人的咨询或陈述
医生医生的安抚和建议
'''
return Input
def xinghuo_api(content):
# 对话格式
conversation1 = {'system':'现在你是一个心理专家,我有一些心理问题,请你用专业的知识帮我解决。', 'input':'', 'output':''}
conversation = {'input':'', 'output':''}
conversations = {'conversation':[]}
# temp = {'system':'现在你是一个心理专家,我有一些心理问题,请你用专业的知识帮我解决。', 'input':'', 'output':''}
# 划分对话形式
dialogue = re.split('医生:|病人:', content)
# 对话前的数据处理
if dialogue[0] == '':
dialogue.pop(0)
# 一次对话
flag = False
for ind, item in enumerate(dialogue):
if flag == False:
if (ind + 1) % 2 == 1:
conversation1['input'] = dialogue[ind]
else:
conversation1['output'] = dialogue[ind]
if (ind + 1) % 2 == 0 or ind + 1 == len(dialogue):
temp = copy.deepcopy(conversation1)
conversations['conversation'].append(temp)
flag = True
continue
else:
if (ind+1)%2 == 1:
conversation['input'] = dialogue[ind]
else:
conversation['output'] = dialogue[ind]
if (ind+1)%2 == 0 or ind+1 == len(dialogue):
# 浅赋值只会是同一个变量必须要copy.deepcopy
# 若conversations['conversation'].append(conversation)后面改的话,~s里面的conversation也会改动
# 就会变成n个一样的数据这是我们不想看到的
temp = copy.deepcopy(conversation)
conversations['conversation'].append(temp)
return conversations
def ChatGLM3_6B(content):
# 对话格式
conversation = {'system': '现在你是一个心理专家,我有一些心理问题,请你用专业的知识帮我解决。', 'input': '',
'output': ''}
conversations = []
# temp = {'system':'现在你是一个心理专家,我有一些心理问题,请你用专业的知识帮我解决。', 'input':'', 'output':''}
# 划分对话形式
dialogue = re.split('医生:|病人:', content)
# 对话前的数据处理
if dialogue[0] == '':
dialogue.pop(0)
# 一次对话
for ind, item in enumerate(dialogue):
if (ind + 1) % 2 == 1:
conversation['input'] = dialogue[ind]
else:
conversation['output'] = dialogue[ind]
if (ind + 1) % 2 == 0 or ind + 1 == len(dialogue):
# 浅赋值只会是同一个变量必须要copy.deepcopy
# 若conversations['conversation'].append(conversation)后面改的话,~s里面的conversation也会改动
# 就会变成n个一样的数据这是我们不想看到的
temp = copy.deepcopy(conversation)
conversations.append(temp)
return conversations