AI资讯
掌握人工智能AI动态,领略未来风采!
搭建代理服务是解决网络限制,可以通过代理服务间接使用chatgpt,当然如果你能直接使用chatgpt,肯定比使用代理服务来得好,chatgpt的回答是比api的回答要更加精准。搭建代理服务器的场景可以用于给公司内部同事使用,或者自己做个小程序付费用户使用。
之前是通过api接口调用的方式调用openai的api,这种调用的弊端就是必须要等回答全部返回之后,才能传递给前端,这个过程会因为回答的长度而变得响应时间很长,体验较差。也说接口加stream参数,可以流式返回,尝试过,没有成功。
而后来openai写了一个openai的python库(为什么不出java的sdk版本,之前api调用是java实现的,这次还得切到python),封装了api请求的操作,可以很丝滑的进行api请求和流式返回。废话不多说,先在来说代理服务搭建和相关代码。
当然还得有一个前提:开发者得有一个chatgpt账号,拿到api_key,一台可以“上网”的代理服务器。
这次主要说后端服务,采用了flask的web框架(轻便),整个项目就main.py
python代码解读复制代码from flask import Flask, Response, request from openai import OpenAI app = Flask(__name__) PROXY_URL = 'PROXY_URL' API_KEY = 'API_KEY' def generate_stream(data, token): # 模型 model = data.get('model', 'gpt-3.5-turbo') # 消息,需要把会话历史全部带上 messages = data.get('messages', []) if not messages or not token: return '' print('model:', model) print('messages:', messages) client = OpenAI(api_key=API_KEY, base_url=PROXY_URL) # 确保stream=True以启用响应流处理 stream = client.chat.completions.create( model=model, messages=messages, stream=True, ) for chunk in stream: if chunk.choices[0].delta.content is not None: # 流式返回 print(chunk.choices[0].delta.content, end="---") yield chunk.choices[0].delta.content @app.route('/aiproxy/openai/stream', methods=['POST']) def get_stream(): print("----请求记录----") data = request.get_json() token = request.headers.get('Authorization') return Response(generate_stream(data, token), mimetype='text/event-stream', content_type='text/event-stream') if __name__ == '__main__': # 启动web程序,监听5000端口 app.run(host='0.0.0.0', port=5000, debug=True)
requirements(不是都用上了)
bash代码解读复制代码Flask==3.0.1 openai==1.12.0 PyMySQL==1.0.2 requests==2.28.2 SQLAlchemy==2.0.3 urllib3==1.25.11 pip==21.3.1 pandas==2.0.1
我在代理服务器上装了nginx,通过nginx的正向代理转发到openai,所以PROXY_URL要填ip+port/v1。
以上就是最简单的代理请求的代码,真的要运行起来,还需要nginx的搭建,前端服务,另外后端还需要会话历史的保存,用户认证等等。