使用Langchain实现CSV问答时未返回全部符合条件结果的问题
问题分析与解决
问题现象
处理film.csv时,查询1999年的所有作者,结果只返回了Author A,遗漏了Author C。
核心原因
- 检索结果数量受限:代码里设置了
search_kwargs={"k": 1},这会让Chroma检索器仅返回最匹配的1条文档。1999年有两条对应记录,检索器只取了其中一条,导致LLM无法获取到Author C的信息。 - CSV格式不标准:当前的
film.csv每行都是key:value的键值对拼接结构,不符合标准CSV规范。标准CSV需要先定义表头(如year,author,film,Description),再逐行填写对应字段值,原格式会导致CSVLoader解析出错,可能把整行内容当成单一字段处理,影响检索匹配的准确性。
修复步骤
1. 调整检索返回数量
将search_kwargs={"k": 1}修改为search_kwargs={"k": 2}(或更大数值,确保能覆盖所有1999年的记录):
chain = ConversationalRetrievalChain.from_llm(ChatOpenAI(temperature=0.3), retriever=search.as_retriever(search_kwargs={"k": 2}), return_source_documents=True)
2. 修正CSV文件格式
将film.csv改为标准CSV格式:
year,author,film,Description 1999,A,FilmA,"ac abs moon" 1998,B,FilmB,"yes" 1999,C,filmC,"No" 1996,D,FilmD,"MUST SEE"
内容的提问来源于stack exchange,提问作者Yannick Serra
相关产品推荐
相关产品推荐

