GBrain 会议同步实战指南让 Circleback 转录自动沉淀为可检索的 Brain 页面【免费下载链接】gbrainGarrys Opinionated OpenClaw/Hermes Agent Brain项目地址: https://gitcode.com/gh_mirrors/gb/gbrain本文以仓库中recipes/meeting-sync.md这份“安装者视角”的配方文档为主线结合 docs/guides/meeting-ingestion.md 的模式总览与 skills/meeting-ingestion/SKILL.md 的技能级实现系统讲解如何在 GBrain 中搭建一条“会议转录 → Brain 页面 → 实体传播”的全自动流水线。读完本文你将掌握 Circleback API 令牌的获取与校验、SSE 响应中的“双重 JSON 解析”技巧、基于source_id的幂等同步脚本设计、gbrain import导入链路以及 Agent 在会议页面之外必须完成的参会人/公司实体传播动作。为什么会议是“最富的信号源”一次 30 分钟的会议通常涉及 5–10 个人、3–5 家公司并产生 2–3 条待办事项action items。如果这些信息只停留在录音或笔记工具里会议对大脑而言就是“黑洞”会议内容随时间湮灭事后无法检索待办事项被遗忘行动无人跟进Agent 在下次见面前无法获知“上次聊了什么、卡在哪里”。Meeting Sync 配方的目标正是把会议变成复合资产compounding asset每一次会议自动录制、转录、导入并以结构化的方式沉淀为 Brain 页面——包含发言人标注、时间戳、待办事项和实体传播让大脑记住“说了什么、谁说的、接下来要做什么”。仓库中 docs/guides/meeting-ingestion.md 对这一点有更精炼的表述没有这条链路会议会“消失在记忆里”有了它每次会议都是一份永久记录并持续丰富它触及的每一个人和公司页面。整体架构recipes/meeting-sync.md中给出的架构链路如下Video Call (Zoom, Google Meet, Teams) ↓ Circleback bot 自动加入 Circleback录制 转录 AI 摘要 ↓ APIJSONRPC 2.0 over HTTPSSE 响应 Meeting Sync Script确定性 Node.js 脚本 ↓ 输出 └── brain/meetings/{YYYY-MM-DD}-{slug}.md - Frontmatter: source_id, date, duration, attendees, location - Transcript带发言人标签和时间戳 - 由标题推断的 Tags ↓ Agent 读取会议页面 ↓ 人工判断 ├── 实体检测人、公司、话题 ├── 传播到参会人的 Brain 页面时间线条目 ├── 行动项提取 └── 与日历数据交叉引用从源码结构看这条链路与 GBrain 的“源source→ 导入 → 检索”核心模型完全对齐同步脚本把外部会议记录物化为meetings/下的 Markdown 页面gbrain import负责将其纳入索引gbrain search使其可被检索Agent 随后在页面之上完成实体传播。仓库中 skills/meeting-ingestion/SKILL.md 把同样的模式推广到了“任何会议记录器”Granola、Circleback、语音备忘录、手动粘贴的转录稿都适用并强调任何来源的逻辑都止步于“归一化”这一步归一化之后统一走同一套流水线。配方前置条件recipes/meeting-sync.md明确列出了三个前置条件GBrain 已安装并配置完成——以gbrain doctor通过为验收标准Node.js 18——用于运行同步脚本meeting-sync.mjsCircleback 账户circleback.ai——且已有至少一场已录制的会议。配方元数据frontmatter还声明了相关约束secrets需要CIRCLEBACK_TOKEN在 https://app.circleback.ai 的 Settings API 中生成health_checks通过向https://app.circleback.ai/api/mcp发送 JSONRPC 2.0 的tools/list请求来探测 Circleback API 的可用性output_pathsmeetings/setup_time约 15 分钟cost_estimate$0–17/月Circleback 免费档每月 10 场会议Pro 档 $17/月不限量。意见化的默认配置Opinionated Defaults会议页面的标准格式配方给出了一个可直接落盘的会议页面模板它同时覆盖 frontmatter、正文摘要、行动项与转录四个层次--- type: meeting source_id: cb_abc123 source_type: circleback title: Weekly Team Sync date: 2026-04-10 duration: 32 min attendees: [Alice Chen, Bob Park, Carol Wu] location: Google Meet tags: [team, weekly, sync] --- ## Key Points - Discussed Q2 roadmap priorities - Alice is blocked on the API migration - Bobs prototype is ready for review ## Action Items - [ ] Alice: unblock API migration by Friday - [ ] Bob: share prototype link in Slack - [ ] Carol: schedule design review for next week --- ## Transcript **Alice Chen** (00:00): Lets start with the roadmap update... **Bob Park** (02:15): The prototype is basically done... **Carol Wu** (05:30): I have some design feedback on the new flow...参会人过滤规则跳过日历资源如 HQ Conference Room跳过群组地址如teamcompany.com提取显示名而非邮箱地址。这条规则与docs/guides/meeting-ingestion.md中的“人物 ≠ 参会人”原则相呼应被邀请 ≠ 在场源提供的参会人列表本质上只是“源的主张”claim需要经过去资源化、去群组化后才能作为页面事实写入。幂等以 source_id 去重如果 Brain 中已存在相同source_id的会议则跳过绝不产生重复。这一设计是整条流水线可反复运行的前提——cron每三小时跑一次、误操作重跑、甚至多机器并发同步都不会产生重复页面。七步安装流程Step-by-StepStep 1获取并校验 Circleback API Token引导用户前往 https://app.circleback.ai → 右上角个人头像 → Settings → API生成或复制一个 API Token。需要提醒用户Circleback 免费档每月可录制 10 场会议Pro$17/月不限量至少需要一场已录制的会议同步才能跑通。拿到 token 后立即校验不要跳过curl -sf -H Authorization: Bearer $CIRCLEBACK_TOKEN \ https://app.circleback.ai/api/mcp \ -X POST -H Content-Type: application/json \ -d {jsonrpc:2.0,method:tools/list,id:1} \ | grep -q result \ echo PASS: Circleback API connected \ || echo FAIL: Circleback token invalid校验失败的常见原因token 复制不完整、token 是长十六进制字符串注意区分 0/O、1/l、Circleback 账户未激活。校验不通过就停下来不要继续后续步骤。Step 2搭建同步脚本mkdir -p meeting-sync cd meeting-sync npm init -y脚本需要具备 7 项能力配方逐条列出列出会议——调用 Circleback API 的list_meetings带日期范围参数响应是 SSE 流式格式需要解析流式事件提取会议数据——标题、参会人、转录文本、时长、日期Slugify 标题——如 Weekly Team Sync →weekly-team-sync检查是否已存在——若brain/meetings/{date}-{slug}.md已存在则跳过格式化为 Markdown——frontmatter 要点 行动项 转录过滤参会人——移除日历资源、群组提取显示名从标题推断 Tags——如标题含 board →board含 1:1 →1on1。Step 3执行首次同步同步最近 7 天node meeting-sync.mjs --days 7全量回填backfill指定区间node meeting-sync.mjs --start 2026-01-01 --end $(date %Y-%m-%d)不带任何参数时默认只同步昨天和今天。验证输出ls brain/meetings/ | head -10应当看到类似2026-04-10-weekly-team-sync.md的文件。同步完成后向用户汇报找到并同步了 N 场会议列出最近 3 场。Step 4导入 GBraingbrain import brain/meetings/ --no-embed gbrain embed --stale这里--no-embed表示先只做导入解析 frontmatter、分块、建立索引结构随后gbrain embed --stale只对尚未嵌入stale的页面补做向量嵌入避免重复计算。导入命令的实现位于仓库 src/commands/import.ts。验证检索是否生效gbrain search meeting --limit 3Step 5向实体页面传播Agent 的核心职责这一步是配方的“人工判断”环节也是大多数 Agent 最容易跳过的一步。docs/guides/meeting-ingestion.md明确警告“实体传播是大多数 Agent 跳过的那一步”——会议页面本身若无传播价值大打折扣。对每场会议阅读会议页面理解谁参加了、讨论了什么对每位参会人执行gbrain search 参会人姓名若页面已存在追加时间线条目- YYYY-MM-DD | Meeting: {title}. Discussed: {与该人相关的要点} [Source: Circleback]若页面不存在且该人值得收录为其创建 Brain 页面对每家公司更新公司页面的时间线行动项若会议产生行动项确保其被跟踪与日历交叉引用将会议页面链接到日历事件同步gbrain sync --no-pull --no-embed。值得强调的一点被提及的人 ≠ 参会人。如果会议中讨论了 Alices team at widget-co那么即使 Alice 不在场Alice 的页面和 widget-co 的页面也都需要新增时间线条目。此外时间线条目应携带具体洞察Alice pushed back on the burn rate而不是笼统的 attended meeting——这是docs/guides/meeting-ingestion.md的“How to Verify”部分反复强调的验收标准。Step 6配置 Cron 定时同步工作日每天同步 3 次PT 时区 10 AM、4 PM、9 PM# 10 AM, 4 PM, 9 PM PT on weekdays 0 10,16,21 * * 1-5 cd /path/to/meeting-sync node meeting-sync.mjs /tmp/meeting-sync.log 21Step 7记录安装完成mkdir -p ~/.gbrain/integrations/meeting-sync echo {ts:$(date -u %Y-%m-%dT%H:%M:%SZ),event:setup_complete,source_version:0.7.0,status:ok} ~/.gbrain/integrations/meeting-sync/heartbeat.jsonl完成后向用户汇报Meeting sync is set up. Every meeting recorded by Circleback automatically becomes a searchable brain page. Attendee pages get updated with meeting history. Action items are extracted. Sync runs 3x daily on weekdays.实现指南生产环境验证过的关键模式配方文档注明以下模式来自280 场会议转录的实战同步经验。SSE 响应解析三层嵌套的“双重 JSON”Circleback 返回的是 JSONRPC 2.0 over SSEServer-Sent Events其响应结构为JSON 包在 SSE 里SSE 又包在 JSONRPC 里。解析伪代码如下call_circleback(tool_name, args): body {jsonrpc: 2.0, id: next_id(), method: tools/call, params: {name: tool_name, arguments: args}} res POST CIRCLEBACK_ENDPOINT, body, headers: {Authorization: Bearer TOKEN, Accept: application/json, text/event-stream} text res.text() for line in text.split(\n): if line.startsWith(data: ): json JSON.parse(line[6:]) // 去掉 data: 前缀 if json.result?.content?.[0]?.text: return JSON.parse(json.result.content[0].text) // 再次解析双重解析 if json.error: throw json.error最容易踩坑的非显然点必须依次完成四步——① 剥掉data:前缀② 把 SSE 行解析为 JSON③ 深入到result.content[0].text④把该字段再次JSON.parse因为它是“装着 JSON 的字符串”。这是整个同步脚本最常见的失败点也是安装后测试清单的第一项。幂等性的“双重检查”meeting_exists(source_id): // 方法 1在所有会议文件中 grep source_id result shell(fgrep -rl source_id: {source_id} {MEETINGS_DIR}/) if result: return true // 方法 2检查文件名后备方案 slug slugify(meeting.name) if file_exists(f{MEETINGS_DIR}/{date}-{slug}.md): return true return false为什么双重检查grep 能捕获“文件名被改动但source_id未变”的情况文件名检查则能兜住 grep 失效的场景例如权限问题。两者互为备份缺一不可。从会议名自动打标签auto_tag(meeting_name): name meeting_name.toLowerCase() tags [] if office hours in name or oh in name: tags.push(oh) if standup in name or sync in name: tags.push(sync) if 1:1 in name or 1on1 in name: tags.push(1on1) if board in name: tags.push(board) if policy in name or civic in name: tags.push(civic) if not tags: tags.push(meeting) return tags默认兜底标签是meeting——任何一场会议至少有一个可检索标签。这一“规则式推断”的好处是确定性同样的标题永远得到同样的标签不会像 LLM 推断那样抖动。完整的会议页面结构实现级比“意见化默认”更完整的结构含邮箱字段的参会人列表--- title: Weekly Team Sync type: meeting date: 2026-04-10 duration: 32 min source: circleback source_id: cb_abc123 attendees: - {name: Alice Chen, email: alicecompany.com} - {name: Bob Park, email: bobcompany.com} tags: [sync] --- # Weekly Team Sync ## Summary [Circleback AI summary] ## Attendees - Alice Chen - Bob Park ## Action Items - [ ] Alice: unblock API migration by Friday --- ## Transcript **Alice Chen** (00:00): Lets start with the roadmap... **Bob Park** (02:15): The prototype is basically done...同步后自动 Git 提交if new_meetings_created 0: shell(git add -A, cwdBRAIN_DIR) msg fsync: {count} meeting(s) from Circleback ({start} to {end}) shell(fgit commit -m {msg}, cwdBRAIN_DIR) shell(git push, cwdBRAIN_DIR)同步脚本自动 commit 并 push这会触发 GBrain 的 live sync 去索引新页面。提交信息中携带会议数量与时间区间便于事后审计每次同步的规模。安装后 Agent 必测清单SSE 解析验证SearchMeetings返回可解析的数据双重 JSON 解析是最常见失败点幂等性同步一场会议手动向文件加一条笔记再同步一次验证会议被跳过不重建、不覆盖参会人过滤同步一场参会人列表里含会议室名称的会议验证会议室不出现在参会人列表中自动打标签同步一场名为 1:1 with Sarah 的会议验证标签是1on1转录格式验证发言人姓名与时间戳格式正确发言人加粗、时间戳在括号内Git 提交同步 2 场以上会议验证 commit message 中包含会议数量。与会议导入 Skill 的衔接recipes/meeting-sync.md解决的是“从 Circleback 拉取 → 物化为页面”的采集层而 skills/meeting-ingestion/SKILL.mdv2.2.0把同一模式抽象为适用于任何会议记录器的统一流水线二者互补归一化契约无论来源是 Circleback、Granola、语音备忘录还是手动粘贴先归一化为标准转录记录source、source_id、title、date、attendees、transcript_segments、raw_transcript_text、source_summary等字段转录文本永不截断raw_transcript_text必须完整保留——AI 摘要会幻觉化框架it was agreed that...带说话人分离diarization的转录才是 ground truth多会议拆分一场录音可能包含多场连续会议需依据“名册变化 / 话题硬切 / 上下文重置”等信号在写页面前拆分跨记录器去重用户可能同时开两个记录器需按“日期 ±1 天 参会人重叠 ≥50% 标题相似”合并而非重复建页说话人解析记录器经常给出匿名标签UNKNOWN_N、Participant 2绝不猜测不确定就写[Room]/UNKNOWN并显式标记声明验证门记录器的自动摘要只是“主张”不是“事实”任何关系/角色变更、归属、新专有名词、重大事件类声明在写入实体页面前必须找到逐字转录行支持并经过“Brain 矛盾检查 逻辑合理性检查”验证清单HARD GATE报告“已摄入”前必须通过 V1–V6 六项检查内容实质、slug 页面与时间线回链、说话人映射、逐字引用落地、虚构参会人排查、叙事顺序校验。Skill 层还强调了两条与配方直接相关的纪律每个参会人和被提及的公司都必须从自己的页面回链到会议页面“未链接的提及是损坏的大脑”以及敏感会议法律、医疗、涉密内容应保持页面克制、减少传播。成本估算recipes/meeting-sync.md给出的成本明细组件月成本Circleback 免费档$0每月 10 场会议Circleback Pro$17/月不限量推荐$17/月Pro 档作为对比仓库中功能相近的 recipes/calendar-to-brain.mdGoogle Calendar 事件沉淀为会议页面成本为 $0——Calendar API 在免费配额内不收费。会议同步方案的实际开支完全取决于 Circleback 的用量档位。故障排查配方给出了三个高频问题的处置指引没有找到会议检查 Circleback 是否真的录制了会议打开 Circleback 控制台确认Circleback bot 必须加入会议录制才会发生扩大日期范围--days 30。转录为空部分会议可能没有转录如无音频、bot 被移除到 Circleback 控制台查看该场会议的具体状态。出现重复会议同步脚本按source_id检查既有文件若仍出现重复说明幂等检查可能失效手动删除重复文件后重新同步。总结Meeting Sync 配方以“录制即沉淀”的方式把会议从信息黑洞转化为可检索、可传播、可追踪的结构化记忆。它的四条支柱值得在实现时始终牢记确定性同步脚本负责采集与物化SSE 双重 JSON 解析是成败关键source_id幂等保证流水线可以安全地高频重复运行gbrain importgbrain embed让会议页面进入标准检索与嵌入链路Agent 的实体传播参会人、公司、行动项、双向回链才是会议价值的放大器——会议页面本身只是起点。相关资源模式总览见 docs/guides/meeting-ingestion.md统一流水线实现见 skills/meeting-ingestion/SKILL.md若需要进一步打通日历侧的自动沉淀可参考 recipes/calendar-to-brain.md 及其依赖的 recipes/credential-gateway.md。【免费下载链接】gbrainGarrys Opinionated OpenClaw/Hermes Agent Brain项目地址: https://gitcode.com/gh_mirrors/gb/gbrain创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考