百川智能API接入:密钥获取与Python调用示例
百川智能API提供兼容OpenAI规范的HTTP接口,拿到API Key后即可用Python或任意HTTP客户端调用。
本文从注册开放平台开始,演示密钥创建、环境变量配置、普通请求和流式输出,并给出401、429等常见报错的排查方法。
调用前需要准备什么
开始前确认三件事:
- 一个可登录的百川开放平台账号(用于创建API Key)。
- Python 3.8及以上环境,能正常执行
pip install。 - 能访问外网的网络环境,因为请求走HTTPS。
如果只是本地测试,不需要公网IP或域名;
如果部署在服务器上,确保服务器出方向443端口未被安全组拦截。
创建API Key并确认接口地址
登录百川开放平台控制台,在「API Keys」或「密钥管理」页面点击创建,复制生成的Key。
Key通常只完整显示一次,建议立即保存到密码管理器。
接口地址使用OpenAI兼容的Base URL,常见格式为https://api.baichuan-ai.com/v1,模型名以控制台文档列出的为准(例如Baichuan4系列)。
具体地址和模型名可能随平台调整,以控制台「文档」页为准。
把Key写入环境变量,避免硬编码到代码里:
export BAICHUAN_API_KEY="你的API Key"
Windows PowerShell用$env:BAICHUAN_API_KEY="你的API Key"。
环境变量设置后新开终端才生效。
用Python发起第一次调用
安装OpenAI官方SDK,百川接口兼容其调用方式:
pip install openai
新建test_baichuan.py,写入以下代码,注意base_url末尾保留/v1:
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["BAICHUAN_API_KEY"],
base_url="https://api.baichuan-ai.com/v1"
)
resp = client.chat.completions.create(
model="Baichuan4",
messages=[{"role": "user", "content": "用一句话解释什么是API"}]
)
print(resp.choices[0].message.content)
执行python test_baichuan.py。
如果终端打印出模型回复,说明密钥和网络都正常;
如果报错,先看下一节的排查表。
需要流式输出时,把stream=True加上,然后遍历返回的chunk:
stream = client.chat.completions.create(
model="Baichuan4",
messages=[{"role": "user", "content": "写一段100字的自我介绍"}],
stream=True
)
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True)
报错排查与避坑
401 Unauthorized:Key错误、过期或环境变量未生效。
先在终端执行echo $BAICHUAN_API_KEY确认变量有值,再检查代码里是否误用了其他平台的Key。
429 Too Many Requests:触发限流。
降低并发数,或在代码里加指数退避重试,不要用while True死循环猛刷。
连接超时:服务器安全组未放行出方向443端口,或DNS解析异常。
用curl -I https://api.baichuan-ai.com测试连通性。
模型名报错:控制台文档中的模型名可能更新,不要照搬旧文章里的名称,以当前文档为准。
另外,不要在Git提交中暴露API Key;
生产环境建议通过密钥管理服务或环境变量注入,并给Key设置最小权限和定期轮换。
验证接入是否成功
除了看单次调用是否返回内容,建议做两项检查:
- 用
curl直接请求接口,排除SDK版本干扰:curl https://api.baichuan-ai.com/v1/models -H "Authorization: Bearer $BAICHUAN_API_KEY",能返回模型列表即说明鉴权通过。 - 在代码里打印
resp.usage,确认token计数正常,便于后续估算成本。
如果返回内容为空但无报错,检查messages格式是否为[{"role":"user","content":"..."}],以及是否误传了空字符串。
按以上步骤走完,百川智能API的基础调用就通了,后续可再根据业务需要调整模型和参数。