コンテンツへスキップ
SDK

SDK

OpenAI または Anthropic の SDK なら、どれでもそのまま動作します。

Shannon は OpenAI と Anthropic のワイヤー形式に対応しているため、両方の公式 SDK をそのまま使えます。クライアントで変更するのは、ベース URL、API キー、モデル ID の三つの値です。コードのそれ以外の部分は変わりません。

設定する項目

設定 OpenAI SDK Anthropic SDK
ベース URL https://api.shannon-ai.com/v1 https://api.shannon-ai.com
API キー Shannon のキー。SDK はそれを Authorization: Bearer として送信します。 Shannon のキー。SDK はそれを x-api-key として送信します。
モデル 公開されているモデル ID。たとえば shannon-3。 公開されているモデル ID。たとえば shannon-1.6-lite。
到達するエンドポイント /v1/chat/completions、/v1/responses、/v1/models /v1/messages、/v1/messages/count_tokens
環境変数 OPENAI_API_KEY と OPENAI_BASE_URL。値を渡さない場合に、Python と JavaScript の SDK が読み取ります。 ANTHROPIC_API_KEY と ANTHROPIC_BASE_URL。値を渡さない場合に、Python と TypeScript の SDK が読み取ります。

二つのベース URL は /v1 の分だけ異なります。OpenAI SDK はベース URL に /chat/completions を付け足し、Anthropic SDK は /v1/messages を付け足します。Shannon が公開していないモデル名には、400 と unknown model で応答します。 モデルと料金

キーは、キーと使用量のページにあります。 キーと使用量

OpenAI SDK

公式の OpenAI SDK は POST /v1/chat/completions と POST /v1/responses を呼び出します。各サンプルは、ユーザーメッセージをひとつ送信し、回答を出力します。

# pip install openai
from openai import OpenAI

client = OpenAI(
    api_key="YOUR_API_KEY",
    base_url="https://api.shannon-ai.com/v1",
)

response = client.chat.completions.create(
    model="shannon-3",
    messages=[{"role": "user", "content": "Hello, Shannon!"}],
)
print(response.choices[0].message.content)
言語 インストール ベース URL のオプション ソース
Python pip install openai base_url openai/openai-python
JavaScript / TypeScript npm install openai baseURL openai/openai-node
Go go get github.com/openai/openai-go/v3 option.WithBaseURL openai/openai-go
Java com.openai:openai-java baseUrl openai/openai-java
.NET dotnet add package OpenAI OpenAIClientOptions.Endpoint openai/openai-dotnet

二つのエンドポイントのすべてのフィールドは、それぞれの専用ページで説明しています。 Chat Completions Responses API

Anthropic SDK

公式の Anthropic SDK は POST /v1/messages を呼び出します。すべての呼び出しで max_tokens が必要なため、サンプルでは、それを適用する shannon-1.6-lite を使っています。各サンプルは、回答のテキストブロックを出力します。

# pip install anthropic
import anthropic

client = anthropic.Anthropic(
    api_key="YOUR_API_KEY",
    base_url="https://api.shannon-ai.com",
)

message = client.messages.create(
    model="shannon-1.6-lite",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Hello, Shannon!"}],
)
for block in message.content:
    if block.type == "text":
        print(block.text)
言語 インストール ベース URL のオプション ソース
Python pip install anthropic base_url anthropics/anthropic-sdk-python
TypeScript npm install @anthropic-ai/sdk baseURL anthropics/anthropic-sdk-typescript
Go go get github.com/anthropics/anthropic-sdk-go option.WithBaseURL anthropics/anthropic-sdk-go
Java com.anthropic:anthropic-java baseUrl anthropics/anthropic-sdk-java

Messages 形式とその違いは、Anthropic 互換のページにあります。 Anthropic 形式

SDK が前提にできること

  • API が使わないリクエストフィールドは受け付けられます。API が認識するフィールドを誤った型で送信した場合は、422 で応答します。
  • SDK が付加するバージョンヘッダーとベータヘッダー(anthropic-version、anthropic-beta、openai-beta)は受け付けられます。どれも必須ではありません。
  • 応答の model は公開されている ID なので、そのまま送り返せます。
  • /v1/messages では、応答が thinking ブロックで始まることがあります。最初のブロックを取るのではなく、タイプ text のブロックを読み取ってください。
  • ストリーミングは、SDK 自身のストリームヘルパーで動作します。使用量はすべてのストリームの最後に届きます。
  • すべての応答に x-request-id ヘッダーが付きます。独自の x-request-id を送信すると、同じ値が返されます。

コミュニティ SDK

他の作者が OpenAI API 向けに書いたクライアントも、同じように動作します。クライアントに、/v1 を含むベース URL、キー、Shannon のモデル ID を渡してください。これらは作者によって保守されており、Shannon が保守しているものではありません。

言語 インストール クライアント
Go go get github.com/sashabaranov/go-openai sashabaranov/go-openai
Ruby gem install ruby-openai alexrudall/ruby-openai
PHP composer require openai-php/client openai-php/client
Rust cargo add async-openai 64bit/async-openai

SDK を使わない場合

SDK は必須ではありません。JSON を送信できる HTTP クライアントなら、どれでも動作します。

  • JSON ボディと Content-Type: application/json ヘッダーを付けた POST。これがないリクエストには 415 で応答します。
  • キーは Authorization: Bearer <key> または x-api-key: <key> で送信します。どちらもすべてのエンドポイントで動作します。
  • 最大 32 MiB のボディ。
  • "stream": true を指定すると、応答は server-sent events のストリーム(text/event-stream)になります。一行ずつ読み取り、バッファリングしないでください。
  • エラーは、HTTP ステータスとともに、error.type と error.message を持つ JSON ボディです。
curl https://api.shannon-ai.com/v1/chat/completions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "shannon-3",
    "messages": [{"role": "user", "content": "Hello, Shannon!"}]
  }'

ストリームのイベントとエラータイプについては、こちらを参照してください: ストリーミング エラー処理