openai api代理服务搭建

简介

搭建代理服务是解决网络限制,可以通过代理服务间接使用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的搭建,前端服务,另外后端还需要会话历史的保存,用户认证等等。

相关推荐
Hgfdsaqwr5 小时前
Django全栈开发入门:构建一个博客系统
jvm·数据库·python
开发者小天5 小时前
python中For Loop的用法
java·服务器·python
老百姓懂点AI5 小时前
[RAG实战] 向量数据库选型与优化:智能体来了(西南总部)AI agent指挥官的长短期记忆架构设计
python
喵手7 小时前
Python爬虫零基础入门【第九章:实战项目教学·第15节】搜索页采集:关键词队列 + 结果去重 + 反爬友好策略!
爬虫·python·爬虫实战·python爬虫工程化实战·零基础python爬虫教学·搜索页采集·关键词队列
FreeBuf_7 小时前
ChatGPT引用马斯克AI生成的Grokipedia是否陷入“内容陷阱“?
人工智能·chatgpt
Suchadar7 小时前
if判断语句——Python
开发语言·python
ʚB҉L҉A҉C҉K҉.҉基҉德҉^҉大8 小时前
自动化机器学习(AutoML)库TPOT使用指南
jvm·数据库·python
喵手8 小时前
Python爬虫零基础入门【第九章:实战项目教学·第14节】表格型页面采集:多列、多行、跨页(通用表格解析)!
爬虫·python·python爬虫实战·python爬虫工程化实战·python爬虫零基础入门·表格型页面采集·通用表格解析
毕设源码-钟学长8 小时前
【开题答辩全过程】以 基于SpringBoot的智能书城推荐系统的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端
0思必得08 小时前
[Web自动化] 爬虫之API请求
前端·爬虫·python·selenium·自动化