伴眸 CompanionEye 技术方案
CompanionEye"伴眸"是一款面向居家养老场景的 AI 眼镜智能体。方案的重点不是把手机 App 搬到眼镜上,而是把 AI 眼镜的第一视角、自然语音、用户画像、生活记录和家属端维护能力串成一套可运行的照护工作流。老人侧只需要自然说话,系统侧完成意图判断、图像采集、状态管理和接口调用,家属侧负责维护长期资料并回看关键记录。

完整工作流:

1. 项目定位与设计目标
伴眸定位为居家适老生活守护智能体,主要面向独居老人、轻度认知衰退老人和家庭照护者。居家照护中的很多问题发生在日常细节里:早上的药是否已经吃过,桌上的点心能不能吃,钥匙刚才放在哪里,照片里的人是谁。传统手环、固定摄像头和普通语音助手能解决一部分问题,但它们很难同时理解"老人正在看什么"和"这位老人自己的生活记录是什么"。
我们将能力边界聚焦在五类老人侧场景:
| 场景 | 典型问题 | 系统目标 |
|---|---|---|
| 用药防错 | "我今天早上的药吃了吗?""这个药现在能吃吗?" | 结合计划、记录和当前画面,提醒漏服、重复服药或疑似错服 |
| 饮食提醒 | "这个我能吃吗?""这瓶饮料适合我吗?" | 结合食物画面、慢病标签和忌口信息,给出生活级饮食提醒 |
| 生活找物 | "帮我记住钥匙在这里""我的眼镜在哪?" | 保存老人主动记录的位置摘要,后续用语音提示最近一次有效位置 |
| 人物识别 | "这是谁?""照片里这个人是谁?" | 在家庭人物库范围内识别姓名和关系,低置信度时明确不确定 |
| 陪伴问答 | "今天冷不冷?""我有点无聊" | 结合画像、插件和大模型能力,提供日常生活问答与智能陪伴 |
这些场景共享同一套用户画像、图像状态、后端记录和家属端资料维护机制,围绕老人日常生活形成连续的照护能力。
2. 系统总体架构
我们采用"AI 眼镜端 + 百宝箱/GPASS 工作流 + 后端服务 + 家属管理端"的整体架构。四个部分分工明确,并围绕老人侧一次语音请求形成完整数据流。
#mermaid-svg-2gybvzKprCbzFPGF{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-2gybvzKprCbzFPGF .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-2gybvzKprCbzFPGF .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-2gybvzKprCbzFPGF .error-icon{fill:#552222;}#mermaid-svg-2gybvzKprCbzFPGF .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-2gybvzKprCbzFPGF .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-2gybvzKprCbzFPGF .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-2gybvzKprCbzFPGF .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-2gybvzKprCbzFPGF .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-2gybvzKprCbzFPGF .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-2gybvzKprCbzFPGF .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-2gybvzKprCbzFPGF .marker{fill:#333333;stroke:#333333;}#mermaid-svg-2gybvzKprCbzFPGF .marker.cross{stroke:#333333;}#mermaid-svg-2gybvzKprCbzFPGF svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-2gybvzKprCbzFPGF p{margin:0;}#mermaid-svg-2gybvzKprCbzFPGF .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-2gybvzKprCbzFPGF .cluster-label text{fill:#333;}#mermaid-svg-2gybvzKprCbzFPGF .cluster-label span{color:#333;}#mermaid-svg-2gybvzKprCbzFPGF .cluster-label span p{background-color:transparent;}#mermaid-svg-2gybvzKprCbzFPGF .label text,#mermaid-svg-2gybvzKprCbzFPGF span{fill:#333;color:#333;}#mermaid-svg-2gybvzKprCbzFPGF .node rect,#mermaid-svg-2gybvzKprCbzFPGF .node circle,#mermaid-svg-2gybvzKprCbzFPGF .node ellipse,#mermaid-svg-2gybvzKprCbzFPGF .node polygon,#mermaid-svg-2gybvzKprCbzFPGF .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-2gybvzKprCbzFPGF .rough-node .label text,#mermaid-svg-2gybvzKprCbzFPGF .node .label text,#mermaid-svg-2gybvzKprCbzFPGF .image-shape .label,#mermaid-svg-2gybvzKprCbzFPGF .icon-shape .label{text-anchor:middle;}#mermaid-svg-2gybvzKprCbzFPGF .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-2gybvzKprCbzFPGF .rough-node .label,#mermaid-svg-2gybvzKprCbzFPGF .node .label,#mermaid-svg-2gybvzKprCbzFPGF .image-shape .label,#mermaid-svg-2gybvzKprCbzFPGF .icon-shape .label{text-align:center;}#mermaid-svg-2gybvzKprCbzFPGF .node.clickable{cursor:pointer;}#mermaid-svg-2gybvzKprCbzFPGF .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-2gybvzKprCbzFPGF .arrowheadPath{fill:#333333;}#mermaid-svg-2gybvzKprCbzFPGF .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-2gybvzKprCbzFPGF .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-2gybvzKprCbzFPGF .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-2gybvzKprCbzFPGF .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-2gybvzKprCbzFPGF .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-2gybvzKprCbzFPGF .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-2gybvzKprCbzFPGF .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-2gybvzKprCbzFPGF .cluster text{fill:#333;}#mermaid-svg-2gybvzKprCbzFPGF .cluster span{color:#333;}#mermaid-svg-2gybvzKprCbzFPGF div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-2gybvzKprCbzFPGF .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-2gybvzKprCbzFPGF rect.text{fill:none;stroke-width:0;}#mermaid-svg-2gybvzKprCbzFPGF .icon-shape,#mermaid-svg-2gybvzKprCbzFPGF .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-2gybvzKprCbzFPGF .icon-shape p,#mermaid-svg-2gybvzKprCbzFPGF .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-2gybvzKprCbzFPGF .icon-shape .label rect,#mermaid-svg-2gybvzKprCbzFPGF .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-2gybvzKprCbzFPGF .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-2gybvzKprCbzFPGF .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-2gybvzKprCbzFPGF :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} AI 眼镜端
语音输入与第一视角画面
百宝箱/GPASS 工作流
意图识别、拍照判断、场景分发
后端服务
用户画像、用药、饮食、物品、人脸代理
家属管理端
资料维护、记录回看、人物关系修正
图 1 伴眸系统总体架构。眼镜端负责感知和语音交互,GPASS 负责编排,后端负责生活记忆和算法服务接入,家属端负责资料维护与记录回看。
2.1 AI 眼镜端
眼镜端负责采集老人语音和第一视角画面,并通过语音播报返回结果。老人无需在眼镜端进行复杂配置,用药、饮食、找物、识人等操作都尽量通过一句自然语言触发,例如"帮我看看这个能不能吃""我今天药吃过了吗"。
AI 眼镜的关键价值在第一视角。固定摄像头能看见房间,手环能看见体征,眼镜则能看到老人正在看的药盒、食物、照片和人物。我们的工作流围绕这一点设计:只有当任务需要当前画面时才调用图像能力,不把眼镜端设计成持续录像设备。
2.2 百宝箱/GPASS 工作流
GPASS 工作流是系统中枢,负责把老人一句话转成可执行任务。它处理的是一条完整链路:判断是否在和智能体对话,读取用户画像,判断是否需要第一视角图像,进入对应场景,调用后端接口,生成老人侧短语音回复,必要时写入记录。
#mermaid-svg-9uCq7Tov5cMz01Am{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-9uCq7Tov5cMz01Am .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-9uCq7Tov5cMz01Am .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-9uCq7Tov5cMz01Am .error-icon{fill:#552222;}#mermaid-svg-9uCq7Tov5cMz01Am .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-9uCq7Tov5cMz01Am .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-9uCq7Tov5cMz01Am .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-9uCq7Tov5cMz01Am .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-9uCq7Tov5cMz01Am .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-9uCq7Tov5cMz01Am .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-9uCq7Tov5cMz01Am .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-9uCq7Tov5cMz01Am .marker{fill:#333333;stroke:#333333;}#mermaid-svg-9uCq7Tov5cMz01Am .marker.cross{stroke:#333333;}#mermaid-svg-9uCq7Tov5cMz01Am svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-9uCq7Tov5cMz01Am p{margin:0;}#mermaid-svg-9uCq7Tov5cMz01Am .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-9uCq7Tov5cMz01Am .cluster-label text{fill:#333;}#mermaid-svg-9uCq7Tov5cMz01Am .cluster-label span{color:#333;}#mermaid-svg-9uCq7Tov5cMz01Am .cluster-label span p{background-color:transparent;}#mermaid-svg-9uCq7Tov5cMz01Am .label text,#mermaid-svg-9uCq7Tov5cMz01Am span{fill:#333;color:#333;}#mermaid-svg-9uCq7Tov5cMz01Am .node rect,#mermaid-svg-9uCq7Tov5cMz01Am .node circle,#mermaid-svg-9uCq7Tov5cMz01Am .node ellipse,#mermaid-svg-9uCq7Tov5cMz01Am .node polygon,#mermaid-svg-9uCq7Tov5cMz01Am .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-9uCq7Tov5cMz01Am .rough-node .label text,#mermaid-svg-9uCq7Tov5cMz01Am .node .label text,#mermaid-svg-9uCq7Tov5cMz01Am .image-shape .label,#mermaid-svg-9uCq7Tov5cMz01Am .icon-shape .label{text-anchor:middle;}#mermaid-svg-9uCq7Tov5cMz01Am .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-9uCq7Tov5cMz01Am .rough-node .label,#mermaid-svg-9uCq7Tov5cMz01Am .node .label,#mermaid-svg-9uCq7Tov5cMz01Am .image-shape .label,#mermaid-svg-9uCq7Tov5cMz01Am .icon-shape .label{text-align:center;}#mermaid-svg-9uCq7Tov5cMz01Am .node.clickable{cursor:pointer;}#mermaid-svg-9uCq7Tov5cMz01Am .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-9uCq7Tov5cMz01Am .arrowheadPath{fill:#333333;}#mermaid-svg-9uCq7Tov5cMz01Am .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-9uCq7Tov5cMz01Am .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-9uCq7Tov5cMz01Am .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-9uCq7Tov5cMz01Am .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-9uCq7Tov5cMz01Am .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-9uCq7Tov5cMz01Am .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-9uCq7Tov5cMz01Am .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-9uCq7Tov5cMz01Am .cluster text{fill:#333;}#mermaid-svg-9uCq7Tov5cMz01Am .cluster span{color:#333;}#mermaid-svg-9uCq7Tov5cMz01Am div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-9uCq7Tov5cMz01Am .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-9uCq7Tov5cMz01Am rect.text{fill:none;stroke-width:0;}#mermaid-svg-9uCq7Tov5cMz01Am .icon-shape,#mermaid-svg-9uCq7Tov5cMz01Am .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-9uCq7Tov5cMz01Am .icon-shape p,#mermaid-svg-9uCq7Tov5cMz01Am .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-9uCq7Tov5cMz01Am .icon-shape .label rect,#mermaid-svg-9uCq7Tov5cMz01Am .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-9uCq7Tov5cMz01Am .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-9uCq7Tov5cMz01Am .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-9uCq7Tov5cMz01Am :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 是
否/复用
用药
饮食
找物
识人
陪伴问答
接收老人语音
读取用户画像
是否需要第一视角图像
调用图像节点获取当前画面
沿用历史对话与图像上下文
业务场景分类
用药守护
饮食提醒
生活找物
人物识别
陪伴问答
结束
图 2 GPASS 总体业务流程。工作流先接收语音、读取画像、判断是否需要第一视角图像,再进入五类核心场景。
2.3 后端服务
后端是工作流和家属端之间的生活记忆层。GPASS 适合做流程编排和语音交互,但不适合长期保存用药计划、服药记录、饮食历史、物品位置和人物关系。后端负责把这些信息结构化保存,并以插件形式接入工作流。
| 数据对象 | 支撑能力 | 说明 |
|---|---|---|
| 用户画像 | 饮食、用药、陪伴问答 | 保存年龄、健康标签、饮食忌口、专属记忆等信息 |
| 用药计划 | 用药防错 | 保存药品、剂量、服用时段和饭前饭后要求 |
| 用药记录 | 用药防错 | 保存老人确认过的服药时间、药品、剂量 |
| 饮食记录 | 饮食提醒 | 保存食物内容、时段和时间,支持家属回看 |
| 物品位置 | 生活找物 | 保存老人主动记录的物品名称和位置描述 |
| 人物档案 | 识人辅助 | 保存人脸特征、姓名、关系和备注 |
2.4 家属管理端
家属管理端是资料维护和事件回看入口。家属在这里维护用药计划、饮食忌口、健康标签和人物关系;老人侧在眼镜端触发任务后,系统把关键结果写回后端,家属再查看整理后的记录。这种分工降低了老人端操作负担,也避免把照护做成持续音视频监控。
3. 智能体激活流程与图像状态管理
本节说明智能体如何从一段自然语音进入稳定工作流,核心是判断是否应该响应、是否需要当前画面,以及如何管理多轮对话中的图像上下文。
3.1 对话触发控制
老人居家环境中会出现大量非指令语音。我们在总控节点先判断当前语句是否在对眼镜智能体说话,再决定是否进入业务流程。如果不是对智能体发起请求,流程直接结束,不读取图像、不调用后端。
例如老人和家属聊天时提到"今天药吃了吗",系统不应自动进入用药判断;只有当语义中出现"帮我看看""我今天是不是吃过药""这个能不能吃"等明确请求时,才继续处理。

图 3 对话触发与用户画像读取。总控节点先判断是否对智能体说话,再通过后端读取用户画像。
完成触发判断后,工作流进入场景意图识别。这里采用语义路由方式,根据老人语音、历史上下文和当前图像状态共同判断下一步路径。

图 4 场景意图识别。工作流将请求分发到饮食健康、用药管理、物品位置记忆和人物识别等分支。
3.2 图像触发与变量复用
第一视角图像是伴眸的优势,但持续拍照会带来延迟、隐私问题和上下文混乱。当前工作流把图像处理拆成三种状态:
| 图像状态 | 判断依据 | 工作流动作 |
|---|---|---|
| 拍照 | 用户指向眼前对象,例如"这个药能吃吗""这是谁" | 调用眼镜设备拍照节点,并将图片地址写入 tmp_image |
| 维持 | 用户围绕上一张图继续追问,例如"那它能不能吃" | 不重复拍照,沿用上一轮 tmp_image |
| 清空 | 话题切换,上一张图不再相关 | 清空或更新图像变量,避免旧图干扰 |

图 5 图像状态变量管理。工作流在"拍照、维持、清空"之间切换,并将结果写入临时图像变量。
这个机制让多轮对话更自然。老人先问"这个点心我能吃吗",系统拍照并判断;老人接着问"那我吃一小口行吗",系统可以复用上一张图,并结合刚才的饮食判断继续回复。这样既减少了重复视觉调用,也更贴近真实使用习惯。
4. 核心场景实现
4.1 饮食健康
当老人问"这个我能吃吗"时,系统不能只识别画面里的食物,还要读取用户画像中的慢病标签、饮食忌口、过敏项、用药信息和近期饮食记录。对糖尿病老人,高糖点心和含糖饮料需要更谨慎;对高血压老人,咸菜、腌制食品和浓汤需要提醒;如果近期已经记录吃过某些食物,则会在推荐时避免重复推荐。
当前饮食工作流先读取用户用药和忌口信息,再进行二级意图识别。饮食问题被拆成五类:饮食信息询问、饮食能否食用判断、饮食推荐、饮食记录新增和饮食记录查询。

图 6 饮食场景二级判断。饮食场景先读取用户相关信息,再将请求拆分到能否食用、饮食推荐、记录新增和记录查询等路径。
这套拆分可以避免无意义图像调用。例如,"这个饮料能喝吗"通常需要第一视角图像和包装信息;"我今天晚饭吃什么好"主要依赖用户画像和饮食偏好;"帮我记一下中午吃了面条"直接进入记录新增;"我刚吃过蛋糕,还能吃水果吗"需要读取历史饮食记录。
在能否食用判断中,第一视角图像提供食物、包装或配料表信息,用户画像提供个人化规则。系统提取高糖、高盐、高油、高嘌呤、酒精、过敏原等风险标签,再生成老人侧短语音提醒。输出必须保守,例如"这个可能偏甜,少吃一点更稳妥",不能写成医疗诊断。
饮食记录则把一次提醒沉淀为后端数据。工作流先从语音中提取食物名称和食用时间,缺失时轻量追问;信息完整后调用后端写入记录。这样家属端后续能看到整理后的饮食事件,无需保存连续餐桌画面。

图 7 饮食记录写入。工作流根据食物名称、时间和当前对话,判断后写入饮食记录。
饮食场景把提前提醒和长期记录结合起来。提醒发生在老人准备吃之前,记录则用于后续追问和家属回看,使第一视角、用户画像和生活记录形成关联,而不只是单次识别食物。
4.2 用药管理
用药场景的技术重点是"计划"和"记录"分离。家属端维护用药计划,后端保存药品、剂量、服用时段和饭前饭后要求;老人侧每次确认服药后,再写入当天记录。系统判断"今天药吃了吗"时,必须同时读取这两类信息。
当前工作流进入用药场景后,先获取计划。如果没有计划,直接提示当前没有维护用药计划,不继续做无依据判断。计划存在时,再获取当天记录,并将计划和记录序列化为变量供后续判断。

图 8 用药计划和当天记录读取。工作流先读取计划,再读取今日记录,后续判断都围绕这两类数据展开。
用药场景主要处理以下任务:
| 任务 | 处理依据 | 输出策略 |
|---|---|---|
| 查询是否已服药 | 当前时间、今日记录、用药计划 | 提醒已服、未服或记录缺失 |
| 查询用药计划 | 结构化计划 | 用短句说明药品、剂量和时段 |
| 新增服药记录 | 老人确认、药品名称、时间 | 二次确认后写入记录 |
| 分析眼前药品 | 当前图像、计划信息、老人问题 | 核对可见药盒、药瓶或药片信息 |
| 药品常识问答 | 大模型或插件能力 | 只做通用常识提示,不给处方建议 |

图 9 用药场景细分流程。用药工作流按计划查询、用药记录、药品分析和常见用药问题分支处理。
用药防错主要覆盖几种情况。漏服提醒方面,当前时段计划中有药品但当天没有记录时,提示老人核对药盒。重复服药方面,当天已有同一时段记录时,提醒不要重复吃。疑似错服兜底方面,眼前药品与计划不匹配或图像无法确认时,系统会说明"不确定",建议查看标签或联系家属。系统还可以回答常见用药问题,但只做通用常识提示,不调整处方。
4.3 生活找物
找物场景分为记录位置和查找位置两条路径。老人说"帮我记住钥匙在这里"或者"帮我记一下我的钥匙放床头柜了"时,系统提取物品名称,并结合当前第一视角画面或用户描述生成位置记录。老人后续问"我的钥匙在哪"时,系统按物品名称查询记录,并通过语音返回位置。

图 10 寻物工作流。工作流先提取物品名称,再判断记录或查询,并通过后端读写物品位置。
找物场景强调主动记录。系统不做无差别录像,也不长期保存无关画面。后端保存物品名称、用户编号、位置描述和更新时间,并采用更新式记录策略:同一用户同一物品重复记录时更新位置,查询时先精确匹配,再模糊匹配。
4.4 人物识别与关系提示
人物识别定位为认人辅助,帮助老人在脸盲或遗忘人物关系时提供提醒。老人问"这是谁"时,系统能够给出姓名和关系以及人物记忆,并支持家属端持续维护。
人物场景先进行意图分类,分为新增人物、身份识别、信息查询和人物信息更新。底层 companioneye_face 负责人脸检测、向量提取、入库和识别;GPASS 工作流负责组织对话、选择目标人脸、生成老人侧口播和二次确认。

图 11 人物识别意图分类。人物场景被拆分为新增人物、身份识别、信息查询和资料更新。
识别时,后端调用人脸识别能力,返回画面中检测到的人脸、姓名、关系和人物备注。之后大模型结合用户问题判断老人指向或描述的是哪一个人,再组织成适合语音播报的关系提示。
新增人物时,如果画面中有多人,工作流需要判断录入哪一个人。当前设计通过第一视角图像和大模型节点分析老人语音中的指向或方位表达,例如"左边这个""中间这位",或者结合手指指向选择目标人脸。方位和指向选择由 GPASS 中的多模态大模型完成,底层 Face API 负责检测、裁剪、入库和识别。

图 12 新增人物时的目标人脸选择。工作流结合画面人脸和语音中的方位、指向信息,选择要入库的人物。
人物信息查询和更新让识别结果可以持续修正。老人或家属可以补充姓名、关系、备注;下一次识别时,播报内容随之更新。这样,人脸识别结果和家庭人物档案可以持续关联和修正。
4.5 陪伴问答
陪伴问答承担日常生活服务的陪伴和智能问答能力。老人问天气、周边服务、简单生活问题时,系统可以通过大模型和插件能力处理。同时也能陪老人聊天、讲故事或讲笑话,缓解独居时的孤独感。
当前工作流中已经接入天气查询、Bing 搜索、票务查询、周边搜索等插件入口,能够支持日常生活问答。

图 13 陪伴问答与插件扩展。陪伴问答作为生活服务入口,通过插件扩展天气、搜索、票务和周边查询能力。
5. 后端技术方案:后端数据库、人脸服务与家属协同
后端技术方案的重点,是把 GPASS 工作流需要的数据、算法能力和家属维护能力组织起来。后端负责生活记忆,人脸服务负责识别能力,家属端负责长期资料维护,它们共同支撑眼镜端的即时判断。
5.1 后端生活记忆层设计
后端在方案中承担"生活记忆层"的角色。老人侧的语音交互通常很短,例如"药吃了吗""这个能吃吗""钥匙在哪"。如果只依赖当轮对话,系统很难给出可靠回答。后端把家属维护的长期资料、老人产生的短期记录和算法服务返回的识别结果整理成可查询数据,供 GPASS 工作流按需调用。
#mermaid-svg-qhZ9K61tVb1PYfPr{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-qhZ9K61tVb1PYfPr .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-qhZ9K61tVb1PYfPr .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-qhZ9K61tVb1PYfPr .error-icon{fill:#552222;}#mermaid-svg-qhZ9K61tVb1PYfPr .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-qhZ9K61tVb1PYfPr .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-qhZ9K61tVb1PYfPr .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-qhZ9K61tVb1PYfPr .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-qhZ9K61tVb1PYfPr .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-qhZ9K61tVb1PYfPr .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-qhZ9K61tVb1PYfPr .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-qhZ9K61tVb1PYfPr .marker{fill:#333333;stroke:#333333;}#mermaid-svg-qhZ9K61tVb1PYfPr .marker.cross{stroke:#333333;}#mermaid-svg-qhZ9K61tVb1PYfPr svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-qhZ9K61tVb1PYfPr p{margin:0;}#mermaid-svg-qhZ9K61tVb1PYfPr .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-qhZ9K61tVb1PYfPr .cluster-label text{fill:#333;}#mermaid-svg-qhZ9K61tVb1PYfPr .cluster-label span{color:#333;}#mermaid-svg-qhZ9K61tVb1PYfPr .cluster-label span p{background-color:transparent;}#mermaid-svg-qhZ9K61tVb1PYfPr .label text,#mermaid-svg-qhZ9K61tVb1PYfPr span{fill:#333;color:#333;}#mermaid-svg-qhZ9K61tVb1PYfPr .node rect,#mermaid-svg-qhZ9K61tVb1PYfPr .node circle,#mermaid-svg-qhZ9K61tVb1PYfPr .node ellipse,#mermaid-svg-qhZ9K61tVb1PYfPr .node polygon,#mermaid-svg-qhZ9K61tVb1PYfPr .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-qhZ9K61tVb1PYfPr .rough-node .label text,#mermaid-svg-qhZ9K61tVb1PYfPr .node .label text,#mermaid-svg-qhZ9K61tVb1PYfPr .image-shape .label,#mermaid-svg-qhZ9K61tVb1PYfPr .icon-shape .label{text-anchor:middle;}#mermaid-svg-qhZ9K61tVb1PYfPr .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-qhZ9K61tVb1PYfPr .rough-node .label,#mermaid-svg-qhZ9K61tVb1PYfPr .node .label,#mermaid-svg-qhZ9K61tVb1PYfPr .image-shape .label,#mermaid-svg-qhZ9K61tVb1PYfPr .icon-shape .label{text-align:center;}#mermaid-svg-qhZ9K61tVb1PYfPr .node.clickable{cursor:pointer;}#mermaid-svg-qhZ9K61tVb1PYfPr .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-qhZ9K61tVb1PYfPr .arrowheadPath{fill:#333333;}#mermaid-svg-qhZ9K61tVb1PYfPr .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-qhZ9K61tVb1PYfPr .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-qhZ9K61tVb1PYfPr .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-qhZ9K61tVb1PYfPr .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-qhZ9K61tVb1PYfPr .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-qhZ9K61tVb1PYfPr .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-qhZ9K61tVb1PYfPr .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-qhZ9K61tVb1PYfPr .cluster text{fill:#333;}#mermaid-svg-qhZ9K61tVb1PYfPr .cluster span{color:#333;}#mermaid-svg-qhZ9K61tVb1PYfPr div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-qhZ9K61tVb1PYfPr .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-qhZ9K61tVb1PYfPr rect.text{fill:none;stroke-width:0;}#mermaid-svg-qhZ9K61tVb1PYfPr .icon-shape,#mermaid-svg-qhZ9K61tVb1PYfPr .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-qhZ9K61tVb1PYfPr .icon-shape p,#mermaid-svg-qhZ9K61tVb1PYfPr .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-qhZ9K61tVb1PYfPr .icon-shape .label rect,#mermaid-svg-qhZ9K61tVb1PYfPr .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-qhZ9K61tVb1PYfPr .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-qhZ9K61tVb1PYfPr .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-qhZ9K61tVb1PYfPr :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 老人语音与第一视角画面
GPASS 工作流
意图识别、是否拍照、场景分发
后端生活记忆层
画像、计划、记录、物品、人脸代理
老人侧短语音回复
家属管理端
资料维护、记录回看、关系修正
图 14 后端生活记忆层设计。后端把用户画像、计划、记录、物品位置和人脸代理整合成工作流可调用的数据层。
这层设计有几个考虑。长期资料和当轮对话分离,避免让大模型记住所有个人信息。记录以结构化摘要为主,便于后续查询和家属回看。后端只提供数据和算法结果,最终老人侧话术仍由 GPASS 工作流根据场景组织。
| 数据类别 | 设计用途 | 进入的工作流 |
|---|---|---|
| 用户画像 | 记录健康标签、忌口、偏好和专属记忆 | 饮食、陪伴、用药提醒 |
| 用药计划与记录 | 计划回答"该吃什么",记录回答"是否吃过" | 用药防错 |
| 饮食记录 | 沉淀饮食事件和历史追问依据 | 饮食提醒、家属回看 |
| 物品位置 | 保存老人主动记录的短期生活记忆 | 生活找物 |
| 人物档案 | 保存家庭关系和备注 | 人物识别、陪伴问答 |
5.2 插件化后端与算法服务接入
我们通过后端插件层解耦业务数据、算法接口和 GPASS 工作流。GPASS 负责流程编排和老人侧交互,后端负责保存数据、查询记录、封装算法能力,并将结果以结构化方式返回。这样后续替换数据库、人脸服务或通知插件时,不需要重写整个智能体流程。
#mermaid-svg-fF5IUdPc6IxYC4Gs{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-fF5IUdPc6IxYC4Gs .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-fF5IUdPc6IxYC4Gs .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-fF5IUdPc6IxYC4Gs .error-icon{fill:#552222;}#mermaid-svg-fF5IUdPc6IxYC4Gs .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-fF5IUdPc6IxYC4Gs .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-fF5IUdPc6IxYC4Gs .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-fF5IUdPc6IxYC4Gs .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-fF5IUdPc6IxYC4Gs .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-fF5IUdPc6IxYC4Gs .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-fF5IUdPc6IxYC4Gs .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-fF5IUdPc6IxYC4Gs .marker{fill:#333333;stroke:#333333;}#mermaid-svg-fF5IUdPc6IxYC4Gs .marker.cross{stroke:#333333;}#mermaid-svg-fF5IUdPc6IxYC4Gs svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-fF5IUdPc6IxYC4Gs p{margin:0;}#mermaid-svg-fF5IUdPc6IxYC4Gs .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-fF5IUdPc6IxYC4Gs .cluster-label text{fill:#333;}#mermaid-svg-fF5IUdPc6IxYC4Gs .cluster-label span{color:#333;}#mermaid-svg-fF5IUdPc6IxYC4Gs .cluster-label span p{background-color:transparent;}#mermaid-svg-fF5IUdPc6IxYC4Gs .label text,#mermaid-svg-fF5IUdPc6IxYC4Gs span{fill:#333;color:#333;}#mermaid-svg-fF5IUdPc6IxYC4Gs .node rect,#mermaid-svg-fF5IUdPc6IxYC4Gs .node circle,#mermaid-svg-fF5IUdPc6IxYC4Gs .node ellipse,#mermaid-svg-fF5IUdPc6IxYC4Gs .node polygon,#mermaid-svg-fF5IUdPc6IxYC4Gs .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-fF5IUdPc6IxYC4Gs .rough-node .label text,#mermaid-svg-fF5IUdPc6IxYC4Gs .node .label text,#mermaid-svg-fF5IUdPc6IxYC4Gs .image-shape .label,#mermaid-svg-fF5IUdPc6IxYC4Gs .icon-shape .label{text-anchor:middle;}#mermaid-svg-fF5IUdPc6IxYC4Gs .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-fF5IUdPc6IxYC4Gs .rough-node .label,#mermaid-svg-fF5IUdPc6IxYC4Gs .node .label,#mermaid-svg-fF5IUdPc6IxYC4Gs .image-shape .label,#mermaid-svg-fF5IUdPc6IxYC4Gs .icon-shape .label{text-align:center;}#mermaid-svg-fF5IUdPc6IxYC4Gs .node.clickable{cursor:pointer;}#mermaid-svg-fF5IUdPc6IxYC4Gs .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-fF5IUdPc6IxYC4Gs .arrowheadPath{fill:#333333;}#mermaid-svg-fF5IUdPc6IxYC4Gs .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-fF5IUdPc6IxYC4Gs .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-fF5IUdPc6IxYC4Gs .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-fF5IUdPc6IxYC4Gs .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-fF5IUdPc6IxYC4Gs .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-fF5IUdPc6IxYC4Gs .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-fF5IUdPc6IxYC4Gs .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-fF5IUdPc6IxYC4Gs .cluster text{fill:#333;}#mermaid-svg-fF5IUdPc6IxYC4Gs .cluster span{color:#333;}#mermaid-svg-fF5IUdPc6IxYC4Gs div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-fF5IUdPc6IxYC4Gs .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-fF5IUdPc6IxYC4Gs rect.text{fill:none;stroke-width:0;}#mermaid-svg-fF5IUdPc6IxYC4Gs .icon-shape,#mermaid-svg-fF5IUdPc6IxYC4Gs .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-fF5IUdPc6IxYC4Gs .icon-shape p,#mermaid-svg-fF5IUdPc6IxYC4Gs .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-fF5IUdPc6IxYC4Gs .icon-shape .label rect,#mermaid-svg-fF5IUdPc6IxYC4Gs .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-fF5IUdPc6IxYC4Gs .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-fF5IUdPc6IxYC4Gs .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-fF5IUdPc6IxYC4Gs :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} GPASS HTTP/API 调用节点
后端服务入口
Node.js/Express
用户画像服务
用药与饮食服务
物品记忆服务
人脸识别后端
SQLite 业务数据库
companioneye_face API
人脸库
结构化结果返回 GPASS
图 15 后端插件与人脸服务接入设计。GPASS 通过统一后端入口访问画像、用药、饮食、物品和人脸能力。
这套结构让工作流更清晰。饮食场景不需要知道数据库表结构,只需要拿到用户忌口和饮食记录;用药场景不需要处理计划字段细节,只需要拿到计划项和今日记录;人物识别不直接接触底层人脸库,只读取后端整理后的姓名、关系和识别结果。
5.3 人脸识别服务设计
人脸识别由独立的 companioneye_face 服务承担,使用人脸检测和特征匹配完成入库、识别、搜索和更新。我们把它定位为家庭范围内的关系提示服务,而不是开放场景身份鉴定。
#mermaid-svg-iH7AdxlmiXvAfjPK{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-iH7AdxlmiXvAfjPK .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-iH7AdxlmiXvAfjPK .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-iH7AdxlmiXvAfjPK .error-icon{fill:#552222;}#mermaid-svg-iH7AdxlmiXvAfjPK .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-iH7AdxlmiXvAfjPK .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-iH7AdxlmiXvAfjPK .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-iH7AdxlmiXvAfjPK .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-iH7AdxlmiXvAfjPK .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-iH7AdxlmiXvAfjPK .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-iH7AdxlmiXvAfjPK .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-iH7AdxlmiXvAfjPK .marker{fill:#333333;stroke:#333333;}#mermaid-svg-iH7AdxlmiXvAfjPK .marker.cross{stroke:#333333;}#mermaid-svg-iH7AdxlmiXvAfjPK svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-iH7AdxlmiXvAfjPK p{margin:0;}#mermaid-svg-iH7AdxlmiXvAfjPK .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-iH7AdxlmiXvAfjPK .cluster-label text{fill:#333;}#mermaid-svg-iH7AdxlmiXvAfjPK .cluster-label span{color:#333;}#mermaid-svg-iH7AdxlmiXvAfjPK .cluster-label span p{background-color:transparent;}#mermaid-svg-iH7AdxlmiXvAfjPK .label text,#mermaid-svg-iH7AdxlmiXvAfjPK span{fill:#333;color:#333;}#mermaid-svg-iH7AdxlmiXvAfjPK .node rect,#mermaid-svg-iH7AdxlmiXvAfjPK .node circle,#mermaid-svg-iH7AdxlmiXvAfjPK .node ellipse,#mermaid-svg-iH7AdxlmiXvAfjPK .node polygon,#mermaid-svg-iH7AdxlmiXvAfjPK .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-iH7AdxlmiXvAfjPK .rough-node .label text,#mermaid-svg-iH7AdxlmiXvAfjPK .node .label text,#mermaid-svg-iH7AdxlmiXvAfjPK .image-shape .label,#mermaid-svg-iH7AdxlmiXvAfjPK .icon-shape .label{text-anchor:middle;}#mermaid-svg-iH7AdxlmiXvAfjPK .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-iH7AdxlmiXvAfjPK .rough-node .label,#mermaid-svg-iH7AdxlmiXvAfjPK .node .label,#mermaid-svg-iH7AdxlmiXvAfjPK .image-shape .label,#mermaid-svg-iH7AdxlmiXvAfjPK .icon-shape .label{text-align:center;}#mermaid-svg-iH7AdxlmiXvAfjPK .node.clickable{cursor:pointer;}#mermaid-svg-iH7AdxlmiXvAfjPK .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-iH7AdxlmiXvAfjPK .arrowheadPath{fill:#333333;}#mermaid-svg-iH7AdxlmiXvAfjPK .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-iH7AdxlmiXvAfjPK .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-iH7AdxlmiXvAfjPK .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-iH7AdxlmiXvAfjPK .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-iH7AdxlmiXvAfjPK .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-iH7AdxlmiXvAfjPK .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-iH7AdxlmiXvAfjPK .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-iH7AdxlmiXvAfjPK .cluster text{fill:#333;}#mermaid-svg-iH7AdxlmiXvAfjPK .cluster span{color:#333;}#mermaid-svg-iH7AdxlmiXvAfjPK div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-iH7AdxlmiXvAfjPK .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-iH7AdxlmiXvAfjPK rect.text{fill:none;stroke-width:0;}#mermaid-svg-iH7AdxlmiXvAfjPK .icon-shape,#mermaid-svg-iH7AdxlmiXvAfjPK .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-iH7AdxlmiXvAfjPK .icon-shape p,#mermaid-svg-iH7AdxlmiXvAfjPK .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-iH7AdxlmiXvAfjPK .icon-shape .label rect,#mermaid-svg-iH7AdxlmiXvAfjPK .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-iH7AdxlmiXvAfjPK .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-iH7AdxlmiXvAfjPK .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-iH7AdxlmiXvAfjPK :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 命中
未命中
老人询问
这是谁/照片里是谁
GPASS 判断需要第一视角图像
backend 转发识别请求
companioneye_face 检测人脸并提取向量
是否命中该用户的人脸库
生成姓名、关系、位置提示
生成不认识或不确定提示
老人侧短语音播报
家属端维护或修正人物档案
图 16 人脸识别与关系提示流程。识人结果经过后端整理后进入老人侧短语音播报,家属端可继续修正人物档案。
这里的关键在于把算法结果转成老人能理解的关系提示。老人侧需要听到"左边这位是小丽,您的女儿"这样的短句,而不是相似度、检测框和调试字段。家属端则维护姓名、关系和备注,保证识人结果能跟家庭语境保持一致。
5.4 家属端资料维护与事件级协同
家属端承担资料维护和记录回看。我们把复杂录入留给家属端,把自然语音交互留给老人端。家属维护画像、忌口、用药计划和人物关系;老人侧触发场景后,工作流读取这些资料并写回关键事件;家属再查看整理后的记录并修正资料。
#mermaid-svg-lYHLGRMJWWk7ukZ8{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-lYHLGRMJWWk7ukZ8 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-lYHLGRMJWWk7ukZ8 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-lYHLGRMJWWk7ukZ8 .error-icon{fill:#552222;}#mermaid-svg-lYHLGRMJWWk7ukZ8 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-lYHLGRMJWWk7ukZ8 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-lYHLGRMJWWk7ukZ8 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-lYHLGRMJWWk7ukZ8 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-lYHLGRMJWWk7ukZ8 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-lYHLGRMJWWk7ukZ8 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-lYHLGRMJWWk7ukZ8 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-lYHLGRMJWWk7ukZ8 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-lYHLGRMJWWk7ukZ8 .marker.cross{stroke:#333333;}#mermaid-svg-lYHLGRMJWWk7ukZ8 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-lYHLGRMJWWk7ukZ8 p{margin:0;}#mermaid-svg-lYHLGRMJWWk7ukZ8 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-lYHLGRMJWWk7ukZ8 .cluster-label text{fill:#333;}#mermaid-svg-lYHLGRMJWWk7ukZ8 .cluster-label span{color:#333;}#mermaid-svg-lYHLGRMJWWk7ukZ8 .cluster-label span p{background-color:transparent;}#mermaid-svg-lYHLGRMJWWk7ukZ8 .label text,#mermaid-svg-lYHLGRMJWWk7ukZ8 span{fill:#333;color:#333;}#mermaid-svg-lYHLGRMJWWk7ukZ8 .node rect,#mermaid-svg-lYHLGRMJWWk7ukZ8 .node circle,#mermaid-svg-lYHLGRMJWWk7ukZ8 .node ellipse,#mermaid-svg-lYHLGRMJWWk7ukZ8 .node polygon,#mermaid-svg-lYHLGRMJWWk7ukZ8 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-lYHLGRMJWWk7ukZ8 .rough-node .label text,#mermaid-svg-lYHLGRMJWWk7ukZ8 .node .label text,#mermaid-svg-lYHLGRMJWWk7ukZ8 .image-shape .label,#mermaid-svg-lYHLGRMJWWk7ukZ8 .icon-shape .label{text-anchor:middle;}#mermaid-svg-lYHLGRMJWWk7ukZ8 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-lYHLGRMJWWk7ukZ8 .rough-node .label,#mermaid-svg-lYHLGRMJWWk7ukZ8 .node .label,#mermaid-svg-lYHLGRMJWWk7ukZ8 .image-shape .label,#mermaid-svg-lYHLGRMJWWk7ukZ8 .icon-shape .label{text-align:center;}#mermaid-svg-lYHLGRMJWWk7ukZ8 .node.clickable{cursor:pointer;}#mermaid-svg-lYHLGRMJWWk7ukZ8 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-lYHLGRMJWWk7ukZ8 .arrowheadPath{fill:#333333;}#mermaid-svg-lYHLGRMJWWk7ukZ8 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-lYHLGRMJWWk7ukZ8 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-lYHLGRMJWWk7ukZ8 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-lYHLGRMJWWk7ukZ8 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-lYHLGRMJWWk7ukZ8 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-lYHLGRMJWWk7ukZ8 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-lYHLGRMJWWk7ukZ8 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-lYHLGRMJWWk7ukZ8 .cluster text{fill:#333;}#mermaid-svg-lYHLGRMJWWk7ukZ8 .cluster span{color:#333;}#mermaid-svg-lYHLGRMJWWk7ukZ8 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-lYHLGRMJWWk7ukZ8 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-lYHLGRMJWWk7ukZ8 rect.text{fill:none;stroke-width:0;}#mermaid-svg-lYHLGRMJWWk7ukZ8 .icon-shape,#mermaid-svg-lYHLGRMJWWk7ukZ8 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-lYHLGRMJWWk7ukZ8 .icon-shape p,#mermaid-svg-lYHLGRMJWWk7ukZ8 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-lYHLGRMJWWk7ukZ8 .icon-shape .label rect,#mermaid-svg-lYHLGRMJWWk7ukZ8 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-lYHLGRMJWWk7ukZ8 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-lYHLGRMJWWk7ukZ8 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-lYHLGRMJWWk7ukZ8 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 家属维护资料
画像、忌口、用药、人物关系
后端生活记忆层
老人侧 GPASS 工作流
按场景读取必要信息
老人侧短语音反馈
事件记录与结果摘要
家属端回看与修正
图 17 家属端资料维护与事件级协同。家属端维护长期可信资料,老人侧触发即时工作流,关键结果再回写形成闭环。
家属端当前以移动端风格 Web 页面实现,主要入口包括主页、饮食、用药、关系和设置。它的定位是资料维护台和事件回看台,不作为实时监控入口。

图 18 家属端用户画像维护。家属维护健康标签、饮食忌口和专属记忆,为老人侧个性化判断提供依据。

图 19 家属端用药计划维护。家属维护药品、剂量、时段和记录,支撑老人侧用药防错。

图 20 家属端饮食记录回看。饮食提醒和主动记录沉淀为事件摘要,供家属了解日常饮食情况。

图 21 家属端人物关系维护。人物姓名、关系和备注由家属持续维护,反向提升老人侧识人播报质量。
6. 总结与创新点
我们的方案围绕 AI 眼镜第一视角和居家适老场景构建了一套工作流系统,把老人侧低负担交互、GPASS 流程编排、后端生活记忆和家属端维护连接起来。
方案的创新点集中在几个方面:
- 第一视角与按需图像状态管理结合:工作流会判断拍照、复用或清空图像变量,减少无效视觉调用,也避免持续采集带来的隐私压力。
- GPASS 工作流驱动的系统化场景联动:用药、饮食、找物、识人和陪伴问答共用用户画像、历史记录和后端记忆层,避免各场景各自运行。
- 个性化生活记忆支撑即时判断:饮食判断读取慢病和忌口,用药判断读取计划和今日记录,人物识别读取家庭人物档案,使回答围绕具体老人展开。
- 家属端事件级协同:家属端维护长期资料并查看整理后的关键记录,不会变成连续音视频监控,兼顾照护协同和隐私边界。
视频演示
演示视频如下:
伴眸-演示视频