Skip to content

Commit

Permalink
[Feat] Support ernie-bot-8k model
Browse files Browse the repository at this point in the history
  • Loading branch information
juncaipeng authored Oct 27, 2023
2 parents 69bccd2 + 741b2fd commit db918da
Show file tree
Hide file tree
Showing 11 changed files with 110 additions and 65 deletions.
57 changes: 35 additions & 22 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,34 @@ ERNIE Bot SDK提供便捷易用的接口,可以调用文心大模型的能力

</div>

## 最新动态

* 支持文心一言ernie-bot-8k模型,输入token数量上限提升至7000。
* 支持基于文心大模型4.0版本的文心一言ernie-bot-4,用于对话补全任务。
* 增加`EBResponse.get_result`方法,支持从响应中取出关键信息。

## 教程与文档

<details>
<summary>详情</summary>

* **预备步骤**
* [安装](./docs/installation.md)
* [认证鉴权](./docs/authentication.md)
* [参数配置](./docs/configuration.md)
* [模型总览](./docs/models.md)
* **使用指南**
* [对话补全(Chat Completion)](./docs/guides/chat_completion.md)
* [语义向量(Embedding)](./docs/guides/embedding.md)
* [文生图(Image Generation)](./docs/guides/image.md)
* [函数调用(Function Calling)](./docs/guides/function_calling.md)
* **API文档**
* [ChatCompletion](./docs/api_reference/chat_completion.md)
* [Embedding](./docs/api_reference/embedding.md)
* [Image](./docs/api_reference/image.md)

</details>

## 快速安装

执行如下命令,快速安装Python语言的最新版本ERNIE Bot SDK(要求Python >= 3.8)。
Expand All @@ -32,9 +60,10 @@ import erniebot
models = erniebot.Model.list()

print(models)
# ernie-bot 文心一言旗舰版
# ernie-bot-turbo 文心一言轻量版
# ernie-bot-4 基于文心大模型4.0版本的文心一言
# ernie-bot 文心一言模型(ernie-bot)
# ernie-bot-turbo 文心一言模型(ernie-bot-turbo)
# ernie-bot-4 文心一言模型(ernie-bot-4)
# ernie-bot-8k 文心一言模型(ernie-bot-8k)
# ernie-text-embedding 文心百中语义模型
# ernie-vilg-v2 文心一格模型

Expand Down Expand Up @@ -73,11 +102,11 @@ erniebot api image.create --model ernie-vilg-v2 --prompt "画一只驴肉火烧"

### 对话补全(Chat Completion)

ERNIE Bot SDK提供具备对话补全能力的文心一言旗舰版模型ernie-bot、文心一言迅捷版模型ernie-bot-turbo以及基于文心大模型4.0版本的文心一言ernie-bot-4。
ERNIE Bot SDK提供具备对话补全能力的ernie-bot、ernie-bot-turbo、ernie-bot-4、ernie-bot-8k等文心一言系列模型

不同模型在效果、速度等方面各有千秋,大家可以根据实际场景的需求选择合适的模型。

以下是调用文心一言旗舰版模型进行多轮对话的示例
以下是调用ernie-bot模型进行多轮对话的示例

```python
import erniebot
Expand Down Expand Up @@ -164,7 +193,7 @@ ERNIE Bot SDK提供函数调用功能,即由大模型根据对话上下文确

借由函数调用,用户可以从大模型获取结构化数据,进而利用编程手段将大模型与已有的内外部API结合以构建应用。

以下是调用文心一言旗舰版模型进行函数调用的示例
以下是调用ernie-bot模型进行函数调用的示例

```python
import erniebot
Expand Down Expand Up @@ -230,22 +259,6 @@ print(response.get_result())

<img width="1296" alt="36dd85dbe30682a287b6a5c5d13e0cdc" src="https://user-images.githubusercontent.com/19339784/264367116-600c34b9-0103-4fb7-bbe5-6d71ddc6af09.gif">

## 完整教程文档

* 快速开始
* [安装](./docs/installation.md)
* [认证鉴权](./docs/authentication.md)
* [参数配置](./docs/configuration.md)
* 使用指南
* [对话补全(Chat Completion)](./docs/guides/chat_completion.md)
* [语义向量(Embedding)](./docs/guides/embedding.md)
* [文生图(Image Generation)](./docs/guides/image.md)
* [函数调用(Function Calling)](./docs/guides/function_calling.md)
* API文档
* [ChatCompletion](./docs/api_reference/chat_completion.md)
* [Embedding](./docs/api_reference/embedding.md)
* [Image](./docs/api_reference/image.md)

## Acknowledgement

我们借鉴了[OpenAI Python Library](https://github.com/openai/openai-python)的部分API设计,在此对OpenAI Python Library作者及开源社区表示感谢。
Expand Down
13 changes: 7 additions & 6 deletions docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,10 @@ import erniebot
models = erniebot.Model.list()

print(models)
# ernie-bot 文心一言旗舰版
# ernie-bot-turbo 文心一言轻量版
# ernie-bot-4 基于文心大模型4.0版本的文心一言
# ernie-bot 文心一言模型(ernie-bot)
# ernie-bot-turbo 文心一言模型(ernie-bot-turbo)
# ernie-bot-4 文心一言模型(ernie-bot-4)
# ernie-bot-8k 文心一言模型(ernie-bot-8k)
# ernie-text-embedding 文心百中语义模型
# ernie-vilg-v2 文心一格模型

Expand Down Expand Up @@ -64,11 +65,11 @@ erniebot api image.create --model ernie-vilg-v2 --prompt "画一只驴肉火烧"

### 对话补全(Chat Completion)

ERNIE Bot SDK提供具备对话补全能力的文心一言旗舰版模型ernie-bot、文心一言迅捷版模型ernie-bot-turbo以及基于文心大模型4.0版本的文心一言ernie-bot-4。
ERNIE Bot SDK提供具备对话补全能力的ernie-bot、ernie-bot-turbo、ernie-bot-4、ernie-bot-8k等文心一言系列模型

不同模型在效果、速度等方面各有千秋,大家可以根据实际场景的需求选择合适的模型。

以下是调用文心一言旗舰版模型进行多轮对话的示例
以下是调用ernie-bot模型进行多轮对话的示例

```{.py .copy}
import erniebot
Expand Down Expand Up @@ -155,7 +156,7 @@ ERNIE Bot SDK提供函数调用功能,即由大模型根据对话上下文确

借由函数调用,用户可以从大模型获取结构化数据,进而利用编程手段将大模型与已有的内外部API结合以构建应用。

以下是调用文心一言旗舰版模型进行函数调用的示例
以下是调用ernie-bot模型进行函数调用的示例

```{.py .copy}
import erniebot
Expand Down
12 changes: 7 additions & 5 deletions docs/api_reference/chat_completion.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,18 +13,19 @@ erniebot.ChatCompletion.create(**kwargs: Any)

| 参数名 | 类型 | 必填 | 描述 |
| :--- | :--- | :------- | :---- |
| model | str || 模型名称。当前支持`'ernie-bot'``'ernie-bot-turbo'``'ernie-bot-4'`|
| messages | list[dict] || 对话上下文信息。列表中的元素个数须为奇数。详见[`messages`](#messages)|
| functions | list[dict] || 可触发函数的描述列表。详见[`functions`](#functions)。ernie-bot-turbo模型暂不支持此参数。 |
| model | str || 模型名称。当前支持`'ernie-bot'``'ernie-bot-turbo'``'ernie-bot-4'``'ernie-bot-8k'`|
| messages | list[dict] || 对话上下文信息。列表中的元素个数须为奇数。详见[messages](#messages)|
| functions | list[dict] || 可触发函数的描述列表。详见[functions](#functions)。ernie-bot-turbo模型暂不支持此参数。 |
| top_p | float || 生成的token从概率和恰好达到或超过`top_p`的token集合中采样得到。 <br>(1) 影响生成文本的多样性,取值越大,生成文本的多样性越强; <br>(2) 默认`0.8`,取值范围为`[0, 1.0]`; <br>(3) 建议只设置此参数和`temperature`中的一个。 |
| temperature | float || 用于调节模型输出概率分布,从而控制生成结果的随机性。 <br>(1) 较高的数值会使生成结果更加随机,而较低的数值会使结果更加集中和确定; <br>(2) 默认`0.95`,范围为`(0, 1.0]`,不能为`0`; <br>(3) 建议只设置此参数和`top_p`中的一个。 |
| penalty_score | float || 通过对已生成的token增加惩罚,减少重复生成的现象。此参数值越高则惩罚越大。 <br>(1) 值越大表示惩罚越大; <br>(2) 默认`1.0`,取值范围:`[1.0, 2.0]`|
| system | str || 提示模型行为的文本。如果设置了`functions`,则不支持设置此参数。 |
| user_id | str || 终端用户的唯一标识符,可以监视和检测滥用行为,防止接口被恶意调用。 |
| stream | bool || 是否流式返回数据,默认`False`|

### messages
<details>
<summary><code name="messages">messages</code></summary>
<summary>详情</summary>

`messages`为一个Python list,其中每个元素为一个dict。在如下示例中,为了与模型进行多轮对话,我们将模型的回复结果插入到`messages`中再继续请求:

Expand Down Expand Up @@ -64,8 +65,9 @@ erniebot.ChatCompletion.create(**kwargs: Any)

</details>

### functions
<details>
<summary><code name="functions">functions</code></summary>
<summary>详情</summary>

`functions`为一个Python list,其中每个元素为一个dict。示例如下:

Expand Down
2 changes: 1 addition & 1 deletion docs/api_reference/embedding.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ erniebot.Embedding.create(**kwargs: Any)
| 参数名 | 类型 | 必填 | 描述 |
| :--- | :--- | :------- | :---- |
| model | str || 模型名称。当前支持`'ernie-text-embedding'`|
| input | list[str] || 输入的文本列表,列表中每个元素为一段单独的文本。注意: <br>(1) 列表长度不得超过16。 <br>(2) 每段文本的token数量有最大限制,超出限制则报错(采用`汉字数 + 单词数 * 1.3`估算token数量)。对于ernie-text-embedding模型,每段文本支持最多384个token。 <br>(3) 文本内容不能为空。 |
| input | list[str] || 输入的文本列表,列表中每个元素为一段单独的文本。注意: <br>(1) 列表长度有最大限制。对于ernie-text-embedding模型,列表长度不能超过16。 <br>(2) 每段文本的token数量有最大限制,超出限制则报错(采用`汉字数 + 单词数 * 1.3`估算token数量)。对于ernie-text-embedding模型,每段文本支持最多384个token。 <br>(3) 文本内容不能为空。 |
| user_id | str || 终端用户的唯一标识符,可以监视和检测滥用行为,防止接口被恶意调用。 |

## 返回结果
Expand Down
32 changes: 19 additions & 13 deletions docs/authentication.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@

ERNIE Bot SDK支持多个后端平台来调用文心大模型(如下表格),大家可以根据实际情况选择。不同后端平台支持的模型、认证鉴权方式存在差异,下面我们分别介绍。

| 后端 | API_TYPE | 支持的模型 |
| 后端 | api_type | 支持的模型 |
| :--- | :---- | :--- |
| AI Studio | aistudio | ernie-bot,ernie-bot-turbo,ernie-bot-4,ernie-text-embedding |
| 千帆大模型平台 | qianfan | ernie-bot,ernie-bot-turbo,ernie-bot-4,ernie-text-embedding |
| AI Studio | aistudio | ernie-bot,ernie-bot-turbo,ernie-bot-4,ernie-bot-8k,ernie-text-embedding |
| 千帆大模型平台 | qianfan | ernie-bot,ernie-bot-turbo,ernie-bot-4,ernie-bot-8k,ernie-text-embedding |
| 智能创作平台 | yinian | ernie-vilg-v2 |

## 1 AI Studio后端的认证鉴权
Expand All @@ -22,7 +22,8 @@ ERNIE Bot SDK支持多个后端平台来调用文心大模型(如下表格)

注意事项:

* AI Studio每个账户的access token,有100万token的免费额度,可以用于ERNIE Bot SDK调用文心一言大模型。AI Studio近期将会开通付费购买的渠道。
* AI Studio每个账户的access token,有100万token的免费额度,可以用于ERNIE Bot SDK调用文心一言大模型。
*[token管理页面](https://aistudio.baidu.com/token/manage)可以查看token获取、消耗明细和过期记录,或者购买更多token。
* access token是私密信息,切记不要对外公开。

### 1.2 设置鉴权参数
Expand Down Expand Up @@ -69,11 +70,15 @@ response = erniebot.ChatCompletion.create(

申请流程:

* 进入[百度云](https://cloud.baidu.com/),完成注册。
* 进入百度云 - [千帆大模型平台](https://cloud.baidu.com/product/wenxinworkshop),提交体验申请。通常几个小时后会通知申请通过。
* 登录[千帆大模型平台](https://cloud.baidu.com/product/wenxinworkshop),进入[控制台](https://console.bce.baidu.com/qianfan/ais/console/applicationConsole/application)创建千帆应用,可以获取到API key与secret key(如下图)。
* 进入[计费管理](https://console.bce.baidu.com/qianfan/chargemanage/list),选择需要用到的服务并开通付费,例如:ERNIE-Bot大模型公有云在线调用服务、ERNIE-Bot-turbo大模型公有云在线调用服务、Embedding-V1公有云在线调用服务、ERNIE-Bot 4.0大模型公有云在线调用服务等。
* (非必需)参考[access token获取教程](https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Ilkkrb0i5),使用API key和secret key获取access token。
(1) 进入[百度云](https://cloud.baidu.com/),完成注册。

(2) 进入百度云 - [千帆大模型平台](https://cloud.baidu.com/product/wenxinworkshop),提交体验申请。通常几个小时后会通知申请通过。

(3) 登录[千帆大模型平台](https://cloud.baidu.com/product/wenxinworkshop),进入[控制台](https://console.bce.baidu.com/qianfan/ais/console/applicationConsole/application)创建千帆应用,可以获取到API key与secret key(如下图)。

(4) 进入[计费管理](https://console.bce.baidu.com/qianfan/chargemanage/list),选择需要用到的服务并开通付费,例如:ERNIE-Bot大模型公有云在线调用服务、ERNIE-Bot-turbo大模型公有云在线调用服务、Embedding-V1公有云在线调用服务、ERNIE-Bot 4.0大模型公有云在线调用服务等。

(5) (非必需)参考[access token获取教程](https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Ilkkrb0i5),使用API key和secret key获取access token。

<div align="center">
<img src="https://user-images.githubusercontent.com/52520497/264009567-46f88a38-df70-4a79-affb-ddbf797855b1.jpeg" width="800">
Expand Down Expand Up @@ -124,20 +129,21 @@ erniebot.sk = '<secret-key-for-qianfan>'

申请流程:

* 进入[百度云](https://cloud.baidu.com/),完成注册。
* 进入百度云 - 智能创作平台 - [应用页面](https://console.bce.baidu.com/ai/#/ai/intelligentwriting/app/list),创建应用,可以拿到API key和secret key(如下图)。
(1) 进入[百度云](https://cloud.baidu.com/),完成注册。

(2) 进入百度云 - 智能创作平台 - [应用页面](https://console.bce.baidu.com/ai/#/ai/intelligentwriting/app/list),创建应用,可以拿到API key和secret key(如下图)。

<div align="center">
<img src="https://user-images.githubusercontent.com/52520497/264009612-17658684-c066-44e5-8814-178214aa8155.jpeg" width="800">
</div>

* 进入百度云 - 智能创作平台 - [概览页面](https://console.bce.baidu.com/ai/#/ai/intelligentwriting/overview/index),在服务列表中找到AI作画-高级版服务并开通付费(如下图)。
(3) 进入百度云 - 智能创作平台 - [概览页面](https://console.bce.baidu.com/ai/#/ai/intelligentwriting/overview/index),在服务列表中找到AI作画-高级版服务并开通付费(如下图)。

<div align="center">
<img src="https://github.com/PaddlePaddle/PaddleSeg/assets/52520497/7c855314-8332-47ad-a444-a08dd37ec32f" width="800">
</div>

* (非必需)参考[access token获取教程](https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Ilkkrb0i5),使用API key和secret key获取access token。
(4) (非必需)参考[access token获取教程](https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Ilkkrb0i5),使用API key和secret key获取access token。

智能创作平台的完整介绍,请参考[使用文档](https://ai.baidu.com/ai-doc/NLP/Uk53wndcb);费用、充值相关的问题,请参考[计费简介](https://ai.baidu.com/ai-doc/NLP/qla2beec2)

Expand Down
21 changes: 11 additions & 10 deletions docs/guides/chat_completion.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,9 @@
| 模型 | 说明 | API调用方式 |
| :--- | :--- | :----- |
| ernie-bot | 具备优秀的知识增强和内容生成能力,在文本创作、问答、推理和代码生成等方面表现出色。 |`erniebot.ChatCompletion.create(model='ernie-bot', ...)` |
| ernie-bot-turbo | 具备更快的响应速度和学习能力,API调用成本更低。 | `erniebot.ChatCompletion.create(model='ernie-bot-turbo', ...)` |
| ernie-bot-4 | 基于文心大模型4.0版本的文心一言,具备目前文心一言系列模型中最优的理解和生成能力。 | `erniebot.ChatCompletion.create(model='ernie-bot-turbo', ...)` |
| ernie-bot-turbo | 相比erniebot模型具备更快的响应速度和学习能力,API调用成本更低。 | `erniebot.ChatCompletion.create(model='ernie-bot-turbo', ...)` |
| ernie-bot-4 | 基于文心大模型4.0版本的文心一言,具备目前文心一言系列模型中最优的理解和生成能力。 | `erniebot.ChatCompletion.create(model='ernie-bot-turbo', ...)` |
| ernie-bot-8k | 在ernie-bot模型的基础上增强了对长对话上下文的支持,输入token数量上限为7000。 | `erniebot.ChatCompletion.create(model='ernie-bot-turbo', ...)` |

参阅[ChatCompletion API文档](../api_reference/chat_completion.md)了解API的完整使用方式。

Expand All @@ -57,18 +58,18 @@

模型通常会引入一定的随机性来确保生成结果的多样性,因此,即使在输入相同的情况下,模型每次的输出结果也可能发生变化。可以通过设置`top_p``temperature`参数来调节生成结果的随机性,但需要注意的是,随机性始终存在,用户不应该期望从模型处获得完全确定的生成结果。

### 模型的输入输出有什么限制
### 模型的输入长度有限制吗

文心一言模型对于输入和输出的token数量会有限制,通常情况下输入的token数量不能超过3072,输出的token数量不会超过1024。当输入的token数量超过限制时,会有以下几种情况
文心一言模型对输入的token数量有限制。对于ernie-bot、ernie-bot-turbo和ernie-bot-4模型,输入的token数量不能超过3000;对于ernie-bot-8k模型,输入token数量的限制是7000。以下分别讨论单轮和多轮对话的情形

* 单轮对话时,如果输入的token数量超出限制,会直接返回错误;
* 多轮对话时,如果最近一次输入的token数量超出限制,会直接返回错误;如果最近一次的token数量没有超出限制,则模型会在拼接历史信息时最多拼接到相应的token数上限,并丢弃多余的历史信息
* 单轮对话时,输入的token数量不能超出限制。
* 多轮对话时,最后一条消息的token数量不能超出限制。此外,如果最后一条消息的token数量没有超出限制,而对话上下文(包括历史消息)的token总量超过了限制,则模型会在拼接输入时遗忘较早的历史信息,只保留满足token数限制的最近的对话上下文作为输入

### 如何计算token数量
### 如何计算token数量

目前千帆平台采用`汉字数 + 单词数 * 1.3`估算token总数。使用ERNIE Bot SDK,你可以通过如下代码计算得到token数量
目前千帆和AI Studio平台均采用`汉字数 + 单词数 * 1.3`估算token总数。可以通过如下代码估计token数量

```{.py .copy}
import erniebot
token_num = erniebot.utils.approx_num_tokens("你好,我是文心一言。")
import erniebot.utils
num_tokens = erniebot.utils.token_helper.approx_num_tokens("你好,我是文心一言。")
```
8 changes: 4 additions & 4 deletions docs/guides/embedding.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,11 @@

对于超长文本,可以采用切片方式对文本进行预处理。具体而言:将原始文本切分为多个小段,每个小段满足token数量的限制;然后,分别计算每小段文本的向量,并根据任务灵活使用。例如,在文本相似度计算中,可以计算输入query与每小段文本的余弦相似度,取最大值作为输入query与原始文本的相似度。

### 如何计算token数量
### 如何计算token数量

目前千帆平台采用`汉字数 + 单词数 * 1.3`估算token总数。使用ERNIE Bot SDK,你可以通过如下代码计算得到token数量
目前千帆和AI Studio平台均采用`汉字数 + 单词数 * 1.3`估算token总数。可以通过如下代码估计token数量

```{.py .copy}
import erniebot
token_num = erniebot.utils.approx_num_tokens("你好,我是文心一言。")
import erniebot.utils
num_tokens = erniebot.utils.token_helper.approx_num_tokens("你好,我是文心一言。")
```
Loading

0 comments on commit db918da

Please sign in to comment.