You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用LangChain加载多CSV文件并实现跨文件问答?

多CSV文件加载至LangChain并实现问答查询

需求与现有代码

我有一个包含多个CSV文件的文件夹,希望将所有文件加载到LangChain中并实现问答查询。以下是我当前编写的代码:

from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.text_splitter import CharacterTextSplitter
from langchain import OpenAI, VectorDBQA
from langchain.document_loaders import DirectoryLoader
from langchain.document_loaders.csv_loader import CSVLoader
import magic
import os
import nltk

os.environ['OPENAI_API_KEY'] = '...'

loader = DirectoryLoader('../data/', glob='**/*.csv', loader_cls=CSVLoader)

documents = loader.load()

text_splitter = CharacterTextSplitter(chunk_size=400, chunk_overlap=0)

texts = text_splitter.split_documents(documents)

embeddings = OpenAIEmbeddings(openai_api_key=os.environ['OPENAI_API_KEY'])

docsearch = Chroma.from_documents(texts, embeddings)

qa = VectorDBQA.from_chain_type(llm=OpenAI(), chain_type="stuff", vectorstore=docsearch)

query = "how many females are present?"
qa.run(query)

优化建议

  • CSVLoader默认将每行数据作为单个文档,若CSV包含表头,可通过csv_args参数明确指定,例如:CSVLoader(file_path=..., csv_args={'delimiter': ',', 'header': 0})
  • 针对CSV这类结构化文本,CharacterTextSplitter的拆分效果可能不够理想,推荐使用RecursiveCharacterTextSplitter,它能更好地处理换行、逗号等分隔符,避免内容断裂
  • 建议调整chunk_overlap参数(如设为50),让相邻文本块保留部分重叠内容,提升问答时的上下文连贯性
  • VectorDBQA在LangChain新版本中已被标记为弃用,建议替换为RetrievalQA,示例代码如下:
from langchain.chains import RetrievalQA

# 替换原QA初始化逻辑
qa = RetrievalQA.from_chain_type(
    llm=OpenAI(),
    chain_type="stuff",
    retriever=docsearch.as_retriever(search_kwargs={"k": 3})
)

内容的提问来源于stack exchange,提问作者Dave Kalu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 10:53:28