はじめに
Apex は Callstack のモデルで、React Native と React のアプリ開発 に対応します。このチャット API は テキスト / 画像 を受け付け、入力予算は 262,144 トークン、max_tokens の上限は 131,072 です。Apex のテキストは届いた順に受け取れ、Apex による React Native 開発の次の段階には関数呼び出しの結果を根拠として渡せます。
| 項目 | 値 |
|---|---|
| 入力 | テキスト |
| 出力 | テキスト |
| 入力予算 | 262,144 tokens |
| max_tokens の上限 | 131,072 |
主な機能とハイライト
実際の React Native の書かれ方を学習
Callstack は、React Native のドキュメント、ソースコード、公開 API のシンボル、ライブラリ、実在するリポジトリに基づく議論から Apex を構築しました。開発者が依頼する作業に、その成果が表れます。ナビゲーションの設定、リストのパフォーマンス、アニメーション、ネイティブモジュールのラッパー、ライブラリのアップグレードなど、汎用モデルが誤ったバージョンのパターンを持ち出しがちな場面です。
コーディング作業の流れに合うツール呼び出し
関数定義を最大 128 件送ると、Apex は文章ではなくツール呼び出しで応答できます。ファイルを読む、テストを実行する、パッチを当てる、といった操作です。アプリケーション側でツールを実行し、対応する tool_call_id を付けた tool メッセージとして結果を返します。提案はモデルが行い、何を実行するかは皆さんのコードが決めます。
1 回のリクエストで機能まるごと
262,144 トークンあれば、画面、そのフック、ナビゲーターの設定、関連するテスト、エラーログをまとめて送れます。モデルは、プロジェクトの構成についての推測ではなく、渡されたファイルをもとに回答します。
バグが難しいときだけ推論を上げる
reasoning_effort を使えば、簡単な修正や説明は none か low のままにし、複数ファイルにまたがるバグには medium か xhigh を選べます。推論トークンは max_tokens の中に含まれるため、考えるためのコストが請求対象の使用量にはっきり表れます。
リクエストパラメーター
| パラメーター | 必須 | 説明 |
|---|---|---|
messages | はい | Apex による React Native 開発では、会話と根拠資料をテキストで順に渡し、各ツール結果に元の |
max_tokens | いいえ | Apex の |
reasoning_effort | いいえ | Apex は none, low, medium, xhigh を公開し、既定は medium です。Apex による React Native 開発でレベルを比較すると、深い推論による出力トークンや待ち時間の増加を確認できます。 |
stop | いいえ | Apex の生成を停止する文字列を 1 つ、または最大 4 つ指定できます。Apex の回答には一致した停止文字列自体は含まれません。 1 文字以上 · 1 件以上 · 4 件以内 |
temperature | いいえ | Apex の temperature は 0〜2 です。Apex による React Native 開発で表現を比較する際は、ほかのサンプリング設定を固定してください。 |
top_p | いいえ | Apex の |
tools | いいえ | Apex による React Native 開発に必要な関数を OpenAI 形式で Apex に渡します。Apex が引数を提案し、アプリ側で検証と実行を行います。 128 件以内 |
parallel_tool_calls | いいえ | Apex による React Native 開発で複数の外部結果が必要な場合に、Apex が独立した関数呼び出しをまとめて提案できるかを指定します。 デフォルト値: |
tool_choice | いいえ | Apex では auto、none、required または特定の関数を選び、Apex による React Native 開発を続ける際は返された呼び出し ID を保持してください。 |
料金
入力 $0.50 / 出力 $3 100 万トークンあたり
ユースケース
遅いリスト画面を直す
renderItem を含む FlatList の画面、データ用フック、プロファイラーのメモを貼り付け、どこから再レンダリングが起きているかを尋ねます。Apex はこの種の React Native の質問に対応しており、メモ化、安定したキー、アイテムのレイアウト変更を含む的を絞ったパッチを提案できます。プルリクエストと同じように確認してください。
プルリクエストをレビューする
差分と変更されたファイルを送り、行単位で指摘できる問題を尋ねます。古くなったクロージャ、エフェクトのクリーンアップ漏れ、iOS でしか動かないプラットフォーム固有のコードなどです。優先順位付きの一覧を求めると、最初に示される項目が、マージを止める価値のある問題になります。
ライブラリや SDK をアップグレードする
変更履歴の抜粋と古い API を使っているファイルを渡し、変更を取り込むべき順序で提示させます。Callstack によると、このモデルは誤った前提を疑い、変更の順序を組み立てられるため、複数ステップのアップグレードに向いています。
テストと Next.js のコードを生成する
貼り付けたコードから、コンポーネントのテスト、フックのテスト、Next.js のルートハンドラーを依頼します。Callstack は Next.js の結果も公開しているため、Web 向けの React 作業も後付けではなく、対応している用途です。
プロンプトガイドと実践のヒント
説明ではなくファイルを送る
関連するソースを、各ブロックの上にファイルパスを付けてメッセージに入れ、最後に作業内容とプラットフォームのバージョンを書いてください。ある React Native のバージョンでは動き、別のバージョンでは壊れる画面は、パッケージのバージョンがプロンプトに含まれていれば直しやすくなります。
作業に合わせて推論レベルを選ぶ
ほとんどの作業では
reasoning_effortを medium のままにしてください。名前の変更、小さな編集、説明には none か low を使い、原因が複数ファイルにまたがるバグには xhigh を使います。レベルを上げるときはmax_tokensも上げてください。推論は、目に見える回答と同じ上限を共有するためです。ツールをつないで、ループを続ける
ツールを定義し、モデルにツール呼び出しを返させ、自分のコードで実行して、同じ
tool_call_idを付けた tool メッセージで出力を返します。呼び出しを行ったアシスタントのメッセージは履歴に残しておき、次のターンで何が起きたか分かるようにしてください。長い応答はストリーミングし、終了理由を確認する
複数ファイルにわたる応答では、進捗を表示できるようストリーミングを有効にし、出力を完全なものとして扱う前に終了理由を確認してください。
max_tokensで打ち切られた応答には、同じリクエストを再試行するのではなく、より大きな上限が必要です。
Apex で React Native を修正します
Apex は React Native を重視した Callstack のコードモデルです。コンポーネント、対象プラットフォーム、パッケージのバージョン、発生した挙動をテキストで渡してください。テキスト専用のため、スクリーンショットだけでは内容を読めません。
モバイル固有の情報を添えます
iOS と Android の違い、関連する画面遷移や状態管理のコード、期待する結果を含めます。入力枠は 262,144 トークン、max_tokens の上限は 131,072 です。このエンドポイントで公開する推論レベルを使い、分析と修正案の両方に余裕を残してください。
修正案を確認します
Apex が関数を要求しても、ファイルやテストコマンドへのアクセスはアプリ側で管理します。結果を返す際は tool_call_id を保持し、差分を確認して対象環境で検証してください。長い説明はストリーミングなら完了前から読めます。
Apex による React Native 開発では Apex 自身のコンテンツ判断が適用されます。Apex の NSFW 応答はリクエストや版によって変わるため、無制限の出力は約束しません。
API クイックスタート
curl --fail-with-body -sN https://api.spicyapi.ai/v1/chat/completions \
-H "Authorization: Bearer $SPICY_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"model": "callstack/apex/chat",
"messages": [
{
"role": "user",
"content": "Summarise the following release notes into three bullet points."
}
],
"stream": true
}' \
| jq --unbuffered -Rrj 'select(startswith("data: ")) | .[6:] | select(. != "[DONE]") | fromjson | if .error then "\n[error] \(.error.message)\n" else (.choices[0].delta.content? // empty) end'
認証、完全なスキーマ、ポーリング、エラー処理は API リファレンスを参照してください。
