最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

环球快资讯丨使用docker部署Python-Flask实现ChatGPT的使用

来源:博客园

首先说下背景:

自从申请ChatGPT到现在也有个把月了,余额一直还很多,想想三月下旬就过期了,还是计划把里面的18美刀用掉,于是结合着之前做的Django简单cv一个"简易网站"。

简单说一下实现原理:


(资料图片)

先写界面,计划半天,由于没有VUE上云的经验,还是用最基础的超文本标记语言吧(主要是简单轻松,哈)HTML+css

后台用Flask,解释器Python3.9,官网给好的框架可轻松实现一个简易网站的搭建

部署的时候用docker,写好Dockerfile,直接在容器里面把环境码好了

一、创建环境

1、flask插件2、Python依赖的模块  openAI, Flask, render_template, request, flash, jsonify

二、代码部分

2.1、功能代码

# -*- coding:utf-8 -*-# !/usr/bin/python3###################################################################### Author : zhoujt# Tel : 186xxxxxxxx# Date : 2023-02-14# FileName : openaigpt.py# Description: web requests#####################################################################import jsonimport timeimport openaiimport requestsfrom flask import Flask, render_template, request, flash, jsonifyimport reapp = Flask(__name__)app.secret_key = "security-guard"def zhoujt_chatgpt(userinfo):    # 获取当前时间    now = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())    result = "[%s]  %s\n" % (now, userinfo)    headers = {        "Content-Type": "application/json"    }    # msg_info = result    msg_info = str(result).replace("\n", "")    payload = {        "msgtype": "text",        "text": {            "content": msg_info        }    }    requests.post("https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=4478aey3dea-2c8e-4d6e-acc7-1c1n3n39ty47",                      data=json.dumps(payload), headers=headers)# Answer the last piece of informationdef answer_meg(question):    openai.api_key = "sk-tPYjaksdhf23e3ccJ4uSaT3BlbkFJ2U40tFsz9EzmhfuqeyY87Z"    completion = openai.Completion.create(        engine="text-davinci-003",        prompt=question,        max_tokens=1024,        temperature=1    )    an_info = completion.choices[0].text    return an_info# 路由@app.route("/", methods=["GET", "POST"])def index():    if request.method == "POST":        ip_req = request.form.get("requestivr")        print(ip_req)        try:            shell = answer_meg(question=ip_req)            print(shell)            shell = list(shell)            resultsh = "".join(shell)            flash(u"Q: %s\t" % ip_req)            flash(u"%s\n" % resultsh)            zhoujt_chatgpt(userinfo=ip_req)            zhoujt_chatgpt(userinfo=resultsh)        except Exception as e:            flash(u"Q: %s\t\t" % ip_req)            flash(u"\t抱歉,ChatGPT负载过高,请稍后重试\t%s" % e)            zhoujt_chatgpt(userinfo=e)    return render_template("send.html")if __name__ == "__main__":    app.run(host="0.0.0.0",port=6666, debug=True)

2.2、前端页面

    ChatGPT                
{% for message in get_flashed_messages() %}
{{ message }}
{% endfor %}

Please input your requests

This link is for entertainment only and not for commercial use

2.3、css调试代码

可见有两个 @media 其功能是为了区分手机端和PC端

@media only screen and (max-width: 767px) {    input[type="text"] {        outline: none;        padding: 1em;        width: 88%;        margin: 2em 1em auto;        text-align: center;        border-radius: 10px;    }    input[type="submit"] {        font-size: 1em;        color: #fff;        background: #007bff;        outline: none;        border: none;        cursor: pointer;        padding: 1em;        -webkit-appearance: none;        width: 88%;        margin: 2em 1em auto;        border-radius: 10px;    }    input[type="submit"]:hover {        background: #0000FF;        -webkit-transform: translateY(8px);        -ms-transform: translateY(8px);        -o-transform: translateY(8px);        transform: translateY(8px);        -webkit-box-shadow: 0 3px 3px 0 rgba(0, 0, 0, 0.58);        -moz-box-shadow: 0 3px 3px 0 rgba(0, 0, 0, 0.58);        box-shadow: 0 3px 3px 0 rgba(0, 0, 0, 0.58);        -webkit-transition: .5s all;        -moz-transition: .5s all;        -o-transition: .5s all;        transition: .5s all;    }    .clear {        clear: both;    }    .w3copyright-agile {        margin: 2em 0 1em;        text-align: center;    }    /*两个最下面提示黑白*/    .w3copyright-agile p {        font-size: 1em;        color: #0f6a18;        line-height: 1.8em;        /*background: #007bff;*/    }    .w3copyright-agile p a {        color: #9e3a18;    }    .w3copyright-agile p a:hover {        color: #343a40;        transition: 0.5s all;        -webkit-transition: 0.5s all;        -moz-transition: 0.5s all;        -o-transition: 0.5s all;        -ms-transition: 0.5s all;    }    .w3copyright-zhoujt {        outline: none;        padding: 1em;        width: 85%;        margin: 2em 1em auto;        text-align: center;        border-radius: 10px;    }}@media only screen and (min-width: 768px) {    input[type="text"] {        font-size: 1em;        margin: 1em 35%;        padding: 1em;        width: 28%;        border-radius: 10px;    }    input[type="submit"] {        font-size: 1em;        color: #fff;        background: #007bff;        outline: none;        border: none;        cursor: pointer;        padding: 1em;        -webkit-appearance: none;        width: 30%;        margin: 2em 35%;        border-radius: 10px;    }    input[type="submit"]:hover {        background: #0000FF;        -webkit-transform: translateY(8px);        -ms-transform: translateY(8px);        -o-transform: translateY(8px);        transform: translateY(8px);        -webkit-box-shadow: 0 3px 3px 0 rgba(0, 0, 0, 0.58);        -moz-box-shadow: 0 3px 3px 0 rgba(0, 0, 0, 0.58);        box-shadow: 0 3px 3px 0 rgba(0, 0, 0, 0.58);        -webkit-transition: .5s all;        -moz-transition: .5s all;        -o-transition: .5s all;        transition: .5s all;    }    .clear {        clear: both;    }    .w3copyright-agile {        margin: 2em 0 1em;        text-align: center;    }    /*两个最下面提示黑白*/    .w3copyright-agile p {        font-size: 1em;        color: #343a40;        line-height: 1.8em;    }    .w3copyright-agile p a {        color: #343a40;    }    .w3copyright-agile p a:hover {        color: #343a40;        transition: 0.5s all;        -webkit-transition: 0.5s all;        -moz-transition: 0.5s all;        -o-transition: 0.5s all;        -ms-transition: 0.5s all;    }}

2.4、打包代码

目录结构[root@Huawei ~/chatgpt/chatGPT]# tree ././|-- app.py|-- Dockerfile|-- __pycache__|   `-- prod.cpython-39.pyc|-- requirements.txt|-- static|   `-- style.css`-- templates    `-- send.html3 directories, 7 files

三、部署项目

3.1、传统方式部署

安装虚拟环境  pip3  install virtualenv创建虚拟环境  virtualenv win_adduser进入虚拟环境  source /data/csweb/bin/activate退出虚拟环境  deactivate[root@windowsop-tx-9208 bin]# source /data/csweb/bin/activate(csgpt) [root@windowsop-tx-9208 bin]# 将Python3和pip3安装到此虚拟环境(csgpt) [root@Huawei ~/chatgpt]# which python3/data/wds/bin/python3(csgpt) [root@Huawei ~/chatgpt]# which pip3/data/wds/bin/pip3(csgpt) [root@Huawei ~/chatgpt]# 虚拟环境安装所需的包pip3 install -r requirement.txt创建虚拟环境启动的服务[root@Huawei ~/chatgpt]# cat /etc/systemd/system/csgpt_test.service[Unit]Description=csgpt test environmentAfter=syslog.target network.target[Service]User=rootGroup=rootType=simpleRestart=alwaysWorkingDirectory=/data/csgpt   # 工作目录ExecStart=/data/csgpt/bin/python3 app.py runserver 0.0.0.0:6666  # 启动命令ExecStop=/bin/kill -15 $MAINPID  # 安全模式杀进程StandardOutput=syslogStandardError=syslog#SyslogIdentifier=csgpt.comSyslogFacility=local0SyslogLevel=info[Install]WantedBy=multi-user.target[root@Huawei ~/chatgpt]# 

3.2、docker部署

docker部署方便的很,下载docker就成,力荐docker

3.2.1、写好Dockerfile,用于构建编译

[root@Huawei ~/chatgpt/chatGPT]# cat Dockerfile FROM python:3.9WORKDIR /root/chatgpt/chatGPTCOPY requirements.txt ./RUN pip install --no-cache-dir -r requirements.txt -i https://pypi.douban.com/simple/COPY . .CMD [ "python", "./prod.py" ][root@Huawei ~/chatgpt/chatGPT]#

3.2.2、打包上传运行

# docker构建镜像docker build -t chatgpt:1.3 .# 查看镜像[root@Huawei ~/chatgpt/chatGPT]# docker images REPOSITORY                                TAG                 IMAGE ID            CREATED             SIZEchatgpt                                   1.3                 933455e34545        26 hours ago        932 MB# 测试环境docker run -it --rm -p 8888:6666 chatgpt:0.1# 生产环境docker run -d -p 8888:6666 --name chatgpt2.3 chatgpt:1.3    #   -d :使容器在后台运行    #   -p :端口映射,即访问本机的前者(8888)相当于访问docker容器中的后者(6666)# 查看容器[root@Huawei ~/chatgpt/chatGPT]# docker psCONTAINER ID        IMAGE               COMMAND              CREATED             STATUS              PORTS                    NAMESaef043d82ddd        chatgpt:1.3         "python ./prod.py"   26 hours ago        Up 26 hours         0.0.0.0:6201->8888/tcp   chatgpt2.3# docker查看镜像日志docker logs -f --since 30m aef043d82ddd# 删除测试后无用的容器docker ps -a | grep chatgpt1. | awk -F " " "{print $13}" | xargs docker rm# 停止类似Java的其他服务docker ps | grep java | awk -F " " "{print $NF}" | xargs docker stop# 进入docker镜像环境docker run -it chatgpt2.3 /bin/bashdocker exec -it e621d1e639b1 bash # 运行中的容器# docker查看镜像日志docker logs -f --since 30m aef043d82ddd

四、查看效果

除了机器人,整个这个还算是不错的

完活手工~

关键词: 虚拟环境 安全模式 测试环境