PandasAI

使用 dify 可以搭建出简单的 RAG,但是当想输出精确答案、汇总答案时,往往得不到正确结果,比如 xx 年 xx 月 xx 日出现什么异常,xx 人解决了多少异常,这些都无法解决。原因是检索向量库时,有相当部分符合条件的记录未被命中,于是联想使用数据库查询类似确定性的方法实现这类数据的处理。

什么是 PandasAI?

PandasAI 是一个 Python 库,可以轻松地用自然语言向数据提问。

除了查询之外,PandasAI 还提供通过图表可视化数据、通过解决缺失值来清理数据集以及通过特征生成提高数据质量的功能

  • 自然语言查询:以自然语言向数据提问。
  • 数据可视化:生成图形和图表以可视化您的数据。
  • 数据清理:通过解决缺失值来清理数据集。
  • 特征生成:通过特征生成提高数据质量。
  • 数据连接器:连接到各种数据源,如 CSV、XLSX、PostgreSQL、MySQL、BigQuery、Databrick、Snowflake 等。

PandasAI 的原理

PandasAI 使用生成式 AI 模型来理解和解释自然语言查询,并将其转换为 Python 代码和 SQL 查询。然后,它使用代码与数据交互并将结果返回给用户

PandasAI 的结构

  • 基于 Python 库:使用 pip 或 poetry 安装库,并在 Python 代码中使用它
  • 基于 Web 平台:使用基于 Web 的平台以更直观的方式与数据进行交互

PandasAI 如何使用

安装

1
python -m pip install pandasai

使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import os
import pandas as pd
from pandasai import Agent

# Sample DataFrame
sales_by_country = pd.DataFrame({
"country": ["United States", "United Kingdom", "France", "Germany", "Italy", "Spain", "Canada", "Australia", "Japan", "China"],
"sales": [5000, 3200, 2900, 4100, 2300, 2100, 2500, 2600, 4500, 7000]
})

# By default, unless you choose a different LLM, it will use BambooLLM.
# You can get your free API key signing up at https://pandabi.ai (you can also configure it in your .env file)
os.environ["PANDASAI_API_KEY"] = "YOUR_API_KEY"

agent = Agent(sales_by_country)
agent.chat('Which are the top 5 countries by sales?')
## Output
# China, United States, Japan, Germany, Australia

使用 ollama 本地大模型作为自然语言理解模型

1
2
3
4
5
6
7
8
9
10
from pandasai import SmartDataframe
from pandasai.llm.local_llm import LocalLLM

# Assuming you have a local server running that hosts the Llama 3.1 model
llm = LocalLLM(api_base="http://localhost:11434/v1", model="qwen2.5")
df = SmartDataframe("data.xlsx", config={"llm": llm})

response = df.chat("2019.07.11发生了哪些异常")
print(response)

参考:

  1. Introduction to PandasAI - PandasAI
  2. Getting started with the Library - PandasAI