新規のお客様新規アカウントで DNS と CDN の無料プランをご利用いただけます。アカウント作成

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 の無料プランをご利用いただけます。

無料登録