Skip to content

飞书接入 · 让第二大脑对外答疑

一句话:给你的知我配一个飞书机器人,飞书联系人就能在手机上 1:1 私聊向它提问——能读到什么、用什么模型答、答完存不存,都由你为每一位访客单独决定。默认它只读你编译好的 Wiki,碰不到 raw 原始笔记。

0.8.0 起可用;现已支持为访客分配通讯录 agent、单独选应答模型、设会话保留策略

它解决什么

你的知识库里,有些内容可以对外说(编译好的 Wiki 词条、公开方法论、对外 FAQ),有些是绝对私密的原始笔记(日记、工作机密、个人资料)。「飞书接入」让别人来问,同时用**「给访客绑定什么应答身份」**来控制他到底能读到什么:

  • 别人在飞书里私聊机器人,知我用你给这位访客绑定的应答助手 / agent 来回答;
  • 能力集就是可见边界——默认的 wiki 助手只能读编译好的 Wiki,碰不到 raw 原始笔记;你可以把某访客切到空间助手(能读原始笔记,高危),或更进一步分配一个通讯录里的 agent(把该 agent 的工作目录与权限一起交给这位访客)。

这是源头隔离:外部回答用的是一套能力集固定的应答身份,能读什么由身份决定,而不是事后对内容脱敏。

架构上,知我用飞书的长连接(WebSocket)接收消息:由本地 app 主动连飞书云,无需公网 URL、无需 webhook、无需内网穿透。凭证加密存在你本机,app 关掉连接就断,飞书 SDK 都不加载。

前置:一个飞书企业自建应用

你需要一个飞书企业自建应用 + 机器人(个人可在飞书开放平台免费创建)。

1. 创建应用

  1. 打开 飞书开放平台 → 「创建企业自建应用」。
  2. 填应用名称 / 图标(如「知我」),创建后进入应用详情页。
  3. 在「凭证与基础信息」页记下两个凭证:
    • App ID(形如 cli_xxxxxxxxxxxxxxxx
    • App Secret(点「查看」获取,注意保密

2. 开启机器人能力

应用详情 → 「添加应用能力」 → 启用 机器人(Bot)

3. 事件订阅选「长连接接收」(关键)

  1. 应用详情 → 「事件与回调」 → 「事件配置」。
  2. 订阅方式选 「使用长连接接收事件」(不是「将事件发送至开发者服务器地址」)。
    • 选长连接后无需填 webhook URL、无需 verify_token / encrypt_key、无需公网暴露。
  3. 添加事件:「接收消息 im.message.receive_v1

4. 申请权限

「权限管理」中开通(1:1 问答最小集):

  • im:message(获取与发送单聊消息)
  • im:message:send_as_bot(以应用身份发消息)

5. 发布版本

「版本管理与发布」→ 创建版本 → 提交发布(个人企业自建应用通常即时生效;组织下可能需管理员审批)。

在知我里填凭证并启用

设置 → 通道接入 → 飞书接入:填 App ID / App Secret 的凭证表单

  1. 知我 → 设置(⌘,)→ 「访问与回复」组 → 「通道接入」
  2. 进入「飞书接入」,填 App IDApp Secret保存凭证
    • App Secret 经系统 safeStorage 加密存本机,保存后不再回显(只显示 App ID 与状态)。
  3. 打开连接开关(需已保存凭证才可点)。
  4. 重启知我——凭证在 app 启动时才建长连接,所以启用后需重启一次以连线。

多账号:同一个「飞书接入」下可以管理多个机器人(多个企业自建应用),各自独立填凭证、独立启停。适合你想为不同用途开不同 bot 的场景。

连接成功后,机器人就在线待命了。

决定外部能读到什么:给访客绑定应答身份

外部能读到什么,由你给这位访客绑定的「应答身份」决定——它的能力集就是可见边界。有两类可选:

一、内置只读助手(默认、最安全)

应答助手能读到说明
wiki 助手(默认)只读编译好的 Wiki 词条每个新批准的访客默认就是这档,碰不到 raw 原始笔记
空间助手(高危)全库,含 raw 原始笔记能读原文,风险高——切到它时会二次确认

默认情况下外部只能问到你的 Wiki,不会读到任何原始笔记。这是源头隔离:wiki 助手的工具集里根本没有读原文的能力。

二、通讯录 agent(把指挥权交出去)

除了两个内置助手,你还可以把访客的应答身份切换成一个通讯录里的 agent(如你配的本地 opencode / codex agent)。这一步的语义比「切助手」更重——

分配一个 agent 给外部访客 = 把这个 agent 的指挥权交给他。 这位访客的每条提问,都会由该 agent 在**它自己配置的工作目录(cwd)里、以它的权限档(tier)**去真实执行来回答。

因此 agent 的 cwd + tier 就是安全边界(由底层引擎强制):

  • cwd:agent 只能在这个目录里工作。分配给外部访客的 agent,务必配一个专用、圈定好的工作目录——没配工作目录的 agent 不允许对外分配。
  • tierread-only(只读)/ approval(需审批,即将支持)/ yolo(放开)——决定这个「被外部指挥」的 agent 能做到什么程度。

普通对外答疑用内置 wiki 助手即可;只有你确实需要「让某人直接指挥某个 agent 在某个目录里干活」时,才分配通讯录 agent,并为它圈好 cwd、选对 tier。

为访客单独选应答模型

给访客绑定了通讯录 agent后,可以在协作配置面板里为这位访客单独指定应答模型(复用与消息 tab 一致的模型选择)。这样同一个 agent,回答 A 访客用 GLM,回答 B 访客用 GPT,互不影响。留空则用该 agent 模板配置的默认模型。

内置 wiki / 空间助手没有独立模型概念,此项只在绑定了通讯录 agent 时出现。

会话保留策略:这位访客的对话存不存

每位访客可单独设置对话在知我本地的保留策略(不影响 agent 侧的上下文连贯):

模式含义
完整存储(默认)该访客的问答完整留档,协作 tab 可回溯全部历史
仅留最近一轮只保留最近一问一答,每轮覆盖旧的——不长期留档,但列表活动时间仍准确

选「仅留最近一轮」的访客,左侧列表头像上会有一个不留痕徽标提示。

批准联系人(capture-then-approve)

飞书联系人首次私聊机器人时,其身份会被捕获为待审批,此时不会得到答案。你需要先批准:

协作 tab:新访客私聊进入待审批,看完消息再点「批准接入」

  1. 进入知我的协作 tab(Agent Fleet 下)——新访客会以内联接入卡片出现在顶部。
  2. 找到该联系人 → 批准
  3. 批准后,该联系人后续的 1:1 提问才会被服务。

有新访客待审批时,即使你在知识模式,侧栏也会有一个跨模式提示 badge,不用一直守在协作 tab。

在协作 tab 里配置每位访客

协作 tab 头部「···」配置面板:为该访客切应答助手/agent、选应答模型、设会话保留策略,以及看详情/复制/清空/撤销

选中一位已批准的访客后,上述所有 per-访客设置都在协作对话窗里就地完成,有几个等价入口:

  • 头部「···」按钮:弹出配置面板——切换应答助手 / agent、选应答模型、切会话保留策略、看访客详情、复制 open_id、清空对话、撤销授权。改动选完即生效(无需再点保存)。
  • 对话区 / 左侧访客列表条目右键:弹原生菜单,快捷切换会话模式(当前档带 ✓)、看详情、复制、清空、撤销。
  • 输入框左下角芯片:点 agent 名芯片就地切换应答 agent;点「Bot 直发」芯片查看发信身份。

任一入口改了 agent,输入框芯片会即时同步;左侧列表条目第二行也直接显示该访客当前的应答 agent 名。

当前能力边界

老规矩,把话说清楚——当前版本的范围:

  • 仅 1:1 文本私聊。把机器人拉进群 @它不会触发问答。
  • 默认只读编译好的 Wiki(wiki 助手),碰不到 raw 原始笔记;要读原文切空间助手(高危,二次确认),要让访客直接指挥某 agent 则分配通讯录 agent(cwd+tier 即边界)。
  • 回答基于你的知识库 / 被分配 agent 的工作目录,由绑定的应答身份来答,不是让外部凭空翻你的文件系统。
  • 需要你自建飞书应用:凭证是你的、连接是你本机发起的,知我不经手你的飞书账号。

主动推送、审批档(approval)relay、更复杂的对外协作能力,是后续版本的方向。

排障

现象排查
启动后连不上 / 报鉴权错App ID / App Secret 是否正确;应用是否已发布;权限是否开通
收不到消息事件订阅是否选了「长连接接收」并添加了「接收消息」事件;机器人能力是否开启
联系人问了没回是否仍在待审批(需先在协作 tab 批准);连接开关是否开启;保存凭证后是否重启过 app
问到的内容答「没有这个信息」内容是否已编译进 Wiki(wiki 助手只读 Wiki);要让访客读到原始笔记,需把他切到空间助手
分配了 agent 但答「暂无法服务」该 agent 是否配了工作目录(cwd)——没配 cwd 的 agent 不允许对外分配
切了模型却没生效该访客是否绑的是通讯录 agent(内置助手无独立模型);切换后下一轮生效
群里 @ 没反应正常——当前仅服务 1:1 私聊

想让 AI agent(Claude Code / Cursor)也读你的知识库?看 MCP 接入