OMI × Reflect 集成指南:把 AI 对话记忆自动沉淀为可检索的每日笔记
2026/9/16 19:15:08 网站建设 项目流程

OMI × Reflect 集成指南:把 AI 对话记忆自动沉淀为可检索的每日笔记

【免费下载链接】FriendAI that sees your screen, listens to your conversations and tells you what to do项目地址: https://gitcode.com/GitHub_Trending/fr/Friend

本文聚焦于 Friend(OMI)插件体系中的 Reflect 集成,讲解如何将 OMI 生成的对话记忆(Memories)、逐字稿(Transcripts)与行动项(Action Items)自动同步到 Reflect 笔记应用,并映射为正确的每日笔记。读完本文,你将掌握完整的授权与配置流程、各项配置参数的含义与建议取值,并能从源码层面理解对话数据经 webhook 脱敏投递、OAuth2 凭证安全存储的底层实现原理。

集成能力总览

OMI+Reflect 集成解决的核心问题是:佩戴式 AI 设备记录的对话经过结构化处理后,如何不经过人工搬运,直接进入用户的个人知识库。根据 官方集成指南,该集成提供以下能力:

  • 记忆捕获:把 OMI 生成的 Memories 和/或 Transcripts 写入 Reflect;
  • 对话映射:将每次对话按日期映射到 Reflect 的 Daily Notes(每日笔记);
  • 行动项整合:将对话中提取的 action items 汇总到指定列表;
  • 时区感知同步:按用户所在时区计算对话归属日期,确保笔记落在正确的日期页;
  • 安全认证:基于 OAuth2 的授权机制,无需向第三方明文暴露口令;
  • 可检索笔记:写入 Reflect 后即可借助 Reflect 的全文搜索能力检索历史对话。

这些指令内容存放在仓库的 plugins/instructions/reflect/README.md,而 插件架构说明 明确instructions/目录承载的是"供移动端 App 展示的按应用区分的指令/资源内容",即本文所述流程就是用户在 OMI 移动端看到的集成操作指引。

整体架构与数据流

从仓库的插件体系可以还原该集成的数据链路。OMI 的对话处理完成后,后端会按应用配置将对话数据投递给第三方服务;Reflect 集成即这一外部集成(External Integration)机制的一个具体落地。

核心数据模型定义在 插件 SDK:

  • Conversation:一次完整对话,包含transcript_segments(逐字稿分段)、structured(结构化摘要)、photosplugins_results等字段;
  • Structured:结构化后的对话摘要,包含title(标题)、overview(概述)、category(分类)、sections(分区笔记)、action_itemsevents
  • TranscriptSegment:带说话人、起止时间戳的逐字稿片段;
  • ActionItem:从对话中提取的行动项,含descriptiondue_atcompletedcapture_confidence等字段。

后端在对话创建时向外部集成投递数据的入口在 backend/utils/app_integrations.py。其关键流程是:

  1. 获取用户已启用的应用,过滤出triggers_on_conversation_creation()为真的应用(即triggers_on == 'memory_creation',见 backend/models/app.py);
  2. 对对话数据执行redact_conversation_for_integration脱敏后再序列化;
  3. 拼接?uid=<用户UID>到 webhook URL;
  4. 通过safe_request_target做 SSRF 防护校验,拒绝解析到内网/回环地址的目标;
  5. 携带X-Omi-Idempotency-Key幂等头投递,并受 webhook 断路器与并发信号量保护。

也就是说,OMI 侧只会把"允许外发"的那部分对话数据推送给集成服务,且每次投递都带幂等键、有 SSRF 防护与失败熔断,这是集成可靠性与安全性的第一道保障。

快速开始:授权并连接账户

1. 进入集成页面并完成授权

按指南所述,接入的第一步是打开 OMI+Reflect 集成页面,点击 "Start Authorization":

  1. 访问 OMI 中的 Reflect 集成入口页面;
  2. 点击 "Start Authorization" 发起授权;
  3. 如未登录,先登录你的 Reflect 账户;
  4. 确认授权,允许 OMI 访问你的 Reflect 数据。

这一授权交互在 OMI 后端由 backend/routers/oauth.py 支撑,其实现细节值得了解:

  • GET /v1/oauth/authorize会先校验app_id对应的应用存在且配置了外部集成(app_home_url),然后按应用声明的capabilitiesactions生成权限说明清单,渲染授权确认页,并生成随机csrf_token(oauth.py);
  • 后端采用双重提交 CSRF 防护:同一个随机值既写入HttpOnly+SameSite=Strictomi_oauth_csrfCookie,又嵌入页面本身。/v1/oauth/token要求两者用常量时间比较一致,否则返回 403([oauth.py](https://link.gitcode.com/i/96328168a196cff7fc31f8cff4e83a94#L43-L51, L175-L179)),从服务端堵住了"state 被接受但从未校验"的缺口;
  • 用户确认授权后,携带 Firebase ID Token 调用/v1/oauth/token,服务端验证身份得到uid,随后自动完成应用启用、安装计数、付费检查与 setup 完成状态校验(oauth.py),最后返回{uid, redirect_url, state}将用户带回集成方页面。

2. 授权后的回调与凭证保存

第三方集成服务在拿到 OAuth 回调后需要保存访问凭证。仓库中 plugins/oauth/conversation_created.py 提供了一个可对照的参考实现(Notion CRM 集成):

  • 授权回调/auth/notion/callback接收statecode,其中state直接携带用户uidcode用于向服务商换取 access token(conversation_created.py);
  • 换取令牌的客户端封装在 plugins/oauth/client.py,其get_access_token以 Basic Auth(client_id:client_secret 的 Base64)调用 OAuth token 端点;
  • 凭证按 uid 存入 Redis,见 plugins/db.py 中的store_*_api_key/get_*_api_key系列函数。

OMI+Reflect 集成同样遵循"token 只保存在集成服务侧、按 uid 隔离"的模型,OMI 后端本身不触碰第三方凭证。

配置详解:五个关键设置项

授权完成后会跳转到配置页,指南明确列出以下配置项,逐项说明如下。

选择 Graph(目标图谱)

选择本次集成要写入的 Reflect graph。Reflect 以 graph(图谱/工作区)为数据组织单元,不同 graph 之间相互隔离。若你有多个 graph(例如工作与个人分开),应在此明确指定,避免对话笔记写入错误的工作区。

配置 Memory Content(记忆内容)

  • 开关记忆同步:启用/禁用"对话记忆写入 Reflect"这条链路;
  • 设置列表名称:为 OMI Memories 指定目标列表名(示例值:"OMI Memories"),写入的每日笔记将落在该列表下,便于后续按列表筛选;
  • 选择每条记忆包含的内容,可从以下项中勾选:
    • OverviewStructured.overview字段生成的对话概述;
    • TranscriptConversation.get_transcript()产出的逐字稿全文(含说话人标识);
    • Action ItemsStructured.action_items中提取的行动项;
    • Plugin data:对话的plugins_results/apps_results,即其他插件在本次对话中产生的输出。

这些字段在 插件 SDK 模型 中均有明确定义,勾选项直接决定 payload 中哪些字段会被展开写入笔记。

配置 Action Items(行动项整合)

  • 开关行动项整合:启用/禁用将对话中的行动项单独汇总;
  • 设置汇总列表名称:为整合后的行动项指定列表(示例值:"✅ Action Items")。

启用后,每条对话中ActionItem.descriptiondue_at等信息会被整理进独立列表,方便形成待办闭环。

设置时区(Timezone)

这是最容易被忽略、却直接影响数据正确性的配置。Reflect 以 Daily Notes(每日笔记)组织内容,而 OMI 记录的对话时间戳是 UTC 时间;只有结合用户时区换算,才能把一条对话归入正确的"那一天"的笔记页。指南原文强调该配置"IMPORTANT for mapping the correct date on your Reflect notes"——若时区设置错误,所有对话会整体错落到相邻日期,检索与回顾都会出现偏差。

保存配置

点击 "Save Configuration" 完成设置。配置以 uid 维度持久化(参考 plugins/db.py 的按 uid 存取模式),因此更换设备或重装应用后配置依然有效。

数据映射原理:对话如何变成每日笔记

结合 SDK 模型可以还原出写入逻辑:

  1. 后端在对话创建时向集成 webhook 投递Conversation对象(携带created_at/started_at等时间字段);
  2. 集成服务依据用户配置的时区,把created_at换算为本地日期,定位到对应的 Reflect Daily Note;
  3. 按配置展开Structured.overviewTranscriptSegment文本、ActionItem列表等内容写入笔记正文与目标列表;
  4. 写入完成后即可被 Reflect 的搜索、反向链接(backlink)能力索引。

由于 webhook 载荷由 SDK 模型 严格定义(Pydantic 校验),字段缺失或类型异常会在反序列化阶段被拦截,避免脏数据进入笔记库。

隐私与安全设计

指南特别强调两条原则,与源码实现相互印证:

  • 仅发送选定数据:OMI 侧在投递前会执行redact_conversation_for_integration脱敏(见 backend/utils/app_integrations.py),且集成方只读取用户在配置页勾选的内容字段——未勾选的字段不会进入 Reflect;
  • Reflect 数据不被 OMI 访问:认证方向是"用户授权 OMI 集成写入 Reflect",凭证(access token)保存在集成服务侧(参照 plugins/oauth/client.py 的 token 交换与 plugins/db.py 的按 uid 存储),OMI 后端不持有也不读取 Reflect 侧数据。

此外,webhook 投递链路内置 SSRF 防护、幂等键与熔断机制(backend/utils/app_integrations.py),OAuth 授权链路内置双重提交 CSRF 防护与 Firebase 身份核验(backend/routers/oauth.py),共同构成多层安全防线。

设置后续修改与故障排查

配置并非一锤定音:任何时候回到配置页即可调整 graph、列表名称、内容勾选项、行动项开关与时区,改动即时生效,无需重新走一遍授权。若发现笔记未同步,可按以下顺序排查:

  1. 确认集成页面上 OMI 与 Reflect 均处于已授权状态;
  2. 检查时区配置是否与当前所在地一致(错日最常见原因);
  3. 确认 Memory Content / Action Items 对应开关已启用;
  4. 确认所选 graph 与列表名称拼写无误。

关于 Reflect

Reflect 官方说明 中将其定位为一款面向深度思考的笔记与知识管理应用,核心能力包括:

  • 网络化笔记:支持双向链接(backlinks),对话笔记可与既有知识互联;
  • 跨平台同步:覆盖包括 iOS 在内的多端;
  • 端到端加密:为笔记内容提供隐私保护;
  • 日历集成:可与日程体系联动;
  • 强大搜索:全文检索历史对话;
  • AI 辅助:辅助笔记整理与想法生成。

将 OMI 的会议洞察接入 Reflect 后,对话记忆、行动项与个人知识库形成闭环:日常对话自动沉淀、按日期归档、可检索、可关联,真正实现"录完即用"。集成相关源码与模型定义可在 插件 SDK、OAuth 实现 与 参考集成实现 中继续深入阅读。

【免费下载链接】FriendAI that sees your screen, listens to your conversations and tells you what to do项目地址: https://gitcode.com/GitHub_Trending/fr/Friend

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询