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

部署在Azure FastAPI的Pandas DataFrame Agent生成文件如何获取?

Pandas DataFrame Agent生成文件的直接访问方案

背景说明

你在Azure FastAPI应用中部署的create_pandas_dataframe_agent(配置AgentType.OPENAI_FUNCTIONS)在处理大数据量时会提议生成文件,但默认逻辑不会主动保存文件到可访问路径。你的临时方案是提取查询重跑,以下是更直接的优化方法:

两种直接获取生成文件的方法

方法1:自定义工具替换默认文件生成逻辑

默认Agent的文件生成是临时内置逻辑,你可以自定义工具函数,让Agent调用它来保存文件并返回可访问路径(本地或Azure存储地址):

from langchain.tools import tool
import pandas as pd
import os
from uuid import uuid4

# 自定义CSV保存工具
@tool
def save_dataframe_to_csv(df: pd.DataFrame, filename: str = None) -> str:
    """将DataFrame保存为CSV,返回文件访问路径"""
    filename = filename or f"query_result_{uuid4().hex}.csv"
    # 优先用Azure Blob存储(持久化),示例用临时目录演示
    save_path = os.path.join("/tmp", filename)
    df.to_csv(save_path, index=False)
    
    # 若用Azure Blob,替换为上传逻辑并返回SAS URL
    # blob_client = your_blob_service_client.get_blob_client(container="data", blob=filename)
    # blob_client.upload_from_path(save_path)
    # return blob_client.generate_shared_access_signature(expiry=datetime.utcnow() + timedelta(hours=1))
    
    return save_path

# 创建Agent时注入自定义工具
agent = create_pandas_dataframe_agent(
    llm,
    df,
    verbose=True,
    prefix=prefix,
    agent_type=AgentType.OPENAI_FUNCTIONS,
    agent_executor_kwargs={"memory": conversation_memory},
    return_intermediate_steps=True,
    allow_dangerous_code=True,
    tools=[save_dataframe_to_csv]  # 添加自定义工具
)

调用Agent后,从返回结果中提取工具返回的路径/URL,直接对接FastAPI的下载接口。

方法2:从中间步骤提取已计算的DataFrame

利用已开启的return_intermediate_steps=True,直接提取Agent执行后的DataFrame结果,无需重跑查询:

# 调用Agent
response = agent.invoke({"input": "你的查询请求"})

# 遍历中间步骤,提取查询结果DataFrame
generated_df = None
for step in response["intermediate_steps"]:
    # 匹配Python代码执行步骤(对应Agent的查询操作)
    if hasattr(step[0], "tool") and step[0].tool == "python_repl_ast":
        result = step[1]
        if isinstance(result, pd.DataFrame):
            generated_df = result
            break

# 保存为CSV文件
if generated_df is not None:
    save_path = f"/tmp/result_{uuid4().hex}.csv"
    generated_df.to_csv(save_path, index=False)
    # 将路径传给FastAPI下载接口

部署注意事项

  • Azure App Service的/tmp目录是临时存储,实例重启后文件会丢失,建议将文件上传到Azure Blob Storage,通过SAS URL提供持久化下载。
  • FastAPI下载接口示例:
from fastapi import FastAPI
from fastapi.responses import FileResponse
import os

app = FastAPI()

@app.get("/download/{filename}")
async def download_file(filename: str):
    file_path = os.path.join("/tmp", filename)
    return FileResponse(file_path, media_type="text/csv", filename=filename)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 09:12:46