从零开始:百度千帆ERNIE-Bot大模型API测试全流程指南

一、前期准备:环境与工具配置

1.1 账号与权限获取

访问百度智能云官方平台,完成企业/个人开发者实名认证。在控制台搜索”千帆大模型平台”,进入服务管理页面申请ERNIE-Bot API使用权限。需注意:

  • 企业用户需完成企业认证以获取更高调用额度
  • 个人开发者每日调用次数存在限制(通常500次/日)
  • 申请后需等待1-2个工作日完成审核

1.2 开发环境搭建

推荐使用Python 3.8+环境,通过pip安装必要依赖:

  1. pip install requests json5
  2. # 可选安装日志库
  3. pip install loguru

建议使用虚拟环境管理项目依赖,避免版本冲突:

  1. python -m venv ernie_env
  2. source ernie_env/bin/activate # Linux/Mac
  3. .\ernie_env\Scripts\activate # Windows

二、API调用核心流程解析

2.1 认证机制实现

百度千帆平台采用API Key+Secret Key双因子认证,生成访问令牌的完整流程:

  1. 在控制台获取AK/SK对
  2. 通过HMAC-SHA256算法生成签名
  3. 构造包含timestamp、nonce等参数的请求头

示例代码(签名生成部分):

  1. import hmac
  2. import hashlib
  3. import base64
  4. import time
  5. import random
  6. from urllib.parse import quote
  7. def generate_signature(method, url, body, ak, sk):
  8. timestamp = str(int(time.time()))
  9. nonce = str(random.randint(10000, 99999))
  10. # 构造待签名字符串
  11. string_to_sign = f"{method}\n{url}\n{body}\n{timestamp}\n{nonce}"
  12. # HMAC-SHA256签名
  13. hmac_code = hmac.new(
  14. sk.encode('utf-8'),
  15. string_to_sign.encode('utf-8'),
  16. hashlib.sha256
  17. ).digest()
  18. # Base64编码
  19. signature = base64.b64encode(hmac_code).decode('utf-8')
  20. return {
  21. 'accessKey': ak,
  22. 'timestamp': timestamp,
  23. 'nonce': nonce,
  24. 'signature': signature
  25. }

2.2 核心请求构造

ERNIE-Bot API v1版本支持两种调用模式:

  • 标准模式:适合单轮问答场景
  • 流式模式:支持实时文本生成(SSE协议)

标准模式请求示例:

  1. import requests
  2. import json
  3. def call_ernie_bot(prompt, ak, sk):
  4. url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions"
  5. headers = {
  6. 'Content-Type': 'application/json'
  7. }
  8. # 生成认证信息
  9. auth_info = generate_signature("POST", url, json.dumps({
  10. "messages": [{"role": "user", "content": prompt}]
  11. }), ak, sk)
  12. # 合并请求头
  13. headers.update({
  14. 'X-Bce-Signature': auth_info['signature'],
  15. 'X-Bce-Timestamp': auth_info['timestamp'],
  16. 'X-Bce-Nonce': auth_info['nonce'],
  17. 'X-Bce-AccessKey': auth_info['accessKey']
  18. })
  19. data = {
  20. "messages": [{"role": "user", "content": prompt}],
  21. "temperature": 0.7,
  22. "top_p": 0.8,
  23. "penalty_score": 1.0
  24. }
  25. response = requests.post(
  26. url,
  27. headers=headers,
  28. data=json.dumps(data)
  29. )
  30. return response.json()

三、进阶调用技巧

3.1 参数优化策略

参数 作用范围 推荐值 适用场景
temperature 创造力控制 0.3-0.7 低值适合事实问答,高值适合创意生成
top_p 核心词筛选 0.8-0.95 平衡多样性与相关性
max_tokens 输出长度 200-2000 根据应用场景调整
penalty_score 重复惩罚 1.0-1.2 减少重复内容生成

3.2 错误处理机制

常见错误码及解决方案:

  • 401 Unauthorized:检查AK/SK有效性及签名算法
  • 429 Too Many Requests:实现指数退避重试机制
  • 500 Internal Error:捕获异常并记录上下文信息

推荐实现的重试逻辑:

  1. from time import sleep
  2. def call_with_retry(prompt, ak, sk, max_retries=3):
  3. for attempt in range(max_retries):
  4. try:
  5. result = call_ernie_bot(prompt, ak, sk)
  6. if result.get('error_code') == 0:
  7. return result
  8. elif result.get('error_code') == 429:
  9. wait_time = min(2**attempt, 30)
  10. sleep(wait_time)
  11. continue
  12. else:
  13. raise Exception(f"API Error: {result}")
  14. except Exception as e:
  15. if attempt == max_retries - 1:
  16. raise
  17. sleep(2**attempt)

四、性能优化建议

4.1 请求批处理

对于高频调用场景,建议:

  • 实现请求队列缓冲机制
  • 采用异步IO框架(如aiohttp)
  • 控制并发数不超过5个/账号

4.2 响应缓存策略

构建两级缓存体系:

  1. 短期缓存:Redis存储最近1000条问答对(TTL=5分钟)
  2. 长期缓存:数据库存储高频问题模板

缓存命中优化示例:

  1. from functools import lru_cache
  2. @lru_cache(maxsize=1000)
  3. def cached_ernie_call(prompt):
  4. # 实际调用逻辑
  5. pass

五、安全合规注意事项

  1. 数据脱敏:调用前过滤用户敏感信息
  2. 日志管理:存储时去除可识别个人信息
  3. 内容过滤:后处理阶段增加敏感词检测
  4. 合规审计:定期检查调用记录是否符合服务条款

六、测试用例设计建议

6.1 功能测试

  • 基础问答测试(事实性问题)
  • 多轮对话测试(上下文保持)
  • 边界条件测试(超长输入/输出)

6.2 性能测试

  • 响应时间基准测试(P90/P99指标)
  • 并发压力测试(逐步增加QPS)
  • 稳定性测试(持续运行24小时)

6.3 兼容性测试

  • 不同Python版本测试
  • 异常输入处理测试
  • 网络波动场景测试

七、后续开发衔接

完成API测试后,可进一步:

  1. 集成微信公众平台API
  2. 构建消息路由中间件
  3. 实现对话状态管理
  4. 部署监控告警系统

建议采用微服务架构,将大模型调用封装为独立服务,通过RESTful接口与其他组件交互。对于高并发场景,可考虑使用消息队列削峰填谷。

通过本指南的系统学习,开发者已掌握百度千帆ERNIE-Bot大模型API的核心调用方法。后续系列文章将深入讲解如何将这些能力与微信生态深度整合,构建具备上下文理解、多轮对话能力的智能聊天机器人。建议持续关注平台文档更新,及时适配API版本迭代。