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

LangChain代理集成CSV与文本文件工具遇数据访问异常求助

解决代理调用CSV工具时无法访问数据的问题

问题根源

直接调用csv_agent时,它已经完成了CSV文件的加载并缓存了DataFrame,因此可以直接使用df执行操作;但通过上层代理调用csv-chain工具时,上层代理传递的输入指令中包含了"指定文件路径"的要求,导致csv_agent误解为需要重新读取文件,而它并不知道实际的文件路径,最终触发FileNotFoundError。


解决方案

方案1:优化工具描述,明确无需指定文件路径

修改csv-chain工具的description,清晰告知该工具已绑定目标CSV数据,无需再提供文件路径,只需直接描述数据分析需求:

description = "用于分析已预加载的CSV数据,无需提供文件路径,直接描述具体分析操作(如计算平均值、找出数值降幅最大的测试项等)"

这样上层代理生成调用指令时,就不会要求传入文件路径,csv_agent会直接使用已加载的DataFrame执行操作。

方案2:封装工具函数,屏蔽文件读取逻辑

给csv_agent.run套一层包装函数,自动过滤输入中涉及"读取文件""文件路径"的内容,确保工具始终基于已加载的DataFrame处理请求:

def wrapped_csv_agent(query):
    # 过滤掉可能触发文件读取的关键词
    processed_query = query.replace("文件路径", "").replace("读取CSV", "").replace("加载文件", "")
    return csv_agent.run(processed_query)

# 更新工具定义
tools = [
    Tool(
        name='process_info',
        func=process_chain.run,
        description=desc_process
    ),
    Tool(
        name='csv-chain',
        func=wrapped_csv_agent,
        description=description
    )
]

方案3:调整上层代理Prompt,明确工具能力

在构建上层代理的prompt时,补充说明csv-chain工具的预加载特性,避免代理生成不合理的调用指令:

prompt = PromptTemplate(
    input_variables=["input", "agent_scratchpad"],
    template="""
    你可以使用以下工具回答问题:
    - process_info:用于查询业务流程说明
    - csv-chain:已预加载目标CSV数据,无需提供文件路径,直接描述数据分析需求
    
    当前输入:{input}
    执行记录:{agent_scratchpad}
    """
)

方案4:确保CSV Agent的上下文被正确保留

检查csv_agent的初始化逻辑,确保它在作为工具注入上层代理前,已经完成CSV文件的加载,且实例可复用:

# 提前完成CSV Agent初始化,加载目标数据
csv_agent = create_csv_agent(
    llm=llm,
    path="/实际的CSV文件绝对路径.csv",
    verbose=True,
    allow_dangerous_code=True  # 若需要执行Python代码则开启
)

修改完成后重新运行上层代理查询,csv_agent会直接使用已加载的df执行计算,不再尝试读取新文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 12:07:33