首頁 >後端開發 >Python教學 >透過 Python 使用生成式 AI

透過 Python 使用生成式 AI

DDD
DDD原創
2024-11-11 08:28:02330瀏覽

人工智慧是未來,作為軟體工程師,這是最熱門的領域。在程式碼中利用 LLM 使您能夠建立更聰明的應用程式來處理複雜的任務,例如即時情緒分析或解釋使用者產生的內容。整合法學碩士可讓您的軟體反應更快、功能更強大,增強使用者體驗和自動化。

這篇文章介紹如何使用 Python LLM 呼叫,以便您可以開始將這些強大的功能添加到您自己的程式碼中。

我們將從為您選擇的任何角色製作一個聊天機器人開始。然後,您將學習如何總結較小的文本,甚至進一步總結整本書。最後,您將學習如何重新提示並分析法學碩士提供的結果。

提出我們的第一個 LLM 請求

對於 LLM 請求,我們將使用 Groq。如果您在那裡建立帳戶,您可以使用他們的 API 並免費提出 LLM 請求。

為了使用 Python 來處理這些請求,請透過執行 pip install groq 安裝 Groq python 套件。然後,我們將其導入到我們的程式碼中,如下所示:

import os
from groq import Groq

client = Groq(
    api_key=os.environ.get("GROQ_API_KEY"),
)

請務必將 api 金鑰設定為環境變數。

可以透過新增以下內容來提出簡單的 LLM 要求:

chat_completion = client.chat.completions.create(
    messages=[
        {
            "role": "user",
            "content": "Explain formula 1.",
        }
    ],
    model="llama3-8b-8192",
)
print(chat_completion.choices[0].message.content)

在這種情況下,我們請LLM解釋一下公式1是什麼。在控制台中執行程式後,應該會列印 llama3-8b 的輸出。您可以嘗試一下並切換模型以及提示。

建立自訂聊天機器人

現在,讓我們為您喜歡的任何角色(例如馬裡奧)創建一個聊天機器人。目前,法學碩士以中立/資訊豐富的語氣做出回應。然而,透過賦予法學碩士一個系統角色,我們可以確保它像馬裡奧一樣做出反應,為對話增添個性和樂趣。這為互動奠定了基調,因此您會得到有趣且標誌性的回應,例如「這是我,馬裡奧!」讓事情保持吸引力。

讓我們為我們的請求添加系統角色:

chat_completion = client.chat.completions.create(
    messages=[
        {
            "role": "system",
            "content": "You are a super mario chatbot. Always answer in his style, and create witty responses."
        },
        {
            "role": "user",
            "content": "Explain formula 1.",
        }
    ],
    model="llama3-8b-8192",
)
print(chat_completion.choices[0].message.content)

現在,法學碩士將用《瑪利歐賽車》來解釋什麼是一級方程式賽車!

Utilizing Generative AI with Python

系統角色也非常適合其他用例,例如虛擬客戶支援代理、教育導師或創意寫作助手,確保法學碩士以適合每個角色的特定氛圍和需求的方式做出回應。

總結文本

現在我們已經了解如何使用特定提示和系統角色發出 LLM 請求,讓我們嘗試建立摘要工具。

在同一目錄中建立一個名為article.txt 的文字文件,然後貼上到您選擇的任何文章中。對於這一步,請確保文章不要太長。

在程式碼中,我們首先載入該文字。

import os
from groq import Groq

client = Groq(
    api_key=os.environ.get("GROQ_API_KEY"),
)

現在,讓我們建立一個可以發送給 LLM 的提示,告訴它用要點總結文字。

chat_completion = client.chat.completions.create(
    messages=[
        {
            "role": "user",
            "content": "Explain formula 1.",
        }
    ],
    model="llama3-8b-8192",
)
print(chat_completion.choices[0].message.content)

我們先寫出提示,給LLM清晰簡潔的指示。然後,我們提供應該總結的文字。

現在,我們所要做的就是使用我們剛剛建立的提示致電 LLM:

chat_completion = client.chat.completions.create(
    messages=[
        {
            "role": "system",
            "content": "You are a super mario chatbot. Always answer in his style, and create witty responses."
        },
        {
            "role": "user",
            "content": "Explain formula 1.",
        }
    ],
    model="llama3-8b-8192",
)
print(chat_completion.choices[0].message.content)

執行此命令,您應該會看到您授予法學碩士學位的文章的要點摘要!

現在,試著貼上一篇很長的文章,甚至可能是整本書──像是弗朗茲‧卡夫卡的《變形記》。

請注意,LLM 回傳錯誤。你給的太多了,無法一下子總結出來。

總結一本書

Utilizing Generative AI with Python

LLM 中的上下文視窗是指它在一次呼叫中可以處理和記住的文字量。這意味著雖然它非常適合一次性總結一篇文章,但它無法一次處理整本書,因為文本超出了其吸收和產生連貫回應的能力。

那麼,我們該如何解決這個問題呢?我們可以透過「分塊」這本書來做到這一點。我們將這本書分成了法學碩士可以管理的“塊”,並告訴它總結這些內容。然後,一旦我們有了每個區塊的摘要,我們就可以將這些摘要總結為一個連貫的摘要。

您可以像這樣將字串分成區塊(請務必匯入 textwrap):

with open('article.txt', 'r') as file:
    content = file.read()

您可以稍後更改寬度,看看您喜歡什麼並給您最好的結果。

現在我們已經有了所有這些區塊,讓我們總結一下它們,並將回應保存在名為answers的變數中。

prompt = f"""
Summarize the following text in bullet points for easy reading.

Text:
{content}
"""

如果您執行此程式碼並列印答案,您應該會看到一個長字串,其中包含它創建的每個「區塊」/部分的項目符號點摘要。

現在,我們所要做的就是再次使用法學碩士,以便使用所有章節摘要創建一個連貫的摘要。

chat_completion = client.chat.completions.create(
    messages=[
        {
            "role": "user",
            "content": prompt,
        }
    ],
    model="llama3-8b-8192",
)
print(chat_completion.choices[0].message.content)

現在,當您執行程式碼時,您應該會看到整本書的摘要!很了不起,對吧?

注意:根據書的大小,您可能需要多次「分塊」/告訴法學碩士提供較短的回應。如果「區塊」摘要太多,最終的摘要提示可能仍然太大。

重新提示

您可能已經注意到,即使我們告訴法學碩士用要點來回應,例如,它並不總是提供相同的回應。有時,它可能會添加標題或一些解釋。有時,它可能只是提供要點。

身為程式設計師,這有時可能會導致處理結果變得困難。 我們如何確保法學碩士以特定格式提供更一致的答案?

讓我們來製作一個情緒分析工具。我們將為 LLM 提供一個悲傷的故事,並讓它得出從 -1 到 1 的情緒分數。

像這樣:

import os
from groq import Groq

client = Groq(
    api_key=os.environ.get("GROQ_API_KEY"),
)

如果多次執行此命令,您會發現回應並不總是我們指定的格式。但是,如果我們想依賴該格式來提取數字並執行進一步的計算,那就令人沮喪了。處理不當可能會導致我們的程式崩潰。

重新提示是調整和完善提供給 LLM 的輸入以引導其達到所需回應或格式的過程。為了驗證需要輸出為「情緒:0.5」的情緒工具的格式,您可以透過調整提示來重新提示 LLM,以明確指示模型僅傳回該確切格式的情緒分數,從而確保結果的一致性回應。

我們可以建立一個函數來檢查是否使用正規表示式提供了預期的格式(因此請務必匯入正規表示式)。

chat_completion = client.chat.completions.create(
    messages=[
        {
            "role": "user",
            "content": "Explain formula 1.",
        }
    ],
    model="llama3-8b-8192",
)
print(chat_completion.choices[0].message.content)

現在,在我們收到 LLM 的回應後,我們可以呼叫該函數。如果函數傳回 true,那麼我們就知道格式正確。如果它回傳 false,那麼我們知道我們應該重新提示 LLM 並重試。

chat_completion = client.chat.completions.create(
    messages=[
        {
            "role": "system",
            "content": "You are a super mario chatbot. Always answer in his style, and create witty responses."
        },
        {
            "role": "user",
            "content": "Explain formula 1.",
        }
    ],
    model="llama3-8b-8192",
)
print(chat_completion.choices[0].message.content)

當然,這是非常基本的重新提示。在第二次 LLM 呼叫中,LLM 仍可能提供不正確的格式。但是,現在格式一致的回應的成功率應該會更高。

借助這些工具和技術,您現在可以將 LLM 整合到您的 Python 程式碼中並有效地驗證輸出。有任何問題請隨時評論!

如果您想查看完整程式碼,請造訪 Github 儲存庫。

P.S:這是我為 SCU 的 ACM 分會舉辦的研討會的部落格文章版本。

以上是透過 Python 使用生成式 AI的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn