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

LangChain CSV/Pandas Dataframe Agent返回函数调用JSON未执行问题

CSV Agent仅返回工具调用JSON未执行代码的解决方法

问题概述

  • 背景:基于langchain-experimental的CSV Agent(Pandas Dataframe Agent封装)编写CSV数据分析脚本,调用agent.run(user_message)执行分析
  • 预期:Agent调用python_repl_ast工具执行代码,最终返回自然语言形式的分析结果
  • 异常:仅返回工具调用的JSON结构,未实际执行代码,也无自然语言输出

问题示例

执行agent.run("How many rows are there?")后输出:

> Entering new AgentExecutor chain...
{
  "function": "python_repl_ast",
  "parameters": {
    "query": "len(df)"
  }
}

> Finished chain.

问题原因

  1. 参数传递错误:create_csv_agent的openai_model参数需传入模型名称字符串,而非ChatOpenAI实例,错误的参数会导致Agent逻辑异常
  2. 模型兼容性问题:使用的Mixtral 8x7B Instruct模型对OpenAI函数调用格式的响应不符合LangChain的OPENAI_FUNCTIONS Agent预期,仅返回函数调用JSON但未触发工具执行流程

解决方法

1. 修正参数错误

将openai_model=chat_model改为传入模型名称字符串model:

agent = create_csv_agent(
    chat_model,
    filepath,
    verbose=True,
    openai_model=model,  # 改为模型名称字符串
    agent_type=AgentType.OPENAI_FUNCTIONS,
)

2. 更换Agent类型(推荐)

改用ZERO_SHOT_REACT_DESCRIPTION类型,该类型依赖自然语言描述工具,对非OpenAI模型的兼容性更好:

agent = create_csv_agent(
    chat_model,
    filepath,
    verbose=True,
    agent_type=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
)

3. 强制模型遵循函数调用格式

若坚持使用OPENAI_FUNCTIONS类型,需在系统提示中明确要求模型返回符合OpenAI规范的函数调用格式,并触发工具执行后生成自然语言回答。可通过自定义提示模板实现:

from langchain.prompts import ChatPromptTemplate

system_prompt = """你是一个数据分析专家,需要使用提供的python_repl_ast工具执行代码,然后根据执行结果生成自然语言回答。请严格按照以下格式返回:
如果需要调用工具,返回:
{{
  "function": "python_repl_ast",
  "parameters": {{
    "query": "要执行的代码"
  }}
}}
工具执行完成后,根据结果生成自然语言回答。"""

prompt = ChatPromptTemplate.from_messages([
    ("system", system_prompt),
    ("human", "{input}"),
    ("ai", "{agent_scratchpad}")
])

agent = create_csv_agent(
    chat_model,
    filepath,
    verbose=True,
    agent_type=AgentType.OPENAI_FUNCTIONS,
    prompt=prompt
)

完整修正代码

import os
from langchain.chat_models import ChatOpenAI
from langchain.agents.agent_types import AgentType 
from langchain_experimental.agents.agent_toolkits import create_csv_agent

api_key = os.environ.get("OPENROUTER_API_KEY")
api_base = "https://openrouter.ai/api/v1"
model = "mistralai/mixtral-8x7b-instruct"
chat_model = ChatOpenAI(
    api_key=api_key,
    base_url=api_base,
    model=model,
    temperature=0.0,
)

def main():
    filepath = input("Enter the path to the CSV file: ")
    agent = create_csv_agent(
        chat_model,
        filepath,
        verbose=True,
        agent_type=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    )
    while True:
        user_message = input("You: ")
        lower_message = user_message.lower()
        if lower_message == "goodbye" or lower_message == "goodbye!":
            break
        response = agent.run(user_message)
        print(response)

if __name__ == "__main__":
    main()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 14:05:33