一个基于大语言模型的医疗领域智能对话系统,支持知识库检索、图片OCR识别、流式响应、智能体联网搜索、个性化用户档案以及管理员后台等功能。
- 智能对话:基于大语言模型的医疗问答,支持流式响应
- 知识库检索:集成 Dify 知识库,提供专业医疗知识支持
- 智能体搜索:基于 ReAct 范式的智能体,支持联网搜索权威医疗资料
- 图片OCR:支持上传图片并识别文字内容
- 用户管理:完整的用户注册、登录、信息管理功能
- 个性化档案:AI可根据用户年龄、性别、既往病史提供个性化建议
- 隐私控制:用户可选择是否在本次对话中参考个人信息
- 管理员后台:管理员可查看、编辑、删除所有用户信息
- ReAct 智能体:实现 Thought-Action-Observation-Answer 推理范式
- 流式响应:SSE (Server-Sent Events) 实现打字机效果
- 知识融合:Dify 知识库与 SerpAPI 搜索结果智能融合
- 图片识别:百度OCR API 识别图片中的文字
- Markdown渲染:支持代码块、列表、加粗等格式
- 响应式设计:适配不同屏幕尺寸
- 医疗主题UI:专业医疗配色与交互设计
- 权限管理:基于角色的访问控制(RBAC)
- 框架:FastAPI + Python 3.10+
- 数据库:MySQL + SQLAlchemy (异步)
- AI模型:OpenAI GPT-4 / 其他兼容OpenAI API的模型
- 知识库:Dify API
- 智能体:ReAct 范式实现,支持联网搜索
- 搜索引擎:SerpAPI (Google搜索)
- OCR识别:百度OCR API
- 其他:Alembic(数据库迁移)、Pydantic(数据验证)
- 框架:Vue 3 + TypeScript
- 构建工具:Vite
- UI组件库:Element Plus
- 状态管理:Pinia
- Markdown渲染:marked
- HTTP客户端:Axios
- 设计系统:医疗专业主题 (医疗蓝 #0891B2 | 健康绿 #22C55E)
.
├── llm-chat-backend/ # 后端项目
│ ├── app/
│ │ ├── api/ # API路由
│ │ │ ├── admin.py # 管理员接口
│ │ │ ├── auth.py # 认证接口
│ │ │ ├── conversations.py # 对话管理
│ │ │ ├── messages_stream.py # 流式消息
│ │ │ └── upload.py # 文件上传
│ │ ├── core/ # 核心配置
│ │ ├── models/ # 数据库模型
│ │ ├── schemas/ # Pydantic模型
│ │ ├── services/ # 业务逻辑
│ │ │ ├── agent/ # ReAct智能体
│ │ │ │ ├── react_agent.py # ReAct主控制器
│ │ │ │ ├── tools/ # 工具集
│ │ │ │ │ └── search_tool.py # SerpAPI搜索
│ │ │ │ └── fusion/ # 结果融合引擎
│ │ │ │ └── fusion_engine.py
│ │ │ └── agent_llm_service.py # 智能体LLM服务
│ │ └── main.py # 应用入口
│ ├── requirements.txt # Python依赖
│ └── .env.example # 环境变量示例
│
├── llm-chat-frontend/ # 前端项目
│ ├── src/
│ │ ├── views/ # 页面组件
│ │ │ ├── ChatView.vue # 聊天界面
│ │ │ ├── ProfileView.vue # 用户信息界面
│ │ │ ├── AdminUsersView.vue # 管理员用户管理
│ │ │ ├── LoginView.vue # 登录界面
│ │ │ └── RegisterView.vue # 注册界面
│ │ ├── services/ # API服务
│ │ │ ├── admin.ts # 管理员API
│ │ │ └── api.ts # 通用API
│ │ ├── stores/ # Pinia状态管理
│ │ ├── router/ # 路由配置
│ │ └── main.ts # 入口文件
│ ├── package.json # Node依赖
│ └── .env.example # 环境变量示例
│
└── README.md # 项目说明
- Python 3.10+
- Node.js 18+
- MySQL 8.0+
git clone <your-repo-url>
cd code1cd llm-chat-backend
# 创建虚拟环境
python -m venv venv
# 激活虚拟环境
# Windows:
venv\Scripts\activate
# macOS/Linux:
source venv/bin/activate
# 安装依赖
pip install -r requirements.txt
# 配置环境变量
cp .env.example .env
# 编辑 .env 文件,填写你的API密钥和数据库配置
# 初始化数据库
python init_db.py
# 启动服务
python run.py后端服务将在 http://localhost:8000 启动
cd llm-chat-frontend
# 安装依赖
npm install
# 配置环境变量
cp .env.example .env
# 编辑 .env 文件(如有需要)
# 启动开发服务器
npm run dev前端服务将在 http://localhost:5173 启动
打开浏览器访问 http://localhost:5173
默认测试账号:
- 普通用户:
- 用户名:
user - 密码:
user123
- 用户名:
- 管理员:
- 用户名:
admin - 密码:
admin123
- 用户名:
# 数据库配置
DATABASE_URL=mysql+aiomysql://username:password@localhost:3306/llm_chat
# OpenAI API配置
OPENAI_API_KEY=your_openai_api_key
OPENAI_API_BASE=https://api.openai.com/v1
OPENAI_MODEL=gpt-4
# Dify 知识库配置
DIFY_API_KEY=your_dify_api_key
DIFY_DATASET_ID=your_dataset_id
# SerpAPI 搜索配置(智能体联网搜索)
SERPAPI_KEY=your_serpapi_key
# 百度OCR配置
BAIDU_OCR_API_KEY=your_baidu_ocr_api_key
BAIDU_OCR_SECRET_KEY=your_baidu_ocr_secret_key
# 其他配置
SECRET_KEY=your_secret_key_for_jwtSerpAPI 用于智能体联网搜索权威医疗资料。
获取步骤:
- 访问 SerpAPI 官网
- 注册账号(支持邮箱注册或GitHub登录)
- 进入 Dashboard
- 复制 Your API Key
- 将密钥填入
.env文件的SERPAPI_KEY
注意事项:
- 免费账户每月有 100 次搜索额度
- 搜索范围限定在权威医疗网站(WHO、Mayo Clinic、WebMD等)
- 如未配置或额度用尽,系统会自动降级为 LLM+Dify 模式
- 访问 Dify 官网
- 创建知识库并上传医疗文档
- 在知识库设置中获取 API Key 和 Dataset ID
- 访问 百度智能云
- 创建文字识别应用
- 获取 API Key 和 Secret Key
VITE_API_BASE_URL=http://localhost:8000/api/v1本系统实现了基于 ReAct (Reasoning + Acting) 范式的智能体,工作流程如下:
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Thought │ -> │ Action │ -> │ Observation│ -> │ Answer │
│ 分析问题 │ │ 执行搜索 │ │ 整理信息 │ │ 生成回答 │
└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘
- 智能决策:自动分析用户问题,判断是否需要联网搜索
- 并行检索:同时查询 Dify 知识库和 SerpAPI 搜索引擎
- 结果融合:将搜索结果与知识库内容智能融合,生成综合回答
- 来源标注:提供搜索来源,增强回答可信度
系统内置管理员功能,管理员账号(用户名:admin)拥有以下权限:
- 查看用户列表:分页展示所有注册用户基本信息
- 搜索用户:按用户名关键词搜索用户
- 编辑用户信息:修改用户昵称、年龄、性别、既往病史
- 重置密码:为任意用户重置登录密码
- 删除用户:删除用户账号及其所有对话记录
- 使用管理员账号登录系统
- 点击侧边栏用户头像下拉菜单
- 选择"用户管理"进入管理员后台
- 仅用户名为
admin的账号可访问管理功能 - 后端 API 层面进行权限验证,防止越权访问
- 管理员不能删除自己的账号
启动后端服务后,访问 http://localhost:8000/docs 查看自动生成的 Swagger API 文档。
| 分组 | 路径前缀 | 说明 |
|---|---|---|
| Auth | /api/v1/auth |
认证相关(登录、注册、用户信息) |
| Conversations | /api/v1/conversations |
对话管理 |
| Messages | /api/v1/messages |
消息发送与流式响应 |
| Upload | /api/v1/upload |
文件上传 |
| Admin | /api/v1/admin |
管理员功能(需管理员权限) |
- 基础对话功能
- 流式响应
- 知识库检索
- 图片OCR识别
- 用户管理系统
- 个人信息参考
- ReAct 智能体联网搜索
- UI/UX 医疗主题美化
- 管理员后台功能
- 多轮对话上下文优化
- 语音输入输出
- 移动端适配优化
详见 CHANGELOG.md
- Fork 本仓库
- 创建你的特性分支 (
git checkout -b feature/AmazingFeature) - 提交你的更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 打开一个 Pull Request
本项目仅供学习和研究使用。
本系统提供的医疗建议仅供参考,不能替代专业医师的诊断和治疗。如有身体不适,请及时就医。
如有问题或建议,欢迎提交 Issue 或联系开发者。
注意:使用本项目需要配置自己的 API 密钥(OpenAI、Dify、SerpAPI、百度OCR等),请确保遵守相关服务条款。