Pandas-ai + Fastapi-mcp,自己動手搭建AI數(shù)據(jù)分析服務(wù),效果不比大廠差 原創(chuàng)
大家好,我是九歌。今天我們聊一聊使用大模型進行數(shù)據(jù)分析。
AI數(shù)據(jù)分析作為大模型應(yīng)用的剛需,在各大平臺上的表現(xiàn)卻大相徑庭。阿里百煉的析言、ChatGPT、商湯的小浣熊、豆包,用了一圈,發(fā)現(xiàn)能打的只有豆包。但是豆包只提供大模型接口,AI數(shù)據(jù)分析卻沒有對應(yīng)的接口。
首先定義一下“AI數(shù)據(jù)分析”,本文所說的AI數(shù)據(jù)分析,專指大模型對數(shù)據(jù)表格的處理能力,默認數(shù)據(jù)超過2000行!
2000行的表格直接喂給大模型讓其分析,可想而知,這是多么不現(xiàn)實的一件事情,更不要說是讓大模型對表格中的某行或某列進行精準的函數(shù)計算了。
目前各大平臺使用的解決方案,基本一致,主要是下面幾個步驟:
1.命令大模型對上傳的Excel文件,生成Python代碼,讀取表頭和表格前幾行數(shù)據(jù)
2.將讀取后的數(shù)據(jù)與用戶的需求再重新提交給大模型
3.大模型根據(jù)需求生成Pandas或者SQL代碼,對數(shù)據(jù)進行操作
4.在沙箱中執(zhí)行數(shù)據(jù)處理代碼,判斷是否處理成功
5.若處理成功,將處理后的表格路徑返回
6.若處理失敗,將錯誤信息一并交給大模型,重新生成
按理說上面的過程看起來好像一點不麻煩,于是我自信滿滿的想要智能體工作流實現(xiàn)一個,但是很快被打臉了。遇到稍微復雜點的數(shù)據(jù)分析需求,工作流陷入死循環(huán),一直報錯!
本著不能重復造輪子的心態(tài),我開始在Github上找AI數(shù)據(jù)分析相關(guān)的開源項目。功夫不負想偷懶的人,終于發(fā)現(xiàn)了一個將近2萬star的項目——Pandas-ai!
Pandas是Python中數(shù)據(jù)分析必用的庫!然后給ai賦能了!還這么多人星標了!
激動的心怦怦跳,顫抖的小手搓起來,讓我們一塊體驗一下吧!
安裝篇
Pandas-ai 已經(jīng)做成了Python庫,所以我們直接安裝使用就行,簡直不要太方便。我們通過以下命令即可完成Python環(huán)境搭建和Pandas-ai庫的安裝。
#創(chuàng)建虛擬環(huán)境
python -m venv .venv
#激活環(huán)境
.\.venv\Scripts\activate
#安裝Pandas-ai
pip install pandasai -i https://pypi.tuna.tsinghua.edu.cn/simple
配置篇
將Pandas-ai的github庫,下載到本地,在項目文件夾中找到pandas-ai\examples\use_openai_llm.ipynb 這個文件,并打開。
https://github.com/sinaptik-ai/pandas-ai.git
這個文件中,告訴我們,如何配置OpenAI大模型的api_token,從而用Pandas-ai的 df.chat方法。我們只需要學會這一種使用方法就可以了。我們需要使用以下命令,額外安裝 pandasai-openai庫。
pip install pandasai-openai -i https://pypi.tuna.tsinghua.edu.cn/simple
然后再下方的命令中填入OpenAI的api_token。Pandas-ai目前支持的大模型有限,首選OpenAI
import pandasai as pai
from pandasai_openai import OpenAI
#我修改成了opentourer的token
llm = OpenAI(api_token="your_api_token")
問題來了,我沒有OpenAI的api_token,但是我有OpenRouter的token,可以調(diào)用GPT-4o等模型。于是我找到pandasai-openai庫的源文件base.py和openai.py,修改OpenAI的URL為OpenRouter的URL,并將默認模型設(shè)置為GPT-4o
# .venv\Lib\site-packages\pandasai_openai\base.py
api_base: str = "https://openrouter.ai/api/v1"
#.venv\Lib\site-packages\pandasai_openai\openai.py
model: str = "gpt-4o"
在use_openai_llm.ipynb中,將api_token設(shè)置為openrouter的token,然后執(zhí)行每一個單元格,查看是否輸出為下方的正確信息。此處我直接使用Trae編輯器,配置了Jupyter的內(nèi)核環(huán)境,按照提示安裝相應(yīng)的包之后,就可以直接執(zhí)行ipynb文件。
如果你最后能夠順利執(zhí)行 df.chat()函數(shù),能夠?qū)esponse打印出值來,恭喜你配置成功了!
進階篇
我們來看一下Pandas-ai的工作原理,非常簡單!
第一步,引入Pandas-ai庫,更換別名為pai,并初始化大模型!
import pandasai as pai
from pandasai_openai import OpenAI
#填寫token
llm = OpenAI(api_token="your token")
第二步,指定需要處理的文件路徑,然后輸入數(shù)據(jù)分析需求就可以了!返回信息都存儲在response變量中,你只需要將其直接打印或者保存成其他文件就可以了!
#文件路徑
df = pai.read_csv("./data/heart.csv")
#發(fā)送需求
response = df.chat("What is the correlation between age and cholesterol?")
你可以在Jupyter的變量面板查看當前所有變量屬性!偷偷告訴你,如果response 的Type屬性是DataFrameResponse,你直接可以使用pandas的函數(shù)操作,把response再保存成各種你想要的格式!
import pandas as pd
df2 = pd.DataFrame(response.value)
df2.to_csv("./data/result3.csv",index=False)
如果你再細心點,你會發(fā)現(xiàn)當前文件夾根路徑下面多了個pandasai.log文件。恭喜你,發(fā)現(xiàn)了新大陸,pandas-ai在和大模型交流過程的請求和生成代碼執(zhí)行情況以及錯誤情況,你都可以在這個文件看見了!
對了,為了降低bug次數(shù),請將所有的數(shù)據(jù)文件,全部轉(zhuǎn)成UTF-8格式的CSV文件后,再使用pandas-ai進行處理!
接口篇
Pandas-ai 在我們自己的電腦上已經(jīng)成功跑起來了!如果我們想把這個服務(wù)分享出去,就需要開發(fā)接口了。我們已經(jīng)有了基礎(chǔ)功能,直接使用FastAPI編寫接口就可以了。因為文章篇幅有限,全部接口代碼請在文末說明中獲取。
接口我主要加了一個判斷處理,如果response數(shù)據(jù)長度超過1000,直接保存為csv文件,并返回在線下載地址;如果未超過1000,則將response內(nèi)容直接通過接口返回。
我們來測試一下接口是否能正常工作!這里依然使用Pandas-ai提供的測試表格 ./data/heart.csv。
pandas-ai很快給出了正確結(jié)果,Age列的平均年齡為53.5108。我們用WPS打開heart.csv看一下結(jié)果,發(fā)現(xiàn)完全正確!
MCP篇
現(xiàn)在接口有了,當然接口也不是很完善,讀取的依然是本地文件路徑或者在線URL路徑。這段時間MCP非常火,我們再把上面的接口用MCP協(xié)議封裝一層,看看能不能放在MCP客戶端里面直接調(diào)用!
萬幸Github上有個項目FastAPI-MCP,可以很容易就能將fastapi接口轉(zhuǎn)成支持MCP協(xié)議的服務(wù)。我們安裝項目文檔,直接上手使用!只需要將fastapi對象,再用FastApiMCP封裝一下就可以了!接口中,一定帶上operation_id,不然客戶端找不到工具名。
#安裝
pip install fastapi-mcp -i https://pypi.tuna.tsinghua.edu.cn/simple
#使用
from fastapi import FastAPI
from fastapi_mcp import FastApiMCP
##原有接口
@app.post("/process-attendance/",operation_id="data_analysis")
#省略代碼
##
app = FastAPI()
mcp = FastApiMCP(app)
# Mount the MCP server directly to your FastAPI appmcp.mount()
mcp.mount()
我們重新啟動接口文件,訪問localhost:8989/mcp,發(fā)現(xiàn)如下信息,說明服務(wù)啟動成功!
打開AI編輯器 Trae,手動添加MCP Server ,配置文件如下(使用時請換成自己的路徑):
我們創(chuàng)建一個智能體:數(shù)據(jù)分析師,然后調(diào)用這個智能體,看一下數(shù)據(jù)分析MCP的效果吧。
#智能體輸入問題
D:\JiugeCode\Projects2025\pandasai\pandas-ai-2\pandas-ai\examples\data\heart.csv
表格Age列的平均值是多少
大功告成了!
本文轉(zhuǎn)載自??九歌AI大模型?? 作者:九歌AI
