AI食品顾问与LangChain和Pinecone合作

一步一步在Streamlit中构建一个基于LLM的应用程序

ChatGPT中文站
Generated with Gencraft

大型语言模型(LLMs)已经成为我们日常生活中的现实,并且各家公司争相推出能从这些模型中获利的产品。

受这篇优秀文章的启发,我决定开发一个以LLM为动力的应用程序来解决日常问题:今天我应该吃什么?这个应用允许用户以人类语言输入其偏好,并生成最符合其愿望的食谱。

该项目利用了来自Food.com的菜谱、营养信息和评论的样本数据集,代码存储库可以在这里找到。

数据集

数据集包含数千种食谱,以及它们的营养信息。

ChatGPT中文站
Image by author

有大量的信息需要在自然语言中处理,还有来自食谱的元数据,比如准备时间、营养信息和必要的配料。

项目

在我们进入代码之前,让我们把问题分解成小块,这样我们就可以构造建立食物顾问的步骤。

第一步是将我们的数据存储在矢量数据库中。对于这个项目,我使用Pinecone,它允许在其免费层上维护一个数据库。

一旦数据库可用,我们可以通过执行相似性搜索来查询它。这将由应用程序的核心LLM完成,它将负责理解用户偏好并检索适当的查询。LangChain为构建这个桥梁提供了一个框架。

现在背景工作已经完成,我们需要一个框架来控制流程。正如之前提到的,我们在这个目的上使用Streamlit。总结一下:

  1. 预处理数据。
  2. 实时存储数据在一个矢量数据库中。
  3. 构建LLM管道。
  4. 为控制作业流程构建Streamlit应用程序。

预处理不会在本文中涉及,但你可以看一下我在这个笔记本上所做的工作。

矢量数据库

向量数据库是专门设计用于与LLM嵌入配合工作的数据库。它们根据特定的嵌入方式存储数据,并提供优化的存储能力及快速查询功能。在本项目中,我们使用的是Pinecone,它在免费套餐中提供一个免费数据库。

您应该首先在Pinecone网站上创建一个带有适当设置的应用程序索引,这样您就可以获得您的API密钥。在我的情况下,存储的向量每个包含1536个维度。

ChatGPT中文站
Image by author

现在已经设置了数据库环境,让我们深入了解细节。

我们首先通过提供我们的API密钥与OpenAI和Pinecone建立连接。由OpenAI嵌入指导Pinecone嵌入和存储我们的数据。

然后我们将数据转换为LangChain文档实例,包括内容(菜谱描述)和其关联的元数据。在上传之前,我们应该将数据分成100个一组的块,因为松果一次最多可以更新的数据量是有限的。

LLM链

LLM的回应可以产生相当有用的结果,但它们在本质上是开放的,这使得处理结构化数据变得困难。出于此目的,LangChain为我们提供了一个框架,用于构建基于LLM的应用程序,并提供了多个工具和API,用于处理提示和回应。

关于这个话题,我可以推荐OpenAI的快速工程课程。它提供了一些关于如何构建更好更有自信的提示的见解,以及一些提高回复质量的技巧。

从这段代码中,我们可以看到我们如何构建 LLM 链。该链需要一个 LLM,一个提示和一个输出解析器。用户输入从应用表单中获取,响应格式从输出解析器中产生,然后将提示格式化。

当我们将所有这些变量结合在一起时,我们保证了一个管道,我们可以控制LLM使用的提示和响应结构。响应将是一个字符串,将用于查询向量数据库并寻找其中最相似的嵌入。

应用程序

该应用程序将提供一个交互界面以人性化地管理工作流程。本文不会分享整个应用程序的代码,但如果你感兴趣,可以在这里查看。

最后,让我们来看一下如何将所有的输入组合在一起生成相似搜索。

在我的案例中,我使用了OpenAI API,但您可以使用任何您想要的数据语言模型(LLM)。从这个代码片段中,我们可以看到如何将用户偏好作为输入传递给我们的链式运行。然后,我们只需要解析LLM的输出并使用它来执行相似性搜索,结果将存储在docs变量中。

你可以在下面看到最终的结果。

ChatGPT中文站
Image by author

结论

在这个项目中,我们逐步构建了一个由LLM驱动的应用程序。

首先,我们对数据进行了一些数据工程处理,然后将其预处理并上传到Pinecone中的向量数据库中。

然后我们建立了一个LLM链来组织我们的提示并检索一个结构化查询,用于在我们的数据库中执行相似性搜索。

最后,我们建立了一个应用程序来收集输入,执行相似度搜索并解析结果,以便向用户展示最适合的食谱。

尽管简单,这个项目探索了LLMs的强大应用,让用户以自然语言的方式与任何内容交互。拥有大量数据的网站可以通过与LLM进行“聊天”来构建这种工具,以帮助用户导航他们的内容。

可以通过考虑评论和评价来增强模型,从而使其他用户的评论可以提供有关特定食谱或产品的更多信息。

2023-10-20 17:18:32 AI中文站翻译自原文