Skip to content

私人健康咨询AI Agent是一个专注于提供个性化医疗咨询和健康管理建议的开源项目。本项目利用LLM微调技术和高效的模型部署方案,创建一个进行对话式健康咨询提供私有化专业建议的AI助手,项目本地部署,用户个人数据保存在本地,减少了个人隐私泄漏风险。

Notifications You must be signed in to change notification settings

zf-account/WellnessOne

Repository files navigation

私人健康问题咨询Agent

1 项目结构

1.1 项目文件结构

.
├── application
│   └── WellnessOne_web.py
├── configs
│   ├── config_fast.yaml
│   └── config.yaml
├── data
│   ├── original_data.txt
│   ├── processed
│   ├── raw
│   └── README.md
├── deployment
│   ├── Modelfile.WellnessOne
│   └── WellnessOne_lora.gguf
├── llama.cpp
├── logs
├── mcp_server
│   ├── __init__.py
│   ├── __main__.py
│   ├── __pycache__
│   └── server.py
├── README.md
├── requirements.txt
├── tools
│   ├── convert_txt_to_instruction.py
│   ├── convert_txt_to_json.py
│   ├── data_prepare.py
│   ├── logs
│   └── sync_monitor.py
└── training
    ├── logs
    ├── models
    └── train.py

36 directories, 39 files

1.2 模型层和应用层结构

2 功能模块

📊 数据处理 (dataScripts)

  • tools/convert_txt_to_instruction.py: 网上诊疗对话训练数据预处理脚本txt2json
  • tools/data_prepare.py: 训练数据集构建json2jsonl
  • 支持数据清洗、格式转换、分割等功能

🚀 模型部署 (deployment)

  • FAST_DEPLOYMENT_GUIDE.md: 详细的快速部署指南
  • Modelfile.WellnessOne: Ollama模型配置文件
  • WellnessOne_fast_lora.gguf: 训练好的LoRA权重文件
  • 支持一键部署到Ollama服务

📱 Web应用 (application)

  • WellnessOne_web.py: 基于 Streamlit 的医生角色对话Web界面
  • 支持实时对话、参数调节、聊天历史管理
  • 提供直观的用户界面和流式对话体验

🔌 MCP服务器 (mcp_server)

  • server.py: MCP (Model Context Protocol) 服务器实现
  • 提供与医生模型交互的API接口
  • 支持对话、模型信息查询、状态检查等功能

🎯 模型训练 (training)

  • WellnessOne_train.py: 医生角色模型训练脚本
  • configs/config.yaml: 完整训练配置
  • configs/config_fast.yaml: 快速训练配置
  • 基于LoRA技术进行高效微调
  • 支持GPU/MPS/CPU多种设备

3 安装依赖

# 1. 创建conda环境(指定Python版本)
conda create -n WellnessOne  python=3.13

# 2. 激活环境
conda activate WellnessOne 

# 3. 安装依赖
pip install -r requirements.txt

4 数据准备

原始数据为data/original_data.txt,执行两步转换,首先将数据转换为json格式,再将数据转换为训练格式JSONL,每一行是一个JSON对象

# 1. txt2json
python tools/convert_txt_to_instruction.py

# 2. json2jsonl
python tools/data_prepare.py

5 模型训练

# 开始训练
python training/train.py

# 在其他窗口同时启动监控(可选)
python tools/sync_monitor.py

6 模型部署-Ollama

6.1 下载并安装ollama

curl -fsSL https://ollama.ai/install.sh | sh
  • 验证安装
# 检查 Ollama 安装
ollama --version

# 查看帮助信息
ollama --help

6.2 模型转换

python llama.cpp/convert_lora_to_gguf.py \
    training/models/WellnessOne_fast \
    --outfile deployment/WellnessOne_lora.gguf

6.3 启动Ollma服务

# 启动 Ollama 服务(需要保持运行)
ollama serve
  • 验证服务状态
# 新开终端验证服务状态
curl http://localhost:11434/api/tags
  • 如果11434端口被占用,可以指定其他端口:
# 指定端口启动
OLLAMA_HOST=0.0.0.0:11435 ollama serve

6.4 拉取基础模型

下载基础模型

# 检查现有模型
ollama list

# 拉取 Qwen2.5-0.5B 基础模型(项目使用)
ollama pull qwen2.5:0.5b

# 验证基础模型下载成功
ollama list | grep qwen2.5

6.5 创建Ollama模型

cd deployment

# 使用现有Modelfile创建ollama模型(没有Modelfile需要创建Modelfile)
ollama create WellnessOne-qwen -f Modelfile.WellnessOne

# 验证模型创建成功
ollama list | grep WellnessOne

6.6 模型验证和测试

  • 查看模型信息
ollama show WellnessOne-qwen
  • 交互式测试
ollama run WellnessOne-qwen
  • 命令行直接对话:
ollama run WellnessOne-qwen "Who are you?"
  • 性能测试:
ollama run WellnessOne-qwen --verbose "Introduce yourself"

# 输出信息包括:
# - total duration: 总运行时间
# - load duration: 模型加载时间
# - prompt eval count: 提示词token数量
# - prompt eval duration: 提示词处理时间
# - eval count: 响应token数量
# - eval duration: 响应生成时间

7 Web应用

基于Streamlit构建的和AI医生对话的Web应用,提供友好的用户界面和实时对话功能。支持模型选择、流式对话、连接状态监控、参数调节、对话历史管理等完整功能。

7.1 Streamlit概述

Streamlit是一个基于Python的开源框架,专门用于快速构建数据科学和机器学习的Web应用,无需前端开发(html、css、js)经验,只使用纯Python代码就能构建美观的Web应用。

  • 首先安装Streamlit:
pip install streamlit
  • 确保Ollama服务运行
ollama serve
  • 确保lora微调模型已部署
ollama list | grep WellnessOne

7.2 基于Streamlit开发Web应用

  • 启动Web应用
streamlit run application/WellnessOne_web.py
  • 访问Web界面
# 浏览器自动打开: http://localhost:8501
  • Web界面类似如下

8 agent应用-基于MCP协议集成至Claude Desktop中

PS:仅支持MacOS和Windows

8.1 模块概述

MCP模块解决的问题是为模型提供标准化的工具接口,让外部应用能够通过统一的协议与模型进行交互。通过标准化的MCP协议,将本地部署的医疗咨询模型集成到Claude Desktop中,实现AI助手扩展。 首先,因为MCP服务器需要管理多个工具函数(状态)和处理请求(行为),所以通过FastMCP框架来定义服务器实例。

from mcp.server.fastmcp import FastMCP

8.2 创建MCP服务器实例

mcp = FastMCP("WellnessOne-chat")

def get_ollama_host() -> str:
    """Get the Ollama host from environment variables"""
    return os.getenv("OLLAMA_HOST", "http://localhost:11434")

def get_model_name() -> str:
    """Get the model name from environment variables"""
    return os.getenv("WELLNESSONE_MODEL", "WellnessOne_fast")

OLLAMA_HOST = get_ollama_host()
MODEL_NAME = get_model_name()
  • 定义工具函数,通过@mcp.tool()装饰器将普通函数转换为MCP工具。完成基础对话功能和对模型状态的获取
  • 通过工具类扩展同一个模型的使用,比如角色扮演对话及诗词互动

8.3 使用方式

  • 启动方式
# 方式1: 直接运行模块
python -m mcp_server

# 方式2: 运行主文件
python mcp_server/server.py

# 在Claude Desktop中可用工具:
## - chat_with_WellnessOne: 基础对话(支持参数调节)
## - get_model_info: 获取模型详细信息
## - list_available_models: 列出所有可用模型
## - check_ollama_status: 检查Ollama服务状态
  • Claude Desktop配置文件 : claude_desktop_config.json
{
  "mcpServers": {
    "WellnessOne-chat": {
      "command": "python",
      "args": ["-m", "mcp_server"],
      "cwd": "README.md",
      "env": {
        "OLLAMA_HOST": "http://localhost:11434",
        "WELLNESSONE_MODEL": "WellnessOne_fast"
      }
    }
  }
}

About

私人健康咨询AI Agent是一个专注于提供个性化医疗咨询和健康管理建议的开源项目。本项目利用LLM微调技术和高效的模型部署方案,创建一个进行对话式健康咨询提供私有化专业建议的AI助手,项目本地部署,用户个人数据保存在本地,减少了个人隐私泄漏风险。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published