目录
本章节主要介绍四种大语言模型(ChatGPTAPI、文心一言、讯飞星火、智谱 GLM)的 API 申请指引和 Python 版本的原生 API 调用方法,读者按照实际情况选择一种自己可以申请的 API 进行阅读学习即可。如果你需要在 LangChain 中使用 LLM,可以参照LLM 接入 LangChain中的调用方式。
- ChatGPT:推荐可科学上网的读者使用;
- 文心一言:当前无赠送新用户 tokens 的活动,推荐已有文心 tokens 额度用户和付费用户使用;
- 讯飞星火:新用户赠送 tokens,推荐免费用户使用;
- 智谱 GLM:新用户赠送 tokens,推荐免费用户使用。
2. 使用文心一言
文心一言
,由百度于 2023 年 3 月 27 日推出的中文大模型,是目前国内大语言模型的代表产品。受限于中文语料质量差异及国内计算资源、计算技术瓶颈,文心一言在整体性能上距离 ChatGPT 仍有一定差异,但在中文语境下已展现出了较为优越的性能。文心一言所考虑的落地场景包括多模态生成、文学创作等多种商业场景,其目标是在中文语境下赶超 ChatGPT。当然,要真正战胜 ChatGPT,百度还有很长的路要走;但在生成式 AI 监管较为严格的国内,作为第一批被允许向公众开放的生成式 AI 应用,文心一言相对无法被公开使用的 ChatGPT 还是具备一定商业上的优势。
百度同样提供了文心一言的 API 接口,其在推出大模型的同时,也推出了 文心千帆
企业级大语言模型服务平台,包括了百度整套大语言模型开发工作链。对于不具备大模型实际落地能力的中小企业或传统企业,考虑文心千帆是一个可行的选择。当然,本教程仅包括通过文心千帆平台调用文心一言 API,对于其他企业级服务不予讨论。
2.1 千帆 SDK
2.1.1 API 申请指引
获取密钥
百度智能云千帆大模型平台提供了多种语言的千帆 SDK,开发者可使用 SDK,快捷地开发功能,提升开发效率。
在使用千帆 SDK 之前,需要先获取文心一言调用密钥,在代码中需要配置自己的密钥才能实现对模型的调用,下面我们以 Python SDK为例,介绍通过千帆 SDK 调用文心模型的流程。
首先需要有一个经过实名认证的百度账号,每一个账户可以创建若干个应用,每个应用会对应一个 API_Key 和 Secret_Key。
进入文心千帆服务平台,点击上述应用接入
按钮,创建一个调用文心大模型的应用。
接着点击去创建
按钮,进入应用创建界面:
简单输入基本信息,选择默认配置,创建应用即可。
创建完成后,我们可以在控制台看到创建的应用的 API Key
、Secret Key
。
需要注意的是,千帆目前只有 Prompt模板、Yi-34B-Chat 和 Fuyu-8B公有云在线调用体验服务这三个服务是免费调用的,如果你想体验其他的模型服务,需要在计费管理处开通相应模型的付费服务才能体验。
我们将这里获取到的 API Key
、Secret Key
填写至 .env
文件的 QIANFAN_AK
和 QIANFAN_SK
参数。如果你使用的是安全认证的参数校验,需要在百度智能云控制台-用户账户-安全认证页,查看 Access Key
、Secret Key
,并将获取到的参数相应的填写到 .env
文件的 QIANFAN_ACCESS_KEY
、QIANFAN_SECRET_KEY
。
然后执行以下代码,将密钥加载到环境变量中。
from dotenv import load_dotenv, find_dotenv
# 读取本地/项目的环境变量。
# find_dotenv() 寻找并定位 .env 文件的路径
# load_dotenv() 读取该 .env 文件,并将其中的环境变量加载到当前的运行环境中
# 如果你设置的是全局的环境变量,这行代码则没有任何作用。
_ = load_dotenv(find_dotenv())
Copy to clipboardErrorCopied
2.1.2 调用文心千帆 API
百度文心同样支持在传入参数的 messages 字段中配置 user、assistant 两个成员角色的 prompt,但与 OpenAI 的 prompt 格式不同的是,模型人设是通过另一个参数 system 字段传入的,而不是在 messages 字段中。
下面我们使用 SDK,封装一个 get_completion
函数供后续使用。
再次提醒读者:如果账户中没有免费的或者购买的额度,在执行下述代码调用文心 ERNIE-Bot
时,会有如下报错:error code: 17, err msg: Open api daily request limit reached
。
点击模型服务可以查看千帆支持的全部模型列表。
import qianfan
def gen_wenxin_messages(prompt):
'''
构造文心模型请求参数 messages
请求参数:
prompt: 对应的用户提示词
'''
messages = [{"role": "user", "content": prompt}]
return messages
def get_completion(prompt, model="ERNIE-Bot", temperature=0.01):
'''
获取文心模型调用结果
请求参数:
prompt: 对应的提示词
model: 调用的模型,默认为 ERNIE-Bot,也可以按需选择 ERNIE-Bot-4 等其他模型
temperature: 模型输出的温度系数,控制输出的随机程度,取值范围是 0~1.0,且不能设置为 0。温度系数越低,输出内容越一致。
'''
chat_comp = qianfan.ChatCompletion()
message = gen_wenxin_messages(prompt)
resp = chat_comp.do(messages=message,
model=model,
temperature = temperature,
system="你是一名个人助理-小鲸鱼")
return resp["result"]
Copy to clipboardErrorCopied
如果你是免费用户,在使用上述函数时,可以在入参中指定一个免费的模型(例如 Yi-34B-Chat
)再运行:
get_completion("你好,介绍一下你自己", model="Yi-34B-Chat")
Copy to clipboardErrorCopied
[WARNING] [04-18 08:39:59] base.py:516 [t:8597525056]: This key `system` does not seem to be a parameter that the model `Yi-34B-Chat` will accept
[INFO] [04-18 08:39:59] openapi_requestor.py:316 [t:8597525056]: requesting llm api endpoint: /chat/yi_34b_chat
'你好!我叫 Yi,我是零一万物开发的一个智能助手,由零一万物的研究团队通过大量的文本数据进行训练,学习了语言的各种模式和关联,从而能够生成文本、回答问题、翻译语言的。我可以帮助你解答问题、提供信息,或者进行其他与语言处理相关的任务。如果你有任何问题或需要帮助的地方,请随时告诉我!'
Copy to clipboardErrorCopied
如果你有文心系列模型 ERNIE-Bot
的使用额度,则可直接运行如下函数:
get_completion("你好,介绍一下你自己")
Copy to clipboardErrorCopied
[INFO] [04-18 08:40:05] openapi_requestor.py:316 [t:8597525056]: requesting llm api endpoint: /chat/completions
'你好!我是小鲸鱼,你的个人助理。我致力于为你提供准确、及时的信息和帮助,解答你的问题,并尽力满足你的需求。无论你需要什么帮助,我都会尽力提供帮助和支持。'
Copy to clipboardErrorCopied
百度千帆提供了多种模型接口供调用,其中,上述我们使用的 ERNIE-Bot
模型的对话 chat 接口,也就是常说的百度文心大模型。此处简要介绍文心大模型接口的常用参数:
· messages,即调用的 prompt。文心的 messages 配置与 ChatGPT 有一定区别,其不支持 max_token 参数,由模型自行控制最大 token 数,messages 中的 content 总长度、functions 和 system 字段总内容不能超过 20480 个字符,且不能超过 5120 tokens,否则模型就会自行对前文依次遗忘。文心的 messages 有以下几点要求:① 一个成员为单轮对话,多个成员为多轮对话;② 最后一个 message 为当前对话,前面的 message 为历史对话;③ 成员数目必须为奇数,message 中的 role 必须依次是 user、assistant。注:这里介绍的是 ERNIE-Bot 模型的字符数和 tokens 限制,而参数限制因模型而异,请在文心千帆官网查看对应模型的参数说明。
· stream,是否使用流式传输。
· temperature,温度系数,默认 0.8,文心的 temperature 参数要求范围为 (0, 1.0],不能设置为 0。
Copy to clipboardErrorCopied
2.2 ERNIE SDK
2.2.1 API 申请指引
这里将使用 ERNIE SDK
中的 ERNIE Bot
来调用文心一言。ERNIE Bot 为开发者提供了便捷易用的接口,使其能够轻松调用文心大模型的强大功能,涵盖了文本创作、通用对话、语义向量以及AI作图等多个基础功能。ERNIE SDK
并不像 千帆 SDK
那样支持各种大语言模型, 而是只支持百度自家的文心大模型。目前 ERNIE Bot 支持的模型有:
ernie-3.5 文心大模型(ernie-3.5)
ernie-lite 文心大模型(ernie-lite)
ernie-4.0 文心大模型(ernie-4.0)
ernie-longtext 文心大模型(ernie-longtext)
ernie-speed 文心大模型(ernie-speed)
ernie-speed-128k 文心大模型(ernie-speed-128k)
ernie-tiny-8k 文心大模型(ernie-tiny-8k)
ernie-char-8k 文心大模型(ernie-char-8k)
ernie-text-embedding 文心百中语义模型
ernie-vilg-v2 文心一格模型
Copy to clipboardErrorCopied
在使用 ERNIE SDK 之前,需要先获取 AI Studio 后端的认证鉴权(access token),在代码中需要配置自己的密钥才能实现对模型的调用,下面我们以 Ernie Bot为例,介绍通过 ERNIE Bot 调用文心模型的流程。
首先需要在AI Studio星河社区注册并登录账号(新用户会送100万token的免费额度,为期3个月)。
点击 访问令牌
获取账户的 access token,复制 access token 并且以此形式 EB_ACCESS_TOKEN="..."
保存到 .env
文件中。
然后执行以下代码,将密钥加载到环境变量中。
from dotenv import load_dotenv, find_dotenv
# 读取本地/项目的环境变量。
# find_dotenv() 寻找并定位 .env 文件的路径
# load_dotenv() 读取该 .env 文件,并将其中的环境变量加载到当前的运行环境中
# 如果你设置的是全局的环境变量,这行代码则没有任何作用。
_ = load_dotenv(find_dotenv())
2.2.2 调用 Ernie Bot API
import erniebot
import os
erniebot.api_type = "aistudio"
erniebot.access_token = os.environ.get("EB_ACCESS_TOKEN")
def gen_wenxin_messages(prompt):
'''
构造文心模型请求参数 messages
请求参数:
prompt: 对应的用户提示词
'''
messages = [{"role": "user", "content": prompt}]
return messages
def get_completion(prompt, model="ernie-3.5", temperature=0.01):
'''
获取文心模型调用结果
请求参数:
prompt: 对应的提示词
model: 调用的模型
temperature: 模型输出的温度系数,控制输出的随机程度,取值范围是 0~1.0,且不能设置为 0。温度系数越低,输出内容越一致。
'''
chat_comp = erniebot.ChatCompletion()
message = gen_wenxin_messages(prompt)
resp = chat_comp.create(messages=message,
model=model,
temperature = temperature,
system="你是一名个人助理")
return resp["result"]
get_completion("你好,介绍一下你自己")
'你好!我是一名个人助理,我的主要任务是帮助你完成日常任务、提供信息、解答问题,并尽力提升你的工作效率和生活质量。无论你需要什么帮助,我都会尽力提供支持。'