用35行代码开发一个自己的AI对话机器人

语言: CN / TW / HK

之前也写了好几篇关于ChatGPT的文章了,领略到了与深入优化的GPT-3(Generative Pre-trained Transformer)对话过程中的各种惊喜。但是因为ChatGPT的爆发性流量和访问限制问题,平时使用的时候多多少少会不太方便。其实OpenAI本身就提供了大量的API接口,可以让用户免费使用开发出自己的Web APP,包括我们今天要说的对话机器人,关于API的一些应用,我在之前一篇文章做过介绍,有兴趣可以点开阅读: 十分钟学会开发自己的Python AI应用【OpenAI API篇】

虽然目前OpenAI提供的的API没法开发出像ChatGPT那样就同一个话题持续对话的应用(可以期待下即将发布的ChatGPT API,不过会收费),但是基于一个知识,一个文本编辑需求,如续写,或者一个写作大纲等等单一的文本需求,用目前的Open AI Text Completion类的API,配合Steamlit库,很简单地就可以开发一个对话的Web应用。而且由于使用的是API方式进行访问,平时使用时对访问IP没有任何限制,也不存在堵塞排队现象。

老规矩,OpenAI网址:openai.com. 注册登录需要有谷歌访问能力,和海外手机号验证(教程很多,可以在平台里直接搜索到)。

Streamlit

Streamlit 是一个开源框架,非常适合机器学习和数据科学。 开发人员用它创建用于数据可视化和数据分析的交互式应用程序,而无需编写大量的 HTML、CSS 或 JavaScript 代码。 Streamlit 通过 Python 构建应用程序,使数据科学家和软件工程师可以轻松地使用已有的技能来创建用于数据探索和数据分析的交互Web。本文就用Streamlit来开发这个AI对话的Web页面。

有两种使用 Streamlit 的方法,一种是在他们自己的云平台中,一种是在本地安装在你自己电脑或服务器上。对于第一个选项,你需要在Streamlit平台上注册账号,链接自己的GitHub,这里不多介绍了。这里主要介绍第二种方法,因为使用起来更自由。

OpenAI API

要使用API,你需要获得OpenAI的API 密钥。需要访问注册一个OpenAI账户,具体方法,掘金上有不少这里就不复述了。

我们今天要用的接口就在Text completion里面。

有了账号我们就可以在自己账号里找到API Key,如下图。注意创建API Key时务必第一时间复制下来,因为创建完关闭对话框以后,就再也无法看到完整的Key。

有了API key,我们就可以创建一个 Streamlit Python 脚本了。

创建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框架进行开发。