拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Rowboat:开源本地优先的 AI 同事,用长期记忆知识图谱驱动日常工作的实战指南

Rowboat开源本地优先的 AI 同事用长期记忆知识图谱驱动日常工作的实战指南【免费下载链接】rowboatOpen-source AI coworker, with memory项目地址: https://gitcode.com/GitHub_Trending/rowb/rowboatRowboat 是一款开源的桌面端 AI 同事AI coworker应用核心特性是把你的邮件、会议、Slack 与助手对话索引进一个 Obsidian 风格的活知识图谱并基于这份长期记忆在你的机器上完成实际工作。本文以仓库根目录 README.md 为主体结合 apps/x/packages/core/src/knowledge 下的知识图谱实现源码系统讲解其功能矩阵、安装配置、模型接入与 MCP 工具扩展以及长期记忆 vs 即时检索的技术设计思路。项目定位与核心功能矩阵Rowboat 的定位是一台桌面级的 AI 同事它不只回答问题而是把你的工作内容持续索引成一个活的、可检查、可编辑的知识图谱再用这些知识在本地执行真实任务。它内置了多个与 AI 协作的工作台work surfaces覆盖日常工作中最常见的信息流工作台功能Brain大脑将邮件、会议、Slack 和助手对话索引成 Obsidian 风格、带反向链接的活知识图谱Email邮件内置邮件客户端把邮件分为重要与其他并利用全部工作上下文为重要邮件自动起草回复Background agents后台代理可配置在新邮件到达等事件触发或每天早 8 点等定时触发的代理能连接工具、搜索网络、使用浏览器并通过 Claude Code 或 Codex 编写代码Built-in Browser内置浏览器与主浏览器隔离你可以只登录愿意让助手访问的账号与助手协作完成网页任务Meeting Notes会议记录本地会议记录器接入麦克风与扬声器生成实时转写将会议总结写入 Markdown 文件并更新知识图谱Code Mode代码模式通过 Claude Code 或 Codex 并行启动多个编码代理由 Rowboat 注入工作上下文驱动它们Apps应用可在 Rowboat 内构建自己的工作台获得全部工具与集成能力并能分享给其他人Integrations集成一键连接大多数主流产品的集成这些工作台共享同一套底层机制知识图谱负责记住后台代理与编码代理负责行动。安装与前置配置系统支持Mac / Windows / Linux 三平台桌面应用官方下载入口在 Download。Google 服务接入Gmail / Calendar / Drive要连接 Google 服务需要先在 Google Cloud Console 生成 OAuth 凭据Client ID 与 Client Secret。完整步骤记录在仓库根目录的 google-setup.md要点如下在 Google Cloud Console 创建新项目依次启用 Gmail API、Google Calendar API、Google Drive API配置 OAuth 同意屏幕App 信息、Audience 选 External、添加联系邮箱无需发布应用保持 Testing 模式即可在 Test Users 中添加你要连接 Rowboat 的邮箱创建 OAuth Client ID应用类型选择Web application授权重定向 URI 必须精确填写http://localhost:8080/oauth/callback无尾斜杠、端口 8080复制 Client ID 与 Client Secret在 Rowboat 提示时粘贴。常见排错浏览器显示 Authorization Successful 但应用报错时优先核对重定向 URI 是否完全一致、应用类型是否为 Web applicationDesktop/UWP 类型可能不提供 client secret 或处理重定向方式不同。语音输入可选Deepgram在~/.rowboat/config/deepgram.json中添加 Deepgram API key 即可启用语音输入与语音备忘。源码侧的加载逻辑位于 apps/x/packages/core/src/voice/voice.ts它通过readJsonConfig(deepgram.json)读取配置并在调用 Deepgram 语音识别接口时以Authorization: Token key请求https://api.deepgram.com/v1/listen。语音输出可选ElevenLabs在~/.rowboat/config/elevenlabs.json中添加 ElevenLabs API key 以启用语音输出。从源码看该配置还支持可选的voiceId字段默认使用内置的DEFAULT_VOICE_ID请求会携带xi-api-key头访问https://api.elevenlabs.io/v1/text-to-speech/voiceId支持流式/stream输出。网络搜索可选Exa在~/.rowboat/config/exa-search.json中添加 Exa API key 以启用研究型搜索。外部工具可选MCP 或 Composio启用外部工具有两种方式添加任意 MCP 服务器或在~/.rowboat/config/composio.json中添加 Composio API key。源码 apps/x/packages/core/src/composio/client.ts 显示Composio 客户端会读取WorkDir/config/composio.json未登录账号时以x-api-key头访问https://backend.composio.dev/api/v3。所有 API key 文件使用统一格式{ apiKey: key }注意README 给出的用户侧路径为~/.rowboat/config/*.json而源码中的常量基于WorkDir工作目录计算两者分别对应桌面应用的用户配置目录与程序工作目录格式完全一致。核心原理长期记忆知识图谱Brain与主流 AI 工具的本质差异README 用一段话点明了设计差异大多数 AI 工具在需要时通过搜索转写稿或文档来按需重建上下文Rowboat 则维护长期存在的知识上下文随时间持续积累实体关系显式且可检查笔记由你亲自编辑而不是藏在模型内部一切以纯 Markdown 形式保存在你的机器上。结果是一种复利式记忆——记忆不断累积增值而不是每次检索都从冷启动开始。知识图谱构建系统的源码结构知识图谱构建系统集中在 apps/x/packages/core/src/knowledge 目录其内部文档 apps/x/packages/core/src/knowledge/README.md 给出了完整组件图build_graph.ts主编排器。批量处理源文件邮件/转写稿运行note_creation代理抽取实体只处理新增或变更的文件通过状态跟踪。note_curation.ts整合园丁代理。note_creation只追加不清理笔记会随时间膨胀变质每日一次整理将累积最多的笔记逐条重写。graph_state.ts状态管理模块采用 mtime 哈希混合变更检测状态存于WorkDir/knowledge_graph_state.json。sync_gmail.ts 与 sync_fireflies.ts同步脚本从 Gmail 和 Fireflies 拉取数据保存为 Markdown 文件并在同步成功后触发知识图谱构建。classify_thread.ts收件箱分类器为每封邮件的 frontmatter 打上knowledge: extract | skip判定。变更检测策略mtime 哈希混合系统采用混合 mtime 哈希方案避免重复处理快速检查比较文件修改时间mtime未变化则确定跳过验证mtime 变化时计算内容哈希——哈希未变说明是误报mtime 变了但内容没变跳过哈希变了说明文件确实变更进入处理流程。这一策略既高效只对可能变化的文件做哈希又可靠确认真实内容变更。状态文件结构如下{ processedFiles: { /path/to/file.md: { mtime: 2026-01-07T10:30:00.000Z, hash: a3f5e9d2c8b1..., lastProcessed: 2026-01-07T10:35:00.000Z } }, lastBuildTime: 2026-01-07T10:35:00.000Z }处理流程同步运行Gmail 或 Fireflies拉取新数据 → 保存为 Markdown → 调用buildGraph(SYNC_DIR)buildGraph()加载状态 → 扫描源目录 → 只筛选新增/变更文件 →每个代理运行只处理 1 个源文件BATCH_SIZE 1刻意防止跨文件实体污染 → 每批成功后增量保存进度代理处理批次抽取实体人物、组织、项目、主题→ 在WorkDir/knowledge/下创建/更新笔记 → 对出现在多个文件中的同一实体合并信息。从 build_graph.ts 的源码注释可以看到BATCH_SIZE 1是刻意设计One source file per agent run — prevents cross-file entity contamination in the graph。每次批量构建前还会重建一次知识索引buildKnowledgeIndex()确保提示词中包含前序批次产出的最新实体索引每批成功后调用commitAll(Knowledge update, Rowboat)将变更提交进版本历史。笔记创建的严格度配置系统支持三档严格度控制从邮件创建笔记的激进程度会议在任何级别都会创建笔记。配置位于WorkDir/config/note_creation.json{ strictness: medium, configured: true }首次运行系统会自动分析你的邮件并推荐设置见 strictness_analyzer.ts。各档位的取舍逻辑来自 apps/x/packages/core/src/knowledge/README.md级别哲学过滤特点High会议创建笔记邮件仅丰富之邮件从不新建笔记只更新已认识之人的现有笔记熟人转介除外Medium两者都可建笔记但邮件需有个人化内容过滤消费服务、群发邮件、泛泛推销任何人的友好转介都会建笔记Low广泛捕获绝不漏掉潜在重要联系人为任何可识别的人类发件人建笔记只跳过明显的自动化邮件与新闻通讯自动推荐逻辑超过 100 个真人发件人 → 推荐 High50–100 个 → Medium消费服务邮件占比超 50% → Medium少于 30 个发件人 → Low。源码层面配置读写由 note_creation_config.ts 负责支持low | medium | high三值缺省为mediumconfigured标记用于区分系统自动分析配置与尚未配置。值得注意的是源码中严格的邮件准入判定是硬编码在构建管线里的build_graph.ts的emailAdmission()只放行被分类器打上knowledge: extract的邮件knowledge: skip的邮件被标记为已处理并永久跳过旧的 labeling 代理 frontmatter 则通过hasNoiseLabels()检查噪音标签兜底。所有权身份注入与 Email Reply Gate每次note_creation/note_curation运行都会注入一个记忆所有者信息块由 build_graph.ts 的buildOwnerBlock()从config/user.jsonknowledge/Agent Notes/user.md构建。提示词中的身份逻辑——自我排除、第一人称视角、Email Reply Gate、外发邮件处理、按域名识别同事——全部依赖它绝不让代理从邮件头猜测用户身份。其中最重要的选择性规则是Email Reply Gate冷入站邮件绝不创建笔记。该规则由代码机械计算而非交给模型判断——源码注释记录了一次实测某测试语料中 14 条笔记里有 7 条来自未回复的冷推销邮件。代码通过解析邮件的### From:线程结构判断用户这方是否曾在该线程中发过消息回复过才允许创建新的人物/组织笔记且模型只负责判断回复的含义纯入站线程则明确禁止创建任何新笔记例外是真实的一对一/小团体会议邀请。同时还会识别 Google Groups 的via重写格式避免把外部发件人误判为同事。每日整理Curation机制note_creation只追加若不定期整合笔记会膨胀变质重复活动、过期待办、frontmatter 漂移、模式从未沉淀为事实。因此每日运行一次curateNotes()源码常量CURATION_INTERVAL_MS 24h每次最多处理CURATION_MAX_NOTES_PER_RUN 8条将超过 60 天的活动折叠为月度摘要把反复出现的模式提升为带日期的 Key facts / Assistant 笔记反思步骤将过期的未完成事项退役到 Dormant 列表校正 frontmatter/正文漂移与视角错误并在 frontmatter 中盖上curated_at时间戳。候选资格活动条目数 ≥ 8、自上次整理后有修改、有 7 天冷却期防止每次小追加都触发重整理。整理结果以 Knowledge curation 提交进版本历史。这就是源码注释所说的图谱的复利循环。后台代理事件驱动 定时驱动README 提到后台代理可在新邮件到达时运行也可每天早 8 点定时运行。调度器的实现位于 apps/x/packages/core/src/background-tasks/scheduler.ts每15 秒轮询一次任务清单POLL_INTERVAL_MS 15_000与 live-note 调度器一致支持暂停/启用task.active、进行中保护lastAttemptAt晚于lastRunAt视为在途且仅在退避窗口内视为 in-flight崩溃恢复后可重试、指数退避backoffRemainingMs、周期锚定只有成功运行才推进周期失败保留待下一次自然触发重试。触发源通过dueTimedTrigger(task.triggers, completedAt)判定对应 README 中事件触发如新邮件与定时触发如每天早 8 点两类触发器。代理可连接工具、搜索网络、使用内置浏览器并通过 Claude Code 或 Codex 写代码。自带模型Bring Your Own ModelRowboat 兼容你偏好的模型方案且可随时切换本地模型通过 Ollama 或 LM Studio托管模型自带 API key / 提供商随时更换模型——你的数据始终留在本地 Markdown vault 中不受模型供应商锁定。从源码结构看模型相关实现集中在 apps/x/packages/core/src/models29 个文件知识图谱与编码代理均有独立的模型默认值解析如getKgModel()说明不同工作流可以分别指定模型。通过 MCP 扩展工具能力Rowboat 通过Model Context ProtocolMCP连接外部工具与服务可接入搜索、数据库、CRM、支持工具、自动化以及你自己的内部工具。README 给出的示例包括Exa网络搜索、Twitter/X、ElevenLabs语音、Slack、Linear/Jira、GitHub 等。仓库源码 apps/x/packages/core/src/mcp含mcp.ts、repo.ts与运行时工具域 runtime/tools/domains/mcp.ts 提供了 MCP 服务器的连接与工具调用支持。示例并行网络搜索Parallel Search MCPParallel Search MCP 提供web_search与web_fetch两个工具无需 Parallel 账号或 API key 即可进行公开网页搜索与页面提取免费使用有速率限制。配置步骤打开Settings → MCP Servers在现有mcpServers对象中追加parallel条目并点击Save保留其他服务器条目。若尚未配置任何服务器使用{ mcpServers: { parallel: { url: https://search.parallel.ai/mcp } } }该配置走 Rowboat 现有的 Streamable HTTP 客户端连接。配置完成后让 Rowboat 列出parallel服务器上的工具然后尝试Use Parallel to find the official MCP documentation.用 Parallel 查找官方 MCP 文档。几点注意事项README 明确说明配置后 Rowboat 可以在工作中调用这些工具受你的 MCP 工具权限约束查询、请求的 URL 以及提供的目标或上下文会发送给 Parallel此设置不会改动 Exa 及其他已配置的提供商要移除时删除Settings → MCP Servers中的parallel条目并保存即可。Local-First 设计一切尽在纯 MarkdownRowboat 的本地优先设计是其记忆哲学的技术根基所有数据以纯 Markdown 本地存储无私有格式、无托管锁定你可以随时检查、编辑、备份或删除所有内容。这意味着记忆是可读、可审计、可版本化的资产WorkDir/knowledge/目录本身就是一本可被任何 Markdown 工具打开的知识库knowledge_graph_state.json记录处理进度version_history.ts的commitAll()把每次知识更新沉淀为可回溯的版本历史。总结Rowboat 的差异化路径可以概括为一句话不是每次冷启动地检索而是持续积累、显式可查、由你掌控的复利式记忆。本文覆盖了它的完整功能矩阵、Google 与语音/搜索/工具配置、知识图谱从同步到构建再到每日整理的技术管线含严格度分层与 Email Reply Gate 的机械判定、后台代理调度器、自带模型策略与 MCP 扩展方法。想深入实现细节的读者可以从 apps/x/packages/core/src/knowledge/build_graph.ts 与 apps/x/packages/core/src/knowledge/README.md 开始顺藤摸瓜阅读graph_state.ts、note_curation.ts与classify_thread.ts的完整实现。【免费下载链接】rowboatOpen-source AI coworker, with memory项目地址: https://gitcode.com/GitHub_Trending/rowb/rowboat创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门