我工作中的一个副业是建立一个简单的反馈循环,以便创建对 Notion 文档进行评论的知识库。我很好奇能否按照以下要求将其连接起来:
- 无自定义代码托管
- Prompt 可以在 Notion 中编辑,无需了解 Zapier
- 应该很快
最终,我终于让它运行起来了。所以,我会先简单介绍一下它的工作原理,然后解释一下我为什么不太喜欢这种方法,最后再详细讲解一下如何让它运行起来。
一般方法
创建 Notion 提示数据库。
创建有关提供 RFC 反馈的特定提示。
为所有 RFC 创建一个 Notion 数据库。
向此数据库中添加一个调用 Zapier webhook 的自动化功能。
Zapier webhook 可以执行多种操作,最终使用 RFC 提示对特定 RFC 提供反馈,作为 RFC 中的顶级注释。
总体来说,效果相当不错。
这种方法面临的挑战
这种方法最大的优点在于它确实有效,而且效果相当不错。然而,随着我们深入研究实现细节,你还会发现 Zapier 的一系列操作异常困难:
- 在 Notion 中管理富文本,因为它需要导航块数据结构
- 允许循环 API 构造,例如可以直接在特定块上留下多个注释,而不是单个顶级注释
- Notion 只允许每个区块最多 2000 个字符,但将其拆分成多个区块会显得有些不自然。在真正的 Python 环境中,使用类似
md2notion
的工具来转换 Markdown 文本会非常容易。
最终,我只能推荐这种方法作为初步验证。它绝对不是这种方法的长期正确选择。
Zapier 实施
我已经介绍了 Notion 方面的集成,现在让我们深入探讨一下 Zapier 的部分。总共有八个步骤。
我跳过了第一步,那只是一个默认的 webhook 接收器。第二步是检索一个包含提示的静态定义的 Notion 页面。(在后面的步骤中,我直接使用 Notion API,如果我要重做这件事,我会在这里这样做,但这也有效。API 的优点是它返回一个真正的 JSON 对象,而这个没有,可能是因为我没有指定content-type
标头之类的。)
这是第 2 步的配置页面,我在此明确指定了提示的页面。
)
可能是因为我没有设置content-type
,我以为我这里获取的是 post 格式的数据,所以我就直接用正则表达式输出了。虽然有点乱,但总算成功了,就这样吧。
)
这里使用 Notion API 请求工具来检索更新的 RFC(而不是我们已经检索到的提示)。
)
API 请求返回一个 JSON 对象,您无需编写正则表达式即可导航,这很好。
)
然后,我们将提示作为系统指令发送,将 RFC 作为用户消息发送给 Open AI。
)
然后将 OpenAI 的响应传递给json.dumps
进行编码,以便将其包含在 API 调用中。这主要是为了解决换行符为\n
而不是字面换行符的问题。
)
然后将响应格式化为 API 请求,以向文档添加评论。
无论如何,这并不漂亮,我认为只要用 Python 完成所有这些工作就可以做得更好,但这是一个可行的概念证明。