OpenAI SDK で始める Yeap LLM API
Yeap LLM API は OpenAI 互換です。SDK はそのまま、base_url を https://llm.yeap.cloud/v1 に変更して利用できます。キーの作成、Python と Node.js の例、ストリーミング、埋め込みベクトル、キーごとのクォータ・モデル制限・IP 制限を解説します。
Yeap LLM API は、OpenAI 互換のモデルゲートウェイです。目指しているのは、新しい SDK の学習もコードの書き直しも不要にすることです。既存の OpenAI SDK をそのまま使い、base_url を https://llm.yeap.cloud/v1 に変更し、Yeap の API キーを設定するだけで利用できます。利用料金はトークン単位で Yeap アカウントの残高から差し引かれます。この残高は、ほかの Yeap 製品と共通です。
利用できるエンドポイント
| エンドポイント | 用途 |
|---|---|
POST /v1/chat/completions | チャット補完(ストリーミング対応) |
POST /v1/completions | テキスト補完 |
POST /v1/embeddings | 埋め込みベクトルの生成 |
POST /v1/images/generations | 画像生成 |
POST /v1/audio/transcriptions | 音声の文字起こし |
GET /v1/models | キーで利用できるモデルの一覧取得 |
すべてのエンドポイントは Authorization: Bearer <key> で認証します。モデルや料金は随時変わり、常に GET /v1/models またはコンソールのモデル一覧が正式な情報源となります。そのため、以下の例では具体的なモデル名の代わりにプレースホルダーを使用しています。
ステップ1:API キーを作成する
ログイン先の console.yeap.cloud を開き、「LLM → トークン」でキーを作成します。次の項目を設定できます。
- 名前:
blog-summarizer-prodのように、プロジェクトや環境がわかる名前をお勧めします。 - クォータ:このキーの利用金額の上限を設定するか、無制限にします。
- モデル制限:キーで利用できるモデルを特定のモデルに限定します。
- IP 制限:特定の IP アドレスからのリクエストだけを受け付けます。
- 有効期限:この日時を過ぎると、キーは自動的に使えなくなります。
キーは sk- で始まります。作成したらすぐに保存してください。プロジェクトごと、環境ごとに別のキーを使用し、本番環境以外のキーには低いクォータを設定すると、キーが漏えいした場合の影響を限定できます。
キーはリポジトリに保存せず、環境変数で管理してください。
export YEAP_API_KEY="sk-..."
ステップ2:curl で接続を確認する
curl https://llm.yeap.cloud/v1/models \
-H "Authorization: Bearer $YEAP_API_KEY"
JSON レスポンスでは、各項目の id がリクエストに使用できるモデル名です。これらの項目は data 配列に含まれています。
ステップ3:Python
pip install openai で公式 SDK をインストールします。
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["YEAP_API_KEY"],
base_url="https://llm.yeap.cloud/v1",
)
resp = client.chat.completions.create(
model="your-model-id", # pick one from /v1/models
messages=[
{"role": "system", "content": "You are a concise technical assistant."},
{"role": "user", "content": "Explain what a CDN is in one sentence."},
],
)
print(resp.choices[0].message.content)
print(resp.usage) # prompt_tokens / completion_tokens / total_tokens
ストリーミング
チャットアプリケーションでは、通常、生成中の出力を順次表示したいものです。stream=True を設定すると、レスポンスが Server-Sent Events として段階的に届きます。
stream = client.chat.completions.create(
model="your-model-id",
messages=[{"role": "user", "content": "Write a short poem about cache hits."}],
stream=True,
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
埋め込みベクトル
emb = client.embeddings.create(
model="your-embedding-model-id",
input=["Yeap CDN supports HTTP/3", "How to purge the cache"],
)
vectors = [item.embedding for item in emb.data]
print(len(vectors), len(vectors[0]))
画像生成と文字起こし
画像と音声のエンドポイントでも、SDK の標準メソッドを使用できます。対応する種類のモデルを指定するだけです。
# Image generation
img = client.images.generate(
model="your-image-model-id",
prompt="A minimalist illustration of a server room",
size="1024x1024",
)
print(img.data[0].url or "base64 image returned")
# Speech to text
with open("meeting.mp3", "rb") as f:
tr = client.audio.transcriptions.create(
model="your-transcription-model-id",
file=f,
)
print(tr.text)
画像はモデルによって URL または base64 で返されるため、コードでは両方に対応しておくとよいでしょう。
コストを予測しやすくする習慣
max_tokensを設定する。 出力トークンは通常、入力トークンより高額です。リクエストの種類ごとに適切な出力上限を設ければ、モデルが延々と出力を続けることによる予想外の請求を防げます。- コンテキストを整理する。 複数ターンの会話では、毎ターン履歴全体が再送されます。古いターンを要約したり削除したりすることで、入力トークンを大幅に削減できます。
- タスクに合ったモデルを選ぶ。 分類、抽出、書き換えは、小さなモデルでも十分に対応できることが多いため、大きなモデルは高度な推論が必要なタスクに使いましょう。標準で使うモデルを決める前に、Playground でいくつかのモデルを比較してください。
- キーのクォータを最後の歯止めにする。 バグによってコードが API をループ呼び出ししても、キーのクォータが支出の際限ない増加を防ぎます。
ステップ4:Node.js
npm install openai でインストールします。
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.YEAP_API_KEY,
baseURL: "https://llm.yeap.cloud/v1",
});
const stream = await client.chat.completions.create({
model: "your-model-id",
messages: [{ role: "user", content: "List three ways to reduce API latency." }],
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}
コードを変更せずに切り替える
公式の OpenAI SDK は、環境変数 OPENAI_BASE_URL と OPENAI_API_KEY を読み込みます。すでに OpenAI SDK を使っているツールやスクリプトのコードを変更したくない場合は、環境変数だけを変更してください。
export OPENAI_BASE_URL="https://llm.yeap.cloud/v1"
export OPENAI_API_KEY="$YEAP_API_KEY"
カスタム API エンドポイントに対応したサードパーティーツールの多くでも、同じ方法を利用できます。エンドポイントを https://llm.yeap.cloud/v1 に、キーを Yeap のキーに設定してください。
エラーと再試行
本番環境では、失敗に備えた処理を用意してください。
- 401:キーが無効または期限切れか、キーの IP 許可リストに含まれないアドレスからのリクエストです。キーの設定を確認してください。
- クォータ不足:キーのクォータを使い切った場合や、アカウントの残高が不足している場合は、リクエストが拒否され、エラーメッセージに理由が表示されます。コンソールでキーのクォータを引き上げるか、残高をチャージしてください。
- 429 および 5xx:通常は一時的なエラーであり、バックオフを伴う再試行が適しています。OpenAI SDK は自動で再試行します。回数は
max_retries、リクエストごとのタイムアウトはtimeoutで調整できます。
client = OpenAI(
api_key=os.environ["YEAP_API_KEY"],
base_url="https://llm.yeap.cloud/v1",
max_retries=3,
timeout=60.0,
)
使用状況の確認
すべてのリクエストについて、モデル、トークン数、料金がログに記録されます。コンソールの「LLM」メニューでは、リクエストログや統計を参照し、キーごとの支出を確認できるため、プロジェクト別の管理が容易です。コードを書く前にモデルを比較したい場合は、コンソールの Playground でブラウザから直接試してみてください。
まとめ
Yeap LLM API の利用開始に必要なのは、キー、base_url、そして /v1/models から取得したモデル名の3つです。それ以外のコードは、すでにお手元にあります。
Yeap Cloud で開発を始める
新規アカウントで DNS と CDN の無料プランをご利用いただけます。
続きを読む
キャッシュパージ実践ガイド:キャッシュキーからバリアント単位のパージまで
キャッシュをパージしたのに、まだヒットするのでしょうか。多くの場合、答えはキャッシュキーにあります。Yeap CDN のキャッシュキーの構築方法、クエリ文字列モードの動作、クエリ文字列の有無によって URL パージの削除対象がどう変わるかを解説します。

PHP2Shell(CVE-2026-109618/109619):エッジでの仮想パッチ対応
2 件の重大な PHP アドバイザリにより、OOM bailout と古いグローバル状態を通じて認証なしの RCE が可能になります。脆弱性の仕組み、Yeap WAF が初日からエッジでブロックしているもの、そしてオリジン側で引き続き修正が必要なことを解説します。
エッジにおける TLS セッション再開と HTTP/3
セッション再開により、再訪問者は TLS のフルハンドシェイクを省略できます。再起動後もチケット鍵を保持する必要がある理由、安全なローテーションの方法、エッジの HTTP/3 が既存のリクエスト処理パイプラインを再利用する仕組みを解説します。