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'))) 

 

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