ERNIE Bot基础使用教程
在本教程中,我们首先简单介绍ERNIE Bot,然后简要说明在AI Studio上安装、配置和使用ERNIE Bot的方法。
1 ERNIE Bot简介
ERNIE Bot是文心&飞桨官方提供的Python库,提供便捷易用的Python接口,可调用文心大模型能力,完成包含文本创作、通用对话、语义向量、AI作图在内的多项任务。
ERNIE Bot代码在GitHub上开源,欢迎大家进入项目主页查看源码和使用文档,如果遇到问题也可以提出issue。
下图是基于ERNIE Bot开发的Gradio演示应用程序,大家可以在AI Studio应用中心在线体验。
2 AI Studio上使用ERNIE Bot
2.1 安装ERNIE Bot
使用pip可以快速安装ERNIE Bot,这里安装0.5.0版本。
!pip install erniebot==0.5.0
2.2 认证鉴权
调用文心大模型功能是收费服务,所以使用ERNIE Bot需要认证鉴权。
ERNIE Bot认证鉴权主要是设置后端和access token,分别通过api_type和access_token参数来指定。
此处,我们使用aistudio后端。在AI Studio个人中心的访问令牌页面,大家可以获取aistudio后端的access token,然后填入下面代码中(替换{YOUR-ACCESS-TOKEN})。
import erniebot erniebot.api_type = 'aistudio' erniebot.access_token = '{YOUR-ACCESS-TOKEN}'
请注意:
- 不同后端的access token获取方式不同,特定后端获取的access token无法用于其他后端的认证鉴权。
- access token是私密信息,切记不要对外公开。
- aistudio后端的access token对应大家的个人账户,目前每个账户有100万token的免费额度,可以用于ERNIE Bot调用文心大模型。
2.3 ERNIE Bot Hello-World
作为开始,让我们用ERNIE Bot开发一个hello-world程序:
response = erniebot.ChatCompletion.create( model='ernie-3.5', messages=[{'role': 'user', 'content': "请对我说“你好,世界!”"}], ) print(response.get_result())
你好,世界!我很高兴能够与你进行对话。如果你有任何问题或需要帮助,请随时告诉我。
以上代码调用erniebot.ChatCompletion.create API,发起对话补全请求,并打印模型的响应结果。
我们通过model参数指定使用ernie-3.5模型,通过messages参数指定给大模型的输入消息。
在以上代码中,我们只进行单轮对话,因此messages列表中只包含一个元素。messages中的每一项都是一个字典,其中的’role’: ‘user’表示发出当前消息的角色是“用户”(也就是我们),’content’则对应消息的具体内容。
2.4 多轮对话
下面让我们尝试一个复杂一些的例子——多轮对话。
文心大模型具备强大的上下文理解能力,在我们发送新的消息时,模型能够联系历史消息进行回复。
首先,对hello-world的例子做一点修改:
In [4]
model = 'ernie-3.5' messages = [{'role': 'user', 'content': "请问你能以《你好,世界》为题,写一首现代诗吗?"}] first_response = erniebot.ChatCompletion.create( model=model, messages=messages, ) print(first_response.get_result())
当然可以,以下是我创作的《你好,世界》: 你好,世界 在无尽的星辰下,我向世界问好, 在时间的怀抱中,寻找存在的意义。 我是一颗小小的尘埃,漂浮在浩瀚的宇宙, 我是一片轻轻的叶子,摇曳在生命的枝头。 你好,世界,我向你致敬, 在微妙的呼吸中,感受生命的韵律。 我在清晨的阳光里,欢快地歌唱, 我在傍晚的微风中,静静地沉思。 你好,世界,我向你学习, 在万物的交融中,发现无尽的可能。 我在春花秋月中,领略岁月的流转, 我在悲欢离合中,体验人生的百味。 你好,世界,我向你告别, 在永恒的时光里,感悟生命的短暂。 我在璀璨的星空中,寻找未来的方向, 我在寂静的夜色中,安放内心的情感。 你好,世界,你是我的家, 在你的怀抱中,我找到了自我。 在你的辽阔中,我理解了生命的意义, 在你的浩瀚中,我找到了存在的价值。 你好,世界,再次向你问好, 在星辰的闪烁中,我找到了答案。 你好,世界,你是我的舞台, 在你的辽阔中,我找到了自我。
上述代码相比hello-world的例只是修改了messages参数的取值,并分别用两个变量model和messages记录模型名称与消息列表。
接下来,让我们发送第二条消息:
In [ ]
messages.append(first_response.to_message()) messages.append({'role': 'user', 'content': "谢谢你!请问你能把这首诗改写成七言绝句吗?"})
In [6]
second_response = erniebot.ChatCompletion.create( model=model, messages=messages, ) print(second_response.get_result())
当然可以,以下是我将《你好,世界》改写为七言绝句: 问好世界心欢畅,时间寻义意悠长。 星尘微妙呼吸中,敬畏生命韵律扬。
在上述代码中,我们首先将模型在第一轮对话里做出的回答加入到messages中(调用to_message方法将响应转换为消息)。
接着,将我们在第二轮对话中想要发送的消息加入到messages中。这里我们特意设置了一个模型需要联系上下文才能理解的问题,来测试模型是否真的“记得”对话历史。
最后,将messages传入erniebot.ChatCompletion.create API,获取第二轮响应。此时的messages中包含了全部的历史消息,因此模型能够根据上下文做出回答。
2.5 语义向量
最后让我们体验一个不一样的功能——语义向量(Embedding)。语义向量功能将文本转化为用数值表示的向量形式,从而以紧凑高效的方式编码文本,而这些向量可进一步用于文本检索、信息推荐、知识挖掘等场景。
ERNIE Bot提供erniebot.Embedding.create API生成输入文本的语义向量。一个例子如下:
In [7]
import numpy as np response = erniebot.Embedding.create( model='ernie-text-embedding', input=[ "我是百度公司开发的人工智能语言模型,我的中文名是文心一言,英文名是ERNIE-Bot。", "2018年深圳市各区GDP" ]) for embedding in response.get_result(): embedding = np.array(embedding) print(embedding)
[ 1.05796956e-01 5.54055907e-02 7.05274269e-02 6.80853873e-02 2.19543446e-02 -8.23291615e-02 5.80838742e-03 -3.95872444e-02 -6.67352304e-02 6.36451393e-02 2.38892473e-02 -5.38846627e-02 -1.38354721e-02 6.17682897e-02 -1.20219052e-01 -1.80966649e-02 2.67774030e-03 2.98716705e-02 2.02097371e-02 2.81390417e-02 -1.81193538e-02 -1.42875379e-02 -2.74522286e-02 -3.99198793e-02 2.82987747e-02 -5.53232767e-02 4.74652238e-02 8.74237940e-02 8.49522371e-03 -4.90075152e-04 -3.19835804e-02 -7.75019005e-02 3.95072177e-02 -4.12306823e-02 -2.93791015e-02 2.04885248e-02 -2.41762819e-03 5.51483557e-02 -2.76580034e-03 -4.78615006e-03 -6.95221275e-02 1.82033679e-03 6.79030642e-02 -4.98030446e-02 4.57640179e-02 -5.11501618e-02 -8.33012164e-02 4.38632257e-02 -7.27836490e-02 -1.50356228e-02 4.07841243e-02 -3.58146569e-03 7.91437924e-02 -7.24523962e-02 1.43934460e-02 -5.13507379e-03 -5.56587055e-02 -1.04998769e-02 2.27469485e-02 -2.75466628e-02 -4.02328148e-02 -3.16361561e-02 5.19508263e-03 -1.08803719e-01 1.01775415e-01 2.43589636e-02 3.94213647e-02 1.81834418e-02 -1.67791601e-02 1.47812366e-02 4.10323543e-03 4.59933989e-02 -8.88352171e-02 9.38988179e-02 1.15360558e-01 4.45992872e-02 -4.93527539e-02 2.50529908e-02 …….
在上述代码中,我们通过input参数指定了两段文本作为输入,因此response.data中顺序包含两段输入文本的语义向量。由于我们输入的两段文本在语义上差异较大,因此语义向量在数值上也存在不小的差别。
3 更进一步
本教程介绍了使用ERNIE Bot需要做的准备工作,并通过例子让大家了解ERNIE Bot的一些基础用法。当然,ERNIE Bot的全部功能远不止教程中提到的这些,如果大家对ERNIE Bot的更多用法感兴趣,欢迎阅读ERNIE Bot文档以及ERNIE Bot进阶使用教程。