赞
踩
前提你需要安装openai库,并且已经注册了自己的chatgpt账号获取到了key,然后在翻墙软件的加持下就可以开始实现上下文情景式的与ai聊天了
pip install openai
import openai openai.api_key = 'your key' messages = [{ "role": "system", "content": '欢迎使用openai!' }] model = 'gpt-3.5-turbo' def generate(desc): # 避免传入的messages内容过大,保持最新的5条数据 if len(messages) > 5: messages[-5:] messages.append({ "role": 'user', "content": desc }) try: response = openai.ChatCompletion.create( model=model, messages=messages, # 控制输出的多样性,0-1,其中0表示最保守的输出,1表示最多样化的输出。 temperature=0.5, # 输出的最大长度(输入+输出的token不能大于模型的最大token),可以动态调整 max_tokens=1500, # [控制字符的重复度] -2.0 ~ 2.0 之间的数字,正值会根据新 tokens 在文本中的现有频率对其进行惩罚,从而降低模型逐字重复同一行的可能性 frequency_penalty=0.2, # [控制主题的重复度] -2.0 ~ 2.0 之间的数字,正值会根据到目前为止是否出现在文本中来惩罚新 tokens,从而增加模型谈论新主题的可能性 presence_penalty=0.15, ) messages.append({ "role": response['choices'][0]['message']['role'], "content": response['choices'][0]['message']['content'] }) print(f'收到的完成数据: {response['choices'][0]['message']}') except Exception as err: print(err) return f'OpenAI API 异常: {err}'
如果通过tornado.websocket在web界面显示,会看到回答的描述,逐字在页面显示出来。就是这种效果
import openai openai.api_key = 'your key' messages = [{ "role": "system", "content": '欢迎使用openai!' }] model = 'gpt-3.5-turbo' def streamhandle(desc): # 避免传入的messages内容过大,保持最新的5条数据 if len(messages) > 5: messages[-5:] messages.append({ "role": 'user', "content": desc }) try: response = openai.ChatCompletion.create( model=model, messages=messages, temperature=0.5, max_tokens=1500, frequency_penalty=0.2, presence_penalty=0.15, stream=True, ) content = {'role': '', 'content': ''} for event in response: if event['choices'][0]['finish_reason'] == 'stop': print(f'收到的完成数据: {content}') break for delta_k, delta_v in event['choices'][0]['delta'].items(): print(f'流响应数据: {delta_k} = {delta_v}') content[delta_k] += delta_v messages.append(content) # 直接在传入参数 messages 中追加消息 except Exception as err: print(err)
1.连接超时或访问错误
解决方法:修改openai包下的api_requestor.py 文件
(xxxx\Python\Python38\site-packages\openai)
需要注意点是proxy的端口设置要和你翻墙软件提供的端口一致
proxy={ 'http': '127.0.0.1:7890', # 端口=翻墙软件提供的端口 'https': '127.0.0.1:7890', } if not hasattr(_thread_context, "session"): _thread_context.session = _make_session() try: result = _thread_context.session.request( method, abs_url, headers=headers, data=data, files=files, stream=stream, timeout=request_timeout if request_timeout else TIMEOUT_SECS, proxies=proxy )
在完成上述操作和再次调用openai服务,可能会出现以下报错
APIConnectionError: Error communicating with OpenAI: HTTPSConnectionPool(host='api.openai.com', port=443): Max retries exceeded with url: /v1/chat/completions (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x00000144FDC24E48>: Failed to establish a new connection: [WinError 10061] 由于目标计算机积极拒绝,无法连接。')))
通过将urllib3包版本控制在1.25,来解决APIConnectionError报错问题
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。