只需要50行代码就可以打造一个专门进行数据分析的机器人

2,230 阅读4分钟

大家好,我是小寒。

原文链接

今天,我将通过使用 LangChain 和 Streamlit 来构建一个专用于数据分析的聊天机器人。

我将向你展示如何用很少的编码工作来创建这个聊天机器人,如果觉得不错,点赞转发安排起来。

一、初体验

首先,我们先快速了解一下这个机器人的全貌。

我从 Kaggle 下载了一个免费的数据集来进行演示,其中包含 1898 个纽约市的食品配送订单

www.kaggle.com/datasets/ah…

1、使用 streamlit run demo.py 启动程序,然后在浏览器输入 http://localhost:8501。

2、上传我们的数据文件,在加载完成后,会显示出数据集的前五行。此外,还将显示一个带有按钮的文本输入框,供用户查询此数据集。

3、在文本输入框中键入查询,然后点击 send 按钮。经过一段时间的处理后,页面底部会显示一对你和AI之间的聊天记录。

二、详解

在此聊天机器人应用程序中,我们使用名为 Pandas Dataframe Agent 作为基础,并开发 Streamlit Web 应用程序。

使用这个代理,我们不必担心 Pandas 的使用,因为它实现了一个内部 Python 代码生成器来调用正确的 Pandas 函数。

下面的第三到第五部分,我将重点介绍本项目中使用的所有模块的基础知识和典型用法。

如果你想在没有这些技术背景的情况下立即开始编写整个用于数据分析的聊天机器人应用程序,建议你直接跳转到第六部分。

三、OpenAI key

Langchain Agent 的设计目的之一是兼容各种LLM,在这个应用中,它使用 OpenAI 的模型来完成 AI 语言生成任务。

import os
os.environ["OPENAI_API_KEY"] = '{your_api_key}'

四、Streamlit

Streamlit 是一个开源的 Python 库,可以轻松创建交互式 Web 应用程序。

它专为希望与他人轻松分享工作的数据科学家和机器学习工程师而设计。

Streamlit 应用程序可以使用最少的代码创建,并通过单个命令部署到 Web。

Streamlit 提供了各种可用于创建交互式应用程序的小部件。这些小部件包括按钮、文本输入、数据框和图表。我最喜欢的组件之一是streamlit_chat,它提供了类似聊天应用程序的 UI,用于快速实现聊天机器人。要使用该组件,你需要做的就是:

1、安装并导入组件

pip install streamlit_chat
from streamlit_chat import message

2、调用message()函数显示聊天记录,如果 is_user=True,则消息出现在右侧,否则在左侧。seed 用于展示不同风格的头像。

message("This is the message from bot", seed='Milo')
message("This is the message from human", is_user=True, seed=83)

五、LangChain

LangChain 是一个基于 Python 的框架,通过促进语言模型与各种数据源的连接来为开发人员提供支持。

本节我们不会深入探讨 LangChain 和 Agent 的一般用法。

我们在这里只是探索一个名为 Pandas Dataframe Agent 的特定 LangChain Agent 。

要在本地成功运行 Pandas Dataframe Agent,只需完成几个步骤。

1、安装库

pip install openai pandas langchain

2、导入模块

from langchain.llms import create_pandas_dataframe_agent
from langchain.chat_models import ChatOpenAI
import pandas as pd

3、将数据文件加载到 Pandas Dataframe 中

df = pd.read_csv('food_order.csv')

4、创建 Pandas 代理

agent = create_pandas_dataframe_agent(ChatOpenAI(temperature=0), df, verbose=True)

5、通过提供查询来运行代理

response = agent.run("Which cuisine type has the highest average cost?")

当代理运行时,你的终端上将显示格式化的输出。

并在代理链完成后返回一个字符串 response 来回答你的查询。

六、完整的聊天机器人程序

为了将 Langchain 代理和 Streamlit 整合到一个交互式网站中,完整的功能将包括:

  1. 创建一个上传文件小部件,st.file_uploader() 仅接受 csv 格式文件上传。正确接收 csv 文件后,将其保存在与 Python 文件相同的文件夹中。
  2. 通过 Pandas 的 read_csv() 方法将文件读取为数据框。调用 Streamlit 的 dataframe() 方法来显示该数据框前5行。
  3. 通过 ChatOpenAI() 方法创建聊天模型并将其与数据帧一起加载。
  4. 创建另外两个 Streamlit 小部件 st.text_input() 和 st.button() 用于构建用户查询界面。如果触发按钮点击,则将查询从文本输入传输到 agent.run() 函数以启动链的执行。执行完成后,将响应和原始提示附加到两个列表中,以便 st.session_state 通过 streamlit_chat 组件作为聊天历史记录显示在页面上。