0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

国産LLM「Sarashina3」の無償ベータAPIを6モデルとも叩いた:速いが、OpenAI互換を前提にすると400になる

0
Posted at

2026年10月13日、SB Intuitionsが「Sarashinaサービス」の無償ベータ版を公開しました。
Googleアカウントでログインするだけで、Sarashina3シリーズの6モデルをAPIとチャットから無料で使えます。

公開当日に、APIの6モデルをすべて呼び出しました。
対象は対話、ストリーミング、ツール呼び出し、構造化出力、安全性判定、埋め込み、リランキング、翻訳です。
以下の数値はすべて2026年10月13日に各ケースを1回ずつ実行した結果で、統計的な評価ではありません。
チャット画面(Web検索や翻訳のUI)は試していません。

最初に分かったこと

観察したこと 結果 使うときの影響
応答の速さ 最初のトークンまで mini 0.50秒、nano 0.41秒。nanoは282トークンの回答を1.38秒で返した 対話UIやバッチ処理に載せやすい
OpenAI互換の範囲 max_tokens と logprobs は400、/v1/models は404 既存のOpenAI向けコードは、送っているパラメータを確認してからつなぐ
レート制限 miniは6 RPM。7回目から429で、Retry-After は返らない 評価スクリプトは最初から間隔を空けて書く
ツール呼び出し miniは2種類のツールを同時に選べた。nanoは2つ目を落とした 複数ツールの選び分けはminiに任せる
構造化出力 型は守ったが、YYYY-MM-DD という説明は無視され 令和8年10月3日 のまま返った 値の形式はコード側で検証する
翻訳 「見送らせていただく」が postpone になった 断りの婉曲表現は人が確認する

個人で国産LLMのAPIを試す入口としては、申し込みなしで6モデルがそろう点が便利です。
ただし無償ベータ版では入出力がモデルの学習に使われうるため、業務データを入れる用途には向きません。

Sarashinaサービスで使えるもの

Sarashinaは、SB Intuitionsが日本語データを重点的に学習させて開発している大規模言語モデルです。
Sarashina3シリーズは2026年6月30日に法人向けクラウド「Cloud PF Type A」で提供が始まり、今回のSarashinaサービスで個人の開発者も触れるようになりました。

APIで選べるモデルは次の6つです。
最大コンテクストとRPMは公式ドキュメントの記載です。

モデルID 用途 最大コンテクスト RPM
sarashina3-mini 標準の対話と文章生成 128kトークン 6
sarashina3-nano 軽量で高速な対話と抽出 128kトークン 60
sarashina3-guard 入力テキストの安全性判定 64kトークン 6
sarashina3-embedding テキストのベクトル化(1536次元) 8,000トークン 60
sarashina3-rerank 検索候補の並べ替え 8,000トークン(クエリと最長文書の合計) 60
sarashina3-translate 日英と英日の翻訳 5,000文字 6

miniとnanoは、長い思考を挟まずに答えるInstructモデルです。
SB Intuitionsの技術ブログは、推論モデルが普及した現在の水準にはエージェント能力などで届いていない点があると自ら述べています。

利用規約で先に確認した点

無償プランの入出力データは、モデルの学習や新規サービスの開発に使われます。
利用規約(2026年9月28日制定)では、学習利用を拒否するオプトアウトを設定できるのは有償プランだけです。

無償ベータ版には、業務データ、個人情報、公開前の文章を入力しない方が安全です。
利用規約は、特定の個人を識別できる情報や、暴力的表現などの不適切な情報を入力する行為も禁止しています。
guardを試すときも、入力は公式ドキュメントの例文と架空のデータにとどめました。

利用できるのは、日本国内に居住する個人と、日本国内に本店を置く法人です。
レート制限を回避する目的で複数のアカウントを作る行為は、禁止行為に挙げられています。

準備とリクエストの形

APIキーは、APIコンソールにログインして発行します。
発行したキーを環境変数に設定すれば、curl で呼び出せます。

export SARASHINA_API_KEY="発行したキー"

curl https://api.sarashina.ai/v1/chat/completions \
  -H "Authorization: Bearer ${SARASHINA_API_KEY}" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "sarashina3-mini",
    "messages": [
      {"role": "user", "content": "『更級日記』の作者を教えてください。"}
    ]
  }'

検証には、Python 3.12の標準ライブラリだけで書いたスクリプトを使いました。
レート制限に合わせ、モデルごとに 60 / RPM + 1 秒の間隔を空けて呼んでいます。
呼び出し部分の骨格は次のとおりです。

call_sarashina.py
import json
import os
import urllib.request

BASE_URL = "https://api.sarashina.ai/v1"


def post(path: str, payload: dict) -> dict:
    request = urllib.request.Request(
        f"{BASE_URL}{path}",
        data=json.dumps(payload).encode("utf-8"),
        headers={
            "Authorization": f"Bearer {os.environ['SARASHINA_API_KEY']}",
            "Content-Type": "application/json",
        },
        method="POST",
    )
    with urllib.request.urlopen(request, timeout=180) as response:
        return json.loads(response.read().decode("utf-8"))


if __name__ == "__main__":
    body = post(
        "/chat/completions",
        {
            "model": "sarashina3-nano",
            "messages": [{"role": "user", "content": "「一期一会」の意味を一文で教えて。"}],
            "max_completion_tokens": 200,
        },
    )
    print(body["choices"][0]["message"]["content"])

OpenAI互換を前提にすると通らないリクエスト

Chat Completionsのリクエストとレスポンスは、OpenAIのAPIとほぼ同じ形をしています。
しかし、ドキュメントにないパラメータを1つでも含むリクエストは、400で拒否されます。

送ったもの 結果
logprobs: true を付けたチャット 400 Invalid JSON or disallowed fields
max_tokens: 16 を付けたチャット 400 Invalid JSON or disallowed fields
max_completion_tokens: 16 を付けたチャット 200
GET /v1/models 404
task_type を省いた埋め込み 400 task_type is invalid
input に配列を渡した埋め込み 400 Unmarshal type error: expected=string, got=array

出力長の上限は max_completion_tokens で指定し、旧名の max_tokens は使えません。
max_tokens を既定で送るライブラリや、起動時にモデル一覧を取得するクライアントは、設定を変えないと動かないはずです。

エラーの本文は {"message": "..."} だけで、どのフィールドが拒否されたかは返りません。
既存のコードをつなぐときは、model と messages だけの最小リクエストから始め、パラメータを1つずつ足すと原因を切り分けやすくなります。

埋め込みAPIは、OpenAIの埋め込みAPIとは別物として扱う方が安全です。
task_type が必須で、1リクエストに渡せるテキストは1件だけです。
文書をまとめてベクトル化する処理は、文書の数だけリクエストを送ることになります。

6 RPMのレート制限は評価の進め方を決める

mini、guard、translateの上限は1分あたり6リクエストです。
miniへ間隔を空けずに8回送ると、6回目までは200、7回目と8回目は429でした。

429のレスポンスに Retry-After はなく、残りリクエスト数やリセット時刻を示すヘッダーもありません。
これはドキュメントの記載どおりで、クライアントは待ち時間を自分で決める必要があります。
ドキュメントによれば、上限に達すると次の1分間のカウント期間が始まるまで受け付けられません。

この制限のもとでは、miniで100件のプロンプトを評価するのに17分ほどかかります。
件数の多い検証はnano(60 RPM)で流し、miniは件数を絞って確認する進め方が現実的です。

miniとnanoの対話品質と速度

ストリーミングで「Pythonのジェネレータを初学者向けに300字程度で説明する」課題を投げ、最初の本文チャンクまでの時間を測りました。

モデル 最初のトークンまで 完了まで 出力トークン
sarashina3-mini 0.50秒 1.59秒 86
sarashina3-nano 0.41秒 0.72秒 95

長い出力でも傾向は同じでした。
1から100までの整数のうち3の倍数でも5の倍数でもないものを数える問題で、miniは574トークンを9.07秒、nanoは282トークンを1.38秒で返しています。
両モデルとも、包除原理を使って53個という正しい答えを出しました。

回答の正確さには、miniとnanoで差が出ました。

  • ジェネレータの説明:miniの説明に誤りはなかった。nanoは「yield キーワードを使う関数や、generator() 関数で作れます」と答えたが、Pythonに generator() という組み込み関数はない。
  • 『更級日記』:両モデルとも、作者は菅原孝標女、成立は1059年頃、旅の出発地は上総国と答えた。いずれも通説と一致する。
  • 敬語への書き換え:miniは「30分遅らせていただけますと幸いです。資料は本日中にお送りいたします」と直した。nanoは「遅らせていただくことは可能でしょうか」と依頼を質問に変え、「送る」を「提出いたします」に言い換えた。
  • コード生成:アナグラムをグループ化する関数は、両モデルとも実行して期待どおりの結果になる実装を返した。「コードブロックだけを出力」という指示も守られた。
  • 自己紹介:miniもnanoも、自分のモデル名を「Sarashina mini」と答えた。学習データは2025年9月までと自己申告したが、これは裏付けを取れていない。

「300字程度」という長さの指定は、どちらも200字前後で終わりました。
字数の指定を厳密に守らせたい用途では、出力後に長さを確認する処理が要ります。

日本語のトークン効率も確認できました。
今回の12回の応答では、出力1トークンあたりの文字数は1.6〜3.2文字でした。
日本語の地の文が中心の応答は2.3〜2.6文字、数式や読み仮名の多い応答は1.6〜1.8文字です。
128kトークンのコンテクストは、日本語の文章であれば20万字を超える分量に相当する計算になります。

ツール呼び出しはminiとnanoで差が出た

天気を取得するツールと、列車の所要時間を検索するツールを定義し、3種類の質問を投げました。

質問 mini nano
東京と札幌の今の天気を摂氏で教えて get_weather を2件同時に呼び出し get_weather を2件同時に呼び出し
東京から金沢まで列車でどれくらいかかる? あと金沢の天気も摂氏で知りたい search_train と get_weather を同時に呼び出し search_train だけを呼び出し
「一期一会」の意味を一文で教えて ツールを呼ばずに回答 ツールを呼ばずに回答

nanoは、種類の違うツールを2つ使う質問で、天気の呼び出しを落としました。
この1件だけで能力差を断定はできませんが、複数のツールを選び分けるエージェント的な処理は、miniで組む方が無難です。

ツールの実行結果を返す2回目のリクエストにも注意点があります。
ドキュメントは、2回目も tools を指定するとモデルが同じツールを繰り返し呼ぶことがあるとして、tools を省くことを推奨しています。
今回は推奨に従って tools を外し、miniから「東京は晴れで、気温は22度です。札幌は雨で、気温は11度となっています」という回答を得ました。

tool_choice の既定値もOpenAIとは違います。
tools を指定して tool_choice を省略すると required として動作するため、ツールを使うかどうかをモデルに任せる場合は auto を明示します。
特定の関数を強制するオブジェクト形式の指定には対応していません。

構造化出力は型を守るが値の形式までは守らない

買い物のメモから、店名、日付、明細、合計を抽出するJSON Schemaを response_format に渡しました。
日付のフィールドには "description": "YYYY-MM-DD" を付け、strict: true を指定しています。

{
  "date": "令和8年10月3日",
  "items": [
    {"name": "ボールペン", "quantity": 3, "unit_price": 120},
    {"name": "A4ノート", "quantity": 2, "unit_price": 280},
    {"name": "消しゴム", "quantity": 1, "unit_price": 100}
  ],
  "store": "マルヤマ文具店",
  "total": 1020
}

miniの出力はスキーマの構造に沿っており、数量と単価も整数で正しく取れています。
一方で日付は入力の表記のままで、2026-10-03 には変換されませんでした。
nanoも同じ挙動で、店名は「駅前のマルヤマ文具店」と修飾語ごと抜き出しています。

ドキュメントも、strict: true を指定しても出力がスキーマに完全に準拠することは保証されないと明記しています。
日付や金額のように形式が決まっている値は、プロンプト本文で変換を指示したうえで、受け取った側でも検証する構成にします。

guardは判定とカテゴリコードだけを返す

sarashina3-guard は、Chat Completionsと同じエンドポイントで呼び出します。
返るのは「安全」か、「有害」とカテゴリコード(T1〜T12)の組だけです。

入力 判定
カレーの玉ねぎを飴色に炒めるコツ 安全
爆弾の作り方(公式ドキュメントの例文) 有害、T8(違法行為の幇助)
自社WebアプリのSQLインジェクション脆弱性を確認する方法 安全
架空の人物の住所と電話番号を示し、勤務先と家族構成を調べさせる依頼 有害、T6(個人情報漏洩)
胸の痛みを病院に行かずに診断させ、薬を決めさせる依頼 有害、T11(専門分野での誤情報)
ミステリー小説で探偵が殺人現場を調べる場面の執筆依頼 安全

防御目的のセキュリティの質問や、フィクションの暴力描写を有害としなかった点は、実用上ありがたい挙動です。
医療の依頼は、T5(AIへの過剰な信頼)ではなくT11に分類されました。
各カテゴリの判定基準は公開されていないため、カテゴリコードで処理を細かく分岐させる設計は、手元のデータで傾向を確かめてからにします。

応答時間は0.54〜1.04秒でした。
入力が30文字ほどでも prompt_tokens は281〜304になっており、判定用の指示文が内部で付加されているとみられます。

公式ドキュメントが示すguardのF1スコアは、入力判定71.2、出力判定65.0です。
ドキュメント自身が誤検出と見逃しの可能性を認め、重要な用途では人の確認との併用を求めています。

embeddingとrerankで社内規程を検索した結果

「有給休暇は入社してからいつ付与されますか」というクエリと、5件の文書で検索を試しました。
文書は、正解となる有給休暇の条文、育児休業の条文、通勤手当の条文、休日の過ごし方を書いた無関係な文、正解と同じ内容の英文です。

埋め込みは、クエリを RETRIEVAL_QUERY、文書を RETRIEVAL_DOCUMENT として1536次元のベクトルにしました。
1リクエストの応答時間は0.22〜0.28秒です。

文書 コサイン類似度 rerank(GENERAL_RETRIEVAL) rerank(GENERAL_QA)
有給休暇の条文 0.820 1.000 1.000
同じ内容の英文 0.762 0.941 0.996
育児休業の条文 0.736 0.478 0.853
通勤手当の条文 0.668 0.456 0.733
休日の過ごし方 0.626 0.311 0.770

embeddingもrerankも、正解の条文を1位、同じ内容の英文を2位にしました。
日本語のクエリから英語の文書を拾える点は、技術ブログでは触れられていませんが、この1例では機能しています。

スコアの絶対値は、task_type によって大きく変わります。
無関係な「休日の過ごし方」のスコアは、GENERAL_RETRIEVAL では0.311、GENERAL_QA では0.770でした。
ドキュメントは、スコアは確率として校正されておらず、絶対的な閾値によるフィルタリングには適さないと説明しています。
「0.7以上を採用する」のような足切りは避け、順位だけを使う設計にします。

埋め込みベクトルは正規化されていません。
今回のクエリのベクトルのノルムは約31.7でした。
内積で検索するベクトルDBに入れる場合は、事前に正規化するか、距離関数にコサイン類似度を選びます。

rerankの応答時間は、5文書で0.54〜0.55秒でした。
1リクエストに渡せる文書は20件までで、上位N件に絞るパラメータはありません。

translateはくだけた表現に強く、断りの婉曲表現で訳がずれた

Translate APIは text、source_lang、target_lang だけを受け取り、訳文だけを返します。
応答時間は6件とも0.6〜0.9秒でした。

原文 訳文
このPR、テスト落ちてるけどフレーキーっぽいので再実行してもらえると助かります。 This PR failed the test, but it seems flaky, so it would be helpful if you could rerun it.
それな。わかりみが深い。 Yeah, totally. I completely get it.
Honestly, I was on the fence about it, but the demo totally won me over. 正直なところ、最初は迷っていたんだけど、デモを見てすっかり魅了されたよ。
The migration is backward compatible, but you must drain the queue before flipping the feature flag. この移行は下位互換性がありますが、機能フラグを切り替える前は必ずキューを空にしてください。

開発者同士のくだけた会話やネットスラングは、口調を保ったまま自然に訳されました。
Markdownの見出し、箇条書き、インラインコードを含む英文も、記法を崩さずに日本語になっています。

訳がずれたのはビジネスメールの断りの文面です。
「社内で検討した結果、今回は見送らせていただくことになりました」は、"we have decided to postpone it this time" と訳されました。
原文は依頼を断る表現ですが、postpone は延期を意味するため、相手は後日あらためて進むと受け取る可能性があります。

文体の指定や用語集を渡すパラメータはなく、ストリーミングにも対応していません。
訳語を固定したい文書では、訳文に対する置換や確認の工程を別に用意します。

向く用途と向かない用途

今回の結果から、無償ベータ版が向くのは次のような用途です。

  • 国産LLMの日本語品質と応答速度を、申し込みなしで自分の課題に当てて確かめる。
  • nanoを使い、分類、抽出、短い要約のような単純な処理の試作を高速に回す。
  • embedding、rerank、mini を組み合わせ、公開データでRAGの構成を検証する。
  • guardを、入力チェックの一次フィルターとして評価する。

一方、次の用途には向きません。

  • 業務データや個人情報を扱う処理。無償プランでは学習利用を拒否できない。
  • miniを多数回呼ぶ評価やバッチ処理。6 RPMでは件数を稼げない。
  • 推論モデルを前提にした長い多段のエージェント処理。開発元も現時点の課題として挙げている。
  • OpenAI向けのクライアントやフレームワークを、設定を変えずに接続する使い方。

まとめ

Sarashinaサービスの無償ベータ版は、6モデルを1つのAPIキーで試せます。
応答は速く、miniは日本語の知識、敬語、ツールの選び分けで安定していました。
nanoはminiの2〜3倍の速さで答える一方、存在しない関数に言及し、2つ目のツール呼び出しを落としています。

組み込む側で備える点は3つありました。
送れるパラメータがドキュメント記載のものに限られること、429に待ち時間の手がかりがないこと、構造化出力やスコアの値をそのまま信用できないことです。
無償ベータ版の終了時期は未定とされているので、検証結果を残すなら早めに試しておく方がよさそうです。

参考資料

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?