Company Brain记忆系统揭秘:向量混合搜索如何听懂你的团队
【免费下载链接】company-brainOpen-sourcing our company brain - A teammate in your Slack that remembers everything your team says, and can go do the work.项目地址: https://gitcode.com/gh_mirrors/co/company-brain
Company Brain是部署在 Slack 里的 AI 队友,它记住团队说过的每一句话,还能主动动手完成任务。它的核心能力来自一套向量混合搜索记忆系统——既懂语义、又抓关键词,让你随口一问就能召回团队里几个月前的决定、会议结论和分工。
如果你想知道"Slack AI 机器人到底怎么记住团队对话",这篇文章用大白话带你拆解 Company Brain 的记忆架构、混合搜索原理和权限边界。
一、Company Brain 是什么:Slack 里的"团队外脑"
一句话定义:Company Brain = 一个会听、会记、会动手的 Slack 机器人。
- 听:监听你在工作区里 @它 的消息、私聊,以及公开频道里的关键讨论。
- 记:把对话沉淀成结构化的"记忆条目",按频道/个人/公司三个层级隔离。
- 答:下次有人问"Acme 那次会议定了吗?",它从记忆里检索,给出答案并附上来源。
- 做:能调用 GitHub、Notion、Gmail 等工具,真的去执行任务。
架构总览见官方文档 docs/architecture.md,它描述了从 Slack 事件到 AI 回复的完整主链路。
二、记忆的三层容器:谁在记、记在哪
Company Brain 不是把所有东西塞进一个大数据库,而是把记忆切成三个隔离的容器(container),每条记忆只写入对话发生的那一间"屋子"。
| 层级 | 容器标签 | 谁可见 | 典型来源 |
|---|---|---|---|
| 员工记忆 | user_<用户ID> | 仅本人私聊 | 你和机器人的 DM |
| 私密频道记忆 | slack_channel_<频道ID> | 该频道成员 | 私密频道里的讨论 |
| 公开频道记忆 | sm_org_shared | 全组织 | 公开频道的持久化信息 |
规则很简单:消息写在它发生的那间屋子,读取时才能跨屋子借调。
读取范围由 src/brain/memory/read-scope.ts 决定:
- 公开频道提问 → 只能读公开记忆;
- 私密频道提问 → 读该频道 + 公开记忆;
- 私聊提问 → 读你的员工记忆 + 公开记忆 +你所在的所有私密频道记忆。
这就是为什么在#general里问不到#acme-deal里的秘密——你的访问边界就是记忆的边界。更多细节见 docs/guide/permissions.md。
三、向量混合搜索:怎么"听懂"你的问题
这是整篇文章的重点。你问"上次那个 SSO 的事谁在跟?"——这句话既不是精确的字符串,也不是一个现成的语义向量。Company Brain 用混合搜索(Hybrid Search)同时跑两路:
- 向量检索(语义匹配):把你的问题编码成向量,在记忆里找"意思最接近"的条目——哪怕你用了不同的措辞。
- 关键词检索(精确匹配):匹配字面上出现 "SSO"、"谁"、"跟" 的条目——适合查人名、项目代号、具体术语。
两路结果合并打分,取相关度最高的 Top 40 条。相关度阈值(BRAIN_RELEVANCE_THRESHOLD)设为0.3,低于它的直接丢弃,避免返回"看似相关实则跑题"的噪音。
核心逻辑在 src/brain/memory/search-brain.ts,几个关键参数:
| 参数 | 值 | 作用 |
|---|---|---|
searchMode | "hybrid" | 混合搜索(向量 + 关键词) |
limit | 40/ 容器 | 每个容器最多返回 40 条 |
threshold | 0.3 | 相关度过滤线 |
rerank | false | 不二次重排,保证低延迟 |
| 并发批次 | 6 | 多容器并行查,但限流防过载 |
查询多个容器后,系统会按 ID 去重(保留相似度更高的那条),再统一按相似度排序,取最终 Top 40。
💡为什么叫"混合"?纯向量搜索擅长"意思相近",但查
SSO这种缩写容易漏;纯关键词擅长精确匹配,但你换个说法就抓瞎。两路互补,召回率更稳。
四、标签系统与主题树:让记忆更有序
每条记忆不止是一段文字,它还携带标签(Tags)——这是 Company Brain 对记忆做结构化分类的关键。
标签种类定义在 src/brain/memory/tags.ts:
person / channel / topic / project / customer / team / preference / task / other每条记忆最多4 个标签(MAX_BRAIN_TAGS_PER_MEMORY = 4),写入时自动归一化,避免"张三"和"Zhang San"变成两个标签。
在标签之上,Company Brain 还维护一棵主题树(Topic Tree),见 src/brain/memory/tree.ts。它把topic_、project_、customer_、team_这几类标签组织成层级路径,比如:
project/SSO → 包含 3 条相关记忆 customer/Acme → 包含 5 条相关记忆当某个节点下的记忆多到一定程度,系统会自动拆节点(maybeSplitNode),保持树的粒度合适、检索更快。
五、从写入到召回:记忆的完整生命周期
对话发生 → 提取记忆 → 写入容器 → 打标签 → 入主题树 → (下次提问时)混合搜索召回写入逻辑在 src/brain/memory/writeback.ts,关键点:
- 每条消息只写一个容器(就是它发生的那间屋子);
- 写入时
dreaming: "instant"表示即时向量化,不用等后台批处理,几秒内可被搜到。
召回分两条路径:
- 主动搜索(
searchBrain):有人提问时触发,就是上面讲的混合搜索。 - 环境注入(src/brain/memory/profile-recall.ts):每次对话开始时,自动把"和提问者最相关的个人档案 + 当前频道画像"塞进上下文,无需搜索。个人档案 = 该用户被分桶(bucketed)的记忆,token 预算上限 20K。
六、快速上手:在你的 Slack 里体验
- 安装:管理员从已登录的 Supermemory 组织页点击安装,机器人会创建一个
#company-brain频道。 - 私聊试用:DM 机器人,告诉它你负责什么、你的偏好,它开始建立你的员工记忆。
- 公开频道问:在
#product里 @它 "我们 Q2 路线图是什么?",它通过连接器(如 Notion)实时读取并回答。 - 私密频道沉淀:在私密频道里讨论的决定会自动写入该频道的记忆,只有频道成员能召回。
更多使用场景参考 docs/guide/use-cases/meeting-recall.md(会议召回)和 docs/guide/use-cases/knowledge-recall.md(文档问答)。
七、小结
| 你想了解的 | 答案 |
|---|---|
| 记忆存在哪? | 三个隔离容器,按对话发生地写入 |
| 怎么搜? | 向量 + 关键词混合搜索,Top 40,阈值 0.3 |
| 怎么分类? | 9 种标签 + 主题树自动拆节点 |
| 权限怎么控? | 读取范围 = 提问者的访问边界,私密频道记忆绝不越界 |
Company Brain 的记忆系统不是"把所有聊天记录丢给一个大模型",而是一套分层容器 + 混合检索 + 结构化标签 + 权限隔离的工程化方案。理解了这个架构,你就能明白它为什么既能"听懂"你的模糊提问,又不会把私密信息泄漏到不该出现的地方。
📌 想深入代码?核心入口 src/brain/memory/search-brain.ts,向量服务封装在 src/compat/services/vectordb/index.ts,记忆 CRUD 在 src/memory/memories.ts。
【免费下载链接】company-brainOpen-sourcing our company brain - A teammate in your Slack that remembers everything your team says, and can go do the work.项目地址: https://gitcode.com/gh_mirrors/co/company-brain
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考