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

之前也写了好几篇关于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框架进行开发。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容