ERNIE 5.1は2026年5月9日にリリースされ、1週間以内にそのためのQianfan APIが公開されました。独自のコードからモデルを呼び出したり、ツールコールをルーティングしたり、Apidogでエージェントループに接続したりする場合、このガイドはアカウント、キー、リクエストボディ、ストリーミング、ツール使用、エラー処理といった全手順を説明します。
実用的な内容に焦点を当てます。最終的には、動作するcurl、Python、およびNodeのスニペットと、Apidogにインポートできるリクエストコレクションが手に入ります。
ERNIE 5.1の発表詳細をまだ読んでいない場合は、まずそれをざっと見てください。DeepSeek V4やKimi K2.6とのベンチマークやトレードオフが説明されています。この記事は実装の伴侶となるものです。

ステップ1:Qianfan APIキーを取得する
ERNIE 5.1は、Baidu Intelligent CloudのQianfanプラットフォームを通じて提供されます。独立した「ERNIE API」はなく、すべてQianfanを経由します。
- cloud.baidu.comにアクセスし、Baidu Intelligent Cloudアカウントを作成またはサインインします。国際開発者はメールで登録できますが、一部のエンタープライズ機能にはまだ中国本土の電話番号が必要です。
- console.bce.baidu.com/qianfanでQianfanコンソールを開きます。
- API Key Management (
API Key 管理)の下で、Create API Keyをクリックします。ワークスペースを選択し、チャット補完サービスへのアクセスを許可します。 - キーをコピーします。
bce-v3/ALTAK-xxxx/xxxxのような形式です。ソースコードではなく、環境変数に保存してください。
export QIANFAN_API_KEY="bce-v3/ALTAK-xxxx/xxxx"
事前に知っておくべきことが2つあります。まず、新しいv2エンドポイントは単一のBearerトークンを使用します。古いv1 OAuth access_tokenフローは非推奨となっており、新しいコードをこれに基づいて構築すべきではありません。次に、ERNIE 5.1はリリース初日から有料モデルです。最初のリクエストを行う前に、少額の残高(テストには¥10で十分)をチャージしてください。
ステップ2:OpenAI互換エンドポイントをcurlで叩く
QianfanはOpenAI互換のチャット補完エンドポイントを公開しているため、OpenAIのフォーマットに対応している既存のスタックは、ベースURLの変更とモデルIDの変更だけで動作します。
ベースURL: https://qianfan.baidubce.com/v2 モデルID: ernie-5.1 (早期アクセス機能の場合はernie-5.1-previewも利用可能)
最小限の有効なリクエスト例:
curl https://qianfan.baidubce.com/v2/chat/completions \
-H "Authorization: Bearer $QIANFAN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "ernie-5.1",
"messages": [
{"role": "system", "content": "You are a senior API designer."},
{"role": "user", "content": "Sketch a REST schema for a GitHub-style PR review API. Be concise."}
],
"temperature": 0.3
}'
標準的なOpenAI形式のレスポンスが返されます。
{
"id": "chatcmpl-...",
"object": "chat.completion",
"created": 1746780000,
"model": "ernie-5.1",
"choices": [
{
"index": 0,
"message": { "role": "assistant", "content": "..." },
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 42,
"completion_tokens": 318,
"total_tokens": 360
}
}
401 Unauthorizedが表示される場合、キーが間違っているか期限切れです。403が表示される場合、キーは有効ですが、このワークスペースでモデルが有効になっていません。コンソールに戻り、ERNIE 5.1をワークスペースの許可モデルに追加してください。
ステップ3:PythonからERNIE 5.1を呼び出す
エンドポイントがOpenAI互換であるため、公式のopenai Python SDKはそのまま動作します。Qianfanにターゲットを設定してください。
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["QIANFAN_API_KEY"],
base_url="https://qianfan.baidubce.com/v2",
)
response = client.chat.completions.create(
model="ernie-5.1",
messages=[
{"role": "system", "content": "You explain APIs in plain English."},
{"role": "user", "content": "Why would I use server-sent events over WebSockets for a chat UI?"},
],
temperature=0.4,
)
print(response.choices[0].message.content)
print(f"\nTokens used: {response.usage.total_tokens}")
コードベースにOpenAI SDKのラッパーが既にある場合、A/BテストのためにERNIE 5.1に置き換えるのは1行の変更で済みます。DeepSeekのAPIや他のほとんどの中国のモデルプロバイダーでも同様のトリックが使えます。
ステップ4:チャット形式UIのためのトークンストリーミング
ユーザー向けのチャットでは、ストリーミングが必要です。stream: trueを設定し、サーバー送信イベントを消費します。
stream = client.chat.completions.create(
model="ernie-5.1",
messages=[{"role": "user", "content": "Write a haiku about API versioning."}],
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True)
デバッグ用のcurlの例:
curl https://qianfan.baidubce.com/v2/chat/completions \
-H "Authorization: Bearer $QIANFAN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "ernie-5.1",
"stream": true,
"messages": [{"role": "user", "content": "Stream a 3-sentence joke."}]
}' \
--no-buffer
ストリーム形式はOpenAIと同一です。data: {...}の行がdata: [DONE]で終了します。
ステップ5:ツールでERNIE 5.1を使用する(エージェント機能)
ここにERNIE 5.1がその発表見出しを飾る理由があります。このモデルはτ³-benchとSpreadsheetBench-VerifiedでDeepSeek-V4-Proを上回るスコアを記録しており、これはツール呼び出しがデモだけでなく本番環境でも機能することを意味します。
OpenAIの関数呼び出しと同じスキーマです。
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get current weather for a city.",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string", "description": "City name, e.g. Singapore"},
"unit": {"type": "string", "enum": ["celsius", "fahrenheit"]},
},
"required": ["city"],
},
},
}
]
response = client.chat.completions.create(
model="ernie-5.1",
messages=[{"role": "user", "content": "What's the weather in Tokyo right now?"}],
tools=tools,
tool_choice="auto",
)
tool_calls = response.choices[0].message.tool_calls
if tool_calls:
call = tool_calls[0]
print(f"Model wants to call: {call.function.name}({call.function.arguments})")
コードが実際のツールを実行した後、結果をtoolロールメッセージとして追加し、再度呼び出します。ループはfinish_reason == "stop"かつtool_callsが空の場合に終了します。
注意点:ERNIE 5.1は、ツール引数をクリーンなJSON文字列としてではなく、コードフェンス内に入れ子になった文字列化されたJSONとして返すことがあります。json.loads()をtry/exceptでラップして防御的にパースし、失敗した場合は、再試行する前に```jsonフェンスを削除してください。
ステップ6:Node.jsからERNIE 5.1を呼び出す
openai v5+を使用するあらゆるNodeプロジェクトにそのまま組み込めます。
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.QIANFAN_API_KEY,
baseURL: "https://qianfan.baidubce.com/v2",
});
const completion = await client.chat.completions.create({
model: "ernie-5.1",
messages: [
{ role: "user", content: "Return a JSON object with 3 API design tips." },
],
response_format: { type: "json_object" },
});
console.log(completion.choices[0].message.content);
response_format: { type: "json_object" }は機能し、信頼性があります。厳密なJSONスキーマ(json_schema)はQianfanでまだ展開中ですので、制約を信頼するのではなく、コード内でレスポンスの形式を確認してください。
ステップ7:Apidogでテストと比較を行う
ERNIE 5.1、DeepSeek V4、Kimi K2.6のどれにするか決める場合、ターミナルから行うべきではありません。Apidogを使用して、プロバイダーごとにフォルダを分け、同一のリクエストボディ、APIキーごとに保存された環境を持つ単一のワークスペースを構築してください。
- Apidogを開き、「LLM bake-off」という新しいプロジェクトを作成します。

QIANFAN_API_KEY、DEEPSEEK_API_KEY、MOONSHOT_API_KEYを変数として持つ環境を追加します。

それぞれのプロバイダーのベースURLを指し、modelをそれぞれernie-5.1、deepseek-chat、kimi-k2-6に設定した3つのリクエストを作成します。
3つすべてに同じmessages配列を固定します。Apidogの「Run」機能を使用して、それらを並行して実行し、出力を比較します。
無料枠でもこれは快適に利用できます。Apidogは環境ごとにリクエスト履歴を保存するため、来週に戻ってきて、新しいモデルバージョンに対してまったく同じ評価を再実行できます。tmuxペインでcurlを監視するよりもはるかに優れています。
マルチプロバイダーテストの詳細については、Test local LLMs as APIsおよびGLM 5.1 APIガイドを参照してください。
料金、レート制限、およびクォータ
ERNIE 5.1のQianfanの公開料金はリリース投稿にはありませんでした。社内で数値を引用する前に、ライブコンソールの料金表を確認してください。お待ちいただく間に3つの実用的なヒントです。
- デフォルトのレート制限はワークスペーススコープです。新規アカウントは低いQPS制限から始まります。テストが完了したら、コンソールから引き上げてください。
- トークン使用量はレスポンスに表示されます。
usageフィールドには、呼び出しごとのprompt_tokens、completion_tokens、およびtotal_tokensが示されます。これらの情報をリクエストごとにログに記録してください。コスト計算のためにはダッシュボードだけを信頼しないでください。 - キャッシュは自動ではありません。Anthropicとは異なり、Qianfanは現在ERNIE 5.1用のプロンプトキャッシュプリミティブを公開していません。2,000トークンのシステムプロンプトがある場合、呼び出しごとにその料金を支払うことになります。これを考慮してアーキテクチャを設計してください。
あなたを救うエラー処理
実際に遭遇するエラーを、おおよその頻度順に示します。
| ステータス | 意味 | 解決策 |
|---|---|---|
| 401 | Bearerトークンが不正または期限切れ | コンソールから再生成 |
| 403 | このワークスペースでモデルが有効になっていない | コンソールでERNIE 5.1を追加 |
| 429 | レート制限に達した | バックオフ + ジッター付きリトライ |
400 (invalid messages) |
メッセージロールの順序が不正 | ユーザー/アシスタントの交互表示を確認 |
| 500/502 | Qianfan側の一時的な問題 | 一度リトライ。継続する場合はステータスページを確認 |
すべての呼び出しを、3回まで試行する指数バックオフ付きリトライでラップしてください。本番環境では、レスポンスヘッダーからrequest_idをログに記録してください。Baiduサポートがあなたのケースをデバッグする際に必要となります。
最小限の本番向けラッパー
今日、ERNIE 5.1を実際のアプリケーションに組み込みたい場合、ここに恥ずかしくない最小限のラッパーを示します。
import os, time, random, json
from openai import OpenAI, RateLimitError, APIError
client = OpenAI(
api_key=os.environ["QIANFAN_API_KEY"],
base_url="https://qianfan.baidubce.com/v2",
)
def chat(messages, *, model="ernie-5.1", temperature=0.3, max_retries=3):
for attempt in range(max_retries):
try:
return client.chat.completions.create(
model=model,
messages=messages,
temperature=temperature,
)
except RateLimitError:
time.sleep((2 ** attempt) + random.random())
except APIError as e:
if e.status_code and e.status_code >= 500 and attempt < max_retries - 1:
time.sleep(1 + attempt)
continue
raise
raise RuntimeError("ERNIE 5.1 retries exhausted")
これは80%のケースをカバーします。ツールループとストリーミングについては、その上に構築してください。
よくある質問
ERNIE 5.1 APIは無料ですか? いいえ。Qianfanは従量課金制です。永続的な無料枠はなく、新規アカウントには試用クレジットが与えられることがあります。無料での実験には、ernie.baidu.comのチャットUIを利用するか、無料LLMの選択肢を検討してください。
ERNIE 5.1をローカルで実行できますか? いいえ。公開されている重みはありません。オンプレミスが必須要件である場合は、代わりにDeepSeek V4をローカルで実行する方法または2026年の最高のローカルLLMを参照してください。
OpenAI SDKは変更なしで動作しますか? はい、base_urlをhttps://qianfan.baidubce.com/v2に、api_keyをQianfanキーに設定すれば動作します。modelフィールドはOpenAIのモデルIDではなく、QianfanのモデルIDを受け取ります。関数呼び出し、ストリーミング、response_format: json_objectはすべて機能します。厳密なjson_schema検証はまだ展開中です。
ERNIE 5.1は中国語と英語のプロンプトをどのように扱いますか? どちらも第一級の扱いです。Arena Searchスコア1,223は、混合言語の投票者プールから得られました。技術的な英語タスク(コード、API設計)では、クローズドな最先端モデルと競合し、中国語のクリエイティブライティングでは、中国モデルの中で最高クラスです。
最大出力長はどのくらいですか? 公式には公開されていません。実際には、シングルターン応答はモデルが完了するまでに約8Kトークンで上限に達します。長文生成の場合は、分割して続行してください。
ERNIE 5.1でエージェントを構築しますか?Apidogをダウンロードして、OpenAI互換のリクエストコレクションを使用し、他のサービスとともにQianfanエンドポイントをモック、テスト、ドキュメント化してください。
