一、方案概述
本方案面向养老院、社区养老服务站、护理站等机构场景,提供一套本地化部署、隐私可控、可运营、可跟踪的养老陪伴智能体系统。
核心原则:
- 老人数据主权:原始语音、对话、情绪、偏好等个人数据保存在老人手机端,老人可随时授权或撤销;
- 机构本地计算:ASR、LLM、TTS、陪伴策略等计算能力运行在机构端本地,不上传公网;
- 家属只看摘要:家属端仅接收结构化陪伴摘要,不接触原始对话;
- 社工专业介入:社工通过脱敏画像设计智能体方案,并跟踪效果;
- 知识库可运营:免费源即开即用,付费源通过短信/电话授权后使用;
- 方案可版本化:社工发布的陪伴方案支持版本管理、回滚和效果跟踪。
二、整体架构
┌─────────────────────────────────────────────────────────────┐
│ 老人端 App(数据主权端) │
│ 本地加密存储:原始语音、对话、情绪、偏好、收听记录 │
│ 功能:大按钮交互、语音对话、内容播放、授权管理 │
│ 授权:机构端计算 / 家属摘要 / 社工介入 │
└──────────────────────────┬──────────────────────────────────┘
│ 局域网 HTTPS(脱敏片段)
▼
┌─────────────────────────────────────────────────────────────┐
│ 机构端桌面程序(本地计算节点) │
│ 容器化服务:ASR / LLM / TTS / 策略引擎 / 监控面板 │
│ 管理功能:终端激活 / 服务监控 / 知识订阅 / 信息转发 │
│ 数据边界:不保存原始语音、完整对话、家庭联系方式 │
└──────────────────────────┬──────────────────────────────────┘
│ TLS(结构化摘要 / 脱敏画像)
▼
┌─────────────────────────────────────────────────────────────┐
│ 云端服务端(信息转发层) │
│ 功能:家属摘要路由 / 社工画像路由 / 方案回传 / 授权校验 │
│ 数据边界:不保存原始语音、完整对话、个人身份数据 │
└──────────────┬───────────────────────────┬──────────────────┘
│ │
▼ ▼
┌──────────────────────┐ ┌──────────────────────────────┐
│ 家属端 │ │ 社工工作台 │
│ 结构化陪伴摘要 │ │ 脱敏画像 / 方案设计 │
│ 风险提示 / 回电建议 │ │ 版本管理 / 效果跟踪 │
└──────────────────────┘ └──────────────────────────────┘
▲
│ 内容订阅 / 授权校验
│
┌─────────────────────────────────────────────────────────────┐
│ 知识库统一网关(云端) │
│ 免费源:公共领域小说、开源新闻、公开科普 │
│ 付费源:短信/电话授权后下发 Token │
│ 数据边界:不保存老人个人身份数据 │
└─────────────────────────────────────────────────────────────┘
三、角色与职责
| 角色 | 职责 | 数据权限 |
|---|---|---|
| 老人 | 使用 App、管理授权、接收陪伴内容 | 拥有全部原始数据,可随时撤销授权 |
| 机构 | 安装机构端、管理终端、开通订阅、监控服务 | 仅见脱敏统计和运行状态 |
| 家属 | 接收陪伴摘要、风险提示 | 仅见结构化摘要 |
| 社工 | 查看脱敏画像、设计方案、跟踪效果 | 仅见脱敏画像和方案指标 |
| 云端服务端 | 信息转发、授权校验、方案回传 | 不保存原始个人数据 |
| 知识库网关 | 内容分发、授权管理、用量结算 | 不保存个人身份数据 |
四、端到端业务流程
4.1 机构安装与初始化
- 机构在本地电脑安装机构端桌面程序;
- 程序自动生成机构实例 ID;
- 自动启动本地容器服务(ASR、LLM、TTS、策略引擎、监控面板);
- 窗口展示两个二维码:App 安装码和激活配置码。
4.2 老人扫码激活
- 老人或护理员扫描 App 安装码,下载老人端 App;
- 扫描激活配置码,写入机构服务地址和机构实例 ID;
- 老人端生成设备 ID 和本地加密密钥;
- 老人端向机构端发起激活请求;
- 机构端生成待激活记录;
- 老人端确认后完成激活,进入待授权状态。
4.3 老人日常使用
- 老人通过大按钮或语音发起对话;
- 老人端本地加密保存原始记录;
- 老人端将脱敏片段发送至机构端;
- 机构端返回 ASR、LLM、TTS 结果;
- 老人端播放陪伴内容;
- 老人可随时在 App 中查看授权状态并撤销。
4.4 家属摘要接收
- 老人在 App 中开启”家属摘要”授权;
- 老人端生成结构化摘要(陪伴时长、情绪趋势、回电建议等);
- 摘要经机构端转发至云端服务端;
- 服务端推送至家属端;
- 家属仅能看到摘要,无法查看原始对话或录音。
4.5 社工专业介入
- 老人在 App 中开启”社工介入”授权;
- 老人端生成脱敏画像(兴趣标签、情绪趋势、风险信号);
- 画像经机构端转发至云端服务端;
- 社工在工作台查看脱敏信息;
- 社工设计智能体陪伴方案并发布版本;
- 方案经服务端回传至机构端,老人端确认后生效;
- 社工持续跟踪方案效果,可回滚或发布新版本。
4.6 知识订阅管理
- 机构端查看可用知识源列表;
- 免费源一键开通;
- 付费源通过短信/电话授权后获取 Token;
- 机构可随时关闭不需要的订阅;
- 知识库网关按授权范围分发内容,不保存老人个人数据。
五、核心数据库设计
5.1 老人端本地库 elder_app.db
CREATE TABLE elder_profile (
elder_id TEXT PRIMARY KEY,
device_id TEXT NOT NULL,
nickname TEXT,
language TEXT DEFAULT 'zh-CN',
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL
);
CREATE TABLE elder_raw_record (
id TEXT PRIMARY KEY,
elder_id TEXT NOT NULL,
type TEXT NOT NULL,
content_ref TEXT,
created_at TEXT NOT NULL
);
CREATE TABLE elder_authorization (
id TEXT PRIMARY KEY,
elder_id TEXT NOT NULL,
target_type TEXT NOT NULL,
target_id TEXT NOT NULL,
scope TEXT NOT NULL,
status TEXT NOT NULL,
granted_at TEXT NOT NULL,
revoked_at TEXT
);
CREATE TABLE family_contact (
id TEXT PRIMARY KEY,
elder_id TEXT NOT NULL,
name TEXT,
relation TEXT,
channel TEXT,
contact_ref TEXT,
enabled INTEGER DEFAULT 1
);
CREATE TABLE elder_preference (
id TEXT PRIMARY KEY,
elder_id TEXT NOT NULL,
category TEXT NOT NULL,
weight REAL DEFAULT 0.5,
updated_at TEXT NOT NULL
);
CREATE TABLE elder_session (
id TEXT PRIMARY KEY,
elder_id TEXT NOT NULL,
start_at TEXT NOT NULL,
end_at TEXT,
duration_sec INTEGER,
mood_summary TEXT,
risk_flag INTEGER DEFAULT 0
);
CREATE TABLE elder_scheme_version (
id TEXT PRIMARY KEY,
elder_id TEXT NOT NULL,
version TEXT NOT NULL,
scheme_id TEXT NOT NULL,
config_json TEXT NOT NULL,
activated_at TEXT NOT NULL,
deactivated_at TEXT
);
5.2 机构端本地库 instance_local.db
CREATE TABLE instance_profile (
instance_id TEXT PRIMARY KEY,
name TEXT NOT NULL,
location TEXT,
created_at TEXT NOT NULL
);
CREATE TABLE instance_elder_binding (
id TEXT PRIMARY KEY,
instance_id TEXT NOT NULL,
elder_id TEXT NOT NULL,
status TEXT NOT NULL,
bound_at TEXT NOT NULL
);
CREATE TABLE service_log (
id TEXT PRIMARY KEY,
instance_id TEXT NOT NULL,
elder_id TEXT,
service_type TEXT NOT NULL,
status TEXT NOT NULL,
latency_ms INTEGER,
created_at TEXT NOT NULL
);
CREATE TABLE daily_stats (
id TEXT PRIMARY KEY,
instance_id TEXT NOT NULL,
elder_id TEXT,
date TEXT NOT NULL,
session_count INTEGER DEFAULT 0,
total_duration_sec INTEGER DEFAULT 0,
mood_anxiety_count INTEGER DEFAULT 0,
mood_low_count INTEGER DEFAULT 0,
risk_event_count INTEGER DEFAULT 0
);
CREATE TABLE scheme_execution (
id TEXT PRIMARY KEY,
instance_id TEXT NOT NULL,
elder_id TEXT NOT NULL,
scheme_id TEXT NOT NULL,
version TEXT NOT NULL,
activated_at TEXT NOT NULL,
deactivated_at TEXT,
last_evaluated_at TEXT
);
CREATE TABLE risk_event (
id TEXT PRIMARY KEY,
instance_id TEXT NOT NULL,
elder_id TEXT NOT NULL,
level TEXT NOT NULL,
reason TEXT,
handled INTEGER DEFAULT 0,
created_at TEXT NOT NULL
);
CREATE TABLE kb_subscription (
id TEXT PRIMARY KEY,
instance_id TEXT NOT NULL,
source_id TEXT NOT NULL,
status TEXT NOT NULL,
token_ref TEXT,
subscribed_at TEXT NOT NULL,
expired_at TEXT
);
5.3 知识库网关库 kb_gateway.db
CREATE TABLE kb_source (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
type TEXT NOT NULL,
access_mode TEXT NOT NULL,
content_type TEXT NOT NULL,
copyright_tag TEXT NOT NULL,
enabled INTEGER DEFAULT 1
);
CREATE TABLE kb_content (
id TEXT PRIMARY KEY,
source_id TEXT NOT NULL,
title TEXT,
summary TEXT,
text_url TEXT,
audio_url TEXT,
duration_sec INTEGER,
language TEXT,
tags TEXT,
published_at TEXT,
cached_at TEXT
);
CREATE TABLE kb_auth (
id TEXT PRIMARY KEY,
instance_id TEXT NOT NULL,
phone_hash TEXT NOT NULL,
status TEXT NOT NULL,
created_at TEXT NOT NULL,
expired_at TEXT
);
CREATE TABLE kb_auth_code (
id TEXT PRIMARY KEY,
phone_hash TEXT NOT NULL,
code TEXT NOT NULL,
channel TEXT NOT NULL,
used INTEGER DEFAULT 0,
created_at TEXT NOT NULL,
expired_at TEXT NOT NULL
);
CREATE TABLE kb_token (
id TEXT PRIMARY KEY,
instance_id TEXT NOT NULL,
token TEXT NOT NULL,
scope TEXT,
status TEXT NOT NULL,
created_at TEXT NOT NULL,
expired_at TEXT NOT NULL
);
CREATE TABLE kb_usage (
id TEXT PRIMARY KEY,
instance_id TEXT NOT NULL,
source_id TEXT,
content_id TEXT,
bytes INTEGER DEFAULT 0,
play_seconds INTEGER DEFAULT 0,
created_at TEXT NOT NULL
);
六、API 接口设计
6.1 老人端 → 机构端
| 接口 | 方法 | 说明 |
|---|---|---|
/v1/compute/asr | POST | 提交脱敏音频片段,返回文本和情绪标签 |
/v1/compute/chat | POST | 提交文本或事件,返回陪伴回复 |
/v1/compute/tts | POST | 提交文本,返回音频流 |
/v1/compute/strategy | POST | 提交陪伴事件,返回推送策略 |
/v1/elder/activate | POST | 扫码后激活绑定 |
/v1/elder/authorize | POST | 授权机构端参与计算 |
/v1/elder/revoke | POST | 撤销授权 |
6.2 机构端 → 社工工作台(经云端)
| 接口 | 方法 | 说明 |
|---|---|---|
/v1/social/elder/{id}/profile | GET | 获取脱敏画像 |
/v1/social/schemes | GET | 获取可用方案模板 |
/v1/social/schemes | POST | 创建新方案 |
/v1/social/schemes/{id}/versions | POST | 发布新版本 |
/v1/social/schemes/{id}/versions/{ver}/rollback | POST | 回滚版本 |
/v1/social/elder/{id}/tracking | GET | 获取单老人跟踪指标 |
/v1/social/cohort/tracking | GET | 获取群体对照指标 |
6.3 机构端 → 家属端(经云端)
| 接口 | 方法 | 说明 |
|---|---|---|
/v1/family/summary | POST | 推送结构化摘要 |
/v1/family/alert | POST | 推送中高风险提醒 |
/v1/family/elder/{id}/status | GET | 家属查询当前状态 |
6.4 机构端 → 知识库网关
| 接口 | 方法 | 说明 |
|---|---|---|
/v1/kb/sources | GET | 获取可用内容源 |
/v1/kb/subscribe | POST | 开通订阅 |
/v1/kb/unsubscribe | POST | 关闭订阅 |
/v1/kb/auth/sms | POST | 发送短信授权码 |
/v1/kb/auth/verify | POST | 校验授权码并换取 Token |
/v1/kb/usage/report | POST | 上报用量 |
6.5 机构端内部监控
| 接口 | 方法 | 说明 |
|---|---|---|
/v1/instance/status | GET | 获取服务健康度 |
/v1/instance/elders | GET | 获取终端列表及状态 |
/v1/instance/stats/today | GET | 获取今日聚合统计 |
七、部署指南
7.1 环境准备
Ubuntu 机构端
sudo apt update sudo apt install -y docker.io podman
Windows 机构端
wsl --update wsl --enable-containers
老人端 Android
- 最低 Android 8.0;
- 使用 SQLCipher 加密本地数据库;
- 密钥写入 Android Keystore;
- 局域网访问使用 HTTPS。
7.2 机构端桌面程序
采用 Tauri 2.0 构建,支持自动更新。
pnpm tauri add updater pnpm tauri add process
构建签名:
export TAURI_SIGNING_PRIVATE_KEY="..." export TAURI_SIGNING_PRIVATE_KEY_PASSWORD="..."
前端检查更新:
import { check } from "@tauri-apps/plugin-updater";
import { relaunch } from "@tauri-apps/plugin-process";
const update = await check();
if (update) {
await update.downloadAndInstall();
await relaunch();
}
7.3 容器服务编排
services:
asr:
image: kb-elder/asr-sensevoice:latest
ports: ["7860:7860"]
volumes: ["./models/asr:/models"]
llm:
image: kb-elder/llm-qwen:latest
ports: ["8080:8080"]
volumes: ["./models/llm:/models"]
tts:
image: kb-elder/tts-piper:latest
ports: ["8090:8090"]
strategy:
image: kb-elder/strategy-engine:latest
ports: ["8095:8095"]
volumes: ["./data/instance:/data"]
gateway:
image: kb-elder/family-gateway:latest
ports: ["8100:8100"]
AMD 显卡场景可使用 llama.cpp、Ollama 或本地 CPU 推理。
7.4 知识库网关部署
docker compose -f kb-gateway/docker-compose.yml up -d
网关配置项:
- 免费源白名单;
- 付费源授权策略;
- 短信/语音验证码服务;
- Token 签发与校验;
- 用量上报接口;
- 版权内容访问控制。
7.5 云端服务端部署
云端服务端为无状态转发层,可水平扩展。
核心职责:
- 校验机构端凭证;
- 路由家属摘要;
- 路由社工脱敏画像;
- 回传社工方案;
- 校验老人授权状态;
- 不保存原始语音和完整对话。
八、隐私与合规边界
| 数据类型 | 存储位置 | 可见方 |
|---|---|---|
| 原始语音 | 老人端本地加密 | 仅老人本人 |
| 完整对话 | 老人端本地加密 | 仅老人本人 |
| 家庭联系方式 | 老人端本地加密 | 仅老人本人 |
| 脱敏计算请求 | 临时传输 | 机构端(计算后丢弃) |
| 运行日志 | 机构端 | 机构管理员 |
| 聚合统计 | 机构端 | 机构管理员 |
| 结构化摘要 | 经服务端转发 | 家属 |
| 脱敏画像 | 经服务端转发 | 社工 |
| 智能体方案 | 经服务端回传 | 机构端 / 老人端 |
| 知识内容索引 | 知识库网关 | 机构端 |
所有授权均可由老人端随时撤销。撤销后,机构端和服务端应立即停止对应信息转发。高风险事件(跌倒、自伤、长时间无响应)必须转人工处理。
九、推荐技术组合
| 模块 | 推荐实现 | 说明 |
|---|---|---|
| 老人端存储 | Room + SQLCipher | 本地加密,Keystore 保护密钥 |
| 机构端桌面 | Tauri 2.0 | 轻量、支持自动更新 |
| 容器运行时 | Docker / Podman / WSL Containers | Windows 可用 wslc |
| ASR | SenseVoiceSmall / FunASR | 支持中文和情绪识别 |
| LLM | Qwen / Llama / DeepSeek | 本地推理 |
| TTS | Piper / CosyVoice3 | 本地生成有声内容 |
| 方案沙箱 | WasmEdge | 可选,用于社工方案插件化 |
| 更新 | tauri-plugin-updater | Ed25519 签名校验 |
| 开源协议 | MIT / Apache-2.0 / CC BY | 优先宽松协议组件 |
十、方案优势总结
- 隐私可控:原始数据留在老人端,授权可撤销;
- 部署简单:机构端一键安装,自动更新;
- 本地计算:不依赖公网,断网仍可本地陪伴;
- 专业介入:社工可设计方案并跟踪效果;
- 家属无扰:仅接收结构化摘要,不暴露原始对话;
- 知识可运营:免费源即开即用,付费源授权后使用;
- 方案可迭代:版本管理、回滚、群体对照分析;
- 开源友好:优先采用宽松协议组件,便于本地化部署和二次开发。
Leave a Reply