共计 2362 个字符,预计需要花费 6 分钟才能阅读完成。
为什么需要这份指南?
最近在尝试对接国内几个主流的 ChatGPT 平台时,发现官方文档往往假设读者已经具备相关经验,很多细节需要反复踩坑才能搞清楚。作为过来人,我整理了这份从零开始的实战指南,希望能帮新手少走弯路。

主流平台横向对比
先快速了解下三大平台的特性差异:
- 文心一言(ERNIE)
- 优势:中文理解能力强,文档较完善
- API 限制:默认 QPS=2,超过需要申请
-
计费:按 token 计费,新用户送 100 万 token
-
通义千问
- 优势:支持超长文本(最高 32k tokens)
- 特殊要求:必须备案域名才能调用
-
计费:阶梯定价,首月免费
-
讯飞星火
- 特色:支持语音交互 API
- 限制:需要企业认证
- 计费:套餐包模式
建议新手先从文心一言开始尝试,它的错误提示相对友好。
从注册到第一个 API 调用
1. 获取 API 密钥
以文心一言为例:
- 访问 平台官网
- 注册后进入『控制台』->『应用管理』
- 创建新应用,记录下 AppID 和 API Key
小技巧:建议立即设置用量告警,避免意外超限
2. 最小可行代码示例(Python)
import os
from openai import OpenAI
# 建议将密钥存储在环境变量中
client = OpenAI(api_key=os.getenv('ERNIE_API_KEY'),
base_url="https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions"
)
async def ask_ernie(prompt):
try:
response = await client.chat.completions.create(
model="ERNIE-Bot-turbo",
messages=[{"role": "user", "content": prompt}],
temperature=0.7, # 控制生成随机性
stream=True # 启用流式响应
)
# 处理流式输出
full_response = ""
async for chunk in response:
content = chunk.choices[0].delta.content
if content:
full_response += content
print(content, end="")
return full_response
except Exception as e:
print(f"请求失败: {str(e)}")
return None
3. Node.js 版本核心逻辑
const {ErnieBot} = require('erniebot');
const client = new ErnieBot({
apiKey: process.env.ERNIE_API_KEY,
// 重要:设置合理的超时时间
timeout: 30000
});
async function streamChat(prompt) {
const stream = await client.chat.completions.create({
model: "ERNIE-Bot",
messages: [{role: "user", content: prompt}],
stream: true
});
for await (const chunk of stream) {process.stdout.write(chunk.choices[0]?.delta?.content || '');
}
}
开发者必知的避坑技巧
HTTP 头设置
- 必须设置 User-Agent,否则可能被拦截
- 示例 Headers:
{ "Content-Type": "application/json", "User-Agent": "MyApp/1.0 (compatible; ernie-client)" }
处理长文本
当遇到 content-length 限制时(通常 8k 左右):
- 按段落拆分文本
- 先发送摘要请求
- 分段处理后再合并
def chunk_text(text, max_length=4000):
return [text[i:i+max_length] for i in range(0, len(text), max_length)]
会话状态保持
推荐使用 session_id 跟踪对话上下文:
class ChatSession:
def __init__(self):
self.history = []
def add_message(self, role, content):
self.history.append({"role": role, "content": content})
# 保持最近 5 轮对话
if len(self.history) > 5:
self.history = self.history[-5:]
进阶:多平台路由方案
使用 LangChain 实现智能路由:
from langchain.chat_models import ErnieBot, TongyiQianwen
from langchain.llms import RouterChain
router = RouterChain(
routes=[(lambda input: "代码" in input, ErnieBot()),
(lambda input: len(input) > 3000, TongyiQianwen())
],
default=ErnieBot())
监控与优化建议
- 记录每次请求的耗时和 token 用量
- 对慢请求添加重试机制
- 使用缓存重复问题回答
- 定期检查平台更新日志
总结
经过两周的实践验证,国内平台的 API 稳定性已经能满足生产需求。建议先从简单场景入手,逐步扩展到复杂业务流程。遇到问题时,多查阅平台的错误代码文档(文心一言的错误码说明很详细)。
下一步可以尝试:
– 结合 RAG 实现知识增强
– 用微调 API 定制专属模型
– 开发多模态交互功能
希望这份指南能帮你快速上手,如果有其他实战经验欢迎交流补充!
正文完
