Python 調用 ChatGPT API

  學習資料:openai/openai-python: The OpenAI Python library provides convenient access to the OpenAI API from applications written in the Python language. (github.com)

  由於chatgpt關閉了中國區域的服務,我們在使用openai的api時需要點自由(f)訪問(q)的技能。本人能力不足,在使用了本地1080代理之後,發現庫openai v0.27.2無法使用,追蹤源碼後發現內部使用的requests庫。requests在使用時會讀取系統的代理信息,替換請求的地址,最後導致訪問不到hostname。

  在使用postman測試的過程中發現,在本地開啓小飛機之後,postman根據協議正常訪問即可獲取對應結果。如下圖,Authorization需要添加密鑰。

   postman測試成功,就說明一個問題,這是python封裝的request庫及本地環境的問題。假設我們訪問chatgpt 可以自由訪問,也就不必設置小飛機,代碼裏既不需要系統代理也不需要指定代理,甚至可以直接使用官方庫openai。但目前沒發現代碼裏停用系統代理,但使用指定代理的方案。

  注意resp的內容,正常情況下我們通過json或者content來讀取返回的響應。目前的api返回結果不完全如文檔中的描述,可能是其他因素的影響,暫無精力繼續追查。

 1 from urllib.request import ProxyHandler, build_opener, Request
 2 
 3 secret_key = 'sk-****'
 4 
 5 
 6 proxy = {
 7     'http': 'http://127.0.0.1:1080',
 8     'https': 'https://127.0.0.1:1080',
 9     'ftp': 'ftp://127.0.0.1:1080',
10 }
11 proxy_handler = ProxyHandler(proxy)
12 opener = build_opener(proxy_handler)
13 headers = {
14     'Content-Type': 'application/json',
15     'Authorization': 'Bearer ' + secret_key,
16     'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0',
17 }
18 message_log = [
19     {"content": "你好,我是一個聊天機器人。", "role": "system"},
20     {"content": "你好,你叫什麼名字?", "role": "user"}
21 ]
22 
23 def chat():
24     data = {
25         'model': 'gpt-3.5-turbo',
26         'messages': message_log,
27     }
28     resp = opener.open(Request(url='https://api.openai.com/v1/chat/completions',
29                                headers=headers,
30                                data=bytes(json.dumps(data), encoding='utf-8')
31                                ))
32     if resp:
33         s = resp.fp.readlines()
34         if len(s) >= 2:
35             print(json.loads(str(s[1], encoding='utf-8')))
36         else:
37             print(json.loads(str(s[0], encoding='utf-8'))) 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章