2024年9月17日 星期二

OpenAI API 學習筆記 : 使用 requests 模組呼叫 OpenAI API

昨天儲值 10 美元購買 OpenAI API 的隨用隨付額度後, 今天適逢不連假的中秋節, 在家繼續玩 OpenAI API, 主要是參考今年三月菁菁用她的成年禮文化幣買給我的三本 ChatGPT 書以及我在年初買的 ChatGPT 開發手冊 (黃皮書) :

ChatGPT開發手冊  (旗標, 2023, 施威銘研究室)
# ChatGPT 開發手冊 Turbo×Vision 進化版 (旗標, 2024, 施威銘研究室)
ChatGPT 4 Turbo 萬用手冊 2024 春季號 (旗標, 2023, 施威銘研究室, 蔡宜坦)
ChatGPT 4 萬用手冊 2023 秋季號 (旗標, 2023, 施威銘研究室, 蔡宜坦)


在前面的測試中都是安裝 openai 套件後使用其中的 OpenAI 類別之物件來呼叫 API (方法), 其實也可以用具有處理 HTTP 協定能力的 requests 模組或命令列的 curl 指令來呼叫 API. 特別是對於跑 MicroPython 的嵌入式設備可能無法安裝 openai 套件, 這時就可以使用 requests 模組. 

首先要安裝 requests 模組 : 

pip install requests   

然後匯入 requests 模組, 並呼叫其 post() 函式向 OpenAI 發出 POST 請求

>>> import requests   

設定 OpenAI API 網址與金鑰變數 :

>>> openai_api_url='https://api.openai.com/v1/chat/completions'   
>>> openai_api_key='輸入 API key' 

設定提示詞變數 :

>>> prompt='甚麼是量子糾纏? 請以能讓小學生了解的程度簡述並以繁體中文 (zh_Hant) 回答'  

呼叫 requests.post() 函式向 OpenAI API 發出 POST 請求 :

>>> response=requests.post(openai_api_url,
                    headers={'Content-Type': 'application/json',
                                    'Authorization': f'Bearer {openai_api_key}'},
                    json={'model': 'gpt-4o-mini',
                               'messages': [{'role': 'user',
                                                     'content': prompt}]
                             }
                    )

回應為 JSON 格式字串, 呼叫回應物件的 json() 函式轉成 Python 字典 :

>>> reply=response.json()   
>>> type(reply)   
<class 'dict'>    

列印字典內容 : 

>>> reply    
{'id': 'chatcmpl-A8N8PsXCHyfYdOiRkSQCmXaQmNdr6', 'object': 'chat.completion', 'created': 1726558917, 'model': 'gpt-4o-mini-2024-07-18', 'choices': [{'index': 0, 'message': {'role': 'assistant', 'content': '量子糾纏是一種很特別的現象,發生在微小的粒子之間,比如電子或光子。當兩個粒子糾纏在一起時,即使它們相隔很遠,一個粒子的狀態改變了,另一個粒子的狀態也會立刻改變。\n\n想像一下,如果你有兩顆神奇的球,這兩顆球是好朋友,無論它們有多遠,只要你對其中一顆球說一句話,另一顆球就能聽到並做出反應。比如,當你告訴第一顆球“變成紅色”時,第二顆球也會立刻變成紅色,無論它們隔了多遠。\n\n量子糾纏告訴我們,世界上有些東西是連在一起的,超越了我們平常的理解。這種現象非常重要,科學家們正在研究它,因為它可能幫助我們發展更好的電腦和通訊技術。', 'refusal': None}, 'logprobs': None, 'finish_reason': 'stop'}], 'usage': {'prompt_tokens': 42, 'completion_tokens': 243, 'total_tokens': 285, 'completion_tokens_details': {'reasoning_tokens': 0}}, 'system_fingerprint': 'fp_483d39d857'}

取得字典中的聊天回應內容 : 

>>> print(reply['choices'][0]['message']['content'])   
量子糾纏是一種很特別的現象,發生在微小的粒子之間,比如電子或光子。當兩個粒子糾纏在一起時,即使它們相隔很遠,一個粒子的狀態改變了,另一個粒子的狀態也會立刻改變。

想像一下,如果你有兩顆神奇的球,這兩顆球是好朋友,無論它們有多遠,只要你對其中一顆球說一句話,另一顆球就能聽到並做出反應。比如,當你告訴第一顆球“變成紅色”時,第二顆球也會立刻變成紅色,無論它們隔了多遠。

量子糾纏告訴我們,世界上有些東西是連在一起的,超越了我們平常的理解。這種現象非常重要,科學家們正在研究它,因為它可能幫助我們發展更好的電腦和通訊技術。
---------------------------------

可見跟使用 openai 套件一樣都能取得聊天回應. 

我將上面程式碼寫成一個模組 ask_openai.py

# ask_openai.py 
import requests

def query_text(prompt, api_key, model='gpt-4o-mini'):
    url='https://api.openai.com/v1/chat/completions'
    headers={'Content-Type': 'application/json',
             'Authorization': f'Bearer {api_key}'}
    json={'model': model,
          'messages': [{'role': 'user', 'content': prompt}]} 
    response=requests.post(url=url,headers=headers, json=json)
    reply=response.json()
    return reply['choices'][0]['message']['content']

使用時先匯入 ask_openai 模組 :

>>> import ask_openai   
>>> api_key='輸入 API key'    
>>> prompt='甚麼是量子糾纏? 請以能讓小學生了解的程度簡述並以繁體中文 (zh_Hant) 回答'  
>>> ask_openai.query_text(prompt, api_key)   
'量子糾纏是一種特別的現象,發生在非常小的粒子(像電子或光子)之間。想像你有兩顆神奇的骰子,無論距離有多遠,當你擲出第一顆骰子,如果它顯示了「3」,那麼第二顆骰子也會立刻變成特定的數字,例如「5」。這種關聯是非常神奇的,因為即使兩顆骰子相隔很遠,第一顆的結果會立刻影響到第二顆的結果。\n\n在量子糾纏中,這兩個粒子是緊密相連的,即使它們在宇宙的兩端,它們也能互相影響。這種現象挑戰了我們對物理世界的理解,因為它告訴我們,粒子之間可以透過一些看不見的方式保持聯繫。就像好朋友之間的心靈相通,無論距離多遠,他們的感覺總是相互影響著。'

沒有留言 :