使用Cohere作为LLM时create_pandas_dataframe_agent报NameError的解决方法
问题描述
- 使用LangChain的Pandas DataFrame Agent做汽车数据分析,替换默认OpenAI为Cohere后出现一系列异常:
- 执行时抛出
ObservationNameError: name 'Observation' is not defined - 触发
OutputParserException,提示LLM输出同时包含最终答案和可解析动作(比如错误返回"Final Answer: There are 346 records in the dataframe",但实际数据集是3行11列) - 添加
agent_executor_kwargs={"handle_parsing_errors": True}后,程序陷入循环,重复执行相同动作并报错
- 执行时抛出
解决方案
1. 适配Cohere的输出格式
默认Pandas Agent的解析规则是为OpenAI设计的,Cohere的输出格式不匹配。需要明确约束Cohere的输出结构:
- 中间分析步骤仅输出
Thought-Action-Action Input序列 - 得出结论后仅输出
Final Answer: [内容] - 明确告知Cohere:Observation是工具返回的结果,无需它生成
2. 替换自定义Prompt模板
用约束性Prompt规范Cohere的输出逻辑,示例:
custom_prompt = """ 你是数据分析专家,基于给定的DataFrame回答问题。请严格遵循以下输出格式: # 中间分析步骤格式 Thought: 下一步的分析思路 Action: python_repl_ast Action Input: 要执行的Python代码 # 最终答案格式 Final Answer: 你的结论内容 注意:禁止同时输出中间步骤和最终答案;Observation是工具返回结果,无需你编写。 """
3. 确保LLM与Agent正确集成
检查Cohere初始化配置,确保API密钥有效、模型选择合适,并正确传递给Agent:
from langchain.llms import Cohere from langchain.agents import create_pandas_dataframe_agent import pandas as pd # 加载并验证数据集 df = pd.read_csv("你的汽车数据文件.csv") print(df.shape) # 确认输出为(3, 11) # 初始化Cohere LLM cohere_llm = Cohere(cohere_api_key="你的Cohere API密钥", model="command-xlarge-nightly")
4. 优化错误处理逻辑
不要仅依赖默认的handle_parsing_errors=True,改用自定义错误提示引导Agent修正输出:
agent = create_pandas_dataframe_agent( cohere_llm, df, verbose=True, agent_executor_kwargs={ "handle_parsing_errors": lambda e: f"输出格式错误,请严格按照要求格式输出,错误详情:{str(e)}" }, prompt=custom_prompt ) # 运行查询 agent.run("告诉我这个数据集的行数和列数分别是多少")
5. 验证工具调用有效性
先单独测试python_repl_ast工具能否正常访问DataFrame,确保df变量在Agent执行环境中可用,避免因变量未定义导致的错误。
内容的提问来源于stack exchange,提问作者Naivedya Khare
相关产品推荐
相关产品推荐

