Model: zpeng1989/DeepSeek_PsychoGuide Source: Original Platform
心理咨询思考链问答大模型
项目概述
本项目旨在构建针对心理咨询场景的深度思考链问答大模型,基于DeepSeek蒸馏的LLAMA-8B模型作为基座模型[deepseek-ai/DeepSeek-R1-Distill-Llama-8B],采用LoRA技术进行领域适配微调。模型继承并扩展了"深度思考模式(think)",训练数据涵盖心理咨询案例、心理测评解析、危机干预策略等专业领域知识,通过结构化问答微调提升模型在心理咨询场景下的共情能力与解决方案生成能力。模型可模拟专业咨询师的思维路径,逐步解析来访者心理状态,生成具有临床参考价值的干预建议。
模型架构
- 基座模型:[
deepseek-ai/DeepSeek-R1-Distill-Llama-8B]https://modelscope.cn/models/deepseek-ai/DeepSeek-R1-Distill-Llama-8B - 微调方法: LoRA(Low-Rank Adaptation)
- 训练数据: 问答数据集
数据集
数据来源
参考链接:https://huggingface.co/datasets/Kedreamix/psychology-10k-Deepseek-R1-zh
数据预处理
训练数据格式:
{
"input": "我晚上难以入睡,我认为这是因为我对工作感到压力",
"Output": "<think>\n\n嗯,用户说他晚上难以入睡,认为是因为工作压力。首先,我需要确认他的情况是否常见,以及可能的解决方法。工作压力导致的失眠确实很普遍,但每个人的具体情况可能不同。我需要考虑他的工作环境、压力源是什么,比如工作量、人际关系还是职业发展。然后,可能涉及到他的睡前习惯,是否有使用电子设备、咖啡因摄入等影响睡眠的因素。此外,心理健康方面,比如焦虑或抑郁情绪也可能加剧失眠。我需要建议他调整作息,比如建立规律的睡眠时间,避免咖啡因和蓝光。放松技巧如冥想、深呼吸可能会有帮助。如果自我调节无效,可能需要建议他寻求专业帮助,比如心理咨询师或医生。同时,时间管理技巧可能减轻工作压力,比如任务优先级划分,适当授权任务。还要注意他的支持系统,比如家人朋友的支持。需要提醒他如果症状持续,可能有更严重的健康问题,应该及时就医。最后,要确保建议具体可行,并且语气要 empathetic,让他感受到被理解和支持。\n\n</think>\n\n你的情况是很多职场人都会遇到的困扰,工作压力导致的失眠往往是一个恶性循环:压力影响睡眠质量,睡眠不足又导致次日工作效率降低,进一步加重压力。以下是一些针对性建议,希望能帮助你逐步打破这个循环:\n\n**第一步:建立压力档案(当晚即可操作)**\n1. 准备笔记本记录:\n- 具体压力事件(如\"明早要向董事会汇报\")\n- 伴随的生理反应(手心出汗/心跳加速)\n- 脑海中的具体担忧(\"忘词怎么办?数据记错怎么办?\")\n- 实际发生概率(用百分比标注,如\"忘词概率约20%\")\n\n**第二步:90分钟睡眠周期调整法(3天内见效)**\n- 计算就寝时间:设定起床时间后倒推1.5小时的整数倍\n- 例:若需7点起床,可尝试11:30或1:00入睡\n- 使用SleepCycle等APP监测睡眠质量\n\n**第三歩:办公室微放松(工作中随时可用)**\n- 4-7-8呼吸法:吸气4秒→屏息7秒→呼气8秒(\n- 桌面减压神器:备握力球/指尖陀螺,在接电话时使用\n- 视觉放松:将电脑桌面换成动态自然景观(推荐Rainy Mood网站)\n\n**进阶方案:压力转化训练(需1-2周练习)**\n1. 压力具象化练习:\n- 每天花5分钟将压力想象成具体物体(如不断膨胀的气球)\n- 在脑海中为这个\"压力球\"设置安全阀,想象缓慢释放过程\n\n2. 焦虑时段专用笔记本:\n- 设定\"焦虑时间\"(如晚8-8:30)\n- 其他时间出现担忧时快速记录关键词,留到专用时段处理\n\n**重要提醒:**\n若出现以下情况建议立即就医:\n- 连续3天睡眠不足4小时\n- 出现心悸/手抖等躯体症状\n- 对原本爱好完全失去兴趣\n\n建议从今晚开始尝试\"压力档案\"记录,很多时候当我们把模糊的焦虑具体化后,它的压迫感就会明显减弱。这个过程可能需要持续记录3-5天才能看到明显效果,请给自己足够的耐心。记住,你不需要完美解决所有压力源,重点在于重建对压力的掌控感。"
}
模型训练
微调方法
使用LoRA技术对deepseek-R1蒸馏模型进行微调。LoRA通过在预训练模型的权重矩阵中引入低秩矩阵来减少参数量,从而在保持模型性能的同时降低计算成本。
训练步骤
- 加载预训练模型: 加载
deepseek-R1蒸馏8B模型。 - 应用LoRA: 在模型的关键层应用LoRA技术。
- 训练模型: 使用准备好的肿瘤知识问答数据集进行微调。
- 验证与测试: 在验证集和测试集上评估模型性能,调整超参数以优化结果。
模型评估
评估指标
- 准确率: 模型在问答任务中的准确率。
- 召回率: 模型能够正确回答的问题比例。
- F1分数: 准确率和召回率的调和平均数。
评估结果
在测试集上的评估结果如下: 待更新
使用指南
环境配置
- Python版本: 3.10+
- 依赖库:
transformerstorch
模型下载
SDK下载
#安装ModelScope
pip install modelscope
#SDK模型下载
from modelscope import snapshot_download
model_dir = snapshot_download('zpeng1989/DeepSeek_PsychoGuide')
Git下载
#Git模型下载
git clone https://oauth2:eDTzbKYiKrNCswNiDx1s@www.modelscope.cn/zpeng1989/DeepSeek_PsychoGuide.git
模型推理
from transformers import AutoModelForCausalLM, AutoTokenizer
# 加载微调后的模型
model = AutoModelForCausalLM.from_pretrained("path_to_your_model")
tokenizer = AutoTokenizer.from_pretrained("path_to_your_model")
# 输入问题
question = "我感到非常压力山大,有什么方法可以管理这种压力。"
inputs = tokenizer(question, return_tensors="pt")
# 生成答案
outputs = model.generate(**inputs)
answer = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(answer)
WEB部署
代码参考:
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
import streamlit as st
import re
# 在侧边栏中创建一个标题和一个链接
with st.sidebar:
st.markdown("## 7B LLM")
max_length = st.slider("max_length", 0, 8192, 8192, step=1)
temperature = st.slider("temperature", 0.0, 1.0, 0.1, step=0.1)
# 创建一个标题和一个副标题
st.title("Model Chatbot")
st.caption("🚀 A streamlit chatbot powered by Self-LLM")
# 定义模型路径
mode_name_or_path = ''
# 文本分割函数
def split_text(text):
pattern = re.compile(r'<think>(.*?)</think>(.*)', re.DOTALL) # 定义正则表达式模式
match = pattern.search(text) # 匹配 <think>思考过程</think>回答
if match: # 如果匹配到思考过程
think_content = match.group(1).strip() # 获取思考过程
answer_content = match.group(2).strip() # 获取回答
else:
think_content = "" # 如果没有匹配到思考过程,则设置为空字符串
answer_content = text.strip() # 直接返回回答
return think_content, answer_content
# 定义一个函数,用于获取模型和 tokenizer
@st.cache_resource
def get_model():
# 从预训练的模型中获取 tokenizer
tokenizer = AutoTokenizer.from_pretrained(mode_name_or_path, trust_remote_code=True)
tokenizer.pad_token = tokenizer.eos_token
# 从预训练的模型中获取模型,并设置模型参数
model = AutoModelForCausalLM.from_pretrained(mode_name_or_path, torch_dtype=torch.bfloat16, device_map="auto")
return tokenizer, model
# 加载 model 和 tokenizer
tokenizer, model = get_model()
# 如果 session_state 中没有 "messages",则创建一个包含默认消息的列表
if "messages" not in st.session_state:
st.session_state["messages"] = [{"role": "assistant", "content": "有什么可以帮您的?"}]
# 遍历 session_state 中的所有消息,并显示在聊天界面上
for msg in st.session_state.messages:
st.chat_message(msg["role"]).write(msg["content"])
# 如果用户在聊天输入框中输入了内容,则执行以下操作
if prompt := st.chat_input():
# 在聊天界面上显示用户的输入
st.chat_message("user").write(prompt)
# 将用户输入添加到 session_state 中的 messages 列表中
st.session_state.messages.append({"role": "user", "content": prompt})
# 将对话输入模型,获得返回
input_ids = tokenizer.apply_chat_template(st.session_state.messages,tokenize=False,add_generation_prompt=True)
model_inputs = tokenizer([input_ids], return_tensors="pt").to('cuda')
generated_ids = model.generate(model_inputs.input_ids,max_new_tokens=max_length, temperature=temperature)
generated_ids = [
output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
]
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
print(response)
think_content, answer_content = split_text(response) # 调用split_text函数,分割思考过程和回答
# 将模型的输出添加到 session_state 中的 messages 列表中
st.session_state.messages.append({"role": "assistant", "content": response})
# 在聊天界面上显示模型的输出
with st.expander("模型思考过程"):
st.write(think_content) # 展示模型思考过程
st.chat_message("assistant").write(answer_content) # 输出模型回答
# print(st.session_state) # 打印 session_state 调试
运行命令:
# nohup streamlit run Run_Test_v1.py --server.address 0.0.0.0 --server.port 6006 &
生成结果案例
Case 01
输入问题:
我感到非常压力山大,有什么方法可以管理这种压力。
模型返回结果:
<think>
嗯,用户现在感到压力山大,想要管理这种压力。首先,我需要理解压力可能来自哪些方面。可能是工作、学习、人际关系,或者家庭问题?用户没有具体说明,所以得考虑各种可能性。压力管理的方法有很多种,可能需要分步骤来给出建议。
首先,我应该先共情,让用户感到被理解。然后,分点列出一些常见的压力管理方法,比如时间管理、放松技巧、运动、社交支持等等。可能还要提到专业帮助的重要性,比如心理咨询。还要注意建议用户根据自己的情况选择适合的方法,不要一概而论。
用户可能需要具体的、可操作的建议,而不仅仅是泛泛的建议。比如,分解任务、优先级排序这些具体的方法可能对用户有帮助。另外,正念和冥想这些即时缓解压力的技巧也很实用。运动方面,除了身体健康,情绪也会受到影响,所以建议运动也是合理的。
还要考虑到用户可能没有太多时间阅读,所以建议中需要包含简单易行的方法,比如深呼吸、短暂休息等。同时,提醒用户不要忽视身体的基线需求,比如睡眠和饮食,这些容易被忽视但很重要。
另外,用户可能没有意识到压力可能源于长期积累的原因,所以建议定期自我反思和调整目标也很重要。最后,要鼓励用户寻求专业帮助,如果压力过大的话,避免延误问题。
需要确保语言亲切自然,避免使用专业术语,让用户觉得容易理解和接受。结构上分点列出,清晰明了,方便用户一步步尝试。同时,结尾给予鼓励,让用户感到支持,增强他们的信心。
</think>
我能理解压力带来的疲惫和焦虑感,这是很多人都会经历的挑战。以下是一些经过验证的方法,你可以根据自己的情况尝试调整:
---
### 1. **快速缓解压力的即时技巧**
- **呼吸调节**:尝试“4-7-8呼吸法”(吸气4秒→屏息7秒→呼气8秒),重复3-5次,能快速降低焦虑水平。
- **5分钟“微休息”**:设置手机倒计时,休息5分钟,做一些简单的拉伸、闭眼冥想,或喝杯水,避免长时间高强度工作。
- **感官安抚**:摸一摸毛绒玩具、闻薰衣草精油或薄荷精油,通过感官刺激转移注意力。
---
### 2. **拆解压力来源**
- **写“压力清单”**:把困扰你的事情列在纸上,区分哪些是**可控**(如任务分解)和**不可控**(如他人看法)。专注解决可控部分。
- **问自己**:“这件事一周后还重要吗?”:帮助你评估优先级,学会放弃不必要的焦虑。
---
### 3. **调整生活习惯**
- **规律作息**:睡眠不足会放大压力,试试固定起床/睡觉时间,避免熬夜刷手机。
- **减少刺激物依赖**:过量咖啡因、糖分可能加剧情绪波动,观察自己的饮食是否与压力相关。
- **每天15分钟“阳光时间”**:自然光有助于调节情绪,甚至比运动更有效。
---
### 4. **主动管理精力**
- **番茄工作法**:专注25分钟+休息5分钟,避免长时间高压状态。
- **设定“焦虑时间”**:每天固定15分钟专门思考烦恼,其他时间出现担忧时告诉自己“留到焦虑时间再处理”。
- **运动**:快走、跳绳等有氧运动能快速释放内啡肽,改善情绪。
---
### 5. **建立支持系统**
- **倾诉或社交**:和信任的人聊聊压力,研究表明倾诉本身就能减轻30%的压力。
- **加入兴趣社群**:通过共同爱好分散注意力,减少孤独感。
---
### 6. **长期调整:重新定义压力**
- **接纳不完美**:80%完成比100%完美更重要,很多压力源于对“必须做到最好”的执念。
- **关注微小积极**:每天记录1-2件让你感到平静或有成就感的小事(如“今天按时起床了”)。
- **意义感练习**:问自己:“这件事反映了我的哪些价值观?即使结果不如预期,我依然可以从中学习。”
---
### 如果压力持续影响生活:
建议寻求心理咨询师帮助,短期的情绪困扰是正常的,专业人士能提供个性化工具。你不需要独自硬扛,求助本身就是一种力量。 🌱
你可以先从1-2个小方法开始尝试,慢慢调整会发现自己的节奏。加油!
Case 02
输入问题
我在与伴侣的关系中遇到了困难,我们似乎无法进行有效的沟通。我应该怎么做呢?
模型结果
<think>
嗯,用户现在遇到了和伴侣沟通的问题,感觉无法有效沟通。首先,我需要理解他们的处境。可能他们感到不被理解,或者争吵频繁,或者有未解决的矛盾。用户可能希望找到具体的方法来改善沟通,重建信任和理解。
首先,我应该考虑用户的需求是什么。他们可能想要具体的步骤,而不仅仅是泛泛的建议。比如,他们可能需要学习倾听技巧,或者如何表达自己的感受,而不是指责对方。这时候,提供结构化的步骤会比较有帮助,比如建议他们设定规则,使用“我”语句,避免指责,定期沟通时间等。
接下来,我需要分析用户可能没有说出来的深层需求。也许他们感到孤独,或者对关系的未来感到担忧,或者有未解决的冲突积累。因此,除了沟通技巧,可能还需要建议他们解决冲突的方法,比如共同目标、寻求专业帮助等。
还要考虑文化差异或个性差异带来的沟通障碍。比如,有些人可能更倾向于直接表达,而另一些人则回避冲突。这时候,理解彼此的沟通风格,找到折中的方法很重要。
另外,用户可能需要情感支持,而不仅仅是策略。所以在回应中要表现出共情,肯定他们的努力,并给予鼓励。同时,提醒他们耐心和坚持的重要性,因为改善沟通需要时间。
还要注意避免评判,保持中立。用户可能处于情绪低落的状态,需要被接纳而不是被指责。提供积极的例子,比如具体的沟通例子,可能会帮助他们更好地理解如何应用这些建议。
最后,是否需要建议专业帮助?如果他们的情况比较严重,比如长期无法沟通或存在信任问题,可能需要伴侣咨询。但用户可能还没到这一步,所以需要温和地提出这个选项,让他们自己决定。
总结下来,回应需要包括:共情、具体步骤、解决冲突的方法、耐心建议、寻求帮助的选项,以及鼓励积极行动。确保信息清晰有条理,易于执行,同时传达支持和理解。
</think>
在伴侣关系中遇到沟通困难是许多人都会面临的挑战,但通过一些主动的调整和练习,通常可以逐步改善。以下是一些具体建议,帮助你找到方向:
---
### **第一步:自我反思——先理清问题的根源**
1. **识别情绪触发点**
- 你在沟通中容易感到受伤、愤怒或退缩吗?试着记录这些情绪出现的时刻和场景,可能是某些特定话题(如金钱、家务分配、未来规划)或对方的某种反应?
- **行动**:写下最近一次冲突的细节,包括你的感受、对方的反应,以及你希望对方理解的部分。
2. **反思自己的沟通模式**
- 你是否容易指责、防御性回应(如“你总是这样!”),还是回避问题(如沉默或冷战)?这些模式可能让对方感到被攻击,进一步加剧隔阂。
- **行动**:尝试在冷静时用镜像反问自己:“我是否在用指责的语气质问对方?如果对方处于我的处境,会如何感到?”
---
### **第二步:创造安全的沟通环境**
1. **设立“沟通规则”**
- 和伴侣约定:
- 避免在生气时强烈指责(如“你从不在乎我”),改为用“我感到被忽视”开头。
- 决定一个“暂停信号”(如彼此碰一下手或说“我们需要暂停”),避免情绪爆发。
- 每周设定一次“无干扰的深度对话时间”(如睡前30分钟)。
2. **练习倾听与共情**
- **主动倾听**:当对方说话时,放下手机,眼神接触,听完后复述对方的感受(“你刚才说……,我理解对吗?”)。
- **共情而非批判**:试着站在对方的角度思考问题,比如:“你提到工作压力大,是希望我多给予支持对吗?”
---
### **第三步:用“我”语句表达感受**
- **避免“你”开头的指责**(如“你总是……”“你从不……”),改为:
- **“我感到……”**(情绪)
- **“当……发生时,我有些难过,因为……”**
- **例子**:
- ❌“你根本不关心我!”
- ✅“当你加班到很晚时,我会感到孤单,因为我希望我们能一起度过更多时间。”
---
### **第四步:解决冲突——从对立转向合作**
1. **聚焦问题,而非指责对方**
- 提出具体困扰你们的点(如“关于家务分工”),避免笼统指责。可以说:“关于家务分配,我感到压力很大,我们能不能一起想个办法?”
2. **寻找共同目标**
- 提问双方:你们的核心需求是什么?比如:
- “希望更理解彼此”
- “共同解决生活问题”
- 即使差异大,也可以尝试找到折中方案(如“我们都想保持整洁,但可以每周只安排1天统一整理”)。
---
### **第五步:长期维护沟通质量**
1. **定期关系“检查”**
- 每月一次与伴侣互相问:“你觉得我们最近的沟通有哪些可以改进的地方?我也想听听你的想法。”
2. **学习共同活动**
- 一起做饭、散步或看电影,减少日常压力,创造轻松交流的机会。
3. **允许差异存在**
- 没有人能满足所有彼此的需求,但可以共同承担彼此的局限性(如“我们知道彼此有时会吵架,但我们愿意为修复关系付出努力”)。
---
### **如果尝试后仍无改善:**
- **考虑专业帮助**:伴侣咨询不是“关系失败”的标志,而是主动成长的选择。专业咨询师能帮助你们识别深层模式(如原生家庭的影响),并提供中立指导。
---
**记住**:沟通困难往往反映了关系中的深层矛盾,但通过耐心、主动调整,你们可以逐步重建信任和理解。即使偶尔反复,也不要放弃——关系的修复需要双方持续的努力,但每一次小的进步都值得肯定。
许可证
本项目采用 MIT 许可证。
致谢
- 感谢
DeepSeek模型的开发者。 - 感谢所有为心理学知识问答数据集做出贡献的研究人员。
联系方式
如有任何问题,请联系 [592392714@qq.com]。
注意: 本项目仅供学术研究使用,不构成医疗建议。
Description