Skip to content

Commit 48f1910

Browse files
authored
[Doc] Refine docs for function calling
2 parents ff8917e + 750b605 commit 48f1910

File tree

7 files changed

+50
-31
lines changed

7 files changed

+50
-31
lines changed

README.md

+8-4
Original file line numberDiff line numberDiff line change
@@ -76,9 +76,10 @@ erniebot api image.create --model ernie-vilg-v2 --prompt "画一只驴肉火烧"
7676
### 对话补全(Chat Completion)
7777

7878
ERNIE Bot SDK提供具备对话补全能力的文心一言旗舰版模型ernie-bot-3.5和文心一言迅捷版模型ernie-bot-turbo。
79+
7980
旗舰版模型的效果更好,迅捷版模型的响应速度更快、推理时延更低,大家可以根据实际场景的需求选择合适的模型。
8081

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

8384
```python
8485
import erniebot
@@ -107,6 +108,7 @@ print(response)
107108
### 语义向量(Embedding)
108109

109110
ERNIE Bot SDK提供用于提取语义向量的Embedding模型。
111+
110112
该模型基于文心大模型,使用海量数据训练得到,为[文心百中](https://wenxin.baidu.com/baizhong/index/)系统提供关键能力。该模型可以将字符串转为384维浮点数表达的语义向量,语义向量具备极其精准的语义表达能力,可以用于度量两个字符串之间的语义相似度。
111113

112114
大家可以使用以下代码提取句子的语义向量。
@@ -133,6 +135,7 @@ print(response)
133135
### 文生图(Image Generation)
134136

135137
ERNIE Bot SDK提供具备文生图能力的ERNIE-ViLG大模型。
138+
136139
该模型具备丰富的风格与强大的中文理解能力,支持生成多种尺寸的图片。
137140

138141
```python
@@ -155,7 +158,6 @@ print(response)
155158

156159
<img width="512" alt="image" src="https://github.com/PaddlePaddle/ERNIE-Bot-SDK/assets/1371212/73911c97-ef42-4803-8dc6-d385486c128c">
157160

158-
159161
我们推荐两个撰写文生图Prompt提示词的文档,大家可以组合使用,创作出更加精美的图片。
160162
* [AI作画-基础版使用指南](https://ai.baidu.com/ai-doc/NLP/qlakgh129)
161163
* [AI作画-高级版使用指南](https://ai.baidu.com/ai-doc/NLP/4libyluzs)
@@ -164,9 +166,11 @@ print(response)
164166

165167
### 【beta】函数调用(Function Calling)
166168

167-
ERNIE Bot SDK提供函数调用功能,即通过大模型根据对话上下文确定何时以及如何调用函数。该功能目前处于测试状态。
169+
ERNIE Bot SDK提供函数调用功能,即由大模型根据对话上下文确定何时以及如何调用函数。
170+
171+
借由函数调用,用户可以从大模型获取结构化数据,进而利用编程手段将大模型与已有的内外部API结合以构建应用。该功能目前处于测试状态。
168172

169-
以下是调用文心一言旗舰版模型进行函数调用的示例
173+
以下是调用文心一言旗舰版模型进行函数调用的示例
170174

171175
```python
172176
import erniebot

docs/README.md

+7-2
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ erniebot api image.create --model ernie-vilg-v2 --prompt "画一只驴肉火烧"
6767
### 对话补全(Chat Completion)
6868

6969
ERNIE Bot SDK提供具备对话补全能力的文心一言旗舰版模型ernie-bot-3.5和文心一言迅捷版模型ernie-bot-turbo。
70+
7071
旗舰版模型的效果更好,迅捷版模型的响应速度更快、推理时延更低,大家可以根据实际场景的需求选择合适的模型。
7172

7273
以下是调用文心一言旗舰版模型进行多轮对话的示例。
@@ -98,6 +99,7 @@ print(response)
9899
### 语义向量(Embedding)
99100

100101
ERNIE Bot SDK提供提取语义向量的Embedding模型。
102+
101103
该模型基于文心大模型,使用海量数据训练得到,为[文心百中](https://wenxin.baidu.com/baizhong/index/)系统提供关键能力。该模型可以将字符串转为384维浮点数表达的语义向量,语义向量具备极其精准的语义表达能力,可以用于度量两个字符串之间的语义相似度。
102104

103105
大家可以使用以下代码提取句子的语义向量。
@@ -124,6 +126,7 @@ print(response)
124126
### 文生图(Image Generation)
125127

126128
ERNIE Bot SDK提供具备文生图能力的ERNIE-ViLG大模型。
129+
127130
该模型具备丰富的风格与强大的中文理解能力,支持生成多种尺寸的图片。
128131

129132
```python
@@ -155,9 +158,11 @@ print(response)
155158

156159
### 【beta】函数调用(Function Calling)
157160

158-
ERNIE Bot SDK提供函数调用功能,即通过大模型根据对话上下文确定何时以及如何调用函数。该功能目前处于测试状态。
161+
ERNIE Bot SDK提供函数调用功能,即由大模型根据对话上下文确定何时以及如何调用函数。
162+
163+
借由函数调用,用户可以从大模型获取结构化数据,进而利用编程手段将大模型与已有的内外部API结合以构建应用。该功能目前处于测试状态。
159164

160-
以下是调用文心一言旗舰版模型进行函数调用的示例
165+
以下是调用文心一言旗舰版模型进行函数调用的示例
161166

162167
```python
163168
import erniebot

docs/api_reference/chat_completion.md

+19-8
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ erniebot.ChatCompletion.create(**kwargs: Any)
2222
| stream | boolean || 是否以流式接口返回数据,默认`False`|
2323
| user_id | string || 表示最终用户的唯一标识符,可以监视和检测滥用行为,防止接口恶意调用。 |
2424

25-
### `messages`
25+
<details>
26+
<summary><code name="messages">messages</code></summary>
2627

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

@@ -50,9 +51,12 @@ erniebot.ChatCompletion.create(**kwargs: Any)
5051
| role | string || `'user'`表示用户,`'assistant'`表示对话助手,`'function'`表示函数。 |
5152
| content | string or `None` || 对话内容,当`role`不为`'function'`时,必须设置该参数为非`None`值;当`role``'function'`时,可以设置该参数为`None`|
5253
| name | string || 信息的作者。当`role='function'`时,此参数必填,且是`function_call`中的`name`|
53-
| function_call | dict || 由模型生成的函数调用,包含函数名称和请求参数等。详见[`function_call`](#functioncall)|
54+
| function_call | dict || 由模型生成的函数调用,包含函数名称和请求参数等。详见[`function_call`](#function_call)|
5455

55-
### `functions`
56+
</details>
57+
58+
<details>
59+
<summary><code name="functions">functions</code></summary>
5660

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

@@ -112,7 +116,10 @@ erniebot.ChatCompletion.create(**kwargs: Any)
112116
| examples | list[dict] || 函数调用示例。可提供与`messages`类似的对话上下文信息作为函数调用的例子。 |
113117
| plugin_id | string || 标记函数关联的插件,便于数据统计。 |
114118

115-
### `function_call`
119+
</details>
120+
121+
<details>
122+
<summary><code name="function_call">function_call</code></summary>
116123

117124
`function_call`为一个Python dict,其中包含如下键值对:
118125

@@ -122,11 +129,13 @@ erniebot.ChatCompletion.create(**kwargs: Any)
122129
| thoughts | string || 模型思考过程。 |
123130
| arguments | string || 请求参数。 |
124131

132+
</details>
133+
125134
## 返回结果
126135

127-
当采用非流式接口`stream``False`时,接口返回`erniebot.response.EBResponse`对象;当采用流式接口、即`stream``True`时,接口返回一个Python生成器,其产生的每个元素均为`erniebot.response.EBResponse`对象。
136+
当采用非流式接口`stream``False`时,接口返回`erniebot.response.EBResponse`对象;当采用流式接口、即`stream``True`时,接口返回一个Python生成器,其产生的每个元素均为`erniebot.response.EBResponse`对象。
128137

129-
`erniebot.response.EBResponse`对象中包含一些字段,可通过`x[key]``x.key`的方式访问。一个典型示例如下:
138+
`erniebot.response.EBResponse`对象中包含一些字段。一个典型示例如下:
130139

131140
```python
132141
{
@@ -147,7 +156,7 @@ erniebot.ChatCompletion.create(**kwargs: Any)
147156
}
148157
```
149158

150-
各字段含义如下表所示
159+
`erniebot.response.EBResponse`对象的各字段含义如下表所示
151160

152161
| 字段名 | 类型 | 描述 |
153162
| :--- | :---- | :---- |
@@ -159,7 +168,9 @@ erniebot.ChatCompletion.create(**kwargs: Any)
159168
| ban_round | int |`need_clear_history``True`时,会返回此字段表示第几轮对话有敏感信息,如果是当前轮次存在问题,则`ban_round=-1`|
160169
| is_end | boolean | 仅流式模式下返回该字段,表示是否为是返回结果的最后一段文本。 |
161170
| usage | dict | 输入输出token统计信息。token数量采用如下公式估算:`token数 = 汉字数 + 单词数 * 1.3`。<br>`prompt_tokens`:输入token数量(含上下文拼接);<br>`completion_tokens`:当前生成结果包含的token数量;<br>`total_tokens`:输入与输出的token总数;<br> `plugins`:插件消耗的token数量。 |
162-
| function_call | dict | 由模型生成的函数调用,包含函数名称和请求参数等。详见[`function_call`](#functioncall)|
171+
| function_call | dict | 由模型生成的函数调用,包含函数名称和请求参数等。详见[`function_call`](#function_call)|
172+
173+
字段的访问方式有2种:假设`resp`为一个`erniebot.response.EBResponse`对象,`resp['result']``resp.result`均可获取`result`字段的内容。
163174

164175
## 使用示例
165176

docs/authentication.md

+4-6
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@ ERNIE Bot SDK支持的文心大模型来自多个后端平台,不同平台支
2020
| :--- | :---- | :---- | :---- | :--- |
2121
| 千帆大模型平台 | qianfan | AK/SK,access token | [申请千帆大模型平台的用户凭证](#申请千帆大模型平台的用户凭证) | ernie-bot-3.5,ernie-bot-turbo,ernie-text-embedding |
2222
| 智能创作平台 | yinian | AK/SK,access token | [申请智能创作平台的用户凭证](#申请智能创作平台的用户凭证) | ernie-vilg-v2 |
23-
| AI Studio | aistudio | access token | [申请AI Studio平台的用户凭证](#申请ai-studio平台的用户凭证) | ernie-bot-3.5,ernie-bot-turbo,ernie-text-embedding |
23+
| AI Studio | aistudio | access token | | ernie-bot-3.5,ernie-bot-turbo,ernie-text-embedding |
2424

2525
与其它参数类似,鉴权参数可通过如下3种方式设置,请根据需要自由选择。关于参数配置的更多技巧,请在[此文档](./configuration.md)了解。
2626

27-
1. 使用环境变量:
27+
(1) 使用环境变量:
2828

2929
```shell
3030
export EB_API_TYPE="<EB-API-TYPE>"
@@ -33,7 +33,7 @@ export EB_SK="<EB-SECRET-KEY>"
3333
export EB_ACCESS_TOKEN="<EB-ACCESS-TOKEN>"
3434
```
3535

36-
2. 使用全局变量:
36+
(2) 使用全局变量:
3737

3838
``` {.py .copy}
3939
import erniebot
@@ -44,7 +44,7 @@ erniebot.sk = "<EB-SECRET-KEY>"
4444
erniebot.access_token = "<EB-ACCESS-TOKEN>"
4545
```
4646

47-
3. 使用`_config_`参数:
47+
(3) 使用`_config_`参数:
4848

4949
``` {.py .copy}
5050
import erniebot
@@ -108,5 +108,3 @@ response = erniebot.ChatCompletion.create(
108108

109109
* AK/SK是私人信息,大家不要分享给他人,也不要对外暴露。
110110
* 智能创作平台的完整介绍,请参考[使用文档](https://ai.baidu.com/ai-doc/NLP/Uk53wndcb);费用、充值相关的问题,请参考[计费简介](https://ai.baidu.com/ai-doc/NLP/qla2beec2)
111-
112-
## 申请AI Studio平台的用户凭证

docs/configuration.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,20 @@ ERNIE Bot SDK参数配置,主要涉及认证鉴权、后端平台等信息。
44

55
ERNIE Bot SDK支持3种参数配置的方法:1)使用环境变量,2)使用全局变量,3) 使用`_config_`参数。
66

7-
1. 使用环境变量:
7+
(1) 使用环境变量:
88

99
``` {.copy}
1010
export EB_API_TYPE="<EB-API-TYPE>"
1111
```
1212

13-
2. 使用全局变量:
13+
(2) 使用全局变量:
1414

1515
``` {.py .copy}
1616
import erniebot
1717
erniebot.api_type = "<EB-API-TYPE>"
1818
```
1919

20-
3. 使用`_config_`参数:
20+
(3) 使用`_config_`参数:
2121

2222
``` {.py .copy}
2323
import erniebot

docs/guides/function_calling.md

+9-7
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
文心一言提供函数调用功能,模型根据用户需求以及对函数的描述确定何时以及如何调用函数。具体而言,一个典型的函数调用流程如下:
66

7-
1. 用户提供对一组函数的名称、功能、请求参数(输入参数)和响应参数(返回值)的描述,并以自然语言阐述需求
7+
1. 用户提供对一组函数的名称、功能、请求参数(输入参数)和响应参数(返回值)的描述;
88
2. 模型根据用户需求以及函数描述信息,智能确定是否应该调用函数、调用哪一个函数、以及在调用该函数时需要如何设置输入参数;
99
3. 用户根据模型的提示调用函数,并将函数的响应传递给模型;
1010
4. 模型综合对话上下文信息,以自然语言形式给出满足用户需求的回答。
@@ -17,7 +17,7 @@
1717

1818
如下展示了一个函数调用的例子。
1919

20-
首先对函数的基本信息进行描述,使用[JSON Schema](https://json-schema.org/)格式描述函数的请求参数与响应参数。
20+
(1) 首先,对函数的基本信息进行描述,使用[JSON Schema](https://json-schema.org/)格式描述函数的请求参数与响应参数。
2121

2222
``` {.py .copy}
2323
functions = [
@@ -66,7 +66,7 @@ functions = [
6666

6767
代码中定义了一个列表`functions`,作为示例,其中仅包含对一个函数`get_current_temperature`的名称、请求参数等信息的描述。
6868

69-
接着,将以上信息与对需要完成的任务的自然语言描述一同传入`erniebot.ChatCompletion` API。
69+
(2) 接着,将以上信息与对需要完成的任务的自然语言描述一同传给`erniebot.ChatCompletion` API。
7070

7171
``` {.py .copy}
7272
import erniebot
@@ -92,15 +92,15 @@ function_call = response.function_call
9292
print(function_call)
9393
```
9494

95-
上述代码中的断言语句用于确保`response`中包含`function_call`字段。在实际生产中通常还需要考虑`response`中不包含`function_call`的情况,这意味着模型选择不调用任何函数。上述代码输出结果可能如下(由于大模型生成结果具有不确定性,执行上述代码的结果与本示例不一定一致):
95+
以上代码中的断言语句用于确保`response`中包含`function_call`字段。在实际生产中通常还需要考虑`response`中不包含`function_call`的情况,这意味着模型选择不调用任何函数。以上代码的输出结果可能如下(由于大模型生成结果具有不确定性,执行上述代码的结果与本示例不一定一致):
9696

9797
```text
9898
{'name': 'get_current_temperature', 'thoughts': '我需要获取指定城市的气温', 'arguments': '{"unit":"摄氏度","location":"深圳市"}'}
9999
```
100100

101-
`function_call`是一个Python dict,其中包含的键`name``thoughts`分别对应大模型选择调用的函数名称以及模型的思考过程。`function_call["arguments"]`是一个JSON格式的字符串,其中包含了调用函数时需要用到的参数。
101+
`function_call`是一个字典,其中包含的键`name``thoughts`分别对应大模型选择调用的函数名称以及模型的思考过程。`function_call["arguments"]`是一个JSON格式的字符串,其中包含了调用函数时需要用到的参数。
102102

103-
解析`function_call["arguments"]`,并使用解析得到的参数调用对应的函数。本示例使用一个硬编码的dummy函数作为演示,在实际生产中可将其替换为真正具备相应功能的API
103+
(3) 然后,根据模型的提示调用相应函数得到结果
104104

105105
``` {.py .copy}
106106
import json
@@ -114,7 +114,9 @@ args = json.loads(function_call["arguments"])
114114
res = func(location=args["location"], unit=args["unit"])
115115
```
116116

117-
将模型上一轮的响应以及函数的响应加入到对话上下文信息中,再次传递给模型。如果函数的响应不是JSON格式的字符串,需要先对其进行编码。
117+
以上代码从`function_call`中获取模型选择调用的函数名称(`function_call["name"]`),通过该名称找到对应的函数,并从`function_call["arguments"]`中解析需要传入函数的参数,最终完成对函数的调用。作为演示,以上代码所使用的`get_current_temperature`是一个硬编码的dummy函数,在实际生产中可将其替换为真正具备相应功能的API。
118+
119+
(4) 最后,将模型上一轮的响应以及函数的响应加入到对话上下文信息中,再次传递给模型。回传给模型的函数响应内容应当是JSON格式的字符串(如`'{"temperature": 25, "unit": "摄氏度"}'`),在本示例中,函数的响应是一个字典,因此需要先调用`json.dumps`函数对其进行编码。
118120

119121
``` {.py .copy}
120122
messages.append(

erniebot/client.py

-1
Original file line numberDiff line numberDiff line change
@@ -406,7 +406,6 @@ def _validate_headers(
406406
def _parse_line(self, line: bytes) -> Optional[str]:
407407
if line:
408408
if line.startswith(b"data: "):
409-
# Data-only messages
410409
line = line[len(b"data: "):]
411410
return line.decode('utf-8')
412411
else:

0 commit comments

Comments
 (0)