Press "Enter" to skip to content

嵌入链在行动中

使用Midjourney创建的图片

介绍

您可能已经看过很多关于创建智能聊天机器人的文章,这些机器人利用流行的向量数据库对数据、文件和链接进行筛选。在这些解决方案中,Langchain和LlamaIndex经常被认为是知识提取的优选方案,能够熟练索引和查询数据库。

所以,在这个领域我有一定的基础,在课程Langchain和向量数据库的应用中有过贡献。在本文中,我计划分享在使用这些框架和工具时所面临的最具挑战性的方面。

最常见的问题包括:

我应该如何划分数据?什么是有意义的划分大小?我应该如何为每个划分创建嵌入?我应该使用哪个嵌入模型?我应该如何将划分存储在向量数据库中?我应该使用哪个向量数据库?我应该将元数据与嵌入一起存储吗?我应该如何为查询找到相似的文档?我应该使用哪个排名模型?

几个月前,我偶然发现了Embedchain。我对测试其能力充满了兴奋,现在它已成为我个人项目中不可或缺的工具。

那么,是什么让Embedchain在构建应用程序和聊天机器人方面具有革命性的变革?

让我们一起了解Embedchain的层层剖析,以便理解它的制定聊天机器人的方法。

机器人创建蓝图

数据检测和加载:Embedchain在处理不同数据类型时非常灵活。无论是YouTube片段、PDF格式的电子书、有见地的博客文章、任何网络链接还是本地存储的数据,它都可以轻松识别和处理。这消除了管理数据加载程序或选择适当格式的麻烦。只需简单的.add命令即可将数据整合到聊天机器人或查询应用中。

数据划分:加载后,数据被分解为有意义的段落。这种划分策略提升了后续阶段创建更智能和响应能力的聊天机器人的潜力。

这个阶段经常令人头疼,让我陷入试错的境地。保留重要信息和创建可管理的划分大小之间的微妙平衡是一个常见问题。不用说,为了避免不当划分带来的信息丢失,我发现自己沉浸其中数小时。

嵌入创建:每个划分段落都经历转化过程。划分段落转换为嵌入向量,将原始数据转化为适合机器的向量,为存储和检索做好准备。

模型和方法的选择会极大地影响结果。在这方面,我个人倾向于OpenAI的著名模型进行增强检索,再结合向量数据库。Embedchain提供了多种选项,方便进行索引、存储和检索适应不同任务和预算的向量。

作者提供的图片

对于那些有预算考虑或者正在进行实验的人来说,可以利用句子转换器或通过Huggingface提供的自定义模型,而无需付费。这种灵活性意味着,通过正确的配置和选择,可以有效地运行整个聊天机器人应用程序而不产生任何费用。

存储:最后,这些机器可读的向量,承载着原始数据的精华,找到了向量数据库中的归宿,等待在未来的查询中发挥作用。Embedchain倚赖Chroma向量数据库——在我的经验中是一个值得称赞的选择,而且还可以免费使用。

功能性:Embedchain提供了直观互动设计的功能。其中包括查询接口,它作为一个问答机器人运作。通过使用.query()函数,它能够直接提供答案,而不保持过去的对话上下文。

聊天接口提供更连贯的体验。通过.chat函数,它能够回忆起以前的对话,确保有上下文感知的回复。

“干运行”选项用于测试不将其发送到LLM的提示。而实时响应,可以使用“流式响应”功能。

应用示例

<p最好的方法是通过一个示例来说明。我创建了一个快速应用程序来查询包含许多表格、基准、新概念和算法的文档。有人要求我为一家我对其了解很少的公司撰写白皮书。我从他们的网站和一些其他来源收集了所有可能的信息。

工作流程:我收集了数据源并加载了它们。然后自动将其分块、嵌入并存储在数据库中,以便我可以快速查询它们。下面是详细的代码,解释我如何实现这个过程:

首先,假设您已经使用pip安装了OpenAI和Embedchain,您可以导入OpenAI API密钥。请确保将此密钥存储在单独的文件中,以防止公开展示:

<p您可以为自己的机器人命名,并将该名称指定给App()函数。接下来,您将开始数据摄入过程。在我的情况下,我需要在网站上可用的信息。Embedchain提供了一种可以将整个网站合并到机器人中的方式,但我只需要针对我的调查获取特定页面:<p如您所见,使用“添加”命令很容易将链接添加到机器人中。当您运行该单元格时,您应该会收到类似于以下内容的输出,确认数据已被向量化并存储:

'80cd3a55397a9406be28c5d752c0f41b'

<p接下来,我从youtube获取了一些能够提供关于基准和公司的洞察的数据:

<p这种方法背后的模型会处理转录,同时还有一个名为“yt_loader”的组件,可获取链接并将其合并到机器人中。机器人就像是一个海绵,你扔给它的东西越多,它就越好。所以,我加入了一篇关于基准的arxiv论文,以增加趣味性。

<p在这段代码片段中,我从notion、google docs和github获取了数据。因为嘛,为何要限制机器人的世界智慧呢?<p要从我的机器人那里获取答案,我只需与它进行一次随意的对话。它会深入其数据库,挖掘相关的宝石,并返还一个优雅的回答:

<p输出结果:

要在DataPerf平台上提交基准,参与者可以使用名为Dynabench的在线平台。他们可以按照平台上提供的指南提交他们的解决方案进行评估。Dynabench平台托管了DataPerf基准、评估工具、排行榜和文档。参与者可以提交、评估和比较在DataPerf套件中定义的所有数据中心基准的解决方案。该平台还支持各种提交工件,例如训练子集、优先级值/排序和购买策略。如果您需要关于如何提交基准的更具体的说明,建议参考Dynabench平台上提供的文档或指南。

<p我可以随便与它聊天,它就像是一名喝了咖啡的图书管理员,从那些经过精挑细选的知识中生成答案:

实验2

<p这里的附加价值是:我将一个简短的与discord机器人相关的实验包含在其中。值得注意的是,我在discord机器人开发方面没有之前的经验。这展示了使用embedchain时探索新领域有多么容易。

文档

<pembedchain文档的清晰度真的是一流的。在技术文档的迷宫中,很容易迷失起初的目标。但是使用embedchain,这是不成问题的。他们实施了一个自动引导您浏览文档的机器人,不仅提供答案,还提供代码片段和资源建议。这是在新模块或框架中很少见到的帮助水平,而我完全支持将这成为技术文档中的新常态。

5分钟创建Discord机器人

首先,将您的OpenAI API密钥放入一个独立的.env文件中来设置机器人。接下来,访问Discord的开发者网站创建一个新的机器人应用。

在那里,根据文档的指引,填写机器人的详细信息,并调整一些设置 - 比如在“特权网关意图”下打开所有三个选项。别忘了保存。

完成后,您需要重置并复制一个Discord Token值以备后用。之后,返回到机器人设置,在OAuth2部分更新一些设置,主要是关于机器人发送消息的权限。

然后,您会生成一个URL,允许您将机器人添加到Discord服务器。复制该URL,粘贴到网页浏览器中,选择您想要将机器人添加到的服务器,并确认。

这是一个专业提示:

您可以几乎持续在线地保持您的Discord机器人,并使用其embedchain功能实时获取新的数据。通过我描述的设置,您可以快速使您的机器人运转起来,并通过提供链接来保持更新。所以,如果您遇到需要立即获取信息的情况,您的机器人就只是一个快速查询。

安装需求:

discord==2.3.1embedchain==0.0.58python-dotenv==1.0.0

您也可以自由地从GitHub克隆Embedchain仓库,该仓库带有功能示例。我在这里只是向您展示一些少量的代码调整如何让机器人与您特定的兴趣相吻合。

例如,我制作了一个受到模因影响的狗机器人,以满足我在合适时机需要的信息。在一个有趣的举动中,我对“dogsplain”进行了小小的代码调整 - 这个术语允许我以我独特的聊天风格与机器人获取信息:

通过调试代码,您可能会发现设计机器人样式的多种方式以符合您的偏好。此外,这种经历也可以作为一个学习的游乐场。

caption by author

要向机器人添加数据源,请使用斜杠命令:

/add <data_type> <url_or_text>/query <question>/chat <question>
caption by author

完成!运行激活代码,您的机器人将立即显示在线状态。

结论

所以,正如上面的示例所示,创建一个完全功能的机器人,可以立即以多种格式检索信息 - 文本、YouTube视频、PDF、网页、网站地图、Docx、谷歌文档、Notion、CSV、MDX或Q&A对 - 是非常简单的。

我强烈推荐在社区的优秀展示部分查看各种示例。您可能会受到启发,并通过看到的内容获得新的创意。

</pembedchain文档的清晰度真的是一流的。在技术文档的迷宫中,很容易迷失起初的目标。但是使用embedchain,这是不成问题的。他们实施了一个自动引导您浏览文档的机器人,不仅提供答案,还提供代码片段和资源建议。这是在新模块或框架中很少见到的帮助水平,而我完全支持将这成为技术文档中的新常态。</p这里的附加价值是:我将一个简短的与discord机器人相关的实验包含在其中。值得注意的是,我在discord机器人开发方面没有之前的经验。这展示了使用embedchain时探索新领域有多么容易。</p我可以随便与它聊天,它就像是一名喝了咖啡的图书管理员,从那些经过精挑细选的知识中生成答案:</p输出结果:</p要从我的机器人那里获取答案,我只需与它进行一次随意的对话。它会深入其数据库,挖掘相关的宝石,并返还一个优雅的回答:

</p这种方法背后的模型会处理转录,同时还有一个名为“yt_loader”的组件,可获取链接并将其合并到机器人中。机器人就像是一个海绵,你扔给它的东西越多,它就越好。所以,我加入了一篇关于基准的arxiv论文,以增加趣味性。</p接下来,我从youtube获取了一些能够提供关于基准和公司的洞察的数据:</p如您所见,使用“添加”命令很容易将链接添加到机器人中。当您运行该单元格时,您应该会收到类似于以下内容的输出,确认数据已被向量化并存储:</p您可以为自己的机器人命名,并将该名称指定给</p最好的方法是通过一个示例来说明。我创建了一个快速应用程序来查询包含许多表格、基准、新概念和算法的文档。有人要求我为一家我对其了解很少的公司撰写白皮书。我从他们的网站和一些其他来源收集了所有可能的信息。

Leave a Reply

Your email address will not be published. Required fields are marked *