GPASS AI 眼镜智能体开发者大赛参赛作品 赛道:AI眼镜助力生产办公提效 + 无显示AI眼镜赛道
一、产品概述
1.1 一句话介绍
知面是一款运行在AI眼镜上的社交记忆智能体,通过语音+视觉双模态协作,帮助商务人士记住见过的每一个人。
Slogan:戴上眼镜,再也不忘任何人
1.2 核心场景
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 可用节点类型
3.4 眼镜端插件
百宝箱为 GPASS 智能眼镜提供了原生设备插件:
本项目仅使用拍照采集插件,语音输入通过持续监听自动完成。
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 能力:
Advance 方法:常规方法要求图片为上海地域 OSS 链接,Advance 方法支持通过 image_url_object 参数传入 BytesIO 流,兼容任意来源的图片 URL。本项目统一使用 Advance 方法,确保兼容 GPASS 眼镜拍照返回的非 OSS 图片地址。
人脸数据库设计:
数据库名称: socialmemoryEntity 对应一个人物,entityId 为唯一标识 extra_data 字段存储人物姓名,搜索返回时直接携带 支持同一 Entity 添加多张人脸照片,提升识别准确率
百宝箱知识库 API
本项目使用百宝箱平台提供的知识库 REST API:
https://open.tbox.alipay.com/openapi/v1/knowledge/updateDocument | ||
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(姓名)
核心代码:
import iofrom urllib.request import urlopen, Requestfrom alibabacloud_facebody20191230.client import Clientfrom alibabacloud_facebody20191230.models import SearchFaceAdvanceRequestfrom alibabacloud_tea_openapi.models import Configfrom alibabacloud_tea_util.models import RuntimeOptionsdef main(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个字段的完整元数据
知识库表结构:
六、知识库设计
5.1 存储方式
采用结构化动态表格而非非结构化文档,优势:
字段明确,支持精确检索 UPSERT 模式天然支持档案更新 entityId 作为主键保证唯一性
5.2 检索策略
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给建议
夜雨聆风