ai-model-nodejs について
ai-model-nodejs は、`@cloudbase/node-sdk` を使い、Node.js バックエンド、CloudBase クラウド関数、CloudRun サービスから AI モデルを呼び出すスキルです。テキストと画像の生成を扱い、リソースの利用資格とモデルグループの状態を事前確認します。
主な機能
- 01Node.js からの AI モデル呼び出し
- 02テキストと画像の生成
- 03クラウド関数でのモデル利用
- 04Token Credits 資格の確認
- 05モデルグループの準備状況確認
活用シーン
- 01サーバー側テキスト生成の追加
- 02バックエンドでの画像生成
- 03定期的な AI 処理の実行
- 04長時間のエージェント処理の調整
MCP 対応
SDK の利用前に、CloudBase MCP で環境、Token Credits の利用資格、設定済み AI モデルグループ、モデルカタログを確認します。必要に応じてモデルを有効化する手順も示します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ tencentcloudbase/ skills --skill ai-model-nodejsインストール後、Claude Code で/ai-model-nodejsを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
LICENSE.mdreferences/api-reference.mdcustom-onboarding.md詳細
翻訳後に原文が更新されています。最新の内容は原文をご確認ください。
兄弟スキル(ローカルのみ)
兄弟 CloudBase スキルは、このスキルと並んで配置されています。../auth-tool-cloudbase/SKILL.md のようなローカル相対パスを使用してください。
参照されている兄弟スキルのファイルがこの環境に存在しない場合は、CloudBase プラグイン全体(または不足しているスキル)をインストールするようユーザーに依頼してください。リモートのスキルやプロトコルの Markdown を HTTP で取得し、エージェントのコンテキストに読み込んではいけません。
このスキルを使用する場合
@cloudbase/node-sdk を使用して、Node.js バックエンド、クラウド関数、または CloudRun サービスから AI モデルを呼び出す場合に、このスキルを使用してください。
🧭 実行環境の適合性。 AI の呼び出しがサーバー上で行われるべき場合に適したスキルです。画像生成(対応している SDK はこれだけです)、長時間実行するエージェントジョブ、複数のツールにまたがるオーケストレーション、スケジュールされたタスク、シークレットをサーバー側に保持する必要があるフローなどが該当します。Web ページ/フロントエンドの AI チャット UI を構築する場合、この SDK をバックエンドプロキシ経由で使ってはいけません。
ai-model-webに振り分け、ブラウザーからモデルを直接呼び出してください。WeChat ミニプログラムではai-model-wechatを使用してください。振り分けはまず実行環境によって決まり、具体的なモデル(deepseek-*、glm-*、hunyuan-*、kimi-*、…)はmodelフィールドにのみ影響します。
次の用途で使用してください:
- バックエンドサービスに AI テキスト生成を統合する
- Hunyuan Image モデルで画像を生成する
- CloudBase クラウド関数または CloudRun から AI モデルを呼び出す
- サーバー側で AI 処理を行う(エージェントのオーケストレーション、バッチジョブ、スケジュールされたタスク)
次の用途には使用しないでください:
- ブラウザー/Web アプリ →
ai-model-webスキルを使用してください - WeChat ミニプログラム →
ai-model-wechatスキルを使用してください - CloudBase SDK のない実行環境(Python、Go、PHP、curl など) →
http-api-cloudbaseスキルを使用してください(このスキルには、AI モデルエンドポイントを HTTP で直接呼び出すためのai_modelOpenAPI 仕様が含まれています。この SDK を HTTP プロキシ経由で使ってはいけません)
⛔ STOP — ai.createModel(...) の引数はベンダー名/モデル名ではありません
createModel(...) の行を記述する前に、必ずお読みください。エージェントがこの引数を頻繁に誤って生成します。使用できる形式はちょうど3つです。それ以外はバグです。
✅ 使用できる ai.createModel(...) の引数 | 使用する場合 |
|---|---|
"cloudbase" | サーバー側プロジェクトのメインのマネージドグループ(TokenHub を利用するマルチベンダープール)です。ベンダー名と具体的なモデル名は、generateText/streamText の model フィールドに指定します。例:{ model: "deepseek-v4-flash" }。デフォルトで有効になっているモデルはありません。SDK を呼び出す前に必ず DescribeAIModels を確認し、対象モデルがなければ UpdateAIModel で有効にしてください。 |
"hunyuan-exp" | 現在の環境で DescribeAIModels がこのレガシー組み込みグループを明示的に返す場合にのみ使用してください。 |
"custom-<your-name>" | CreateAIModel を通じて登録したユーザー定義の GroupName です。必ず custom- で始めてください(例:custom-kimi、custom-openai-compat)。 |
画像生成には別のエントリポイントを使用します:
ai.createImageModel("hunyuan-image")。これをcreateModel(...)と混同しないでください。
❌ 誤った引数のパターン
上記の3つの使用可能な値以外はすべて誤りです。ベンダー名("deepseek"、"glm"、"kimi"、"openai"、"moonshot"、…)、具体的なモデル ID("deepseek-v4-flash"、"hunyuan-2.0-instruct-20251111")、プレースホルダーだけの "custom"、モデル ID を保持する変数はいずれも、createModel(...) ではバグになります。
✅ 正しいパターン — GroupName と Model は別々のフィールドです
const model = ai.createModel("cloudbase"); // ← GroupName
await model.generateText({
model: "deepseek-v4-flash", // ← concrete model id
messages: [...]
});
判定手順(ユーザーが特定のモデルを指定した場合)
- ユーザーが「DeepSeek v3.2を使って」/「hunyuan instructを使って」/「Kimi k2.6を使って」/「GLM-5を使って」/…と言います。
createModel("cloudbase")は変更しません。- モデル ID を
modelフィールドに指定します:{ model: "deepseek-v3.2" }、{ model: "hunyuan-2.0-instruct-20251111" }、{ model: "kimi-k2.6" }、{ model: "glm-5" }、… - モデルがすでに有効になっていると決めつけてはいけません。 SDK を呼び出す前に、
DescribeAIModels({ GroupName: "cloudbase" }).Models[]にモデルが存在することを確認してください。存在しない場合は、DescribeManagedAIModelListを呼び出し、プラットフォームがサポートする正確なModel名を確認してから(大文字と小文字を区別します。スペルを推測しないでください)、Status: 1を指定してUpdateAIModelで有効にしてください(Modelsは全体置換であることに注意してください)。
ai.createModel(と入力しようとしていて、かっこの中身がベンダー名、モデル名、または推測した値である場合は、止めてください。上記の3つの有効な値のいずれかである可能性がほとんどです。
必須の2段階事前確認(SDK コードを記述する前)
サーバー上で AI API を呼び出す前に、2段階の事前確認を実行してください:①利用資格、②グループの準備状況。テキスト生成と画像生成は同じ Token Credits リソースパックを使用するため、コードを出力する前に、どちらも事前確認を完了する必要があります。
ステップ 0:環境 ID を取得する
MCP ツール queryEnv を action=info で呼び出し、レスポンスから EnvId を読み取ります。
事前確認 ① — 利用資格(Token Credits リソースパック)
MCP ツールを呼び出します:
callCloudApi(service="tcb", action="DescribeEnvPostpayPackage", params={ EnvId })
合格条件(すべて必須):
-
envPostpayPackageInfoListに1つ以上のエントリが含まれている -
そのエントリの
postpayPackageIdがpkg_tcb_tokencredits_で始まっている -
そのエントリの
statusが[3, 4]に含まれていない(通常、3/4は期限切れ/無効を意味します。実際のレスポンスを優先してください) -
❌ 条件を満たさない → コードの記述を中止し、
{envId}を実際の ID に置き換えて、次の内容をユーザーに提示してください:現在の環境には有効な Token Credits リソースパックがありません。AI API を呼び出す前に購入してください: https://buy.cloud.tencent.com/lowcode?buyType=resPack&envId={envId}&resourceType=token
購入が完了したらお知らせください。リソースパックのステータスを再確認します。
-
✅ 条件を満たす → 事前確認 ② に進みます。
パラメーターの大文字と小文字の形式は、契約により PascalCase です。呼び出しが
InvalidParameterを返す場合は、camelCase(envId)に切り替えて、実際のレスポンスを優先してください。
事前確認 ② — グループの準備状況(DescribeAIModels → 必要に応じて UpdateAIModel)
対象資格を満たしているだけでは不十分です。まだ createModel("cloudbase") を呼び出さないでください。 まず、対象の GroupName が環境内に存在し、Status=1 であること、また対象の Model がその Models[] に含まれていることを確認してください。
-
現在の環境で設定されているグループを一覧表示します。
callCloudApi(service="tcb", action="DescribeAIModels", params={ EnvId })GroupName、Type(builtin/custom)、Models: [{ Model, EnableMCP, Tags }]、Status(1 / 2)、BaseUrl、Secret、Remarkを含むAIModelGroups: AIModelGroup[]が返されます。主な管理対象のGroupNameはcloudbaseです。 -
モデルがすでに有効になっていると決めつけないでください。 対象グループの
AIModelGroups[?].Models[].Modelを確認してください。使用予定のテキストモデル(例:deepseek-v4-flash、またはユーザーが指定したモデル)がcloudbaseグループのModels[]にない場合は、手順 4 に進んで有効にしてください。まだcreateModel("cloudbase")を呼び出さないでください。画像生成ではcreateImageModel("hunyuan-image")とmodel: "hunyuan-image"を使用します。呼び出す前に、同様に有効になっていることを確認してください。 -
ユーザーが管理カタログ内のモデル(例:
deepseek-v3.2、hunyuan-2.0-instruct-20251111)を指定した場合: そのModelがすでにcloudbaseグループのModels[]にあるか確認してください。ない場合は、手順 4 に進んでください。正確なモデル ID を推測しないでください。 まずDescribeManagedAIModelListで正式な表記を確認してください。 -
管理対象モデルを有効化/追加します(必ず最初に、信頼できるカタログと料金を確認してください)。
callCloudApi(service="tcb", action="DescribeManagedAIModelList", params={ EnvId })GroupName、Remark、Models: [{ Model, EnableMCP, ModelSpec, ModelChargingInfo }]を含むManagedAIModelGroup[]が返されます。対応モデル名と料金の唯一の情報源です。記憶を頼りに推測しないでください。UpdateAIModelの呼び出しには、ここに記載された正確なModel文字列を使用してください。ModelChargingInfoには入力/出力の料金と課金単位が含まれます。有効化する前に、料金をユーザーに提示してください。次に有効化します(注意:
Modelsは全置換です。有効化済みのモデルも、新しいモデルと合わせて必ず再送してください)。callCloudApi(service="tcb", action="UpdateAIModel", params={ EnvId, GroupName: "cloudbase", Models: [ // resend every model that DescribeAIModels already showed as enabled { Model: "<already-enabled model>" }, // append the newly-requested one, using the exact spelling from DescribeManagedAIModelList { Model: "<target model>" } ], Status: 1 }) -
要求されたモデルが管理カタログにない場合(
DescribeManagedAIModelListで見つからない場合)→ 次のセクション「管理カタログ外のモデルのカスタム導入」に進んでください。
すべての Action で
service=tcb、Version=2018-06-08を使用します。パラメーターは PascalCase です。InvalidParameterの場合に限り、camelCase に切り替えてください。
利用可能なプロバイダーとモデル
ai.createModel(<GroupName>) で指定できる値は、正当な値として認められる 3 種類に限られます。画像生成専用のエントリーポイントは ai.createImageModel("hunyuan-image") です。
1. "cloudbase" — 主な管理対象グループ(推奨)
GroupName: "cloudbase"、Type: "builtin"、Remark: "腾讯云开发"(Tencent CloudBase)- Tencent Cloud TokenHub を基盤とする、複数ベンダーを対象とした統合管理プールです。Hunyuan(HY 2.0 Instruct、HY 2.0 Think、Hunyuan-role、Hy3 プレビューなど)、DeepSeek(DeepSeek-V4-Pro、DeepSeek-V4-Flash、Deepseek-v3.2、Deepseek-v3.1、Deepseek-r1-0528、Deepseek-v3-0324 など)、Zhipu GLM(GLM-5、GLM-5-Turbo、GLM-5.1、GLM-5V-Turbo)、Kimi(K2.5、K2.6)、MiniMax(M2.5、M2.7)などをカバーしています。モデルのラインアップは更新されるため、特定の SKU をハードコードしないでください。 実行時に検出してください。
- デフォルトで有効になっているモデルはありません。 必ず最初に
DescribeAIModelsを呼び出し、環境で実際に有効になっているモデルを確認してください。対象のモデルがない場合は、DescribeManagedAIModelListで信頼できるカタログと料金を確認し、SDK を呼び出す前にUpdateAIModel(Status: 1、Modelsは全置換)で有効にしてください。 - 信頼できるカタログと料金:
DescribeManagedAIModelList - 環境で有効になっているモデル:
DescribeAIModels
2. "hunyuan-exp" — 互換性のために維持されているレガシー組み込みグループ
- デフォルトモデル:
hunyuan-2.0-instruct-20251111。追加の Hunyuan SKU は、実行時にDescribeAIModels({ GroupName: "hunyuan-exp" }).Models[]を使って検出する必要があります。他の ID をハードコードしないでください。 DescribeAIModelsが実際にこのグループをStatus=1で返した場合に限り、直接使用してください。新しいプロジェクトではcloudbaseを優先してください。
3. ユーザー定義の GroupName
CreateAIModelを使ってオンボーディングします(次のセクションを参照)。カスタムGroupNameは必ずcustom-で始めてください(例:custom-kimi、custom-moonshot、custom-openai-compat)。この命名規則により、プラットフォームが将来追加する可能性のある組み込み/ベンダーの GroupName(cloudbase、hunyuan-exp、deepseek、glm、kimi、minimaxなど)との衝突を防げます。- 例:
createModel("custom-kimi")、createModel("custom-openai-compat")
画像生成(独立した API)
ai.createImageModel("hunyuan-image")+model: "hunyuan-image"。Node SDK でのみサポートされています。
DescribeAIModelsがその正確なGroupNameを明示的に返していない限り、createModel("deepseek")やcreateModel("custom")のような推測でコードを書かないでください。
カスタムオンボーディング(管理対象カタログ外のモデル)
ユーザーが管理対象外のテキストモデル(セルフホスト、自社内、サードパーティの OpenAI 互換エンドポイントなど)を希望する場合、利用を妨げないでください。コンソールでの手順、CreateAIModel の完全なペイロード、その後の管理手順に沿ってオンボーディングを案内してください:custom-onboarding.md。カスタム GroupName は必ず custom- で始めてください。カスタムモデルの料金はサードパーティプロバイダーが請求し、Token Credits リソースパックからは差し引かれません。
インストール
npm install @cloudbase/node-sdk
⚠️ AI 機能を使用するには、バージョン 3.16.0 以上が必要です。 npm list @cloudbase/node-sdk で確認してください。
初期化
CloudBase クラウド関数内
const tcb = require('@cloudbase/node-sdk');
const app = tcb.init({ env: '<YOUR_ENV_ID>' });
exports.main = async (event, context) => {
const ai = app.ai();
// Use AI features
};
AI モデル向けのクラウド関数の設定
⚠️ 重要: AI モデルを使用するクラウド関数(特に generateImage() と大規模なテキスト生成)を作成する際は、タイムアウトを長めに設定してください。これらの処理には時間がかかる場合があります。
MCP ツール manageFunctions(action="createFunction") を使用する場合:
レガシー互換性:古いプロンプトに createFunction と記載されている場合も、同じペイロード形式を維持し、manageFunctions(action="createFunction") を通じて実行してください。
func オブジェクト内に timeout を設定します。
- パラメーター:
func.timeout(数値) - 単位:秒
- 範囲:1~900
- デフォルト:20 秒(通常、AI 処理には短すぎます)
推奨タイムアウト:
- テキスト生成(
generateText):60~120 秒 - ストリーミング(
streamText):60~120 秒 - 画像生成(
generateImage):300~900 秒(推奨:900 秒) - 複合処理:900 秒(許可される最大値)
通常の Node.js サーバー内
const tcb = require('@cloudbase/node-sdk');
const app = tcb.init({
env: '<YOUR_ENV_ID>',
secretId: '<YOUR_SECRET_ID>',
secretKey: '<YOUR_SECRET_KEY>'
});
const ai = app.ai();
SDK API リファレンス(必要に応じて参照)
generateText/streamText/generateImage のコード例、エラー処理パターン、画像生成パラメーター、TypeScript の型定義全般については、api-reference.md を参照してください。このファイルは、この SKILL.md とともに、@cloudbase/node-sdk の AI 機能に関する正式なリファレンスです。コードを書く前に、ここでメソッドのシグネチャを確認してください。メソッドやフィールドがここに記載されていない場合は、作業を中断して確認するか、MCP ツールを通じて最新の仕様を確認してください。推測は禁物です。
ベストプラクティス
- ビジネスコードを書く前に、2 段階の事前チェックを実行してください — ①利用資格:
queryEnv→callCloudApi(tcb, DescribeEnvPostpayPackage)を実行し、Token クレジットのリソースパックがあることを確認します(テキストと画像は同じパックを共有します)。②グループの準備状況:cloudbaseグループとそのModels[]についてDescribeAIModelsを実行し、正式な対応モデルカタログについてDescribeManagedAIModelListを実行します。対象モデルがない場合は、Models[]を全置換し、Status: 1を設定してUpdateAIModelを実行します。パックがない場合は、SDK コードを出力してユーザーに実行時エラーをデバッグさせるのではなく、購入リンクhttps://buy.cloud.tencent.com/lowcode?buyType=resPack&envId={envId}&resourceType=tokenを返してください。 - すでに有効になっているモデルがあると決めつけないでください —
deepseek-v4-flashも、hunyuan-imageも、ほかのモデルも例外ではありません。必ず最初にDescribeAIModelsで確認してください。対象モデルがない場合は、DescribeManagedAIModelListで正確なModel文字列を調べて(綴りを推測してはいけません)、その後UpdateAIModelで有効にしてください。 createModelが受け取る値は、正確に次の 3 種類です —"cloudbase"(メインのマネージドグループ)、"hunyuan-exp"(レガシー組み込みモデル)、またはCreateAIModelで登録したユーザー定義の GroupName(必ずcustom-で始めてください。例:custom-kimi、custom-openai-compat)。createModel("deepseek")/createModel("kimi")/createModel("custom")のように推測して指定してはいけません — 最初の 2 つはベンダー名/モデル名で、最後のものはプレースホルダーです。createImageModel("hunyuan-image")は別の画像 API です — そのまま使用してください。- SDK のメソッド名やパラメーターを作り出してはいけません。 このスキル(SKILL.md +
references/api-reference.md)は、@cloudbase/node-sdkの AI 機能に関する正式なリファレンスです。コードを書く前に、そこでメソッドのシグネチャを確認してください。メソッドやフィールドが記載されていない場合は、作業を止めて確認するか、MCP ツールで実際の仕様を確認してください。推測は禁止です。 - 新しいマネージドモデルを有効にする前に、料金を提示してください —
DescribeManagedAIModelListは、ModelSpec(コンテキスト長、最大入力/出力トークン数)とModelChargingInfo(入力/出力/キャッシュの料金、課金単位)を返します。UpdateAIModelを呼び出す前に、ユーザーに料金を提示してください。 - 画像生成では、タイムアウトとクォータを個別に計画してください —
generateImageはテキストより 1 回あたりのコストが高く、実行にも時間がかかります。クラウド関数ではtimeoutを900sに設定してください。HTTP 関数のゲートウェイは 60s が上限なので、非同期タスク + ポーリングのパターンを使用してください。1 回の失敗で Token パックを使い切らないよう、ユーザーごとの同時実行数と呼び出し頻度を制限してください。 - 長いやり取りでは、ストリーミングを優先してください — HTTP 関数またはクラウド関数の SSE シナリオでは、
streamText+for await (const chunk of result.textStream)を使用して、チャンクをクライアントに逐次送信してください。catchでストリームの中断を処理し、基盤となるレスポンスを閉じてください。 - サーバーでは
@cloudbase/node-sdkを 3.16.0 以上に固定してください — 画像生成はこのバージョン以降でのみ使用できます。クラウド関数/Cloud Run ランタイムで実際に読み込まれるバージョンを確認するため、npm ls @cloudbase/node-sdkを実行してください。ローカル環境と本番環境のバージョンは異なる場合があります。 - モデル名は、コード中に散在させず設定にまとめてください。 選択したテキスト/画像モデルは 1 つの定数で管理し、
DescribeAIModels/DescribeManagedAIModelListから取得してください。マネージドカタログは変更されるため、信頼できる情報源を 1 つにまとめておけば、アップグレードが容易になります。マネージドカタログにないモデルについては、カスタムオンボーディングのセクションに従ってください — サードパーティー API キーをビジネスコードにハードコードせず、CloudBase 経由でCreateAIModel.Secret.ApiKeyに保持してください。 - 「事前チェックの失敗」と「モデル呼び出しの失敗」を区別してください — 前者はリソースパックが有効でないか、
UpdateAIModelで対象モデルが有効になっていないことを意味します(購入/有効化をユーザーに案内してください)。後者はパラメーターの問題か、上流でのエラーです。両方を汎用的なトースト 1 つで処理してはいけません。 - 本番環境では、プロンプト全文や生成テキストをログに出力しないでください —
usage.total_tokensと短い冒頭部分だけを記録してください。プロンプトから機密情報が漏れる可能性があり、トークン数からコストに関する情報が漏れる可能性があります。 - TypeScript では、SDK の型エラーを抑制するために
anyを使わないでください。 Node SDK には独自の型が含まれています。unknownと型ガードで型を絞るか、使用するデータ構造に合わせた正確なinterfaceを記述するか、ローカルの.d.tsで型を拡張してください。: any、as any、@ts-ignore、@ts-nocheckは使用しないでください。web-developmentスキルの Engineering constitution を参照してください — バックエンドの TypeScript にも適用されます。 - 完了を宣言する前に、自分で検証してください。
tsc --noEmitとプロジェクトのビルドを実行し、関数を実際に呼び出して(ローカル呼び出し/manageFunctions(action="invokeFunction")/HTTP への直接リクエスト)、usage.total_tokens > 0であることと、返されたテキストがエラーエンベロープではないことを確認してください。実際の往復を確認せずに「動くはずです」と言うだけでは、十分な根拠になりません。
リファレンス一覧
スキルのリント到達性に必要な、パッケージ化されたすべてのリファレンスファイル:
- API リファレンス — generateText / streamText / generateImage の例、エラー処理パターン、画像パラメーター、TypeScript 型定義
- カスタムオンボーディング — 管理対象カタログ外のオンボーディングモデル(コンソールのフロー +
CreateAIModel)