{"repo":"wink-wink-wink555/PsyChat","free":true,"listed":false,"github":"https://github.com/wink-wink-wink555/PsyChat","clone":"git clone https://github.com/wink-wink-wink555/PsyChat.git","description":"PsyChat 是一款基于范例引导与Agentic RAG的智能 AI 心理咨询助手。基于高度匹配的Few-shot与学习笔记，应用理性情绪行为疗法（REBT）帮助用户识别并调整非理性信念，缓解负面情绪。","language":"Python","stars":33,"topics":["ai-assistant","chromadb","deepseek","fastapi","llm","mental-health","psychology","rag","vector-database","rebt"],"license":"MIT","category":"ai-agents","readme_excerpt":"💝 PsyChat 基于 Agentic RAG 的智能心理咨询伴侣 基于范例模仿真实心理咨询师的话语模式，为用户提供专业的心理健康支持 --- ✨ 项目简介 PsyChat 是一个基于检索增强生成（RAG）技术的心理咨询 AI 助手。其核心目标是最大程度地 蒸馏真实心理咨询师的说话方式 ——不只是复用知识库中的内容，而是主动分析、学习专业咨询师在共情、提问、引导节奏上的共性模式，并将其迁移到每一轮对话中。 系统运用理情行为疗法（REBT）理论框架，结合多阶段 Agent 工作流，帮助用户识别和调整非理性信念，缓解负面情绪。 🌟 核心特性 - 🧠 ReAct 查询优化 ：轻检索获取锚点 → 分析匹配度 → 改写或直接检索，动态提升检索准确性 - 📖 完整对话上下文扩展 ：突破 chunk 片段限制，回溯完整咨询案例，让模型看到咨询师的完整工作节奏 - 🎯 咨询师话术分析 ：主动提炼参考案例中咨询师的共情方式、提问策略、引导节奏和语言特点，作为显式约束指导回答 - 💡 交互策略规划 ：回答前先判断对话所处阶段，规划下一步引导方向，而非被动应答 - 🔄 对话持续监控 ：连续多轮无 RAG 时自动触发强制检索，保持专业性 - 🎤 语音合成播放 ：基于阿里云百炼 TTS，将回答转换为温暖的语音 --- 🏗️ 系统架构 整体工作流流程图 （点击展开查看） 各阶段详解 阶段一：RAG 判断 + 主题分类（1 次 LLM） PsychologyAgent.judge rag and classify() 在单次调用中完成两件事： 1. 是否检索 ：区分简单问候/闲聊（不检索）与实质性心理问题（检索） 2. 主题分类 ：从 12 个预设主题中识别 1-3 个相关主题，用于后续向量检索过滤 阶段二：ReAct 查询优化（最多 3 轮，每轮 1 次 LLM） PsychologyAgent.generate search queries with pre retrieval() 采用 ReAct 模式： 步骤 操作 说明 ------ ------ ------ Observation 轻检索 top3 从向量库获取锚点文档，提取主题和表达样例 Thought 分析匹配度 判断查询是否过于口语化、宽泛、缺乏术语 Action: FINISH 直接使用当前查询 锚点已足够精准 Action: REWRITE 改写 3-5 个查询词 对齐知识库表达方式，从不同角度（症状/原因/方案）描述 包含死循环保护：改写结果与上轮相同时自动终止。 阶段三：多查询词向量检索 RAGSystem. search with multiple queries() 对所有查询词并行检索，合并去重后按相似度排序，返回 TOP K 文档。 - 强制检索时，将本次结果与上次缓存结果合并，利用历史上下文提升召回 - 支持多主题过滤，各主题分配检索配额后合并 阶段四：上下文扩展（纯 I/O，0 次 LLM） RAGSystem. expand context() 解决了 chunk 分割导致\"断章取义\"的核心问题： 背景 ：知识库中每个 chunk 仅包含 3 轮对话（约 6 条消息），而一个完整的咨询案例往往有 10-15 轮。检索到的片段可能丢失咨询师的开场共情建立、问题探索过程和结尾引导总结。 实现 ： 保护机制： - 只扩展相似度最高的 TOP 2 个文档 - 仅当完整对话比 chunk 长 30% 以上时才扩展，避免重复展示 - seen anchors 去重，防止同一对话","default_branch":null,"files":null,"tree":[],"storefront":"/r/wink-wink-wink555","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/wink-wink-wink555/PsyChat/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}