在网上订租车,表格要填驾照号码和到期日,驾照却不在手边。你记得去年换新驾照时给它拍过照片,正反两面,可它们混在 iPhone 里几万张照片中间。你想用自然语言问 Comma,把这两张照片找出来。
这篇指南介绍一种搭法:先用本地模型给照片建一份索引,再让 Comma 去搜索它。这是在一台 Mac 上的示例配置,不是 Comma 的内置功能。
图库留在本地
Comma 不需要你照片的副本。最费力的工作,也就是读出每张图里的文字、把每张照片转成向量,都由本地模型完成。智能体拿到的是一次搜索的结果:几个照片 ID、它们的日期、图里识别出的文字,以及需要你挑选时的一张缩略图拼图。只有你最后挑中的照片,才会发到对话里。
照片同步本身走 iCloud;这里说的本地,指导出之后的识别、向量和索引。如果 Comma 用的是云端模型,这些搜索结果,以及你让它查看的图片,会发给你选择的模型服务商;像驾照这样的证件,识别出的文字里就有号码和住址。索引本身不会发往任何地方。Comma 本身是开源的,也可以部署在你自己的机器上。
搭建照片索引
索引接在照片原本就会走的路径后面,iPhone 上什么都不用改。
搭起来分三步:
把照片导到本地。 用 iCloud 照片把 iPhone 上的照片同步到 Mac,每天把新照片导出到一个文件夹。
用本地模型处理。 识别图里的文字,再用 Chinese-CLIP 和 Qwen3-VL-Embedding 把画面转成向量。
存进本地索引。 结果存进本地数据库,再配一条搜索命令。示例里这个命令叫
lpa。
搜索会返回什么
在本地,一次搜索就是一条命令。一次调用可以放进几种说法,模型只加载一次;智能体会把“去年”这样的说法换成一段日期范围。
每个结果都会标出它背后是哪种依据:
--prefer text 把文字命中排在前面,适合找证件、卡片和截图。--prefer picture 把画面相似的排在前面,适合找猫或海滩。几分钟内拍下、几乎一样的照片在列表里只占一个位置,其余的附在它下面。
排在最前面的结果不确定时,智能体不会去猜。它会把候选的缩略图拼成一张带编号的图,最多九张,请你来挑。
两套向量的用法是在约 5 万张照片的完整图库上校准后定下的。单用 Qwen3-VL-Embedding 时,人工挑出的正确答案反而比单用 Chinese-CLIP 排得靠后;两份排名合并后,检查过的每一项都不比单用任何一个模型差。“可能”也要两个模型的相似度都过线才会标上,在一次测试查询里,标成“可能”的照片从 4,970 张降到 4 张。代价是一次搜索从约 3 秒变成 3.5–6 秒。
这套示例跑在一台 16 GB 内存的 MacBook Air 上,Qwen3-VL-Embedding 用的是 2B。机器更好的话,可以换更大的千问模型:
更大的向量模型。 把 Qwen3-VL-Embedding-2B 换成 Qwen3-VL-Embedding-8B。换了以后,所有照片的向量都要用新模型重算一遍。
给照片写描述和标签。 另跑一个 Qwen3-VL-4B-Instruct 或 Qwen3-VL-8B-Instruct,给每张照片写一句描述、列几个标签,存进文字索引。比如在一台 24 GB 内存的 MacBook Pro 上,8B(8-bit 量化)就能跑。生成的标签适合粗筛,不保证准确。
英文怎么办。 Chinese-CLIP 主要用中文图文训练,英文查询它不可靠。另外两样不受影响:文字识别中英文都认,Qwen3-VL-Embedding 也支持多种语言。所以搜索时中英文说法一起放,就像前面那条命令,这一点可以写进 Skill。图库和提问以英文为主的话,也可以把 Chinese-CLIP 换成原版的 CLIP,换了同样要重算向量。
找家人和朋友
“照片”本来就会把同一个人的脸归到一起。索引直接用这份分组,自己不做人脸识别。
先认人。 第一次用时,智能体从这些分组里挑出几批照片,编上号问你这是谁。你回一句“3 号是妈妈”,它才记下。没确认过的分组,不会被当成任何人。
按人找。 之后提到名字,搜索只在这个人出现的照片里找。名字可以叠加:说两个人,就只返回两个人都在的照片,也就是你们的合照。
和别的条件一起用。 人名可以和画面、时间一起搜,比如“去年我和妈妈在海边的合照”:
名字没确认过,或者有两个人同名,搜索会直接说明,不会猜。认错了可以改,每次修改都能撤销。
视频怎么找
视频和照片分开搜。默认的搜索只查照片;比如你想找孩子生日吹蜡烛的那段视频,跟 Comma 说清楚要找视频,它会在搜索里加上 --source video:
背后分三步:
截画面。 视频本身不进模型。索引程序每 5 秒从视频里截一帧,每段最多 12 帧。
按画面搜。 截下来的画面和照片走同样的处理:识别文字、算两套向量。搜索比对的是这些画面,哪一帧对上了,整段视频就算找到,在结果里只占一条。
发视频。 你选定以后,智能体用
lpa video把视频发过来。
现在只看画面,不听声音,视频里说过的话还搜不到,视频里的人也还认不出来。截的帧数有上限,长视频里一闪而过的画面可能找不到。
LocalPhotoAgent 的结构
文中的 lpa 来自我们自己写的索引程序 LocalPhotoAgent,之后会开源。建索引的部分前面已经讲过,这里补两点:
可以随时停下。 每张照片的每一步都单独记录,跑到一半停下,下次接着做;改了某项设置,只重跑受影响的那一步。处理时会看着内存、温度和磁盘空间,超了就先停下。
给智能体几条命令。
lpa search搜索,lpa sheet生成拼图,lpa preview发照片,lpa video发视频。智能体查照片时按这个顺序调用:
连接 Comma
前提是 LocalPhotoAgent 已在 Mac 上跑通。接入分四步:
添加设备。 在 Comma 的设置 > 设备里点添加设备,拿到一条安装命令。
运行命令。 在放图库的那台 Mac 的终端里运行它,装上 Comma Connector。
打开权限。 新设备默认关闭,改成完全,智能体才能运行
lpa。写一个 Skill。 告诉智能体先搜索、不确定时发拼图、你挑完再发照片。可以直接让 Comma“创建一个 Skill”。
之后就和平时聊天一样,直接问:“找一下我去年拍的驾照,正反两面都要。”
信任与限制
索引只读取原图,从不移动、编辑或删除它们。搜索完全不碰外置硬盘;只有生成拼图或发送照片时才会读它。移动或删除照片不在这套配置的范围内;不过设成完全权限后,智能体能在这台 Mac 上执行的命令不只限于 lpa。
文字命中只说明找到了这些字,不代表就是你想要的那张照片。“可能”只是候选。Comma 把请求标为已完成时,请检查它发来的照片。
第一次试的时候,你可以这样说:“找出我去年拍的驾照照片。先给我看拼图,不要发送、移动或删除任何东西。”


