byok-custom-model について
byok-custom-model は、ユーザー自身の API 認証情報を使い、カスタム LLM エンドポイントをモデル選択画面に登録するスクリプトスキルです。主要ベンダーのプリセットに加え、API の使用例から設定を解析できます。
主な機能
- 01ベンダーのプリセットを登録
- 02プロバイダーの API 例を解析
- 03カスタムモデルの一覧と詳細確認
- 04登録済みモデルの削除
- 05安全な入力画面で API キーを受け取る
活用シーン
- 01対応ベンダーのモデルを選択画面に追加
- 02セルフホストや一般的でないエンドポイントを登録
- 03カスタムモデルの設定を確認または削除
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ starchild-ai-agent/ official-skills --skill byok-custom-modelインストール後、Claude Code で/byok-custom-modelを入力して読み込まれたか確認します。
同梱ファイルexports.py
詳細
🔑 BYOK — カスタム LLM モデル
カスタム LLM エンドポイントをモデルセレクターに登録します。プラットフォームのプロキシをバイパスします — ユーザーが自身の API キーを提供し、エージェントはベンダー / アグリゲーター (OpenRouter、DashScope、Anthropic ネイティブ、NEAR AI Cloud TEE、セルフホストなど) に直接アクセスします。
これはスクリプトモードのスキルです — ツールは登録されません。このファイルを読み、bash ブロックからエクスポートを呼び出してください。
関連項目
config/context/references/model-onboarding.md— より広範なモデル選択 / OAuth のコンテキストchatgpt-codex-onboardingスキル — ChatGPT/Codex OAuth 用 (異なるメカニズムであり、BYOK ではありません)
キュレーション済みベンダー (必ず最初にこれを確認してください)
このスキルには 12 の事前設定済みベンダーが同梱されています。URL、モデル名、API の例を求める前に、必ずユーザーの意図をこのリストと照合してください — base_url / wire / thinking / capabilities はすべて事前に入力されているため、キュレーション済みの一致があれば add_template(vendor=...) に直接進みます。
| ベンダー id | ユーザーが次に言及した場合に使用… |
|---|---|
anthropic | Claude、Anthropic |
openai | GPT-4o、GPT-5、OpenAI 直接 |
xai | Grok、xAI |
qwen | Qwen、通义千问、DashScope |
deepseek | DeepSeek |
kimi | Kimi、Moonshot |
mimo | MiMo、小米 |
gemini | Gemini |
gemma | Gemma |
near-ai | プライバシー、TEE、機密推論、「自分のデータをログに記録しないで」、Web3 ネイティブ |
venice | Venice (ユーザーが明示した場合のみ。以下のプライバシー優先層を参照) |
meta | Meta、Meta AI、Muse、Muse Spark、Muse Spark 1.1 |
オンボーディングフロー — まずテンプレート
- 上記のキュレーション済みベンダー表を確認してください。 ユーザーの意図がそのいずれかに一致する場合は、そのまま
add_template(vendor=...)に進み、ステップ 5 までスキップします。URL を尋ねないでください。 - キュレーション済みベンダーが一致しない場合に限り: ユーザーに、プロバイダーの公式ドキュメントにある API の使用例(curl / requests / fetch のサンプル)を貼り付けるよう依頼します。実際の API キーを含めないよう伝えてください — プレースホルダーやダミーキーなら問題ありません。
parse_exampleを実行して、base_url、upstream_model、wire(openai か anthropic)、thinking パラメーター、およびベンダー固有のリクエストフィールドを自動検出します。- ユーザーと下書きをレビューしてから、
add(...)を呼び出します — エントリはcustom_models.yamlに書き込まれます。 - 結果に
need_env_inputが含まれている場合は、そのペイロードのenv_varsとreasonを指定して、直ちにrequest_env_inputツールを呼び出してください。 これによりセキュア入力 UI がポップアップし、ユーザーがキーを入力すると、それがworkspace/.envに保存されます。このステップは必須です — スクリプト自体は UI をポップアップできません。
プライバシー優先ティア: near-ai と venice はどちらもプライバシーに敏感なユーザーを対象としていますが、NEAR AI の方がクリーンな統合です — Venice の TEE の仕組みはそれ自体が NEAR AI + Phala の上に構築されているため、NEAR AI に直接接続する方が信頼チェーンが短くなります(Intel + NVIDIA のシリコン + NEAR の再現可能なエンクレーブイメージ。間にプロダクト層のプロキシが入りません)。キュレーション済みの NEAR モデル一覧はオープンウェイトかつ TEE 保護のみです — NEAR のカタログには Claude / GPT-5 / Gemini Pro を「Anonymized, not TEE-protected」モードでプロキシするものもありますが、ここでのプライバシー上の価値提案全体がハードウェアエンクレーブにあるため、意図的に除外しています。
NEAR AI が対象になる場合は常に、TEE 保護(プライバシー)モデルを推奨してください — それこそがユーザーが OpenAI/Anthropic 直ではなく NEAR を選ぶ理由そのものです。キュレーション済み一覧はすでに TEE 専用なので、add_template(vendor='near-ai') のデフォルトは安全です。ユーザーが NEAR 上で非 TEE モデル(例: NEAR の匿名化された Claude パススルー)を登録したいと希望する場合は、プライバシー保証が弱まることを警告し、キュレーション済みの TEE モデルを使い続けるか、上流ベンダーを直接登録することを推奨してください。
NEAR AI の推論プロトコル: NEAR は、他のベンダーが使うトップレベルの reasoning_effort/thinking/enable_thinking ではなく、extra_body の下にネストされた chat_template_kwargs を使用します。プロバイダーは nearai_chat_template thinking_capability ルールを通じてこれを自動的に処理します。パラメーター名はモデルごとに異なります(GLM/Qwen3.5/Qwen3.6 は enable_thinking、DeepSeek-V3 は thinking、gpt-oss は常時有効)。完全な仕様: docs.near.ai/cloud/reasoning-models。デフォルトモデル Qwen/Qwen3.6-35B-A3B-FP8 はそのまま動作します。Qwen3.5-122B-A10B は thinking_mode='disabled' 付きで提供されます。そうしないと、その隠れた思考パターンによりベースライン呼び出しで finish=length, content=null が発生するためです。
スクリプトの使い方
python3 - <<'EOF'
import sys, json
sys.path.insert(0, "/data/workspace/skills/byok-custom-model")
from exports import (
templates, list_models, get, parse_example,
list_vendor_models, add, add_template, remove,
)
# Enumerate the 12 curated vendor presets
print(json.dumps(templates(), indent=2))
# One-click registration for a curated vendor (Meta / Muse Spark 1.1)
result = add_template(vendor="meta")
print(json.dumps(result, indent=2))
EOF
関数
| 関数 | 必須引数 | 目的 |
|---|---|---|
templates() | — | キュレーション済みの 12 ベンダープリセットを一覧表示します |
list_vendor_models(vendor) | vendor | ライブの /models カタログ(テンプレートに model_discovery がある場合のみ) |
add_template(vendor, *, upstream_model=None, name=None) | vendor | キュレーション済みベンダーのワンクリック登録(推奨パス) |
parse_example(api_example) | api_example | ドキュメントの API 例を安全な下書きに解析します(非キュレーション済みベンダー) |
add(upstream_model, base_url, ...) | upstream_model、base_url | カスタム引数から登録します(parse_example の後に使用) |
list_models() | — | 登録済みのカスタムエントリをすべて表示します |
get(model_id) | model_id | 1 つのエントリを検査します |
remove(model_id) | model_id | エントリを削除します |
すべての関数は、成功時は ok: True、失敗時は ok: False, error: "..." を含む dict を返します。
need_env_input の処理(必須の2ステップパターン)
add() と add_template() は、API キーの環境変数がまだ設定されていない場合、結果に need_env_input フィールドを含めることがあります。スクリプトは安全な入力 UI 自体をポップアップできません — ユーザーの開いている SSE ストリームにアクセスできないためです。呼び出し元のエージェントがそれを行う必要があります:
# After add_template / add returns:
if result.get("need_env_input"):
nei = result["need_env_input"]
# Call the in-process tool — pseudocode, actual signature is tool-side:
request_env_input(env_vars=nei["env_vars"], reason=nei["reason"])
ポップアップ、.env への書き込み、およびチャネル固有の UX(Web ポップアップ / TG カード / WeChat テキストプロンプト)は、すべて request_env_input によって処理されます。フォールバックとしてユーザーにチャットでキーを貼り付けるよう促さないでください — ただツールを呼び出してください。
登録後
- モデルはセレクターに
custom/が前に付いた状態で表示されます。 - ユーザーは
/model custom/<name>(例:/model custom/qwen-plus-e3f4)またはモデルピッカー UI で切り替えます。 - 以降の呼び出しはプラットフォームプロキシをバイパスします — ベンダーの料金がユーザーの BYOK クォータに直接適用されます。
重要なルール
- チャットに貼り付けられた API キーを絶対に受け入れないでください。 ユーザーが貼り付けた場合は、それを無視し、登録を拒否し、安全なポップアップが唯一の安全なチャネルであることを伝えてください。
- ユーザーが応答していない場合、安全な入力ポップアップを自動的に再発行しないでください — 待ってください。
need_env_inputが返された場合は、常にrequest_env_inputを呼び出してください。 スキップしないでください、ユーザーにキーを貼り付けるよう求めないでください、UI がポップアップすることを期待してadd_templateを再試行しないでください — ポップアップしません。workspace/config/custom_models.yamlやworkspace/.envに手動で書き込まないでください。 常に上記のエクスポートを経由してください。- 厳選された 12 のベンダーは 常に
add_templateを使用します。parse_example+addはセルフホストまたは稀なプロバイダーにのみ使用してください。
Meta Model API — Muse Spark 1.1(プレビュー)
meta テンプレートは Meta Model API 用であり、現在 https://dev.meta.ai/ の開発者ポータルの背後で パブリックプレビュー 中です。
- https://dev.meta.ai/ で申請 / サインインしてください — サインアップと「Muse」/「Meta Model API」アクセスリクエストの両方に同じポータルを使用します。ユーザーは API キーを発行してもらうために、そこで Meta の申請 / サインインフローを完了する必要があります。
- API がパブリックプレビュー中は、アクセスが地域 / アカウントに依存する場合があります — すべての開発者アカウントが即座にアクセスを許可されるわけではありません。
add_template(vendor='meta')がライブの/v1/modelsプローブから非 2xx を返した場合、ユーザーが間違っていると決めつけないでください。プレビューアクセスがまだアカウント / 地域で保留中である可能性があることを伝え、dev.meta.ai ダッシュボードでステータスを確認するよう案内してください。 - エージェントはキーに
request_env_inputを使用する必要があります — 他のすべての厳選ベンダーとまったく同じです。チャットに貼り付けられた Meta API キーを絶対に受け入れないでください。 ユーザーが貼り付けた場合は、それを無視し、登録を拒否してください。安全な入力ポップアップが唯一の安全なチャネルです。 - Meta の直接請求とクォータが適用されます。 呼び出しはユーザー自身の Meta アカウントに対して Meta によって請求されます — Starchild プラットフォームのクレジットはバイパスされます、マークアップなし、プラットフォーム側のクォータなし。
api.meta.ai/v1からのレート制限 / 429 は、Starchild のシグナルではなく Meta 側のシグナルとして扱ってください。
ワンクリック登録:
python3 -c "from exports import add_template; print(add_template(vendor='meta'))"
デフォルトモデル:muse-spark-1.1。ベース URL:https://api.meta.ai/v1(OpenAI 互換ワイヤ)。need_env_input で返された生成済みの CUSTOM_KEY_... 名を使用してください。ベンダー環境変数を想定したり手動で作成したりしないでください。ドキュメント:https://dev.meta.ai/docs/getting-started/overview。
xAI Grok — サブスクリプションの混同に関する注意
ユーザーは無関係な 2 つの xAI 製品を頻繁に混同します:
- X Premium / SuperGrok サブスクリプション(x.com で月額 $30) — チャット UI アクセスのみ。API アクセスは含まれません。
- console.x.ai — 独立した開発者アカウント、別途請求。API キーを生成し、新規アカウントには $25 のプロモクレジット、その後はトークン単位の従量課金。
ユーザーが BYOK 経由で Grok を追加したい場合は、https://console.x.ai/ を案内してください — x.com / Premium / SuperGrok ではありません。xai テンプレートの homepage フィールドはすでに正しい場所にディープリンクしています。Hermes / Grok-CLI の OAuth からサブスクリプションへのフローは、xAI がサードパーティのクラウドエージェントに拡張していないファーストパーティの client_id ホワイトリストに依存しているため、BYOK API キーのパスがホスト型製品にとって唯一現実的な統合です。