学习日记|Day30:用LangChain创建数据分析的个人聊天机器人
00 分钟
2023-5-21
2023-8-26
type
status
slug
summary
date
tags
category
password
Text
AI summary
AI custom autofill
Multi-select
Status
URL
hashtag
勘误
标签
标题
类型
贴文
🪄
icon
本文介绍了如何使用LangChain和Streamlit构建一个个人聊天机器人,用于分析数据集。通过使用LangChain代理和OpenAI的聊天模型,我们可以让机器人理解和回答关于数据集的问题。文章详细介绍了用户体验和块图,并介绍了LangChain代理的工作原理。如果您想学习如何构建交互式数据分析工具,本文是一个不错的起点。
 

 
数据分析经过多年的发展已经有了很大的变化。早期,使用Excel及其反直觉的宏手动执行。这是一个耗时和容易出错的过程,需要大量的学习和练习时间。在接下来的这些年中,数据分析师开始使用Python和像Pandas这样的库来自动化数据分析任务。随着Python语言的易用性和Pandas中强大的方法,这一阶段使得处理过程更快速更有效。然而,它仍然需要必要的编程技能和库使用技能以及脚本运行的环境设置。
数据分析演进的最新阶段是使用像ChatGPT和其他数千个模型这样的大型语言模型(LLMs)。LLMs是一种人工智能,可以训练成理解和生成人类语言,以便开发出能够理解数据集查询并自动化各种分析工具以生成答案的模型。这使得数据分析工作的过程更加直观,更加易于许多人接触。
通过使用LangChain和Streamlit,我快速地构建了一个专门用于分析数据集的个人聊天机器人。今天我将向您展示如何使用非常少的编码工作创建此聊天机器人,这经过与一支营销团队的成功试验证明,他们没有宏或编码技能,但需要阅读和理解销售数据以提供销售方向。

1. 用户体验

让我先快速向您介绍聊天机器人。在此之前,我从Kaggle下载了一个名为NYC Restaurants Data — Food Ordering and Delivery的免费数据集,用于演示,其中包含纽约市1898个订餐订单:
a) 在假设部署了公共IP的情况下,输入此聊天机器人的URL。
notion image
b) 将我们之前下载的NYC Restaurants Data — Food Ordering and Deliveryfood_order.csv文件上传到上传器小部件中。上传完成后,网站将显示数据集的前5行。此外,还会显示一个带有按钮的文本输入框,供用户查询有关此数据集的信息。
notion image
c) 在文本输入框中输入查询,然后按发送键。处理一段时间后,您和AI之间的一对聊天将显示在页面底部。
notion image
d) 您可以继续提出更多问题,响应将在聊天区域中累积显示。
notion image
e) 推理和计算的内部过程都记录在后端终端上。
notion image

2. 块图

在此聊天机器人应用程序中,我们使用称为Pandas Dataframe Agent的LangChain Agent作为基础,并开发一个Streamlit Web应用程序,以提供用户数据集文件的输入进行查询和分析后的响应。使用此代理程序,我们不必担心Pandas的使用,因为它实现了内部Python代码生成器以调用适当的Pandas函数。
notion image
从第3章到第5章,我将专注于介绍此项目中使用的所有模块的基本知识和典型用法。如果您愿意立即开始编写整个数据分析聊天机器人应用程序而没有这些技术背景,则建议您转到第6章。

3. OpenAI API密钥

Langchain Agent的设计目的之一是与各种LLMs兼容,在此应用程序中,它使用OpenAI的聊天模型进行AI语言生成任务。因此,当我们决定基于OpenAI的聊天模型实现我们的应用程序时,应该向程序提供我们的OpenAI API密钥。
启用ChatGPT API需要做的唯一一件事是通过环境变量提供API密钥:

4. Streamlit

与我之前在文章中的先前项目一样,我们将继续使用方便的Streamlit工具集来构建数据分析聊天机器人Web应用程序。
notion image
Streamlit是一个开源的Python库,可轻松创建交互式Web应用程序。它专为希望简单地与其他人分享他们的工作的数据科学家和机器学习工程师而设计。 Streamlit应用程序可以使用最少的代码创建,并通过单个命令部署到Web。
Streamlit提供了多种小部件,可用于创建这些交互式应用程序。这些小部件包括按钮、文本输入、数据框和图表。所有小部件的文档都可以在Streamlit网站上找到。 https://docs.streamlit.io/library/api-reference
Web应用程序的典型Streamlit代码可以非常简单,如下所示:
然后只需键入以下命令即可将网站部署在线:
如果成功运行,则会打印用户可以访问的URL:
Streamlit也可以进行第三方组件开发。我最喜欢的组件之一是streamlit_chat,它提供了聊天应用程序类似的UI,可快速实现聊天机器人。要使用此组件,您需要做的只是:
a) 安装并导入组件
b) 调用message()函数以显示聊天气泡,如果is_user=True,则气泡将位于右侧,否则将位于左侧。seed用于显示不同样式的头像。

5. LangChain代理

LangChain是一个基于Python的框架,通过促进语言模型与各种数据源的连接,为开发人员提供了强大的功能。它还专注于使这些模型足够真实,以便能够根据数据采取行动。有时,某些应用程序需要不止大型语言模型(LLMs)和其他工具的预定调用序列。相反,它们可能需要一个取决于用户输入的未知序列。在这些类型的链中,有一个“代理”,它可以访问一组工具。然后,基于用户输入,代理可以决定是否调用哪些工具。它们可用于创建各种应用程序,包括聊天机器人、问答系统和摘要系统。
notion image
在本段中,我们将不会更深入地介绍LangChain和代理的通用用法。我们将在电子商务数据集的上下文中探讨称为*Pandas Dataframe Agent*的特定LangChain代理的用法。我们还将讨论LangChain框架在最后一节中数据分析的未来可能走向。
要在本地成功运行Pandas Dataframe Agent,只需要执行以下几个步骤。
a) 安装软件包
b) 导入模块
c) 将数据集文件加载到Pandas Dataframe中
d) 创建Pandas代理
e) 通过提供查询运行代理
当代理正在运行时,会在终端上显示格式化的输出,并在代理链完成后返回一个字符串响应以回答您的查询。

6. 整个聊天机器人应用程序

为了将Langchain代理和Streamlit整合到一个交互式网站中,完整的功能将包括:
  1. 创建一个上传器小部件st.file_uploader(),仅接受.csv文件上传。在正确接收到.csv文件后,在与Python文件相同的文件夹中保存它。
  1. 使用Pandas的read_csv()方法将.csv文件读取为数据框。调用Streamlit的dataframe()方法来显示此数据框的头部。
  1. 通过ChatOpenAI()方法创建聊天模型,并将其加载到pandas_dataframe_agent中,与数据框一起使用。
  1. 创建另外两个Streamlit小部件st.text_input()st.button(),以便向用户提供查询接口。在按钮的on_click事件中,将查询从文本输入转换为agent.run()函数,以启动链式执行。完成链式操作后,将响应和原始提示附加到st.session_state的两个列表中,以通过streamlit_chat组件显示在Web上作为聊天历史记录。
请查看完整的演示代码作为参考:
将代码保存到Python文件“demo.py”中,并运行以下命令:
您的数据分析聊天机器人现已准备就绪,并能够有效地执行其分析任务。

7. 未来扩展

LangChain在数据分析过程中提出了一个重大的创新。该框架可以快速分析大型数据集,提取洞察,并及时提供答案。然而,该框架仍在开发中,各种改进可以进一步扩展其功能。
可能会改进的一个方面是建立反馈循环。目前,我们可以向代理提出具体问题并获得答案,但是,在分析过程中我们并没有得到中间数据框。将来,Langchain将可以促进数据框的返回。这样,数据分析师和科学家可以继续使用生成的数据并提出后续问题。
另一个改进领域是参考外部网页。LangChain具有可以从网页中提取信息的Python请求工具。将来,代理可以参考外部网页以获取分析所需的必要数据。
就这样。
希望您在本文中找到有用的信息,感谢您的阅读!
 

作者:Yeyu Huang
 

评论