开源 AI 健康顾问 Agent — 帮你把健康数据收好、存牢、智能分析。
健康数据是你最值钱的个人资产:体重、饮食、运动、睡眠、用药、症状……但它们散落在各处——Apple Health、运动手环、体检报告、聊天记录——换手机丢一部分,换平台丢一部分,从来没有一个地方能统一看到。
OHA 想做一件事:把你的健康数据统一收集、永久保存、交给 AI 智能分析。
- 健康数据极其敏感,不应该存在别人的服务器上
- 健康是长期状态,三个月前的体重记录今天看没意义,和一年的数据放一起就能看到趋势
- 健康数据的分析能力会随 AI 进化不断提升,但前提是数据已经在那了
- 现阶段最重要的事就是先把数据收好,分析能力会自动升级
- 健康数据是最敏感的个人信息——体重、病史、用药、睡眠
- 不上云,不经过第三方,数据在你自己的服务器上
- SQLite 单文件存储,随时可以备份、迁移、导出
- 所有原始消息永久存储,不做过期清理,不做数据压缩丢弃
- 原始消息是 source of truth——即使当前分析不完美,未来可以用更好的模型重新分析历史数据
- 健康数据的价值随时间递增:一条记录单独看没意义,积累数月就能看到趋势
- 代码只做基础设施(数据存取、通道传输、调度),所有分析、决策、判断全部交给 LLM
- 不硬编码健康阈值(BMI 范围、热量上限、血压标准等),由提示词引导 AI 判断
- 这意味着:模型越强,你的健康顾问越智能;提示词迭代,分析质量就提升
- 需要新的分析能力时,加数据 + 加提示词,而不是改代码
- 目标:将 Apple Health、小米运动等分散在各平台的健康数据统一归拢
- 当前:通过 QQ/微信聊天随手记录,也可以通过 Web 界面交互
- 一个地方看到你所有的健康信息
| 饮食记录 + 主动关怀 | 慢性病关联分析 | 综合健康周报 |
![]() |
![]() |
![]() |
| 说一句「中午吃了排骨饭」 AI 记录热量并给出晚餐建议 还会主动推送午间关怀 |
「鼻子不舒服」 AI 关联过敏性鼻炎病史 + 眼睛干涩症状 结合春季花粉给出针对性建议 |
综合体重、运动、睡眠、饮食、症状 AI 自动生成周报 发现睡眠是最大短板 |
不需要填表,像聊天一样随手记录:
「今天跑了 5 公里,32 分钟,出了好多汗」 「中午吃了排骨饭」 「最近鼻子老是不舒服」
AI 自动提取数据、关联历史记录、给出个性化分析和建议。
| 类型 | 数据点 |
|---|---|
| 身体数据 | 体重、体脂率、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
- Bun >= 1.0
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_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 |
MIT
| 项目 | 说明 |
|---|---|
| open-health-agent | AI 健康助手(本项目) |
| pure-wechatbot | 微信 iLink Bot 协议客户端 |
| pure-qqbot | QQ Bot 协议客户端 |


