文心一言背后的模型能力通过百度智能云对外开放,官方提供了两种调用路径:一种是直接请求HTTP接口,另一种是使用封装好的ERNIE Bot SDK。对Python开发者来说,SDK方式明显更省事,不用自己拼URL、管token、处理签名,几行代码就能跑通一次对话请求。不过真正动手时,很多人会在鉴权环节卡住:应用建在哪、Key从哪拿、token过期了怎么办,这些问题不搞清楚,代码写得再对也会报110或403之类的错误。这篇文章就把接入和鉴权的完整流程捋一遍。

一、接入前的准备工作:创建应用并获取密钥
调用文心一言API的第一步不是写代码,而是去百度智能云的千帆大模型平台注册并创建一个应用。登录控制台后,在「应用接入」页面点击创建应用,应用名称随意填,比如ernie-demo,勾选需要的接口权限,确认后系统会生成两个关键凭证:API Key和Secret Key。这两个Key是后续所有鉴权行为的基础,务必妥善保存,不要写死提交到代码仓库里。
拿到Key之后,还需要在千帆平台的模型广场确认你要用的模型,比如ERNIE-Bot、ERNIE-Bot-4或者ERNIE-Bot-turbo。不同模型的调用配额和计费策略不同,部分模型需要单独申请推理服务开通,不开通的话调用时会直接报错。建议先用免费额度较高的turbo模型跑通流程,再切换到效果更好的ERNIE-Bot-4。
另外一个容易忽略的点是账号实名认证。如果百度智能云账号没完成企业或个人实名认证,部分接口会限制调用,报错信息往往只提示「鉴权失败」,很难直接看出是认证问题,排查时值得优先确认。
二、鉴权机制解析:access_token的获取与刷新
文心一言API的鉴权核心是access_token。它由API Key和Secret Key通过OAuth接口换取得来,默认有效期约30天,SDK会在内部自动完成这个换取过程并处理续期,这也是推荐用SDK而不是裸调HTTP的主要原因之一。
如果想手动理解整个过程,可以看一下获取token的原始请求:
import requests
# 用API Key和Secret Key换取access_token
url = "https://aip.baidubce.com/oauth/2.0/token"
params = {
"grant_type": "client_credentials",
"client_id": "你的API Key",
"client_secret": "你的Secret Key"
}
resp = requests.get(url, params=params)
token = resp.json().get("access_token")
print(token)
拿到token后,把它拼接到对话接口的URL参数里就能完成一次裸调用。但这种做法有两个明显缺陷:一是token需要自己管理过期时间,失效后要重新请求;二是Key暴露在请求参数中有泄露风险。SDK方案则把这些问题都封装掉了,只需要设置环境变量QIANFAN_AK和QIANFAN_SK,SDK会自动处理token的获取、缓存与刷新,代码里完全不用出现明文Key。
总结一下鉴权方式的选择建议:临时测试或脚本场景可以手动换token,生产环境一律走SDK的环境变量方式,配合服务端的密钥管理服务(比如环境变量注入或配置中心),安全性会高很多。
三、ERNIE Bot SDK安装与完整调用示例
SDK的安装非常简单,直接用pip安装erniebot包即可,要求Python 3.8以上版本:
pip install erniebot
安装完成后,先做一次初始化验证,确认密钥配置无误:
import erniebot
# 两种方式配置密钥,二选一
# 方式一:代码中直接指定
erniebot.api_type = "aistudio"
erniebot.access_token = "你的access_token"
# 方式二:官方推荐的AK/SK方式(走千帆平台鉴权)
erniebot.api_type = "qianfan"
erniebot.ak = "你的API Key"
erniebot.sk = "你的Secret Key"
# 验证是否配置成功
response = erniebot.ChatCompletion.create(
model="ernie-bot-turbo",
messages=[{"role": "user", "content": "你好,介绍一下你自己"}]
)
print(response.result)
上面代码中api_type决定了走哪条鉴权链路。aistudio对应AI Studio的token鉴权,适合学习实验;qianfan对应千帆平台的AK/SK鉴权,适合正式业务。多轮对话时不需要自己拼接历史,只要把完整的messages数组传进去,模型天然支持上下文,把上一轮的回复以assistant角色追加进列表即可。
如果要做打字机效果的流式输出,把stream参数设为True,然后循环读取增量内容:
import erniebot
erniebot.api_type = "qianfan"
erniebot.ak = "你的API Key"
erniebot.sk = "你的Secret Key"
stream = erniebot.ChatCompletion.create(
model="ernie-bot",
messages=[{"role": "user", "content": "写一首关于秋天的诗"}],
stream=True
)
for chunk in stream:
print(chunk.result, end="", flush=True)
流式模式下每次拿到的chunk只包含一小段增量文本,拼接后才是完整回复。这种方式对需要实时展示生成过程的聊天应用非常友好,用户体验比等待完整响应好不少。
四、常见报错排查与最佳实践
接入过程中高频出现的几类报错,大致可以这样定位:错误码110表示Access Token无效或过期,重新走一遍AK/SK换取流程即可;错误码17或提示daily limit相关,说明当天调用量达到上限,要么升级配额要么等次日重置;如果返回「Open api daily request limit reached」之外的403类错误,优先检查模型是否开通了推理服务,以及账号实名状态。
工程实践上有几点经验值得遵循。第一,密钥永远不要硬编码,生产环境用环境变量或密钥管理服务加载;第二,对API调用做好异常捕获和重试,网络抖动和限流在实际业务里很常见,建议加指数退避重试逻辑;第三,合理控制上下文长度,messages总长度越接近模型上限,响应越慢、费用越高,可以做历史消息的裁剪策略,只保留最近几轮关键对话。
最后,模型版本的选择也要结合场景。turbo系列速度快、成本低,适合高频简单的问答场景;ERNIE-Bot-4能力最强,适合复杂推理和长文本生成,但计费也更高。先用低成本模型做原型验证,确认效果后再升级,是控制成本比较稳妥的做法。
文心一言APIERNIE Bot SDK百度智能云鉴权修改时间:2026-09-12 01:00:36