作者:艾木
文章:基于 Notion 和 Coze 打造个人知识问答系统(含提示词、代码以及完整的工作流设计)
Notion 作为个人知识库
Notion 是一款功能强大的知识管理和项目管理工具。我个人是 Notion 的重度用户,我倾向于把所有的信息都放到 Notion 里面,比如网上看到的好文章、高质量视频,课程笔记和读书笔记,还有自己写的文章以及项目文档等等,all in one place。
Notion 最强大的功能是数据库(Database)。Notion 数据库的可定制性很高,并且非常接近程序员熟悉的关系型数据库,所以比较对我胃口。我用 Notion 的数据库作为我的个人信息库/知识库。下面是一个实际的例子。
这个数据库主要用来存放我在网上看到的一些质量比较高的文章和视频等,它的结构是比较简单的,因为我是轻管理的那一类人。这个数据库里目前有 800 多条信息,算是一个中等规模的个人信息库。需要注意的是,所有进入到这个数据库的信息都是经过我筛选的,我接收的信息可能是这个的 3 倍、5 倍,甚至更多。另外,大家也可以看到我最近看了比较多的跟 RAG 相关的文章,这也是本文我们会重点探讨的一个主题。
Notion 数据库的每一条记录都是一个页面(Page),每个页面包含两部分:页面属性和页面内容。页面属性就是各种字段,这些字段的名字和类型都是可以自定义的。具体怎么定义要看你的使用场景,比如我这个数据库就有 Title、AuthorI(s)、Published time、Rating、Keyword(s)、Abstract、URL 等这样一些属性。页面内容里可以放文章的内容,这也是 Notion 数据库跟其他一些多维表格工具不一样的地方,它是有内容的。Notion 的页面内容是由许多不同类型的块(Block)组成的。Notion 支持的块类型非常丰富,大家感兴趣的可以自己去了解,这里就不细讲了。
除了数据库,Notion 本身也有 AI 相关的功能。Notion 团队很早就开始跟 OpenAI 和 Anthropic 合作,把 AI 能力集成到他们的产品里了。Notion AI 里有一个 Q&A 功能,简单理解它就是一个基于个人/组织的知识库的问答系统。
比如我提问“与 RAG 有关的技术有哪些?”,它就会从我的知识库中检索相关的页面, 然后根据检索结果回答问题,同时在回复中会标出具体的引用并列出相关页面列表。这个功能跟我之前做的一个 Coze Bot Dr. Know 很像,只不过它搜索的信息源不是公网的页面而是个人数据库中的页面。
我们今天主要的任务就是要在 Coze 平台上实现一个糙版的 Notion Q&A,打造一个个人知识问答系统。
Notion 链接器介绍
我们有了 Notion 数据库作为存储信息的仓库,接下来要做的是将 Coze 和 Notion 打通。为此,我开发了一个 Coze 插件——Notion 连接器(国际版在这里)。
https://www.coze.cn/store/plugin/7368111600210853899
这个插件包含 4 个工具 API:
connectToNotion
引导用户授权并绑定一个Notion数据库。为了保持简单,目前 Notion 链接器同一时间只支持连接一个数据库。另外要注意连接的页面只能是数据库,不能是普通的 Notion 页面。searchNotion
提供了基础的数据库检索功能。你可以利用这个 API 搜索 Notion 数据库,获取与查询字符串(query
)或关键词(keywords
)最相关的页面。目前这个 API 只能检索 Notion 页面的标题和属性,还不能搜索页面内容。getPage
这个 API 可以用来读取指定页面的内容。它可以读取互联网上大部分的公开页面,同时也可以读取 Notion 数据库中的页面。调用的方式是一致的,你只需要把网页的 URL 或者 Notion 页面的 URL 传进去就可以了,它会将页面的内容以 Markdown 格式返回。saveToNotion
这个 API 允许你将网页或 Markdown 内容直接保存到 Notion 数据库中。使用page_url
参数保存网页,使用page_content
参数保存 Markdown 内容。在保存页面的时候,你可以设置相应的页面属性(page_properties
):title
、authors
、published_time
、rating
、keywords
、abstract
。
这 4 个 API 可以满足 Notion 授权、信息入库以及信息检索这些核心的功能需求,这样我们已经具备了构建个人知识问答系统的必要组件。在本文中我们会重点关注 Notion 授权和信息检索以及问答,信息入库部分的功能大家可以自行利用 saveToNotion
这个 API 实现。
将 Coze Bot 连接至 Notion 数据库
首先,我们来新建一个 Coze Bot,可以把它命名为“Notion Copilot”。
然后,搜索并将 Notion 链接器的 connectToNotion
工具添加到 Bot 的插件列表中。
同时,我们还需要为 Bot 添加相应的提示词:
你是一名个人知识助理,名字是“Notion Copilot”。
# 你的能力
## 连接到 Notion 数据库
当用户请求 “连接 Notion 数据库” 时,你需要调用 `connectToNotion` 请求用户授权并选择一个 Notion 数据库。然后,向用户报告连接到的 Notion 数据库信息。数据库信息请按照如下 Markdown 格式给出:
已成功连接到 Notion 数据库:[database_title](database_url)
必要的话也可以添加一个快捷指令,这样用户只需要点击或者输入快捷指令就可以触发插件调用了,不需要输入一长串文字。
用户发出“连接 Notion 数据库”请求,Coze 会尝试调用 connectToNotion
工具,发现该工具需要授权,Coze 进而会发出一条系统消息请求用户去授权。
用户点击授权链接就会跳转到 Notion 的授权页面,用户需要选择一个自己的数据库。注意:这里只能选择数据库页面,并且只能选择一个数据库。
授权成功后,就表示 Coze Bot 和 Notion 数据库建立起了连接。接下来就可以通过searchNotion
这个 API 检索数据库中的页面并基于检索到的信息回答用户问题了。
理论铺垫:RAG 和 Re2G
RAG
现在无论是开发 AI 搜索类应用,还是基于企业文档的问答服务