GPASS AI 眼镜智能体开发者大赛参赛作品
赛道:AI眼镜助力生产办公提效 + 无显示AI眼镜赛道
一、产品概述
1.1 一句话介绍
知面是一款运行在AI眼镜上的社交记忆智能体,通过语音+视觉双模态协作,帮助商务人士记住见过的每一个人。
Slogan:戴上眼镜,再也不忘任何人
1.2 核心场景
| 场景 | 操作 | 效果 |
|---|---|---|
| 商务交流中/后 | 语音说"帮我记一下" | AI自动从对话中提取人物信息并存档 |
| 初次见面 | 语音说"拍照存档" | 将人脸与档案关联 |
| 再次相遇 | 语音说"这是谁" | AI耳返:“这是张伟,XX科技副总,上次聊了合作” |
| 见面前准备 | 语音说"帮我准备见张伟" | AI给出破冰话题和跟进建议 |
| 信息变更 | 语音说"更新张伟的信息" | AI将新信息合并到已有档案 |
1.3 目标用户
销售/BD、创业者/高管、政务/公关等需要频繁社交的商务人群。
二、技术架构
2.1 整体架构图
┌──────────────────────────────────────────────────────────────┐ │ AI 眼镜端(GPASS) │ │ │ │ 麦克风 ──→ 持续监听 ──→ 语音转文字 ──→ 当前对话信息 │ │ 摄像头 ──→ 拍照采集 ──→ 图片URL │ │ 扬声器 ←── 语音播报 │ └──────────────────────┬───────────────────────────────────────┘ │ 每次用户说话触发一轮工作流 ▼ ┌──────────────────────────────────────────────────────────────┐ │ 百宝箱智能体工作流 │ │ │ │ ┌────────────────┐ ┌────────────┐ │ │ │ 大模型-意图识别 │ → │ 分支节点 │ │ │ └────────────────┘ └─────┬──────┘ │ │ │ │ │ ┌──────────────────────────┼────────────────────────┐ │ │ │ ├→ RECORD: [大模型提取] → [saveToKnowledge] │ │ │ │ ├→ REGISTER:[拍照] → [registerFace] │ │ │ │ ├→ RECOGNIZE:[拍照] → [searchFace] → [知识库] → 播报│ │ │ │ ├→ RECALL: [提取人名] → [知识库] → [大模型] → 播报 │ │ │ │ ├→ UPDATE: [提取人名] → [知识库] → [合并] → 写入 │ │ │ │ └→ OTHER: "我在呢。" │ │ │ └───────────────────────────────────────────────────┘ │ │ │ │ ┌────────────────────────────────────────────────────────┐ │ │ │ 自定义Python插件 │ │ │ │ • searchFace:阿里云人脸搜索1:N(流式上传) │ │ │ │ • registerFace:阿里云人脸注册(流式上传) │ │ │ │ • saveToKnowledge:百宝箱知识库结构化写入 │ │ │ └────────────────────────────────────────────────────────┘ │ │ │ │ ┌────────────────────────┐ ┌────────────────────────────┐ │ │ │ 百宝箱知识库(动态表格)│ │ 阿里云人脸数据库 │ │ │ │ 结构化CSV:8字段 │ │ 人脸特征向量 + entityId │ │ │ └────────────────────────┘ └────────────────────────────┘ │ └──────────────────────────────────────────────────────────────┘2.2 交互模型
与传统"按键触发"的设计不同,知面采用持续监听+语音指令模式:
- 眼镜持续监听用户语音,每次说话自动转文字
- 转文字结果作为"当前对话信息"触发一轮工作流
- 工作流保留30轮历史对话,支持上下文关联
- 无需镜腿手势操作,全语音交互
2.3 数据关联设计
人脸数据库与知识库通过entityId关联:
阿里云人脸库 百宝箱知识库(结构化动态表格) ┌──────────────────────┐ ┌──────────────────────────────┐ │ entityId: zhangwei_ │ │ entityId: zhangwei_20260708 │ │ 20260708 │ ────────→ │ name: 张伟 │ │ extra_data: 张伟 │ │ company: XX科技 │ │ 人脸向量: [...] │ │ position: 副总裁 │ └──────────────────────┘ │ summary: 聊了AI合作 │ │ personal: 爱喝龙井茶 │ │ followUp: 下周确认合同 │ │ meetDate: 2026-07-08 10:00:00 │ └──────────────────────────────┘entityId 生成规则:姓名全拼小写 + 下划线 + 首次见面日期(YYYYMMDD),如zhangwei_20260708。
三、百宝箱工作流机制
3.1 平台概述
「百宝箱」是蚂蚁集团提供的智能体低代码开发平台,支持通过拖拽节点方式搭建 AI 工作流,无需关心眼镜硬件底层即可开发 GPASS 智能眼镜应用。
3.2 工作流运行机制
百宝箱工作流本质是一个有向无环图(DAG),由各种功能节点串联而成。每轮用户输入触发一次完整执行:
用户语音输入 → 开始节点 → 节点1 → 节点2 → ... → 直接回复 → 结束 ↑ 注入上下文: • 当前对话信息(本次语音转文字) • 历史对话信息(前N轮对话记录) • 触发时间等系统变量关键特性:
- 单轮执行:每次用户说话触发一轮工作流完整执行,执行完即结束
- 历史上下文:开始节点可配置保留N轮历史对话(本项目设为30轮),后续节点可引用
- 节点引用:每个节点可引用前置节点的输出作为输入,通过
{{节点名.输出变量}}语法 - 分支路由:分支节点支持条件判断,将流程导向不同链路
- 顺序执行:节点严格按连线顺序执行,前一个完成后才执行下一个
3.3 可用节点类型
| 节点类型 | 功能 | 本项目使用场景 |
|---|---|---|
| 开始 | 工作流入口,注入用户输入和上下文 | 接收语音转文字、历史对话 |
| 大模型 | 调用LLM处理文本 | 意图识别、信息提取、内容整理 |
| 分支 | 条件判断路由 | 意图路由、空结果判断 |
| 循环 | 按序循环一定次数处理批量任务 | 可用于批量处理多条记录 |
| 参数提取 | 从大模型JSON输出中提取字段 | 提取name/entityId等结构化字段 |
| 知识库 | 语义/全文检索 | 检索人物档案 |
| 插件(Python) | 执行自定义代码 | 人脸搜索/注册、知识库写入 |
| 插件(眼镜设备) | 调用眼镜硬件能力 | 拍照采集 |
| 直接回复 | 向用户输出文本(语音播报) | 各环节的确认和结果播报 |
| 结束 | 工作流终止 | 每条链路末尾 |
3.4 眼镜端插件
百宝箱为 GPASS 智能眼镜提供了原生设备插件:
| 插件 | 功能 | 输出 |
|---|---|---|
| 眼镜设备拍照采集 | 控制摄像头拍照 | 图片数据地址(URL) |
| 眼镜设备语音采集 | 主动录音采集 | 语音识别后的文本 |
| 眼镜设备镜腿交互响应 | 等待用户手势 | 交互类型 |
本项目仅使用拍照采集插件,语音输入通过持续监听自动完成。
3.5 自定义Python插件机制
百宝箱支持上传自定义 Python 代码作为插件节点:
- 入口函数:固定为
def main(params: dict, context: dict) -> dict - 参数传入:通过
params字典获取配置的输入参数 - 返回值:返回字典,作为节点输出供后续节点引用
- 依赖管理:支持声明第三方 pip 包(如
alibabacloud_facebody20191230) - 超时控制:可配置执行超时时间(本项目设为 15-20 秒)
- 隐藏参数:支持设置大模型不可见的固定值参数(如 API Key),保障安全
3.6 第三方服务集成
阿里云视觉智能开放平台 — 人脸人体
本项目使用阿里云视觉智能开放平台的人脸人体类能力,实现人脸注册与搜索:
- 服务地址:
facebody.cn-shanghai.aliyuncs.com(上海区域) - SDK:
alibabacloud_facebody20191230(Python) - 认证方式:AccessKey ID + AccessKey Secret
使用的 API 能力:
| API | 功能 | 对应插件 |
|---|---|---|
| CreateFaceDb | 创建人脸数据库 | 初始化时调用一次 |
| AddFaceEntity | 创建人脸样本(Entity) | registerFace |
| AddFace(Advance) | 添加人脸数据(流式上传) | registerFace |
| SearchFace(Advance) | 人脸搜索1:N(流式上传) | searchFace |
Advance 方法:常规方法要求图片为上海地域 OSS 链接,Advance 方法支持通过image_url_object参数传入 BytesIO 流,兼容任意来源的图片 URL。本项目统一使用 Advance 方法,确保兼容 GPASS 眼镜拍照返回的非 OSS 图片地址。
人脸数据库设计:
- 数据库名称:
socialmemory - Entity 对应一个人物,entityId 为唯一标识
- extra_data 字段存储人物姓名,搜索返回时直接携带
- 支持同一 Entity 添加多张人脸照片,提升识别准确率
百宝箱知识库 API
本项目使用百宝箱平台提供的知识库 REST API:
| API | 功能 | 地址 |
|---|---|---|
| updateDocument | 上传/更新结构化数据 | https://open.tbox.alipay.com/openapi/v1/knowledge/updateDocument |
| retrieve | 知识库语义召回 | https://api.tbox.cn/api/datasets/retrieve |
- 认证方式:Header
Authorization携带 API-Key - 数据格式:multipart/form-data(上传 CSV 文件 + tableSchema JSON)
- 更新模式:UPSERT(按主键 entityId 去重)
四、工作流设计
3.1 入口:意图识别 + 分支路由
[开始(30轮历史)] → [大模型-意图识别] → [分支_2] ├── RECORD → 链路A(记录新人) ├── REGISTER → 链路B(拍照建档) ├── RECOGNIZE → 链路C(拍照识人) ├── RECALL → 链路D(语音回忆) ├── UPDATE → 链路E(更新档案) └── 否则 → "我在呢。"意图识别策略:
- 模型:DeepSeek-V4-flash
- 输出单个关键词,分支节点按"包含"条件路由
- 关键设计:RECALL 和 UPDATE 必须包含具体人名才触发,避免普通对话误触发
- 排除规则:用户与他人的寒暄/陈述不视为指令
3.2 链路A:记录新人(RECORD)
[直接回复:"好的,马上处理。"] → [大模型-提取信息] → [参数提取] → [saveToKnowledge] → [回复:"已建立XX的档案"]核心逻辑:
- 大模型从历史对话+当前对话中提取对方的信息(区分用户自己 vs 对方)
- 严格输出 JSON:name、entityId、company、position、summary、personal、followUp、meetDate
- entityId 由大模型按规则生成(拼音_日期)
- 通过 saveToKnowledge 以 UPSERT 模式写入结构化知识库
信息提取规则:
- 用户说"我是XX" → 这是用户自己,不提取
- 用户称呼"X总"、“X哥” → 这是对方,提取
- 区分"用户要做的事"和"对方要做的事"
- 不确定的字段填"未知"
3.3 链路B:拍照建档(REGISTER)
[拍照采集] → [回复:"正在匹配档案"] → [大模型-从历史提取人名] → [参数提取] → [分支] ├── name存在 → [registerFace] → [回复:"已保存XX的照片"] └── name为空 → [回复:"请先告知姓名再拍照建档"]核心逻辑:
- 拍照后,大模型从历史对话中找到最近记录的人物名字
- 按相同规则生成 entityId,确保与链路A存入的 entityId 一致
- 调用阿里云人脸注册:先创建 Entity,再通过流式上传添加人脸数据
- extra_data 存储姓名,后续搜索时直接返回
3.4 链路C:拍照识人(RECOGNIZE)
[拍照采集] → [回复:"正在匹配档案"] → [searchFace] → [分支] ├── matched=="true" → [知识库:query=entityId] → [大模型-整理播报] → [回复] └── matched!="true" → [回复:"没有匹配到已知的人物。"]核心逻辑:
- 拍照后通过流式上传调用阿里云人脸搜索 1:N
- 置信度阈值 ≥ 60 视为匹配成功
- 匹配成功后,用 entityId 精确检索知识库(而非模糊语义搜索)
- 大模型将结构化档案整理为 ≤3句话的口语化播报
3.5 链路D:语音回忆(RECALL)
[大模型-提取人名关键词] → [知识库:query=人名] → [分支] ├── 有结果 → [大模型-整理回复] → [回复] └── 空结果 → [回复:"没有找到相关记录,需要帮您记录吗?"]核心逻辑:
- 先用大模型从用户输入中提取人名关键词(可含公司名),再用关键词检索知识库
- 避免用整句话直接检索导致的误召回问题
- 空结果兜底,避免大模型在无数据时编造信息
- 根据问题类型给出不同回复:身份介绍 / 破冰建议
3.6 链路E:更新档案(UPDATE)
[回复:"正在更新档案。"] → [大模型-提取人名] → [知识库:query=人名] → [分支] ├── 有结果 → [大模型-合并档案] → [参数提取] → [saveToKnowledge(UPSERT)] → [回复:"档案已更新"] └── 空结果 → [回复:"没有找到该人物的档案,请先用「记一下」创建档案。"]核心逻辑:
- 同样先提取人名再检索,确保找到正确的人
- 大模型将新信息与旧档案合并:
- 未提及的字段保持不变
- summary/personal/followUp 追加新内容(分号分隔)
- entityId 和 name 不变
- meetDate 更新为当前时间
- 通过 UPSERT 模式覆盖写入
五、自定义插件实现
4.1 searchFace(人脸搜索 — 流式上传版)
功能:根据图片在人脸数据库中搜索匹配的人物
技术要点:
- 先通过 urllib 下载图片为二进制数据
- 使用
SearchFaceAdvanceRequest通过 BytesIO 流式上传 - 兼容非OSS域名的图片URL(GPASS拍照返回的URL)
- 返回:matched、entityId、confidence、extraData(姓名)
核心代码:
importiofromurllib.requestimporturlopen,Requestfromalibabacloud_facebody20191230.clientimportClientfromalibabacloud_facebody20191230.modelsimportSearchFaceAdvanceRequestfromalibabacloud_tea_openapi.modelsimportConfigfromalibabacloud_tea_util.modelsimportRuntimeOptionsdefmain(params:dict,context:dict)->dict:url=params.get('url','')# 下载图片为二进制req=Request(url,headers={'User-Agent':'Mozilla/5.0'})img_data=urlopen(req,timeout=10).read()# 初始化客户端config=Config(access_key_id=params.get('accessKeyId',''),access_key_secret=params.get('accessKeySecret',''),endpoint='facebody.cn-shanghai.aliyuncs.com')client=Client(config)# 流式上传搜索request=SearchFaceAdvanceRequest(db_name='socialmemory',image_url_object=io.BytesIO(img_data),limit=1)response=client.search_face_advance(request,RuntimeOptions())# 解析结果,置信度>=60视为匹配# ...4.2 registerFace(注册人脸 — 流式上传版)
功能:将新认识的人的照片注册到人脸数据库
技术要点:
- 两步操作:
AddFaceEntity(创建人物条目)+AddFaceAdvance(流式上传人脸) - Entity已存在时跳过创建(幂等处理)
- extra_data 存储姓名,搜索时直接返回
- 使用
AddFaceAdvanceRequest的image_url_object参数实现流式上传
4.3 saveToKnowledge(结构化知识库写入)
功能:将人物档案以结构化CSV格式写入百宝箱知识库
技术要点:
- 使用百宝箱
updateDocument接口,type=STRUCTURED - 数据格式:CSV(表头 + 数据行)
- 更新模式:UPSERT(按 entityId 主键,存在则更新,不存在则新增)
- 表结构定义(tableSchema)包含8个字段的完整元数据
知识库表结构:
| 字段 | 类型 | 说明 | 主键 | 索引 |
|---|---|---|---|---|
| entityId | STRING | 人物唯一ID | ✅ | ✅ |
| name | STRING | 姓名 | ✅ | |
| company | STRING | 公司 | ||
| position | STRING | 职位 | ||
| summary | TEXT | 交流摘要 | ✅ | |
| personal | TEXT | 个人偏好 | ||
| followUp | TEXT | 待跟进 | ||
| meetDate | DATETIME | 见面时间 |
六、知识库设计
5.1 存储方式
采用结构化动态表格而非非结构化文档,优势:
- 字段明确,支持精确检索
- UPSERT 模式天然支持档案更新
- entityId 作为主键保证唯一性
5.2 检索策略
| 场景 | 检索方式 | query 来源 |
|---|---|---|
| 识人(链路C) | entityId 精确匹配 | searchFace 返回的 entityId |
| 回忆(链路D) | 人名语义检索 | 大模型从用户输入提取的人名关键词 |
| 更新(链路E) | 人名语义检索 | 大模型从用户输入提取的人名关键词 |
5.3 检索配置
- 匹配策略:智能检索
- 最大结果数:1
- 最小匹配度:0.500
- 语义精排:关闭
七、技术亮点
6.1 持续监听 + 意图路由
不同于传统的"按键触发"模式,知面采用持续监听方案。眼镜始终听用户说话,AI自动判断何时需要介入。用户无需刻意切换模式,对话中随时说"记一下"即可触发记录。
6.2 流式上传兼容性
阿里云人脸API要求图片为OSS地址或公网URL。GPASS拍照返回的URL可能不符合阿里云要求。通过先下载图片再以 BytesIO 流式上传,完美兼容任何来源的图片URL。
6.3 结构化知识库 + UPSERT
使用结构化CSV格式存储人物档案,配合 UPSERT 模式:
- 首次记录:插入新行
- 更新信息:按 entityId 主键匹配,覆盖对应字段
- 天然去重,不会产生重复档案
6.4 人名精确检索
RECALL 和 UPDATE 链路先用大模型提取人名关键词,再用人名检索知识库。避免用整句话(如"刘翔跳槽到阿里巴巴更新一下")直接语义检索导致的误召回(可能匹配到含"阿里巴巴"的其他人档案)。
6.5 意图防误触
意图识别 prompt 严格约束:
- RECALL/UPDATE 必须同时满足"包含人名"+“包含指令词”
- 普通对话(寒暄、与他人交流)一律归为 OTHER
- 确保用户与客户聊天时不会误触发 AI 操作
6.6 语音+视觉双模态闭环
录音记人(语音)+ 拍照识人(视觉)两种模态协作:
- 记录 → 建档:语音记录人物信息后,拍照关联人脸
- 识人 → 回忆:拍照识别身份后,语音补充询问更多信息
- 完整闭环覆盖"认识 → 记录 → 回忆 → 更新"全生命周期
八、使用说明
快速上手
- 佩戴眼镜,开始与人交流
- 交流中/后说“帮我记一下”→ AI 从对话中自动提取信息并存档
- 说“拍照存档”→ 眼镜拍照,将人脸与刚才记录的档案关联
- 再次遇到此人时说“这是谁”→ 眼镜拍照识别 → AI耳返身份信息
- 见面前说“帮我准备见张伟”→ AI给出破冰话题和跟进建议
- 信息变化时说“更新张伟的信息,他跳槽到XX公司了”→ 档案自动更新
典型使用流程
参加行业交流会 → 与人交谈 → "帮我记一下" → AI存档 ↓ "拍照存档" → 人脸关联 ↓ 下次偶遇 → "这是谁" → AI耳返提醒 ↓ 会前准备 → "帮我准备见张伟" → AI给建议九、未来演进
| 阶段 | 功能 |
|---|---|
| 当前(比赛版) | 5大链路完整闭环:记录/建档/识人/回忆/更新 |
| 中期(产品化) | 关键词唤醒建档、知识图谱后端、日程关联自动提醒 |
| 长期(完整形态) | 全程对话自动记录、团队共享人脉库、AI社交分析月报 |