最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PandasAI連接LLM進行智能數(shù)據(jù)分析的示例詳解

 更新時間:2025年08月05日 08:39:41   作者:人生海海?山山而川  
Pandas是一個數(shù)據(jù)分析開源組件庫,PandasAI則通過結(jié)合Pandas和生成式AI技術(shù),下面小編就來和大家詳細(xì)介紹一下PandasAI如何連接LLM進行數(shù)據(jù)分析吧

1. 引言

Pandas是一個數(shù)據(jù)分析開源組件庫,提供了高性能、易用的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)分析工具。它的核心的功能是其DataFrame對象,這是一個帶有行和列標(biāo)簽的二維表格數(shù)據(jù)結(jié)構(gòu),支持缺失數(shù)據(jù)處理、時間序列功能、靈活的數(shù)據(jù)輸入輸出方法、數(shù)據(jù)對齊和分組操作等特性。

PandasAI則通過結(jié)合Pandas和生成式AI技術(shù),使用戶能夠以自然語言與數(shù)據(jù)進行交互,從而簡化數(shù)據(jù)分析流程。它的核心目標(biāo)是讓數(shù)據(jù)分析變得更直觀、高效,甚至無需編寫復(fù)雜代碼即可完成數(shù)據(jù)查詢、清洗、可視化等任務(wù)。

2. 詳述

Pandas進行數(shù)據(jù)分析的流程筆者不是很熟練,這里重點關(guān)注一個問題就是PandasAI如何連接現(xiàn)有的大模型比如DeepSeek來進行智能數(shù)據(jù)分析。

由于經(jīng)驗不足,筆者在測試PandasAI的時候,將相關(guān)的組件都安裝在默認(rèn)全局的Python環(huán)境中了,導(dǎo)致版本有點低,使用的是v2版本?,F(xiàn)在普通推薦使用Anaconda這樣的工具安裝虛擬環(huán)境來進行Python的依賴管理。不過根據(jù)PandasAI官網(wǎng)文檔[1]提示,PandasAI 3.0仍然是beta版本,并且推薦使用Poetry管理Python依賴。所以這里筆者也就沒有想升級到3.0,暫時先用穩(wěn)定一定的2.X版本。

解決掉PandasAI 2.X的版本依賴問題之后,通過PandasAI連接DeepSeek進行智能數(shù)據(jù)分析的案例代碼實現(xiàn)如下:

import pandas as pd
from pandasai import SmartDataframe
from pandasai.llm.base import LLM
import requests

# 自定義DeepSeek大模型
class DeepSeekLLM(LLM):
    def __init__(self, api_url:str, api_key: str, model: str):
        super().__init__()
        self.api_url = api_url
        self.api_key = api_key
        self.model = model        


    def call(self, instruction, context: dict = None, **kwargs) -> str:  
        """
        PandasAI 用來向 LLM 模型發(fā)起請求的接口入口。

        Args:
            instruction (str): PandasAI 傳入的 prompt,可能是 string 或自定義對象,表示用戶的問題。
            context (dict, optional): 包含上下文信息(例如 DataFrame 元數(shù)據(jù)等),在部分 LLM 中可用。
            **kwargs: 保留接口向前兼容(比如未來增加其他參數(shù)時也能傳入)。

        Returns:
            str: 執(zhí)行指令后的結(jié)果輸出。
        """

        # 把復(fù)雜的 Prompt 對象變成字符串
        if not isinstance(instruction, str):
            instruction = str(instruction)

        # 請求頭
        headers = {
            "Authorization": f"Bearer {self.api_key}",   # DeepSeek身份驗證
            "Content-Type": "application/json"
        }

        # 兼容 OpenAI 的 Chat Completion API的對話消息格式
        messages = [
            {
                "role": "system", # 設(shè)定 LLM 的行為
                "content": "You are a helpful AI assistant for data analysis."
            },
            {
                "role": "user",  # 是實際的問題
                "content": instruction
            }
        ]

        # 請求體
        payload = {
            "model": self.model,
            "messages": messages,
            "temperature": 0.0 # 值越低,回答的效果越穩(wěn)定
        }

        # 發(fā)送post請求
        response = requests.post(self.api_url, headers=headers, json=payload)

        # 檢查返回狀態(tài)碼,如果不是 200 則報錯。
        if response.status_code != 200:
            raise Exception(f"DeepSeek API Error: {response.status_code}, {response.text}")

        # 解析返回結(jié)果
        result = response.json()
        return result["choices"][0]["message"]["content"]

    @property
    def type(self):
        return "deepseek-custom"

# Sample DataFrame
sales_by_country = pd.DataFrame({
    "country": ["United States", "United Kingdom", "France", "Germany", "Italy", "Spain", "Canada", "Australia", "Japan", "China"],
    "sales": [5000, 3200, 2900, 4100, 2300, 2100, 2500, 2600, 4500, 7000]
})

# 用自定義的 DeepSeek LLM
llm = DeepSeekLLM(
    api_url = "https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions",
    api_key="sk-xxx", 
    model="deepseek-r1")

df = SmartDataframe(sales_by_country, config={"llm": llm})

result = df.chat('列出銷售額最高的3個國家。')

print(result)

如代碼所示,關(guān)鍵的所在是需要自定義一個繼承自LLM的能夠連接DeepSeek的類DeepSeekLLM。其實PandasAI 2.X是可以使用提供了支持使用OpenAI的接口的,而連接DeepSeek的接口一般會兼容OpenAI。但是筆者嘗試了之后不行,不能傳入自定義的LLM地址。沒辦法只能自己自定義一個繼承自LLMDeepSeekLLM類。

DeepSeekLLM類的關(guān)鍵就是call函數(shù)的實現(xiàn),這是PandasAI用來向LLM模型發(fā)起請求的接口的入口。在這個函數(shù)實現(xiàn)中的關(guān)鍵就是通過兼容OpenAI的Chat API向自定義的DeepSeek服務(wù)發(fā)起post請求,具體的細(xì)節(jié)筆者已經(jīng)在代碼中進行注釋,另外也可以查閱OpenAI API的相關(guān)文檔。這里的實現(xiàn)并沒有像文末連接語言大模型(LLM)服務(wù)進行對話中一樣使用openai模塊或者LangChain框架,而是直接使用requests來發(fā)送HTTP請求,顯得更加底層一點,不過原理都差不多。

最終運行的結(jié)果如下所示:

country  sales
0          China   7000
0          China   7000
1  United States   5000
2          Japan   4500

3.連接語言大模型(LLM)服務(wù)進行對話 

最近開始接觸AI大模型方向的工作,第一個實例就嘗試一下連接大模型進行對話的實現(xiàn)。

openai模塊

要實現(xiàn)這個功能很簡單,直接翻各大模型平臺的給的API案例一般都可以實現(xiàn),例如筆者這里使用的阿里云的百煉平臺給出的API:

from openai import OpenAI

client = OpenAI(
    # 使用大模型對應(yīng)的Key
    api_key = "sk-xxx",
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
)

completion = client.chat.completions.create(
    model="deepseek-r1",  # 此處以 deepseek-r1 為例,可按需更換模型名稱。
    messages=[
        {'role': 'user', 'content': '想快速入門AI大模型,給我推薦一下具體的學(xué)習(xí)方案。'}
    ]
)

# 通過reasoning_content字段打印思考過程
print("思考過程:")
print(completion.choices[0].message.reasoning_content)

# 通過content字段打印最終答案
print("最終答案:")
print(completion.choices[0].message.content)

我這里使用的大模型是deepseek,但是使用的是openai模塊。這是因為現(xiàn)在的大模型服務(wù)基本都兼容OpenAI API標(biāo)準(zhǔn)的接口,因此可以通過設(shè)置不同的base_url和api_key來使用相同的openai Python客戶端庫進行訪問。這也是為啥現(xiàn)在大模型平臺都可以選擇接入不同的大模型來實現(xiàn)AI應(yīng)用。

除了Python接口,阿里云百煉平臺還提供了Node.js和HTTP的接入方式,理論上可以前端、后端、移動端以及桌面端都可以連入大模型來實現(xiàn)自己的AI應(yīng)用。messages=[{'role': 'user', 'content': '想快速入門AI大模型,給我推薦一下具體的學(xué)習(xí)方案。'}]就是大模型的提示詞,通過更改提示詞,可以與大模型對話來得到自己想要的結(jié)果。

LangChain

除了使用openai模塊,使用LangChain是個更好的選擇。LangChain是一個構(gòu)建于大型語言模型(LLMs)之上的框架,提供了一系列的工具和接口來簡化與這些模型交互的過程。如下所示:

# 初始化模型
chat = ChatOpenAI(
    model_name="deepseek-r1",
    temperature=0,
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", #服務(wù)地址
    api_key="sk-xxx"  #API密鑰
)

# 發(fā)送請求
response = chat.invoke([HumanMessage(content="請用中文介紹你自己。")])

# 輸出結(jié)果
print(response.content)

為什么說LangChain更好用一點呢,比如說你要執(zhí)行批量任務(wù),對一些文本進行多標(biāo)簽分類,那么可能需要進行批量提問以提升效率。在這方面LangChain提供了batch接口:

from langchain_openai import ChatOpenAI

llm_client = ChatOpenAI(
    temperature=0.0,
    model_name="deepseek-r1",
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
    api_key="sk-852da921b11545c99de697e584210fc7"
)

# 假設(shè)你的多標(biāo)簽集合如下:
total_class = {"正面", "負(fù)面", "價格問題", "物流問題", "推薦", "外觀設(shè)計", "用戶體驗"}

# 系統(tǒng)提示詞
system_prompt = """你是一個多標(biāo)簽分類助手,請從以下標(biāo)簽中選出適用于文本的所有標(biāo)簽(可以多選):
正面, 負(fù)面, 價格問題, 物流問題, 推薦, 外觀設(shè)計, 用戶體驗

只輸出標(biāo)簽,多個標(biāo)簽之間用英文逗號分隔。如果無法判斷,則返回空字符串。
"""

def llm_labeling(texts: list[str]) -> list[list[str]]:
    """
    對輸入文本列表進行多標(biāo)簽打標(biāo),返回每條文本對應(yīng)的標(biāo)簽列表。
    """
    results = []
    batch_inputs = [system_prompt + '\n' + t for t in texts] 
    res = llm_client.batch(batch_inputs)
    for item in res:
        content = item.content.strip()
        if not content:
            results.append([])
            continue
        # 解析逗號分隔標(biāo)簽,清洗一下
        tags = [t.strip() for t in content.split(',')]
        # 只保留在 total_class 中的合法標(biāo)簽
        tags = [t for t in tags if t in total_class]
        results.append(tags)
    return results

texts = [
    "這個產(chǎn)品非常好用,值得推薦",
    "物流速度太慢了,體驗不好",
    "外觀漂亮,使用方便,就是價格稍貴"
]

result = llm_labeling(texts)
for i, tags in enumerate(result):
    print(f"第{i+1}條: 標(biāo)簽 = 
  • PandasAI
  • LLM
  • 數(shù)據(jù)分析
  • ")

    運行結(jié)果如下:

    第1條: 標(biāo)簽 = ['正面', '推薦', '用戶體驗']
    第2條: 標(biāo)簽 = ['負(fù)面', '物流問題', '用戶體驗']
    第3條: 標(biāo)簽 = ['正面', '外觀設(shè)計', '用戶體驗', '價格問題']

    其實deepseek不一定真的支持批量提問的接口,即使真的不支持,LangChain為我們提供了抽象層,在內(nèi)部進行并發(fā)處理。當(dāng)然,如果有的大模型提供batch接口,LangChain就會直接調(diào)用它。

    其他

    在阿里的百煉平臺上還提供了“多輪對話”和“流式輸出”的使用方式。這兩種方式是構(gòu)建AI Chat應(yīng)用必須的。“多輪對話”就是需要讓大模型記住之前的對話內(nèi)容,也就是上下文,以便得到更好的輸出;“流式輸出”則是讓大模型的回答逐步漸進的輸出,一個字一個字的呈現(xiàn),以便讓AI Chat應(yīng)用的交互性更好。不過筆者暫時不關(guān)心這個,以后有機會再試用一下。

    到此這篇關(guān)于PandasAI連接LLM進行智能數(shù)據(jù)分析的示例詳解的文章就介紹到這了,更多相關(guān)PandasAI LLM進行數(shù)據(jù)分析內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

    相關(guān)文章

    • Python pip更換清華源鏡像的詳細(xì)教程

      Python pip更換清華源鏡像的詳細(xì)教程

      大家經(jīng)常會使用 pip 進行python 的第三方庫安裝,但是,有時會出現(xiàn)ERROR: No matching distribution found for PyQt6這類的錯誤,其實大部分原因是我們國內(nèi)網(wǎng)絡(luò)的問題,所以本文給大家介紹了Python pip更換清華源鏡像的詳細(xì)教程,需要的朋友可以參考下
      2024-09-09
    • django框架如何集成celery進行開發(fā)

      django框架如何集成celery進行開發(fā)

      本文給大家詳細(xì)講解了在django框架中如何集成celery進行開發(fā),步驟非常詳細(xì),有需要的小伙伴可以參考下
      2017-05-05
    • Python中ROC曲線繪制

      Python中ROC曲線繪制

      大家好,本篇文章主要講的是Python中ROC曲線繪制,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
      2021-12-12
    • Python將8位的圖片轉(zhuǎn)為24位的圖片實現(xiàn)方法

      Python將8位的圖片轉(zhuǎn)為24位的圖片實現(xiàn)方法

      這篇文章主要介紹了Python將8位的圖片轉(zhuǎn)為24位的圖片的實現(xiàn)代碼,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
      2018-10-10
    • python打印直角三角形與等腰三角形實例代碼

      python打印直角三角形與等腰三角形實例代碼

      這篇文章主要給大家介紹了關(guān)于python打印直角三角形與等腰三角形的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
      2019-10-10
    • 在Python中測試訪問同一數(shù)據(jù)的競爭條件的方法

      在Python中測試訪問同一數(shù)據(jù)的競爭條件的方法

      這篇文章主要介紹了在Python中測試訪問同一數(shù)據(jù)的競爭條件的方法,探究多線程或多進程情況下優(yōu)先訪問權(quán)的問題,需要的朋友可以參考下
      2015-04-04
    • python使用pgzero進行游戲開發(fā)

      python使用pgzero進行游戲開發(fā)

      今天要和大家分享的pgzero(pygame zero)是在pygame基礎(chǔ)上做了進一步的封裝,使得設(shè)計一款游戲十分的方便,特別適合少兒編程領(lǐng)域的教學(xué), 與scratch相得益彰。
      2021-06-06
    • 在pytorch中對非葉節(jié)點的變量計算梯度實例

      在pytorch中對非葉節(jié)點的變量計算梯度實例

      今天小編就為大家分享一篇在pytorch中對非葉節(jié)點的變量計算梯度實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
      2020-01-01
    • python中刪除某個元素的方法解析

      python中刪除某個元素的方法解析

      這篇文章主要介紹了python中刪除某個元素的方法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
      2019-11-11
    • python中json.dumps和json.dump區(qū)別

      python中json.dumps和json.dump區(qū)別

      json.dumps將Python對象序列化為JSON字符串,json.dump直接將Python對象序列化寫入文件,本文就來介紹一下兩個的使用及區(qū)別,具有一定的參考價值,感興趣的可以了解一下
      2024-12-12

    最新評論

    柳江县| 安化县| 清流县| 迭部县| 涞水县| 皋兰县| 日土县| 莲花县| 肥城市| 小金县| 澄江县| 华池县| 屏东县| 宜城市| 延寿县| 大新县| 繁峙县| 年辖:市辖区| 若尔盖县| 岳池县| 教育| 宁强县| 平潭县| 临汾市| 博兴县| 图木舒克市| 页游| 锡林浩特市| 大庆市| 隆安县| 贺兰县| 双鸭山市| 甘孜县| 大足县| 田东县| 惠水县| 拉萨市| 宁强县| 桑植县| 桓台县| 棋牌|