我使用 LangChain 和 ReAct 代理来加载 Excel 文件,对其进行转换,并将结果存储在名为
df
的 DataFrame 中。但是,最终的 agent_executor.invoke() 调用仅返回描述发生情况的字典,而不是实际的 DataFrame。
我希望将生成的 DataFrame 作为主脚本中的局部变量进行访问。这是我的代码:
import pandas as pd
from langchain.agents import AgentExecutor, create_react_agent, Tool
from langchain.tools import tool
from langchain_community.tools import ShellTool
from langchain_openai import ChatOpenAI
from langchain_experimental.utilities import PythonREPL
from langchain import hub
@tool
def load_excel_response(filepath: str):
"""Load an Excel file and return a transformed DataFrame."""
df = pd.read_excel(filepath, skiprows=2, names=['responses']).reset_index(drop=True)
df = df.select_dtypes(include=['object'])
return df # df.to_json()
llm = ChatOpenAI(model='gpt-4o-mini')
python_repl = PythonREPL()
shell_tool = ShellTool()
repl_tool = Tool(
name="python_repl",
description="Run Python commands in a REPL environment.",
func=python_repl.run,
)
tools_list = [load_excel_response, repl_tool, shell_tool]
prompt = hub.pull("hwchase17/react")
shell_agent = create_react_agent(llm=llm, tools=tools_list, prompt=prompt)
agent_executor = AgentExecutor(agent=shell_agent, tools=tools_list, verbose=True)
path = 'excel_file.xlsx'
user_prompt = f"Load the Excel file located at {path} and assign the result to a variable named df."
response = agent_executor.invoke({"input": user_prompt})
print("Agent response:", response)
我所看到的情况:
df
。我尝试过的:
df
变量并将代理执行者df
传递给全局load_excel_response
中的to_json格式。无论如何,代理的最终回应仍然只是一个总结。
问题:
代理完成后,如何在我的主 Python 脚本中实际检索 DataFrame 作为本地变量?我需要原始数据,而不仅仅是文本摘要。使用 LangChain 的正确方法是什么,以便我可以在我的脚本中拥有一个完全形成的 DataFrame(或者至少是我可以重构的东西)?
我认为您需要做的是确保获得结构化的 Json 输出。 然后,一旦你得到了它,你就可以将它展平,并使用一些 python 代码将其转换为 python。
期望代理为您提供直接数据帧作为输出可能效果不佳。