Skip to content

Repository files navigation

Open Health Agent (OHA)

开源 AI 健康顾问 Agent — 帮你把健康数据收好、存牢、智能分析。

健康数据是你最值钱的个人资产:体重、饮食、运动、睡眠、用药、症状……但它们散落在各处——Apple Health、运动手环、体检报告、聊天记录——换手机丢一部分,换平台丢一部分,从来没有一个地方能统一看到。

OHA 想做一件事:把你的健康数据统一收集、永久保存、交给 AI 智能分析。

为什么做这个

  • 健康数据极其敏感,不应该存在别人的服务器上
  • 健康是长期状态,三个月前的体重记录今天看没意义,和一年的数据放一起就能看到趋势
  • 健康数据的分析能力会随 AI 进化不断提升,但前提是数据已经在那了
  • 现阶段最重要的事就是先把数据收好,分析能力会自动升级

核心设计

隐私优先,私有化部署

  • 健康数据是最敏感的个人信息——体重、病史、用药、睡眠
  • 不上云,不经过第三方,数据在你自己的服务器上
  • SQLite 单文件存储,随时可以备份、迁移、导出

数据永久保留,永不删除

  • 所有原始消息永久存储,不做过期清理,不做数据压缩丢弃
  • 原始消息是 source of truth——即使当前分析不完美,未来可以用更好的模型重新分析历史数据
  • 健康数据的价值随时间递增:一条记录单独看没意义,积累数月就能看到趋势

零硬编码,数据 + 提示词驱动

  • 代码只做基础设施(数据存取、通道传输、调度),所有分析、决策、判断全部交给 LLM
  • 不硬编码健康阈值(BMI 范围、热量上限、血压标准等),由提示词引导 AI 判断
  • 这意味着:模型越强,你的健康顾问越智能;提示词迭代,分析质量就提升
  • 需要新的分析能力时,加数据 + 加提示词,而不是改代码

统一管理,多源汇聚(规划中)

  • 目标:将 Apple Health、小米运动等分散在各平台的健康数据统一归拢
  • 当前:通过 QQ/微信聊天随手记录,也可以通过 Web 界面交互
  • 一个地方看到你所有的健康信息

效果预览

饮食记录 + 主动关怀 慢性病关联分析 综合健康周报
说一句「中午吃了排骨饭」
AI 记录热量并给出晚餐建议
还会主动推送午间关怀
「鼻子不舒服」
AI 关联过敏性鼻炎病史 + 眼睛干涩症状
结合春季花粉给出针对性建议
综合体重、运动、睡眠、饮食、症状
AI 自动生成周报
发现睡眠是最大短板

功能

聊天式记录

不需要填表,像聊天一样随手记录:

「今天跑了 5 公里,32 分钟,出了好多汗」 「中午吃了排骨饭」 「最近鼻子老是不舒服」

AI 自动提取数据、关联历史记录、给出个性化分析和建议。

支持 9 种健康数据

类型 数据点
身体数据 体重、体脂率、BMI
饮食记录 食物、热量、蛋白质、碳水、脂肪、钠、餐次
运动记录 运动类型、时长、消耗热量、心率、距离
睡眠记录 时长、质量、入睡/醒来时间、深睡时长
饮水记录 饮水量
症状记录 描述、严重程度、身体部位、关联记录
用药记录 药物、剂量、用药时间(支持停药标记)
慢性病追踪 慢性病管理(支持停用追踪)
健康观察 自由文本健康观察记录

智能特性

  • 主动关怀 — 定期扫描用户状态,AI 判断是否需要主动问候或提醒
  • 定时任务 — 支持周期/定时/一次性任务(如每天提醒吃药)
  • 记忆系统 — 长期记忆(用户偏好、重要事实)+ 短期记忆(对话摘要)
  • 用户档案 — 身高、年龄、性别、疾病史、过敏史、饮食偏好、健康目标

通道支持

  • 微信 — 通过微信聊天交互,扫码即可绑定
  • QQ Bot — 通过 QQ 消息交互
  • WebSocket — 实时流式交互(适合 Web 前端和第三方集成)

技术栈

  • 运行时: Bun
  • 语言: TypeScript
  • LLM: 多模型支持(通过 pi-ai,支持 Anthropic / OpenAI / 智谱 / Google / Mistral 等)
  • 数据库: SQLite + Drizzle ORM
  • Web 框架: Hono
  • Web 前端: Vue 3 + Vite
  • QQ Bot: pure-qqbot
  • 微信: pure-wechatbot

快速开始

环境要求

安装

git clone <repo-url>
cd open-health-agent
bun install

配置

创建 .env 文件:

# 服务器
PORT=3001
DB_PATH=./data/oha.db

# LLM 提供商(见下方支持的提供商列表)
LLM_PROVIDER=anthropic
LLM_MODEL=claude-sonnet-4-6

# API Key(根据 LLM_PROVIDER 设置对应的 Key)
ANTHROPIC_API_KEY=your-key-here

# 心跳(默认 15 分钟)
HEARTBEAT_INTERVAL_MS=900000

# 其他
LOG_LEVEL=info

支持的 LLM 提供商

提供商 LLM_PROVIDER 环境变量 示例模型
Anthropic anthropic ANTHROPIC_API_KEY claude-sonnet-4-6
OpenAI openai OPENAI_API_KEY gpt-4o
智谱 (Z.ai) zai ZAI_API_KEY glm-5
Google Gemini google GEMINI_API_KEY gemini-2.5-pro
Mistral mistral MISTRAL_API_KEY mistral-large-latest
Groq groq GROQ_API_KEY llama-3.3-70b
xAI xai XAI_API_KEY grok-3
OpenRouter openrouter OPENROUTER_API_KEY -
Kimi kimi-coding KIMI_API_KEY -

只需设置 LLM_PROVIDER + LLM_MODEL + 对应的 API Key 环境变量,即可使用。提供商通过 pi-ai 统一适配。

注意:目前仅测试了智谱 (Z.ai) 的 GLM 模型(使用 Coding Plan 的 Key),其他提供商暂未实际测试,理论上可用但可能需要调整。

启动

# 开发模式(API 服务 + Web 前端)
bun run dev

启动后:

  • API 服务:http://localhost:3001
  • Web 前端:http://localhost:5173(开发模式自动启动)

数据库会在首次启动时自动创建。如果后续修改了 schema,需要运行 bun run db:push 同步表结构。

绑定通道

启动后访问 Web 前端(http://localhost:5173),选择通道并完成绑定:

微信:点击微信标签页 → 扫描二维码 → 自动绑定

QQ Bot:点击 QQ 标签页 → 填入 App ID 和 App Secret → 绑定

绑定成功后,通过对应的聊天窗口发送消息即可开始使用。

也可以直接通过 WebSocket 连接 ws://localhost:3001/ws 使用,无需绑定。

架构

src/
├── features/          # 功能模块(每个功能 store + tools + prompt)
├── agent/             # Agent 核心(工具收集、查询工具工厂)
├── bot/               # 用户 Bot 管理(每用户独立实例)
├── prompts/           # 模块化提示词(核心角色 + 行为规则)
├── session/           # 会话管理(生命周期、过期摘要)
├── store/             # 存储层(SQLite + Drizzle ORM)
├── heartbeat/         # 心跳机制(AI 驱动主动关怀)
├── cron/              # 定时任务系统
├── channels/          # 通道适配器(微信、QQ Bot、WebSocket)
├── server/            # HTTP API
├── infrastructure/    # 日志等基础设施
├── config.ts          # 集中配置
└── main.ts            # 入口

开发命令

命令 说明
bun run dev 启动服务 + Web 前端(开发模式)
bun run server 仅启动 API 服务
bun run build 编译 TypeScript + Web 前端
bun run typecheck 类型检查
bun run db:push 推送 schema 变更到 SQLite

License

MIT

相关项目

项目 说明
open-health-agent AI 健康助手(本项目)
pure-wechatbot 微信 iLink Bot 协议客户端
pure-qqbot QQ Bot 协议客户端

About

开源 AI 健康顾问 Agent — 统一收集、永久保存、智能分析你的健康数据

Topics

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages