news 2025/12/25 14:58:20

如何构建自己的书签搜索 AI 助手?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何构建自己的书签搜索 AI 助手?

原文:towardsdatascience.com/how-to-build-your-own-ai-assistant-for-bookmark-searching-7e3dcc17e3fc?source=collection_archive---------11-----------------------#2024-04-09

自动化基于 GPT 的书签搜索管道逐步指南

https://medium.com/@swsychen?source=post_page---byline--7e3dcc17e3fc--------------------------------https://towardsdatascience.com/?source=post_page---byline--7e3dcc17e3fc-------------------------------- Jiaqi Chen

·发表于 Towards Data Science ·阅读时长 9 分钟·2024 年 4 月 9 日

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/fa51dbd9b13fac628bfb7ab78a40b999.png

图像来自作者。

你是否曾在 Chrome 浏览器中搜索特定书签时,发现自己被数量庞大的书签淹没?在面对庞大的书签收藏时,逐一筛选变得相当繁琐且消耗精力。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/8bba0292c8e8539ffd68eae911cfc8a6.png

书签海洋 — 来自作者 Google Chrome 书签的快照。

事实上,我们可以简单地把这件事交给 ChatGPT,它是目前最流行的 AI 模型,几乎能回答我们所问的一切。试想一下,如果它能够访问我们拥有的书签,那么问题就解决了!我们可以要求它从整个书签存储中提供我们想要的特定链接,就像下面的 GIF 一样:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/93760a5cdc9e192d916a66a097ceac30.png

展示 AI 助手的使用 — 来自屏幕录制的 GIF。

为了实现这一目标,我建立了一个实时管道,将 Chrome 书签更新到一个向量数据库中,ChatGPT 将使用这个数据库作为我们提问时的上下文。本文将逐步解释如何构建这样的管道,最终你也将拥有自己的管道!

特性

在开始之前,让我们先总结一下它的优势:

  1. 与传统的搜索引擎(如 Chrome 书签管理器中的搜索)不同,AI 模型可以很好地理解每个标题的语义。如果你在搜索书签时忘记了确切的关键词,你只需提供一个大致的框架,ChatGPT 就能找到它!它甚至可以理解不同语言的标题,真是令人惊叹。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/4aaecd3196df8144fa60fc47788bfe60.png

ChatGPT 能做什么 — 来自 AI 助手界面的快照。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/91b1fe29a7c7382ee111bf263df0b22f.png

当 Chrome 书签搜索引擎失败时。 — 来自作者的 Google Chrome 书签管理器截图

2. 一切都自动保持最新。每个新添加的书签将在几分钟内自动反映在 AI 知识数据库中。

管道概览

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/72b7336d53b94b2b896d47f6f91348c4.png

管道中的所有组件。 — 图片由作者提供。

在这里,您可以看到我们管道中每个组件的作用。Chrome 书签通过我们定制的 Chrome 插件提取到 Google 表格的行中。Estuary Flow 获取(或捕获)所有的表格数据,然后通过 OpenAI API 使用嵌入模型将其向量化(或物化)。所有嵌入(每个向量对应表格中的一行——即每个单独的书签)将被检索并存储在 Pinecone 向量数据库中。之后,用户可以使用 Streamlit 和 LangChain 向构建的应用程序发出提示(例如:“dinov2 的链接是什么?”)。它将首先从 Pinecone 中检索一些相似的嵌入(获取上下文/几个潜在的书签选项),并将它们与用户的问题一起作为输入提供给 ChatGPT。然后 ChatGPT 将考虑每个可能的书签,并给出最终的答案。这一过程也被称为 RAG:检索增强生成。

在接下来的部分中,我们将逐步展示如何构建这样的管道。

用于书签检索的 Chrome 插件

代码:github.com/swsychen/Boomark2Sheet_Chromeplugin

为了将书签传输到 Google 表格中以供进一步处理,我们首先需要构建一个定制的 Chrome 插件(或扩展)。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/5af65140f3085e012598b1b553994783.png

Chrome 插件的代码结构概览。 — 来自作者的 vscode 截图。

Chrome 扩展的最重要文件是manifest.json,它定义了插件的高级结构和行为。在这里,我们添加了必要的权限来使用 Google Chrome 的书签 API,并跟踪书签的变化。我们还设置了一个oauth2认证字段,因为我们将使用 Google 表格 API。您需要在此字段中填写自己的client_id。您可以主要参考此链接中的设置您的环境部分来获取client_id和 Google 表格 API 密钥(稍后我们会使用它)。有一点需要注意的是:

  1. OAuth 同意屏幕中,您需要将自己(Gmail 地址)添加为测试用户。否则,您将无法使用这些 API。

  2. 创建 OAuth 客户端 ID时,您应该选择的应用类型是Chrome 扩展(而不是快速入门链接中的 Web 应用)。需要指定的项目 ID是插件 ID(我们在加载插件时会获得它,您可以在扩展管理器中找到它)。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/47ee7d50d430edb20cdc70fde8b3ce99.png

模糊的部分是项目 ID。— 来自作者的 Google Chrome 扩展管理器截图。

核心功能文件是background.js,它可以在后台执行所有的同步操作。我已经为您准备了 GitHub 链接中的代码,您需要做的唯一修改是在 JavaScript 文件的开头更改spreadsheetId。这个 ID 您可以通过创建的 Google 表格的分享链接来识别(位于 d/ 和 /edit 之间,是的,您需要先手动创建一个 Google 表格!):

docs.google.com/spreadsheets/d/{**spreadsheetId}**/edit#gid=0

代码的主要逻辑是监听书签中的任何更改,并在插件触发时(例如,当您添加新的书签时),刷新(清除 + 写入)您的 Google 表格,更新所有书签。它将每个书签的 ID、标题和 URL 写入您指定的 Google 表格中的单独一行。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/8372d2161ec199c9907d2f69d57b0ec7.png

这就是在您的 Google 表格中的样子。— 来自作者的 Google 表格截图。

最后的文件popup.html基本上并不太有用,因为它只是定义了在您点击浏览器插件按钮时,弹出窗口显示的内容。

在确保所有文件都在同一个文件夹后,现在您可以准备上传您的插件:

  1. 打开 Chrome 浏览器,进入Extensions>Manage Extensions,并在页面右上角启用Developer mode

  2. 点击Load unpacked并选择代码文件夹。然后您的插件将上传并开始运行。点击超链接service worker来查看代码打印的日志信息。

上传后,只要 Chrome 浏览器处于打开状态,插件就会保持运行。而且当您重新打开浏览器时,它也会自动启动。

设置 Estuary Flow 和 Pinecone

Estuary Flow 本质上是一个连接器,用于将数据库与您提供的数据源进行同步。在我们的案例中,当 Estuary Flow 将数据从 Google 表格同步到向量数据库 Pinecone 时,它还会调用嵌入模型,将数据转换为嵌入向量,然后将其存储在 Pinecone 数据库中。

关于 Estuary Flow 和 Pinecone 的设置,YouTube 上已经有一个相当全面的视频教程:youtu.be/qyUmVW88L_A?si=xZ-atgJortObxDi-

但请注意!由于 Estuary Flow 和 Pinecone 正在快速开发中,视频中的一些内容已经发生了变化,这可能会导致一些困惑。在这里,我列出了一些视频更新,以便您可以轻松地复制所有操作:

  1. (Estuary Flow>create Capture)在行批量大小中,您可以根据 Google 表格中书签的总行数设置较大的数字。(例如,如果您已经有 400 多行书签,可以设置为 600)

2.(Estuary Flow>创建捕获)设置目标集合时,删除光标字段“row_id”,并像以下截图一样添加一个新的“ID”。你可以将命名空间保持为空。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/9c2c5c18089c72a0f3abf3e4c2a0d6e7.png

更改光标字段。— 来自Sources的快照,拍摄于 Estuary Flow(2024 年 4 月)

3.(Estuary Flow>创建捕获)然后切换到COLLECTION子标签,点击编辑将 Key 从/row_id 更改为/ID。同时,你还应该像下面这样将架构代码中的“required”字段更改为“ID”:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/613a64c56a48bbc4e7aef58be94d7ed3.png

更改密钥和架构。— 来自Sources的快照,拍摄于 Estuary Flow(2024 年 4 月)

//...skipped"URL":{"type":"string"},"row_id":{"type":"integer"}},"required":["ID"],"type":"object"}

在“保存并发布”后,你可以看到Collections>{你的集合名称}>概览>数据预览会显示每个书签的正确 ID。

4.(Estuary Flow>创建捕获)在最后一步,你可以看到一个高级规格编辑器(在页面底部)。在这里,你可以添加一个字段“interval”:10m,将刷新频率降至每 10 分钟一次(如果未指定,默认设置为每 5 分钟一次)。每次刷新都会调用 OpenAI 嵌入模型重新做所有嵌入,这会产生一些费用。降低刷新频率可以节省一半的费用。你可以忽略“backfill”字段。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/28d40518a945a1f33da7e255ec17d38f.png

指定间隔。— 来自Sources的快照,拍摄于 Estuary Flow(2024 年 4 月)

//...skipped"syncMode":"full_refresh"},"target":"CJQ/mybookmark/bookmarks_v3"}],"interval":"10m"}

5.(Estuary Flow>创建物化)对于免费的 Pinecone 索引,Pinecone 环境通常是“gcp-starter”,或者对于标准计划用户是“us-east-1-aws”(我不使用 Pinecone 的无服务器模式,因为 Estuary Flow 尚未为 Pinecone 无服务器模式提供连接器)。Pinecone 索引是你在 Pinecone 中创建索引时指定的索引名称。

6.(Estuary Flow>创建物化)这里有一些难点。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/2d10fb5774747c57bb9acf84fa704f72.png

确保“bindings”字段像这样填写。— 来自Destinations的快照,来自 Estuary Flow(2024 年 4 月)

"bindings":[{"resource":{},"source":"CJQ/mybookmark/bookmarks_v3","fields":{"recommended":true}}],

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/fb9052853ee79c9353c16a636eb6d27b.png

不要因错误而慌张,再次点击“下一步”。— 来自Destinations的快照,来自 Estuary Flow(2024 年 4 月)

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/7152326e44aec06f9b8ce43eb9ed77a7.png

确保 OVERVIEW 中的使用量不是空的。— 来自Destinations的快照,来自 Estuary Flow(2024 年 4 月)

7.(Pinecone>创建索引)Pinecone 已推出无服务器索引模式(免费,但 Estuary Flow 目前尚不支持),但我在这个项目中没有使用它。这里我们仍然使用基于 pod 的选项(自 2024 年 4 月 14 日以来不再免费),但它足以满足我们书签嵌入存储的需求。创建索引时,你只需要设置索引名称和维度。

8. (Pinecone>索引>{你的索引}) 完成 Pinecone 索引的创建后,并确保 Estuary Flow 中的物化(materialization)中正确填写了索引名称和环境,你就完成了。在 Pinecone 控制台中,转到索引>{你的索引},你应该能看到显示你书签总数的向量数量。可能需要几分钟,直到 Pinecone 从 Estuary Flow 接收信息并显示正确的向量数量。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/b21c7612899595cb92a6eb5730e40388.png

这里我有 402 个书签,因此向量数量显示为 402。— 来自Pinecone的快照(2024 年 4 月)

使用 Streamlit 和 Langchain 构建你自己的应用

代码:github.com/swsychen/BookmarkAI_App

我们快到了!最后一步是构建一个漂亮的界面,就像原版的 ChatGPT 一样。在这里,我们使用了一个非常方便的框架,叫做 Streamlit,利用它我们可以用几行代码就构建一个应用。Langchain 也是一个非常易于使用的框架,可以用最少的代码来操作任何大型语言模型。

我也为这个应用准备了代码。请按照 GitHub 链接中的安装和使用指南进行操作,享受吧!

代码的主要逻辑是:

获取用户提示 → 创建一个包含 ChatGPT 和 Pinecone 的检索链 → 将提示输入到链中并获取响应 → 将结果流式传输到 UI

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/0ba3ea98dfef6f6b6c6e309e7a90e10a.png

代码的核心部分。— 来自作者的 vscode 快照。

请注意,由于 Langchain 仍在开发中,如果您使用的版本与 requirements.txt 中指定的版本不同,代码可能会被弃用。如果您想深入了解 Langchain 并使用其他 LLM 进行书签搜索,可以随时查看 Langchain 的官方文档。

结语

这是我写的第一篇教程文章。如果有任何不清楚的地方需要改进或澄清,欢迎留言。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/22 1:00:59

ExcalidrawDIY项目计划:手工制作步骤分解

ExcalidrawDIY项目计划:手工制作步骤分解 在远程协作日益成为常态的今天,团队沟通中的“信息落差”问题愈发突出——设计师苦于无法快速表达脑中构图,产品经理担心技术实现偏离预期,而工程师则疲于在文字需求和视觉呈现之间反复对…

作者头像 李华
网站建设 2025/12/22 0:59:00

Excalidraw如何助力敏捷开发中的Sprint规划?

Excalidraw如何助力敏捷开发中的Sprint规划? 在一次典型的远程Sprint规划会议上,你是否经历过这样的场景:产品经理在共享屏幕上展示一张密密麻麻的PPT流程图,开发者皱着眉头追问“这个接口到底什么时候调用?”&#xf…

作者头像 李华
网站建设 2025/12/24 0:37:29

Excalidraw技术支持渠道:社区/论坛/Discord入口

Excalidraw技术支持渠道:社区/论坛/Discord入口 在远程协作成为常态的今天,团队对可视化工具的需求早已超越“画图”本身——我们需要的是能快速表达想法、激发创意火花,并支持多人实时参与的数字白板。Excalidraw 正是在这样的背景下脱颖而…

作者头像 李华
网站建设 2025/12/22 0:48:33

Excalidraw数字花园实践:渐进式笔记创作

Excalidraw与数字花园:让知识在草图中生长 在一场远程产品评审会上,团队卡在了系统架构的描述上。产品经理口述着“用户请求先经过网关,然后分流到认证服务和配置中心”,但文字越堆越多,沟通却越来越模糊。直到有人打开…

作者头像 李华