Skip to content

Commit 9954b18

Browse files
authored
Merge pull request #106 from tackhwa/main
增加 Ernie bot SDK 调用文心一言 方式
2 parents 3dbae49 + 940e396 commit 9954b18

File tree

8 files changed

+247
-7
lines changed

8 files changed

+247
-7
lines changed

.env

+4-1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ QIANFAN_ACCESS_KEY = ""
1313
# 安全认证方式获取的 Secret Key
1414
QIANFAN_SECRET_KEY = ""
1515

16+
# Ernie SDK 文心 API 访问密钥配置
17+
EB_ACCESS_TOKEN = ""
18+
1619
# 控制台中获取的 APPID 信息
1720
SPARK_APPID = ""
1821
# 控制台中获取的 APIKey 信息
@@ -29,4 +32,4 @@ IFLYTEK_SPARK_API_KEY = ""
2932
IFLYTEK_SPARK_API_SECRET = ""
3033

3134
# 智谱 API 访问密钥配置
32-
ZHIPUAI_API_KEY = ""
35+
ZHIPUAI_API_KEY = ""

docs/C2/2. 使用 LLM API.md

+91-3
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,9 @@ get_completion("你好")
173173

174174
百度同样提供了文心一言的 API 接口,其在推出大模型的同时,也推出了 `文心千帆` 企业级大语言模型服务平台,包括了百度整套大语言模型开发工作链。对于不具备大模型实际落地能力的中小企业或传统企业,考虑文心千帆是一个可行的选择。当然,本教程仅包括通过文心千帆平台调用文心一言 API,对于其他企业级服务不予讨论。
175175

176-
### 2.1 API 申请指引
176+
### 2.1 千帆 SDK
177+
178+
#### 2.1.1 API 申请指引
177179

178180
#### 获取密钥
179181

@@ -219,7 +221,7 @@ from dotenv import load_dotenv, find_dotenv
219221
_ = load_dotenv(find_dotenv())
220222
```
221223

222-
### 2.2 调用文心千帆 API
224+
#### 2.1.2 调用文心千帆 API
223225

224226
百度文心同样支持在传入参数的 messages 字段中配置 user、assistant 两个成员角色的 prompt,但与 OpenAI 的 prompt 格式不同的是,模型人设是通过另一个参数 system 字段传入的,而不是在 messages 字段中。
225227

@@ -310,6 +312,92 @@ get_completion("你好,介绍一下你自己")
310312

311313
· temperature,温度系数,默认 0.8,文心的 temperature 参数要求范围为 (0, 1.0],不能设置为 0。
312314

315+
### 2.2 ERNIE SDK
316+
317+
#### 2.2.1 API 申请指引
318+
319+
这里将使用 `ERNIE SDK` 中的 `ERNIE Bot` 来调用文心一言。ERNIE Bot 为开发者提供了便捷易用的接口,使其能够轻松调用文心大模型的强大功能,涵盖了文本创作、通用对话、语义向量以及AI作图等多个基础功能。`ERNIE SDK` 并不像 `千帆 SDK` 那样支持各种大语言模型, 而是只支持百度自家的文心大模型。目前 ERNIE Bot 支持的模型有:
320+
321+
```
322+
ernie-3.5 文心大模型(ernie-3.5)
323+
ernie-lite 文心大模型(ernie-lite)
324+
ernie-4.0 文心大模型(ernie-4.0)
325+
ernie-longtext 文心大模型(ernie-longtext)
326+
ernie-speed 文心大模型(ernie-speed)
327+
ernie-speed-128k 文心大模型(ernie-speed-128k)
328+
ernie-tiny-8k 文心大模型(ernie-tiny-8k)
329+
ernie-char-8k 文心大模型(ernie-char-8k)
330+
ernie-text-embedding 文心百中语义模型
331+
ernie-vilg-v2 文心一格模型
332+
```
333+
334+
在使用 ERNIE SDK 之前,需要先获取 AI Studio 后端的认证鉴权(access token),在代码中需要配置自己的密钥才能实现对模型的调用,下面我们以 [Ernie Bot](https://ernie-bot-agent.readthedocs.io/zh-cn/latest/sdk/)为例,介绍通过 ERNIE Bot 调用文心模型的流程。
335+
336+
首先需要在[AI Studio星河社区](https://aistudio.baidu.com/index)注册并登录账号(新用户会送100万token的免费额度,为期3个月)。
337+
338+
![](../figures/C2-2-ernie_bot_1.png)
339+
340+
点击 `访问令牌` 获取账户的 access token,复制 access token 并且以此形式 `EB_ACCESS_TOKEN="..."` 保存到 `.env` 文件中。
341+
![](../figures/C2-2-ernie_bot_2.png)
342+
343+
然后执行以下代码,将密钥加载到环境变量中。
344+
```python
345+
from dotenv import load_dotenv, find_dotenv
346+
347+
# 读取本地/项目的环境变量。
348+
349+
# find_dotenv() 寻找并定位 .env 文件的路径
350+
# load_dotenv() 读取该 .env 文件,并将其中的环境变量加载到当前的运行环境中
351+
# 如果你设置的是全局的环境变量,这行代码则没有任何作用。
352+
_ = load_dotenv(find_dotenv())
353+
```
354+
355+
#### 2.2.2 调用 Ernie Bot API
356+
357+
```python
358+
import erniebot
359+
import os
360+
361+
erniebot.api_type = "aistudio"
362+
erniebot.access_token = os.environ.get("EB_ACCESS_TOKEN")
363+
364+
def gen_wenxin_messages(prompt):
365+
'''
366+
构造文心模型请求参数 messages
367+
368+
请求参数:
369+
prompt: 对应的用户提示词
370+
'''
371+
messages = [{"role": "user", "content": prompt}]
372+
return messages
373+
374+
375+
def get_completion(prompt, model="ernie-3.5", temperature=0.01):
376+
'''
377+
获取文心模型调用结果
378+
379+
请求参数:
380+
prompt: 对应的提示词
381+
model: 调用的模型
382+
temperature: 模型输出的温度系数,控制输出的随机程度,取值范围是 0~1.0,且不能设置为 0。温度系数越低,输出内容越一致。
383+
'''
384+
385+
chat_comp = erniebot.ChatCompletion()
386+
message = gen_wenxin_messages(prompt)
387+
388+
resp = chat_comp.create(messages=message,
389+
model=model,
390+
temperature = temperature,
391+
system="你是一名个人助理")
392+
393+
return resp["result"]
394+
```
395+
396+
```python
397+
get_completion("你好,介绍一下你自己")
398+
```
399+
'你好!我是一名个人助理,我的主要任务是帮助你完成日常任务、提供信息、解答问题,并尽力提升你的工作效率和生活质量。无论你需要什么帮助,我都会尽力提供支持。'
400+
313401
## 3. 使用讯飞星火
314402

315403
讯飞星火认知大模型,由科大讯飞于 2023 年 5 月推出的中文大模型,也是国内大模型的代表产品之一。同样,受限于中文语境与算力资源,星火在使用体验上与 ChatGPT 还存在差异,但是,作为与文心不分伯仲的国内中文大模型,仍然值得期待与尝试。相较于存在显著资源、技术优势的百度,科大讯飞想要杀出重围,成为国内大模型的佼佼者,需要充分利用相对优势,至少目前来看,星火并未掉队。
@@ -652,4 +740,4 @@ get_completion("你好")
652740

653741
- **建议您根据应用场景调整 top_p 或 temperature 参数,但不要同时调整两个参数**
654742

655-
**注:本文对应源代码在[2. 使用 LLM API.ipynb](https://github.com/datawhalechina/llm-universe/blob/main/notebook/C2%20%E4%BD%BF%E7%94%A8%20LLM%20API%20%E5%BC%80%E5%8F%91%E5%BA%94%E7%94%A8/2.%20%E4%BD%BF%E7%94%A8%20LLM%20API.ipynb),如需复现可下载运行源代码。**
743+
**注:本文对应源代码在[2. 使用 LLM API.ipynb](https://github.com/datawhalechina/llm-universe/blob/main/notebook/C2%20%E4%BD%BF%E7%94%A8%20LLM%20API%20%E5%BC%80%E5%8F%91%E5%BA%94%E7%94%A8/2.%20%E4%BD%BF%E7%94%A8%20LLM%20API.ipynb),如需复现可下载运行源代码。**

docs/figures/C2-2-ernie_bot_1.png

538 KB
Loading

docs/figures/C2-2-ernie_bot_2.png

246 KB
Loading

figures/C2-2-ernie_bot_1.png

538 KB
Loading

figures/C2-2-ernie_bot_2.png

246 KB
Loading

notebook/C2 使用 LLM API 开发应用/2. 使用 LLM API.ipynb

+150-2
Original file line numberDiff line numberDiff line change
@@ -290,7 +290,14 @@
290290
"cell_type": "markdown",
291291
"metadata": {},
292292
"source": [
293-
"### 2.1 API 申请指引"
293+
"### 2.1 千帆 SDK"
294+
]
295+
},
296+
{
297+
"cell_type": "markdown",
298+
"metadata": {},
299+
"source": [
300+
"#### 2.1.1 API 申请指引"
294301
]
295302
},
296303
{
@@ -360,7 +367,7 @@
360367
"cell_type": "markdown",
361368
"metadata": {},
362369
"source": [
363-
"### 2.2 调用文心千帆 API"
370+
"#### 2.1.2 调用文心千帆 API"
364371
]
365372
},
366373
{
@@ -498,6 +505,147 @@
498505
" · temperature,温度系数,默认 0.8,文心的 temperature 参数要求范围为 (0, 1.0],不能设置为 0。"
499506
]
500507
},
508+
{
509+
"cell_type": "markdown",
510+
"metadata": {},
511+
"source": [
512+
"### 2.2 ERNIE SDK"
513+
]
514+
},
515+
{
516+
"cell_type": "markdown",
517+
"metadata": {},
518+
"source": [
519+
"#### 2.2.1 API 申请指引"
520+
]
521+
},
522+
{
523+
"cell_type": "markdown",
524+
"metadata": {},
525+
"source": [
526+
"这里将使用 `ERNIE SDK` 中的 `ERNIE Bot` 来调用文心一言。ERNIE Bot 为开发者提供了便捷易用的接口,使其能够轻松调用文心大模型的强大功能,涵盖了文本创作、通用对话、语义向量以及AI作图等多个基础功能。`ERNIE SDK` 并不像 `千帆 SDK` 那样支持各种大语言模型, 而是只支持百度自家的文心大模型。目前 ERNIE Bot 支持的模型有:\n",
527+
"\n",
528+
"```\n",
529+
"ernie-3.5 文心大模型(ernie-3.5)\n",
530+
"ernie-lite 文心大模型(ernie-lite)\n",
531+
"ernie-4.0 文心大模型(ernie-4.0)\n",
532+
"ernie-longtext 文心大模型(ernie-longtext)\n",
533+
"ernie-speed 文心大模型(ernie-speed)\n",
534+
"ernie-speed-128k 文心大模型(ernie-speed-128k)\n",
535+
"ernie-tiny-8k 文心大模型(ernie-tiny-8k)\n",
536+
"ernie-char-8k 文心大模型(ernie-char-8k)\n",
537+
"ernie-text-embedding 文心百中语义模型\n",
538+
"ernie-vilg-v2 文心一格模型\n",
539+
"```\n",
540+
"\n",
541+
"在使用 ERNIE SDK 之前,需要先获取 AI Studio 后端的认证鉴权(access token),在代码中需要配置自己的密钥才能实现对模型的调用,下面我们以 [Ernie Bot](https://ernie-bot-agent.readthedocs.io/zh-cn/latest/sdk/) 为例,介绍通过 ERNIE Bot 调用文心模型的流程。\n",
542+
"\n",
543+
"首先需要在 [AI Studio星河社区](https://aistudio.baidu.com/index) 注册并登录账号(新用户会送100万token的免费额度,为期3个月)。\n",
544+
"\n",
545+
"![](../../figures/C2-2-ernie_bot_1.png)\n",
546+
"\n",
547+
"点击 `访问令牌` 获取账户的 access token,复制 access token 并且以此形式 `EB_ACCESS_TOKEN=\"...\"` 保存到 `.env` 文件中。\n",
548+
"![](../../figures/C2-2-ernie_bot_2.png)\n",
549+
"\n",
550+
"然后执行以下代码,将密钥加载到环境变量中。"
551+
]
552+
},
553+
{
554+
"cell_type": "code",
555+
"execution_count": 1,
556+
"metadata": {},
557+
"outputs": [],
558+
"source": [
559+
"from dotenv import load_dotenv, find_dotenv\n",
560+
"\n",
561+
"# 读取本地/项目的环境变量。\n",
562+
"\n",
563+
"# find_dotenv() 寻找并定位 .env 文件的路径\n",
564+
"# load_dotenv() 读取该 .env 文件,并将其中的环境变量加载到当前的运行环境中 \n",
565+
"# 如果你设置的是全局的环境变量,这行代码则没有任何作用。\n",
566+
"_ = load_dotenv(find_dotenv())"
567+
]
568+
},
569+
{
570+
"cell_type": "markdown",
571+
"metadata": {},
572+
"source": [
573+
"#### 2.2.2 调用 Ernie Bot API"
574+
]
575+
},
576+
{
577+
"cell_type": "code",
578+
"execution_count": 2,
579+
"metadata": {},
580+
"outputs": [],
581+
"source": [
582+
"import erniebot\n",
583+
"import os\n",
584+
"\n",
585+
"erniebot.api_type = \"aistudio\"\n",
586+
"erniebot.access_token = os.environ.get(\"EB_ACCESS_TOKEN\")\n",
587+
"\n",
588+
"def gen_wenxin_messages(prompt):\n",
589+
" '''\n",
590+
" 构造文心模型请求参数 messages\n",
591+
"\n",
592+
" 请求参数:\n",
593+
" prompt: 对应的用户提示词\n",
594+
" '''\n",
595+
" messages = [{\"role\": \"user\", \"content\": prompt}]\n",
596+
" return messages\n",
597+
"\n",
598+
"\n",
599+
"def get_completion(prompt, model=\"ernie-3.5\", temperature=0.01):\n",
600+
" '''\n",
601+
" 获取文心模型调用结果\n",
602+
"\n",
603+
" 请求参数:\n",
604+
" prompt: 对应的提示词\n",
605+
" model: 调用的模型\n",
606+
" temperature: 模型输出的温度系数,控制输出的随机程度,取值范围是 0~1.0,且不能设置为 0。温度系数越低,输出内容越一致。\n",
607+
" '''\n",
608+
"\n",
609+
" chat_comp = erniebot.ChatCompletion()\n",
610+
" message = gen_wenxin_messages(prompt)\n",
611+
"\n",
612+
" resp = chat_comp.create(messages=message, \n",
613+
" model=model,\n",
614+
" temperature = temperature,\n",
615+
" system=\"你是一名个人助理\")\n",
616+
"\n",
617+
" return resp[\"result\"]"
618+
]
619+
},
620+
{
621+
"cell_type": "code",
622+
"execution_count": 3,
623+
"metadata": {},
624+
"outputs": [
625+
{
626+
"data": {
627+
"text/plain": [
628+
"'你好!我是一名个人助理,我的主要任务是协助和支持你的日常工作和活动。我可以帮助你管理时间、安排日程、提供信息、解答问题,以及完成其他你需要的任务。如果你有任何需求或问题,请随时告诉我,我会尽力帮助你。'"
629+
]
630+
},
631+
"execution_count": 3,
632+
"metadata": {},
633+
"output_type": "execute_result"
634+
}
635+
],
636+
"source": [
637+
"get_completion(\"你好,介绍一下你自己\")"
638+
]
639+
},
640+
{
641+
"cell_type": "markdown",
642+
"metadata": {},
643+
"source": [
644+
"`Ernie Bot API` 的调用方式和参数基本和 `文心千帆 API` 一样,除了在创建 `ChatCompletion` 时使用的是 `.create()` 函数。\n",
645+
"\n",
646+
"所以此处并不再过多介绍接口常用参数,你可以参考 [参数介绍](https://ernie-bot-agent.readthedocs.io/zh-cn/latest/sdk/api_reference/chat_completion/) 以获取其他参数的详细信息。"
647+
]
648+
},
501649
{
502650
"cell_type": "markdown",
503651
"metadata": {},

requirements.txt

+2-1
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,5 @@ pymupdf==1.24.0
2222
unstructured==0.12.6
2323
chromadb==0.4.14
2424
markdown==3.6
25-
spark-ai-python==0.3.15
25+
spark-ai-python==0.3.15
26+
erniebot==0.5.5

0 commit comments

Comments
 (0)