MindPal 是一个基于开源项目 minimind 构建的、具有情绪诊疗和心灵陪伴功能的 AI 助手。本项目旨在通过 LoRA 微调技术,训练出一个专注于心理健康领域的对话模型。
该模型能够针对用户不同的情绪状态提供:
- 简要的原因分析
- 共情与安抚
- 具体的解决方案建议
MindPal 致力于帮助用户了解心理状态的来源成因,并在聊天中通过引导和建议帮助他们改善情绪问题,提供温暖、专业的心理陪伴。
trainer/train_lora_modified.py: 基于train_lora.py修改,支持双数据集 LoRA 训练策略。eval_model.py: 增强了评测功能,用于评估心理陪伴模型的性能。scripts/web_demo.py: 改进了 Web 界面,支持加载 LoRA 模型并优化了用户交互体验。
extract_first_conversation.py: 数据预处理工具,从多轮对话数据中提取第一轮对话。dataset/lora_identity.jsonl: 自我认知数据集(MindPal 身份设定)。dataset/lora_mindpal.jsonl: 心理陪伴功能数据集(提取自 SoulChatCorpus)。
- 心理陪伴模型 LoRA 权重:
out\lora\lora_mindpal4_512.pth
本项目采用了双数据集策略,以平衡模型的“自我认知”与“专业能力”。
- 来源: 团队自制。
- 内容: 包含身份介绍(如“我是 MindPal,由 Soulmates 创造”)、功能说明和简单问候。
- 大小: 约 14.7KB,72 条单轮对话。
- 目的: 确立模型身份,防止幻觉,使其明确自己是“心理陪伴师”。
- 来源: 心理健康-灵心大模型微调数据集。
- 处理: 使用
extract_first_conversation.py从原始 865MB 的多轮对话中提取第一轮对话(User-Assistant 对)。 - 内容: 涵盖情绪支持、心理困扰倾诉等场景。
- 大小: 处理后约 30MB,45,861 条单轮对话。
- 目的: 训练模型的情绪理解、共情表达和心理辅导能力。
用于从大型多轮对话语料库中提取高质量的单轮对话。 使用方式:
python extract_first_conversation.py
# 需在代码中修改 INPUT_FILE, TARGET_SIZE_MB, OUTPUT_FILE 等参数Tokenizer 的核心功能是将自然语言文本转换为模型可识别的 ID 序列。本项目主要涉及以下步骤:
- 文本拆分: 将文本转换为字节序列。
- BPE 分词: 使用 Byte-Pair Encoding 算法,统计高频字符对并合并,生成子词(Subword)。最终词汇表大小为 6400。
- 特殊 Token: 引入
<|im_start|>和<|im_end|>等特殊 Token 标识对话边界。 - 序列预处理: 对齐长度、添加 Padding 等。
处理流程:
文本 -> 字节序列 -> BPE 合并 -> Token ID 映射 -> 模型输入
模型训练的核心是通过最小化损失函数来优化参数。
- 前向传播: 模型输出预测的
logits(对数概率分布)。 - 交叉熵损失 (Cross Entropy): 计算预测分布与真实标签之间的差异。
loss_per_token = -log(P(correct_token)) - Mask 机制: 使用
loss_mask过滤掉 Padding 部分的损失,只计算有效 Token 的误差。 - 平均损失: 将所有有效位置的损失求和并取平均,作为最终的优化目标。
我们在 train_lora_modified.py 中实现了以下改进:
- 双数据集混合训练: 同时加载认知数据集和心理陪伴数据集。
- 差异化学习率: 身份数据集采用
1.5倍学习率倍数 (identity_lr_multiplier),强化角色认知。 - 重复训练机制: 身份数据集在每个 Epoch 中重复训练
5次 (identity_repeat_times),确保模型不遗忘身份。 - 优化保存策略: 每个 Epoch 结束自动保存模型。
python train_lora_modified.py \
--identity_data_path "../dataset/lora_identity.jsonl" \
--mindpal_data_path "../dataset/lora_mindpal.jsonl" \
--identity_repeat_times 5 \
--identity_lr_multiplier 1.5 \
--epochs 20 \
--batch_size 32 \
--learning_rate 1e-4 \
--lora_name "lora_mindpal4" \
--use_wandb \
--wandb_project "lora_mindpal"使用 eval_model.py 对训练好的模型进行性能评估。我们扩展了测试问题集,涵盖了情感支持、自我认知等维度。
运行评估:
python eval_model.py \
--model_mode 1 \
--hidden_size 512 \
--load 0 \
--lora_name lora_mindpal4本项目提供了基于 Streamlit 的 Web 交互界面,支持实时加载训练好的 LoRA 模型。启动 WebUI方式如下。
远程服务器运行: 这里以服务器运行在8500端口为例,先自行进行端口转发,然后运行:
cd scripts
streamlit run web_demo.py --server.address 0.0.0.0 --server.port 8500本地运行:
cd scripts
streamlit run web_demo.pyMindPal 模型成功实现了基本的心理陪伴功能,具备良好的自我认知和共情能力。
- 优点: 角色定位清晰,回复温暖专业,建议具有实用性(如推荐深呼吸、冥想等)。
- 不足: 回复有时略显模板化,缺乏深度引导能力。
- 未来计划: 引入多轮对话训练,尝试强化学习以优化回复质量,并支持更多样的情绪场景。


