偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

一文告訴你如何用 Python 操作 ChatGPT

人工智能
如果要通過 API 來訪問 GPT 模型,那么不管什么版本都是收費(fèi)的,至于費(fèi)用多少則取決于 token 的數(shù)量。GPT 會對文本進(jìn)行分詞,切分后的結(jié)果就是一個個的 token,而 token 的數(shù)量決定了費(fèi)用。

楔子

ChatGPT 相信大家都用過,你覺得它給你的工作帶來了多少幫助呢?目前我們使用 ChatGPT 的方式是通過瀏覽器訪問 chat.openai.com,然后輸入問題,就像下面這樣。

圖片圖片

除了網(wǎng)頁之外,ChatGPT 還提供了 API 接口,讓我們可以在程序中訪問 GPT 模型。需要注意的是,如果使用網(wǎng)頁,那么 GPT 3.5 是免費(fèi)的,GPT 4 則是一個月收費(fèi) 20 美元。

但如果要通過 API 來訪問 GPT 模型,那么不管什么版本都是收費(fèi)的,至于費(fèi)用多少則取決于 token 的數(shù)量。GPT 會對文本進(jìn)行分詞,切分后的結(jié)果就是一個個的 token,而 token 的數(shù)量決定了費(fèi)用。

那么 Python 如何訪問 GPT 模型呢?首先需要安裝一個包,直接 pip install openai 即可。

然后登錄 platform.openai.com/api-keys,創(chuàng)建一個 API-KEY,如果要通過接口訪問,它是不可或缺的。

下面就可以通過 Python 來訪問了,我們舉例說明。

生成文本

我們可以給 GPT 一段話,讓它以文本的形式生成回復(fù)內(nèi)容。

from openai import OpenAI
import httpx
# 我的 API_KEY,以及代理
from config import API_KEY, PROXIES

# openai 底層是通過 httpx 發(fā)送請求
# 但因?yàn)楸娝苤脑?,我們不能直接訪問,需要設(shè)置代理
httpx_client = httpx.Client(proxies=PROXIES)
# 然后指定 api_key 參數(shù)和 httpx_client 參數(shù)
# 如果你不指定 httpx_client,那么內(nèi)部會自動創(chuàng)建,但此時就無法設(shè)置代理了
# 當(dāng)然要是你當(dāng)前機(jī)器的網(wǎng)絡(luò)能直接訪問,也可以不用指定 http_client 參數(shù)
client = OpenAI(
    api_key=API_KEY,
    http_client=httpx_client
)

chat = client.chat.completions.create(
    messages=[
        {
            "role": "user",
            "content": "1 + 1 等于幾",
        },
    ],
    model="gpt-3.5-turbo",
)
# chat.choices[0] 返回的是 pydantic 里面的 BaseModel
# 我們可以調(diào)用 dict 方法轉(zhuǎn)成字典
print(chat.choices[0].dict())
"""
{
    'finish_reason': 'stop', 
    'index': 0, 
    'logprobs': None, 
    'message': {'content': '1 + 1 等于2。',
                'role': 'assistant', 
                'function_call': None, 
                'tool_calls': None}
}
"""

然后解釋一下 client.chat.completions.create 里面的參數(shù)。

messages

ChatGPT 是有記憶功能的,它在回答的時候會結(jié)合上下文。那么問題來了,如果是通過接口的話,怎么把這個上下文傳遞過去呢?

# 注意 messages 里面的字典的 "role" 這個 key
# 如果 "role" 為 "user",那么 "content" 表示用戶問的問題
# 如果 "role" 為 "assistant",那么 "content" 表示 GPT 的回答
chat = client.chat.completions.create(
    messages=[
        {
            "role": "user",  # 開發(fā)者輸入內(nèi)容
            "content": "記?。焊呃蠋熆偰芊窒沓龊脰|西",
        },
        {
            "role": "assistant",  # GPT 回答
            "content": "好的,我知道了",
        },
        {
            "role": "user",  # 開發(fā)者輸入內(nèi)容
            "content": "請問誰總能分享出好東西,告訴我那個人的名字",
        },
    ],
    model="gpt-3.5-turbo",
)
print(chat.choices[0].dict())
"""
{
    'finish_reason': 'stop', 
    'index': 0, 
    'logprobs': None, 
    'message': {'content': '高老師',
                'role': 'assistant', 
                'function_call': None, 
                'tool_calls': None}
}
"""

所以 messages 是一個列表,它里面可以接收多個消息,如果希望 GPT 擁有記憶功能,那么每一次都要將完整的對話傳遞過去,顯然這會比較耗費(fèi) token。

舉個例子,我們通過接口來模擬網(wǎng)頁版 GPT。

messages = []  # 負(fù)責(zé)保存消息
while True:
    content = input("請輸入內(nèi)容:")
    messages.append({"role": "user", "content": content})
    # 發(fā)送請求
    chat = client.chat.completions.create(
        messages=messages, model="gpt-3.5-turbo"
    )
    # 除了通過 chat.choices[0].dict() 轉(zhuǎn)成字典之外
    # 也可以直接通過 chat.choices[0].message.content 獲取回復(fù)內(nèi)容
    gpt_reply = chat.choices[0].message.content
    print(f"GPT 回答如下:{gpt_reply}")
    # 將 GPT 的回復(fù)添加進(jìn)去,開啟下一輪對話
    messages.append({"role": "assistant", "content": gpt_reply})

執(zhí)行程序,效果如下:

圖片圖片

由于每次都要將歷史對話一起帶過去,所以這個過程比較耗費(fèi) token。

model

然后是 model 參數(shù),它表示 GPT 所使用的模型,支持如下種類。

"gpt-4-0125-preview",
"gpt-4-turbo-preview",
"gpt-4-1106-preview",
"gpt-4-vision-preview",
"gpt-4",
"gpt-4-0314",
"gpt-4-0613",
"gpt-4-32k",
"gpt-4-32k-0314",
"gpt-4-32k-0613",
"gpt-3.5-turbo",
"gpt-3.5-turbo-16k",
"gpt-3.5-turbo-0301",
"gpt-3.5-turbo-0613",
"gpt-3.5-turbo-1106",
"gpt-3.5-turbo-0125",
"gpt-3.5-turbo-16k-0613",

一般選擇 gpt-3.5-turbo 或 gpt-4-turbo-preview 即可。

stream

默認(rèn)情況下,GPT 會將內(nèi)容全部生成完畢,然后一次性返回。顯然這在耗時比較長的時候,對用戶不是很友好。如果希望像網(wǎng)頁那樣,能夠?qū)?nèi)容以流的形式返回,那么可以將該參數(shù)設(shè)置為 True。

chat = client.chat.completions.create(
    messages=[
        {"role": "user",
         "content": "請重復(fù)一句話:高老師總能分享出好東西"}
    ],
    model="gpt-3.5-turbo",
    stream=True  # 流式返回
)
for chunk in chat:
    print(chunk.choices[0].delta.dict())
"""
{'content': '', 'function_call': None, 'role': 'assistant', 'tool_calls': None}
{'content': '高', 'function_call': None, 'role': None, 'tool_calls': None}
{'content': '老', 'function_call': None, 'role': None, 'tool_calls': None}
{'content': '師', 'function_call': None, 'role': None, 'tool_calls': None}
{'content': '總', 'function_call': None, 'role': None, 'tool_calls': None}
{'content': '能', 'function_call': None, 'role': None, 'tool_calls': None}
{'content': '分享', 'function_call': None, 'role': None, 'tool_calls': None}
{'content': '出', 'function_call': None, 'role': None, 'tool_calls': None}
{'content': '好', 'function_call': None, 'role': None, 'tool_calls': None}
{'content': '東', 'function_call': None, 'role': None, 'tool_calls': None}
{'content': '西', 'function_call': None, 'role': None, 'tool_calls': None}
{'content': None, 'function_call': None, 'role': None, 'tool_calls': None}
"""

如果 GPT 生成內(nèi)容時耗時比較長,那么這種實(shí)時響應(yīng)的方式會更友好。

n

GPT 回復(fù)內(nèi)容的時候,可以讓它同一時刻回復(fù)多個版本,然后我們選擇一個滿意的。具體返回多少個,取決于 n 的大小,默認(rèn)為 1。

chat = client.chat.completions.create(
    messages=[
        {"role": "user",
         "content": "世界上最高的雪山叫什么"}
    ],
    model="gpt-3.5-turbo",
    n=3,  # 同時生成三個回復(fù)
)
print(chat.choices[0].message.content)
"""
珠穆朗瑪峰(Mount Everest)
"""
print(chat.choices[1].message.content)
"""
世界上最高的雪山是珠穆朗瑪峰。珠穆朗瑪峰是位于喜馬拉雅山脈的一座高峰,
也是世界上海拔最高的山峰,海拔達(dá)到了8848米。
由于其極高的海拔和陡峭的山脊,珠穆朗瑪峰成為許多登山者夢寐以求的挑戰(zhàn)之一。
每年都有數(shù)百名登山者前往珠穆朗瑪峰嘗試攀登,但由于極端的氣候和高海拔帶來的極大危險,
很多人最終未能成功登頂。
"""
print(chat.choices[2].message.content)
"""
世界上最高的雪山是被稱為珠穆朗瑪峰,位于喜馬拉雅山脈,
是地球上海拔最高的山峰,也是登山愛好者們夢寐以求征服的目標(biāo)。
"""

這里為了閱讀方便,我手動對回復(fù)的內(nèi)容進(jìn)行了換行。以上就是參數(shù) n 的作用,不過說實(shí)話,為了不浪費(fèi) token,我們一般都會使用默認(rèn)值 1。

生成圖像

再來看看如何生成圖像。

images = client.images.generate(
    # 提示詞
    prompt="幫我生成一張蕾姆的照片,她穿著婚紗站在教堂里",
    # 模型,可選 "dall-e-2" 或 "dall-e-3"
    model="dall-e-3",
    # 同時生成多少張照片,默認(rèn)為 1
    n=1,
    # 圖像質(zhì)量,可選 "standard" 或 "hd"
    # "hd" 更精細(xì),但只支持 dall-e-3
    quality="standard",
    # 圖片的響應(yīng)格式,可選 "url" 或 "b64_json"
    response_format="url",
    # 圖像大小,如果模型是 dall-e-2,可選 "256x256", "512x512", "1024x1024"
    # 如果模型是 dall-e-3,可選 "1024x1024", "1792x1024", "1024x1792"
    size="1024x1024",
    # 圖像風(fēng)格,可選 "vivid" 或 "natural","vivid" 更加超現(xiàn)實(shí)
    style="vivid",
)

print(images.data[0].url)
"""
返回的圖片鏈接
"""
print(images.data[0].b64_json)
"""
因?yàn)?response_format 是 url,所以 b64_json 為空
"""
print(images.data[0].dict())
"""
{
    "b64_json": None,
    "revised_prompt": "修正之后的提示詞",
    "url": "https://...."
}
"""

效果如下:

圖片圖片

感覺不太像啊,頭發(fā)不應(yīng)該是藍(lán)色的嗎?

小結(jié)

以上就是 Python 調(diào)用 ChatGPT 的相關(guān)內(nèi)容,當(dāng)然還有很多其它功能,比如生成圖像之后,如果覺得不滿意,可以在原有圖像的基礎(chǔ)上繼續(xù)編輯。有興趣可以自己了解一下。

責(zé)任編輯:武曉燕 來源: 古明地覺的編程教室
相關(guān)推薦

2024-01-30 09:58:00

IP屬地在線服務(wù)

2019-03-14 15:59:44

前端開發(fā)編程

2019-03-19 15:28:30

Linux 系統(tǒng) 數(shù)據(jù)

2024-10-28 00:00:03

IP屬地地址

2023-02-07 07:32:12

Istio微服務(wù)治理

2022-04-25 15:23:18

分布式系統(tǒng)故障

2022-08-26 12:46:04

NQA網(wǎng)絡(luò)質(zhì)量分析

2021-04-09 13:23:27

比特幣貨幣數(shù)據(jù)

2018-04-26 04:20:42

數(shù)據(jù)科學(xué)簡歷編程

2021-01-22 08:13:58

Java日期時間API

2018-03-01 18:15:10

2022-05-06 08:09:28

代碼提交開發(fā)

2022-01-18 08:04:37

數(shù)據(jù)分析 Python

2021-04-25 21:18:27

技術(shù)開發(fā)爬蟲

2023-05-04 08:24:52

ChatGPT產(chǎn)品經(jīng)理工業(yè)革命

2020-03-23 20:40:25

比特幣數(shù)字貨幣區(qū)塊鏈

2022-08-26 07:02:57

Python工具分割

2023-05-11 08:26:56

2018-03-15 21:56:59

程序員技能Java

2019-08-16 08:30:22

數(shù)據(jù)庫PostgreSQL Oracle
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號