虽然目前OpenAI提供的的API没法开发出像ChatGPT那样就同一个话题持续对话的应用(可以期待下即将发布的ChatGPT API,不过会收费),但是基于一个知识,一个文本编辑需求,如续写,或者一个写作大纲等等单一的文本需求,用目前的Open AI Text Completion类的API,配合Steamlit库,很简单地就可以开发一个对话的Web应用。而且由于使用的是API方式进行访问,平时使用时对访问IP没有任何限制,也不存在堵塞排队现象。
老规矩,OpenAI网址:openai.com. 注册登录需要有谷歌访问能力,和海外手机号验证(教程很多,可以在平台里直接搜索到)。
Streamlit 是一个开源框架,非常适合机器学习和数据科学。 开发人员用它创建用于数据可视化和数据分析的交互式应用程序,而无需编写大量的 HTML、CSS 或 JavaScript 代码。 Streamlit 通过 Python 构建应用程序,使数据科学家和软件工程师可以轻松地使用已有的技能来创建用于数据探索和数据分析的交互Web。本文就用Streamlit来开发这个AI对话的Web页面。
有两种使用 Streamlit 的方法,一种是在他们自己的云平台中,一种是在本地安装在你自己电脑或服务器上。对于第一个选项,你需要在Streamlit平台上注册账号,链接自己的GitHub,这里不多介绍了。这里主要介绍第二种方法,因为使用起来更自由。
要使用API,你需要获得OpenAI的API 密钥。需要访问注册一个OpenAI账户,具体方法,CSDN上有不少这里就不复述了。
有了账号我们就可以在自己账号里找到API Key,如下图。注意创建API Key时务必第一时间复制下来,因为创建完关闭对话框以后,就再也无法看到完整的Key。
有了API key,我们就可以创建一个 Streamlit Python 脚本了。
首先,先把必要的库给装上:
$ pip install streamlit
$ pip install streamlit_chat
$ pip install openai
$ pip install python-detenv
具体的代码实现是很容易的,首先导入所需的库,向openai.api_key 中刚刚复制出来的API Key。
import openai
import streamlit as st
from streamlit_chat import message
import os
from dotenv import load_dotenv
openai.api_key = '你的API_KEY'
然后定义generate_response()函数:
def generate_response(prompt):
completion=openai.Completion.create(
engine='text-davinci-003',
prompt=prompt,
max_tokens=1024,
n=1,
stop=None,
temperature=0.6,
)
message=completion.choices[0].text
return message
通过将用户对话指令(Prompt)作为参数从 GPT-3 生成OpenAI的text completion模型响应。我们这里还指定了模型 ‘text-davinci-003’ ,当然你还可以使用其他模型,不过Davinci的训练数据是目前比较新的。
也可以为Prompt设置字数限制 (max_tokens)。
其中还有一个temperature变量非常相关,因为它实质上定义了AI创造力的级别,它可以设置在 0 和 1 之间。0 产生稳健的输出,而 1 则具有高度创造力。
接下来的代码,就是演示如何用streamlit,包括一个第三方的库streamlit_chat,建立一个对话型的web界面,其中创建past(用户在输入框的输入text)和generated(调用generate_response()后API回复的text)列表,用来保存和显示历史对话记录,代码很简单,一目了然:
st.title("也鱼实验室的AI Chatbot")
#storing the chat
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("You:",key='input')
if user_input:
output=generate_response(user_input)
#store the output
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')
以上就是全部代码,把它合并保存为demo.py,总共不到40行,接下来你只要在该文件目录下用命令行输入:
python -m streamlit run demo.py
就会看到以下打印,一个界面很光洁的网页随即会在本地打开:
You can now view your Streamlit app in your browser.
Local URL: http://localhost:8502
Network URL: http://xxx.xxx.xxx.xxx(我的IP):8502
好了,试试与其对话吧,你可以跟他打招呼,获取知识,让其提供写作提纲,让其续写你的文章,或是为你总结一段文字。
在 ChatGPT API 发布之前,这可能是使用 GPT-3 模型的最简单方法。 最后需要提的是,关于使用Streamlit,我们必须知道,如果我们需要做一个交互性强及安全的大型应用,那么还是要考虑使用Django这类Web框架进行开发。
感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具
工具都帮大家整理好了,安装就可直接上手!
三、最新Python学习笔记
当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
四、Python视频合集
观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
五、实战案例
纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
六、面试宝典