RAG 的预检索 PreRetrieval 优化之 QueryConstruction

除了文本数据,还有越来越多的结构化数据,如表格和图形数据正在被集成到 RAG 系统中。为了适应对于各种数据类型,有必要将用户的查询 + 转换为另一个查询访问替代数据源的语言,具有通用性方法包括文本到 SQL 或文本到 Cypher。在许多场景、结构化查询语言(例如 SQL、Cypher)通常与语义信息结合使用元数据来构造更复杂的查询。

PandasAI

对 excle 类数据进行 RAG 构建时,如果问题涉及精确查找或者统计分析,往往得到错误的答案,究其原因是:在检索阶段,输出的是一部分相关 chunk,无法观察到全局信息,导致无法回答这种全局问题

PandasAI 是一个 Python 库,可以轻松地用自然语言向数据提问。除了查询之外,PandasAI 还提供通过图表可视化数据、通过解决缺失值来清理数据集以及通过特征生成提高数据质量的功能

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

安装

1
python -m pip install pandasai

使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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本地大模型作为自然语言理解模型
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)

text-to-sql

当待检索的信息存储在数据库中时,原始 query 无法准确提取出相关片段,需要将 query 转为 sql 查询代码,才可以进行后续检索

Text-to-cprher

当知识被存在在 “知识图谱” 时,原始 query 无法直接检索知识,必须转换为 “知识图谱” 能够理解的语言

参考:

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