AI PLAY玩法更新持续收录
← 回到更新流

2026-09-21 · 原文发布日

Drive 同步的 Telegram 知识库机器人

Telegram 收到提问后交给 LangChain Agent,结合 OpenRouter 聊天模型、Postgres 记忆和 Supabase 向量检索回答。另一条线监听 Google Drive:新 PDF 下载、抽文本、切块、用 OpenAI embedding 入 Supabase;更新文件先删同名向量再重建;移入 trash 文件夹则删除对应向量并移除 Drive 文件,避免过期资料继续被检索。

原文要点

原工作流由 MADIAD 发布(n8n.io/workflows/19789,免费模板):Telegram 收到提问后交给 LangChain AI Agent,组合 OpenRouter 聊天模型、Postgres 聊天记忆与 Supabase 向量库工具(OpenAI embedding)检索上下文作答并回发 Telegram。另一条线监听 Google Drive:新文件触发下载 PDF、抽文本、切块、embedding 入 Supabase;更新触发先按文件名删除旧向量再重建;文件出现在指定 trash 文件夹时删除对应向量并从 Drive 删除文件。作者提醒:按文件名删向量要求切块元数据里稳定写入 fileName。

这次做成什么

搭一套『Drive 同步的 Telegram 知识库机器人』:向测试机器人提问时从已索引的 PDF 检索答案;往 Drive 文件夹放/改/移入回收文件夹 PDF 时,向量库自动新增、重建或清除。练习方案:只用一份自己写的测试 PDF 和隔离的测试文件夹跑通三条同步线。

准备什么

  • n8n 实例,可连 Telegram/Google/Supabase/OpenRouter/OpenAI/Postgres
  • @BotFather 创建的测试机器人 token
  • Google Drive OAuth2 凭据,测试文件夹需授权下载与删除权限
  • 已启用 pgvector 的 Supabase 项目及服务密钥
  • OpenRouter API 密钥(聊天模型)与 OpenAI API 密钥(embedding)
  • 可写的 Postgres 实例用于聊天记忆(可用 Supabase 自带库或独立测试库)

具体怎么做

  1. 建向量表与凭据

    在 Supabase SQL 编辑器执行下方建表语句(本站示例,表名与维度按你的 embedding 模型调整),启用 vector 扩展。n8n 里依次添加 Telegram、Google Drive OAuth2、Supabase、OpenRouter、OpenAI、Postgres 六组凭据。

  2. 接问答线:Telegram→Agent→回复

    Telegram Trigger 收消息,把文本送入 LangChain AI Agent 节点;Agent 挂三样东西:OpenRouter 聊天模型、Postgres Chat Memory(以 Telegram chat id 作会话键)、Supabase Vector Store 工具(OpenAI embedding,指向上面的表)。Agent 输出经 Telegram 节点发回原会话。

  3. 接新增线:新 PDF 入库

    Google Drive Trigger 监听『新建文件』的测试文件夹;后接 Download 节点取 PDF、文本抽取节点取全文、文本切分节点切块,切块时把 fileName 写入每块 metadata;再用 OpenAI embedding 生成向量插入 Supabase 表。

  4. 接更新线:先删后重建

    第二个 Drive Trigger 监听『文件更新』;先执行删除:按 metadata 里 fileName 等于该文件名删掉旧向量(Supabase 删除节点或 SQL 节点),再复用新增线的下载→抽取→切块→embedding→插入流程重建该文件的全部向量。

  5. 接收回线:移入 trash 即清除

    第三个 Drive Trigger 监听指定的 trash 文件夹;文件出现时同样按 fileName 删除 Supabase 中匹配向量,然后调用 Drive 删除节点把该文件从 Drive 移除,避免过期资料继续被检索命中。

  6. 端到端测试

    把下方测试 PDF 内容存成 demo-faq.pdf 放进源文件夹,等新增线跑完;在 Telegram 问『演示产品的退款期限是多久』,机器人应引用 30 天作答。修改 PDF 把 30 天改为 14 天覆盖上传,再问应得到 14 天;把文件移入 trash 文件夹后再问,应回答找不到相关资料,且 Drive 中文件被删除。

可直接复制的材料

Supabase 向量表建表示例(本站独立编写)

本站独立编写的示例 SQL,非原作者提供;1536 维对应 text-embedding-ada-002/3-small,若换模型需改维度;表名要与 Supabase Vector Store 节点里填的一致,具体节点参数以原模板为准。

create extension if not exists vector;

create table if not exists documents (
  id bigserial primary key,
  content text,
  metadata jsonb,
  embedding vector(1536)
);

create index if not exists documents_embedding_idx
  on documents using ivfflat (embedding vector_cosine_ops)
  with (lists = 100);

-- 按文件名清除某文件全部向量(更新线与回收线共用此思路)
delete from documents
where metadata->>'fileName' = 'demo-faq.pdf';

测试 PDF 文本内容(本站虚构)

本站虚构内容,保存为 demo-faq.pdf(可用任意编辑器导出)用于端到端测试,与 example 中的问答对应。

演示产品 FAQ(虚构)
1. 演示产品的退款期限是购买后 30 天内,超过期限不予受理。
2. 演示账号最多支持 5 台设备同时登录。
3. 企业版包含单点登录与审计日志功能,标准版不包含。
4. 数据导出支持 CSV 与 JSON 两种格式。

输入与输出示例

本站虚构演示,未实际运行,非原作者结果;回复措辞取决于所选聊天模型。

输入

上传含上方四条 FAQ 的 demo-faq.pdf 到 Drive 源文件夹,然后在 Telegram 测试会话发送:『演示产品的退款期限是多久?』

对应输出

机器人回复大意:『根据知识库内容,演示产品的退款期限是购买后 30 天内,超过期限不予受理。』将 PDF 中 30 天改为 14 天覆盖上传触发更新线后,再问同一问题回复变为 14 天;把文件移入 trash 文件夹后,Supabase 中 fileName=demo-faq.pdf 的向量被清空,再问回复为未找到相关资料,且 Drive 里该文件已被删除。

做完检查这些

  • 新 PDF 放入源文件夹后,Supabase 表中新增多行且每行 metadata 都含相同的 fileName 值
  • Telegram 提问退款期限,回答中的天数与当前 PDF 版本一致(30→改后 14)
  • 覆盖上传同名文件后,旧版本内容不再被检索到,表中该文件的向量数量与新版切块数一致
  • 文件移入 trash 文件夹后,按 fileName 查询 Supabase 返回 0 行,且 Drive 中该文件被删除
  • 连续两轮对话中 Postgres 记忆生效,第二轮能引用第一轮上下文

容易卡住的地方

  • 切块时忘了把 fileName 写进 metadata,更新与回收线会删不掉旧向量,导致新旧答案并存
  • Drive 凭据只有读取权限时下载正常但回收线的删除会失败,需在 OAuth 授权时给足范围
  • embedding 模型维度与建表维度不一致会插入报错,换模型必须重建表
  • 更新线若先重建后删除,顺序错了会把新向量也清掉,必须先删后建
  • OpenRouter 模型名拼写错误或额度不足会让 Agent 静默失败,先在节点里单独试跑模型
  • trash 文件夹用系统回收站代替指定文件夹时触发条件不同,本方案依赖你自己指定的文件夹

原文与作者资料 ↗

本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。

原文标题
Sync a Telegram RAG chatbot with Google Drive using OpenAI and Supabase
原作者
MADIAD
原始发布日期
2026-09-21T10:45:24.956Z
来源
https://n8n.io/workflows/19789