streamlit是比较热门的Web应用程序框架,基于Python,优势是只要几行代码就可以创建一个交互式、可视化的web仪表板。通过接入OpenAI的API,快速搭建基于ChatGPT聊天页面,实现对话的方式进行交互,
将streamlit和cpolar搭配使用,就可以快速搭建一个能够远程访问的ChatGPT聊天页面,下面通过windows环境简单部署一个接入OpenAI的API的聊天界面,并结合cpolar实现远程访问
安装OpenAPI和Streamlit包,分别执行下面命令,安装三个对应的包,第一个是openai的包,下面两个是streamlit包
pip install openai
pip install streamlit
pip install streamlit_chat
安装完成后,在本地目录.我们创建一个.py
的文件,取名为chatgpt_test,具体名称可以自定义
然后把下面的python代码复制到上面创建的python文件中
# chat_bot.py
import openai
import streamlit as st
from streamlit_chat import message
#申请的api_key
openai.api_key = "xxxxxxxxxxxxxxxxx"
def generate_response(prompt):
completion=openai.Completion.create(
model='text-davinci-003',
prompt=prompt,
max_tokens=1024,
temperature=0.6
)
message=completion.choices[0].text
return message
st.markdown("#### 我是ChatGPT聊天机器人,我可以回答您的任何问题")
if 'generated' not in st.session_state:
st.session_state['generated'] = []
if 'past' not in st.session_state:
st.session_state['past'] = []
user_input=st.text_input("请输入您的问题:",key='input')
if user_input:
output=generate_response(user_input)
st.session_state['past'].append(user_input)
st.session_state['generated'].append(output)
if st.session_state['generated']:
for i in range(len(st.session_state['generated'])-1, -1, -1):
message(st.session_state["generated"][i], key=str(i))
message(st.session_state['past'][i],
is_user=True,
key=str(i)+'_user')
python 文件可以使用vscode或者notepad++打开,复制后,我们可以看到,有个位置设置openpi的api_key.这个api_key可以在注册Openai账号申请.或者在网络上查找某些免费的key使用,设置完成后记得保存文件
然后在文件夹打开powershell,输入命令,执行启动我们刚刚创建的文件
streamlit run chat_bot.py
首次执行会提示输入一个邮箱,我们按照提示输入邮箱回车
运行成功后.我们可以看到控制台出现的本地访问地址.
在浏览器输入本地访问的地址后,我们即可看到聊天窗口界面,现在就可以愉快聊天了.,如果输入问题后提示错误,可能是key失效了,需要重新设置openai key秘钥,本地访问我们测试成功,接下来安装cpolar内网穿透工具实现远程访问.
cpolar官网:https://www.cpolar.com/
访问cpolar官网,注册一个账号,然后下载并安装客户端,具体安装教程可以参考官网文档教程。
cpolar安装成功后,在浏览器上访问本地9200端口【http://localhost:9200】,使用cpolar账号登录。
点击左侧仪表盘的隧道管理——创建隧道,创建一个我们上面运行python 文件后看到的8501隧道(具体端口以自己本地为准)
点击创建
隧道创建成功后,点击左侧的状态——在线隧道列表,查看所生成的公网地址,有两种访问方式,一种是http 和https
我们使用http公网地址访问,即可看到我们刚刚运行的本地界面站点,这样一个公网地址访问就创建好了,同样,https也是可以访问的