ai-model-web について
`@cloudbase/js-sdk`を使ってブラウザー上のWebアプリからAIモデルを呼び出すCloudBaseスキルです。SDKコードの作成前に、利用資格とモデルグループを確認する手順を示します。
主な機能
- 01ブラウザーからのモデル呼び出し
- 02テキスト応答のストリーミング
- 03Tokenリソースパックの資格確認
- 04モデルグループとカタログの確認
- 05マネージド・カスタムモデルグループ
活用シーン
- 01Webアプリへのテキスト生成追加
- 02フロントエンドでの応答ストリーミング
- 03連携前の環境利用資格確認
- 04アプリ用モデルの有効化
MCP 対応
環境情報、Tokenリソースパックの利用資格、モデルグループの確認や設定にCloudBase MCPツールを使用します。SDKを呼び出す前の事前確認に用います。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ tencentcloudbase/ cloudbase-ai-toolkit --skill ai-model-webインストール後、Claude Code で/ai-model-webを入力して読み込まれたか確認します。
詳細
関連スキル(ローカルのみ)
CloudBase の関連スキルは、このスキルと同じ階層に配置されています。../auth-tool-cloudbase/SKILL.md のようなローカル相対パスを使用してください。
参照先の関連スキルファイルがこの環境に存在しない場合は、完全版の CloudBase プラグイン(または不足しているスキル)をインストールするようユーザーに依頼してください。リモートのスキルやプロトコルの Markdown を HTTP 経由で取得して、エージェントのコンテキストに読み込んではいけません。
このスキルを使用する場面
@cloudbase/js-sdk を介してブラウザー/Web アプリケーションで AI モデルを呼び出す場合に、このスキルを使用します。
🧭 Web ではランタイムプレーンをデフォルトにします。 ユーザーの依頼がページ、Web アプリ、フロントエンド、React/Vue/Next/Nuxt、ダッシュボード UI、または「H5 に AI を追加する」といった内容であれば、常にこのスキルをデフォルトのルーティング先とします。まず Node.js/クラウド関数/CloudRun プロキシを提案してはいけません。
@cloudbase/js-sdkを使えば、ブラウザーからモデルを直接呼び出せます。ai-model-nodejsに切り替えるのは、ユーザーがバックエンド/サーバーからの呼び出しや画像生成を明示的に求める場合、またはサーバー側のキーや長時間の処理が本当に必要な場合に限ります。この判断は、ユーザーが選択する具体的なモデルとは関係ありません。モデル名(deepseek-*、glm-*、hunyuan-*、kimi-*など)はmodelフィールドにのみ影響し、ルーティングプレーンには影響しません。
次の用途に使用してください:
- フロントエンドの Web アプリに AI によるテキスト生成を組み込む
- UX を向上させるために AI の応答をストリーミングする
- ブラウザーから Hunyuan/DeepSeek/GLM/Kimi/MiniMax の各モデルを呼び出す
次の用途には使用しないでください:
- Node.js バックエンドまたはクラウド関数 →
ai-model-nodejsスキルを使用してください - WeChat ミニプログラム →
ai-model-wechatスキルを使用してください - 画像生成 →
ai-model-nodejsスキルを使用してください(Node SDK 専用) - CloudBase SDK のないランタイム(ネイティブアプリ、Python、Go など) →
http-api-cloudbaseスキルを使用してください(直接 HTTP 呼び出し用のai_modelOpenAPI 仕様が含まれるようになりました。カスタム HTTP プロキシを構築してはいけません)
⛔ 停止 — ai.createModel(...) の引数はベンダー名/モデル名ではありません
createModel(...) の行を書く前に、必ずこれを読んでください。この SDK のコードをエージェントが生成する際に最もよくある間違いは、引数の誤生成です。有効な形式は厳密に 3 種類です。それ以外はすべてバグです。
✅ 有効な ai.createModel(...) の引数 | 使用する場面 |
|---|---|
"cloudbase" | 新規プロジェクト向けの主なマネージドグループ(TokenHub ベースのマルチベンダープール)。ベンダー名と具体的なモデル名は、generateText/streamText の model フィールドに指定します。例:{ model: "deepseek-v4-flash" }。デフォルトで有効なモデルはありません。SDK を呼び出す前に必ず DescribeAIModels を確認し、対象モデルがなければ UpdateAIModel で有効にしてください。 |
"hunyuan-exp" | 現在の環境で DescribeAIModels がこのレガシー組み込みグループを明示的に返す場合に限ります(主にミニプログラム成長プラン。ai-model-wechat を参照)。 |
"custom-<your-name>" | CreateAIModel で登録したユーザー定義の GroupName です。必ず custom- で始めてください(例:custom-kimi、custom-openai-compat)。 |
❌ 次のいずれも書いてはいけません。すべて誤りです
ai.createModel("deepseek") // wrong — that's a vendor, not a GroupName
ai.createModel("deepseek-v4-flash") // wrong — that's a model name, goes in the `model` field
ai.createModel("hunyuan") // wrong — vendor family, not a GroupName
ai.createModel("hunyuan-2.0-instruct-20251111") // wrong — model name
ai.createModel("glm") / ai.createModel("kimi") / ai.createModel("minimax") // wrong — vendor names
ai.createModel("openai") / ai.createModel("moonshot") // wrong — vendor names
ai.createModel("custom") // wrong — placeholder; use your real custom-<name>
ai.createModel(modelName) // wrong — do not reuse the variable that holds the model id
✅ 正しいパターン — GroupName と Model は別々のフィールドです
const model = ai.createModel("cloudbase"); // ← GroupName
await model.generateText({
model: "deepseek-v4-flash", // ← concrete model id
messages: [...]
});
Decision procedure (when the user names a specific model)
- ユーザーが「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 関連の SDK コードを生成する前に、2 段階の事前確認(①利用資格、②グループの準備状況)を実施してください。すぐに createModel(...) を出力して、ユーザーに実行時エラーのデバッグを任せる方法は、はるかに大きなコストがかかります。
ステップ 0:環境 ID を取得する
MCP ツール queryEnv を action=info で呼び出し、応答から EnvId を読み取ります。以降のすべての確認と購入リンクで、この 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/envPostpayPackageInfoList)に切り替えて、実際の応答に従ってください。ミニプログラムのシナリオには、成長プランに関する追加の分岐があります。その場合はai-model-wechatスキルに切り替えてください。
事前確認 ② — グループの準備状況(DescribeAIModels → 必要に応じて UpdateAIModel)
利用資格があるだけでは不十分です。まだ createModel("cloudbase") を実行しないでください。 対象の GroupName が環境に存在し、Status=1 であること、また対象の Model がその Models[] に含まれていることを、まず確認してください。
-
現在の環境で設定されているグループを一覧表示します。
callCloudApi(service="tcb", action="DescribeAIModels", params={ EnvId })AIModelGroups: AIModelGroup[]が返されます。各AIModelGroupには、GroupName、Type(builtin/custom)、Models: [{ Model, EnableMCP, Tags }]、Status(1 = オン / 2 = オフ)、BaseUrl、Secret、Remarkが含まれます。メインの管理対象GroupNameはcloudbaseです。 -
モデルがすでに有効になっていると決めつけないでください。
cloudbaseグループのAIModelGroups[?].Models[].Modelを確認します。対象モデル(またはユーザーが指定していない場合は、既定として使用する予定のdeepseek-v4-flashなどのモデル)が見つからない場合は、ステップ 4 に進んで有効にしてください。まだcreateModel("cloudbase")は実行しないでください。cloudbaseグループ自体が見つからない場合、またはStatus=2の場合も、ステップ 4 に進んでください。 -
ユーザーが管理対象カタログに含まれるモデル(例:
deepseek-v3.2、hunyuan-2.0-instruct-20251111、glm-5、kimi-k2.6、…)を指定した場合: そのModelがcloudbaseグループのModels[]に含まれているか確認します。含まれていない場合は、ステップ 4 に進んでください。正確なモデル ID を推測しないでください。 まずDescribeManagedAIModelListで正式な表記を確認してください(ステップ 4 で確認します)。 -
管理対象モデルを有効化/追加します(必ず、信頼できるカタログと料金を先に確認してください)。
callCloudApi(service="tcb", action="DescribeManagedAIModelList", params={ EnvId })ManagedAIModelGroup[]が返されます。各グループには、GroupName(例:cloudbase)、Remark、およびModels: [{ Model, EnableMCP, ModelSpec{ContextLength, MaxInputToken, MaxOutputToken}, ModelChargingInfo[{Type, InputPrice, OutputPrice, InputOutputUnit, CachePrice}] }]が含まれます。サポートされるモデル名と料金の唯一の信頼できる情報源です。記憶から推測しないでください。UpdateAIModelの呼び出しには、ここで返された正確なModel文字列を使用してください。 また、有効化する前に料金をユーザーに提示してください。次に有効化します(注意:
Modelsは全件置換です。有効化済みのモデルも新しいモデルと合わせて、必ず再送してください)。callCloudApi(service="tcb", action="UpdateAIModel", params={ EnvId, GroupName: "cloudbase", Models: [ // resend every model that DescribeAIModels already showed as enabled { Model: "<already-enabled model, e.g. deepseek-v4-flash>" }, // append the newly-requested one, using the exact spelling from DescribeManagedAIModelList { Model: "<target model>" } ], Status: 1 }) -
要求されたモデルが管理対象カタログにない場合(
DescribeManagedAIModelListで見つからない場合)は、次のセクション「カスタム導入(管理対象カタログ外のモデル)」に進んでください。
すべての Actions で
service=tcb、Version=2018-06-08を使用します。パラメーターは PascalCase(EnvId/GroupName/Models/Status)です。呼び出しでInvalidParameterが返された場合に限り、camelCase を使用してください。
利用可能なプロバイダーとモデル
ai.createModel(<GroupName>) で使用できる値は、正当な値として認められる次の 3 種類だけです。
1. "cloudbase" — メインの管理対象グループ(推奨)
GroupName: "cloudbase"、Type: "builtin"、Remark: "腾讯云开发"(Tencent CloudBase)- Tencent Cloud TokenHub を基盤とし、複数のベンダーをカバーする統合管理プールです。Hunyuan(HY 2.0 Instruct、HY 2.0 Think、Hunyuan-role、Hy3 preview、…)、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" — レガシー組み込みグループ(互換性のために維持)
- 主にミニプログラム成長プランのシナリオに関連します。環境にまだ存在することが明示されていない限り、Web からは使用しないでください(そのワークフローでは
ai-model-wechatスキルに切り替えてください) - デフォルトモデル:
hunyuan-2.0-instruct-20251111。追加の hunyuan SKU は、実行時にDescribeAIModels({ GroupName: "hunyuan-exp" }).Models[]を使って検出する必要があります。他の ID をハードコードしないでください
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")
DescribeAIModelsがその正確なGroupNameを明示的に返していない限り、createModel("deepseek")やcreateModel("custom")のような推測を決して記述しないでください(古い環境には従来のdeepseek/hunyuan-exp組み込みグループが残っている場合があります。互換性のため引き続き使用できますが、新しいプロジェクトでは必ずcloudbaseを使用してください)。
カスタムオンボーディング(管理対象カタログ外のモデル)
ユーザーが管理対象外のモデル(セルフホスト、企業内限定、サードパーティの OpenAI 互換エンドポイントなど)を呼び出したい場合は、拒否しないでください。オンボーディングの手順を案内してください。
オプション 1:コンソールでの操作(推奨。ユーザー自身が操作します)
https://tcb.cloud.tencent.com/dev?envId={envId}#/ai
オプション 2:プログラムによるオンボーディング(CreateAIModel)
callCloudApi(service="tcb", action="CreateAIModel", params={
EnvId: "<envId>",
GroupName: "custom-<your-name>", // MUST start with "custom-" (e.g. custom-kimi, custom-openai-compat); never start with "cloudbase"
BaseUrl: "<OpenAI-compatible endpoint, e.g. https://api.moonshot.cn/v1>",
Models: [
{ Model: "<model name, e.g. kimi-k2.5>", EnableMCP: true }
],
Remark: "<optional remark>",
Status: 1,
Secret: { ApiKey: "<vendor api key supplied by the user>" }
})
オンボーディング後、DescribeAIModels でグループの準備ができていることを確認してから、コードで ai.createModel("<the GroupName you just registered>") を呼び出してください。UpdateAIModel を使ってモデルの追加/削除、キーのローテーション、または BaseUrl の変更を行います(Models は全置換であることに注意してください)。カスタムグループを削除するには DeleteAIModel を使います(組み込みグループは削除できません)。
カスタムモデルの料金はサードパーティプロバイダーが請求し、Token Credits リソースパックからは差し引かれません。フィールド名の大文字/小文字は実際のコントラクトに従います。
InvalidParameterが発生した場合は camelCase に切り替えてください。
インストール
npm install @cloudbase/js-sdk
初期化
⚠️ 匿名サインインをデフォルトとして使用しないでください。 新しい環境では匿名ログインはデフォルトで無効になっており、既存の非アクティブな環境も自動的に無効化されています。匿名ログインを手動で有効にした場合でも、匿名ユーザーにはデフォルトで AI モデルの呼び出し権限が付与されません。AI モデルスキルでは、特定のログイン UI を指定していません。この点は次のスキルに委ねてください。
- ログインプロバイダーの有効化/設定(電話番号の SMS、メール、WeChat Open Platform、ユーザー名+パスワード、OAuth など)→
auth-tool-cloudbaseスキルに従ってください(callCloudApiを使用したバックエンド設定)。- ブラウザーで実際のサインインフローを構築(ログインフォーム、コールバック、セッションのガード)→
auth-web-cloudbaseスキルに従ってください(@cloudbase/js-sdkの認証 API、例:signInWithPassword、signInWithPhone、getSession)。AI 機能で
signInAnonymously()にフォールバックしないでください。匿名ユーザーは AI モデルを呼び出せません。ユーザーが明示的に希望し、トレードオフを了承した場合に限り、AI を使わない読み取り専用のデモで匿名ログインを使用してください。
import cloudbase from "@cloudbase/js-sdk";
const app = cloudbase.init({
env: "<YOUR_ENV_ID>",
accessKey: import.meta.env.VITE_PUBLISHABLE_KEY // auto-provision via queryAppAuth / manageAppAuth, write to .env.local (see auth-web-cloudbase prerequisites)
});
const auth = app.auth;
// CRITICAL: Use auth.getSession() to check login — NOT the deprecated getLoginState().
// getLoginState() returns uid even without real login (just accessKey), causing false positives.
// getSession() returns data.session === undefined when no real login exists.
// Anonymous users are DENIED AI model permissions — calling AI without real login will fail.
const { data: sessionData } = await auth.getSession();
if (!sessionData?.session || sessionData.session.user?.is_anonymous) {
// No real login or anonymous session — route to sign-in page
window.location.href = "/login";
return;
}
const ai = app.ai();
重要な注意事項:
- トップレベルのインポートを使って同期的に初期化してください。
accessKeyを使うと、getLoginState()が誤解を招く認証データを返します。非推奨のgetLoginState()は、実際にログインしていなくてもuidを含むオブジェクトを返すため、単純な!!loginStateのチェックが機能しません。代わりにauth.getSession()を使用してください。実際にログインしていない場合はdata.session === undefinedが返されるため、!!data.sessionを信頼できる認証ゲートとして使用できます。- AI 機能を使用する前に、ユーザーは検証済みのログイン(電話番号、メール、WeChat、ユーザー名+パスワード、カスタム)で認証されている必要があります。匿名ユーザーには AI モデルの権限が付与されません。具体的なフローは
auth-web-cloudbaseスキルの責任範囲です。 accessKeyは CloudBase コンソールから取得してください。
generateText() — 非ストリーミング
前提条件: 2 段階の事前チェック(利用資格+グループの準備状況)が完了し、対象モデルが
DescribeAIModels({ GroupName: "cloudbase" }).Models[]に存在することを確認済みである必要があります。存在しない場合は、すでにUpdateAIModelで有効化されているはずです。以下の例では説明のためにdeepseek-v4-flashを使用しています。ユーザーが指定した実際のモデルに置き換えてください。
const model = ai.createModel("cloudbase");
const result = await model.generateText({
model: "deepseek-v4-flash", // must already be enabled in this env (DescribeAIModels → UpdateAIModel)
messages: [{ role: "user", content: "Give me a one-paragraph intro to Li Bai." }],
});
console.log(result.text); // generated text string
console.log(result.usage); // { prompt_tokens, completion_tokens, total_tokens }
console.log(result.messages); // full message history
console.log(result.rawResponses); // raw model responses
streamText() — ストリーミング
前提条件: 2 段階の事前チェックが完了している必要があります。
const model = ai.createModel("cloudbase");
const res = await model.streamText({
model: "deepseek-v4-flash",
messages: [{ role: "user", content: "Give me a one-paragraph intro to Li Bai." }],
});
// Option 1: iterate the text stream (recommended)
for await (let text of res.textStream) {
console.log(text); // incremental text chunks
}
// Option 2: iterate the data stream for full response chunks
for await (let data of res.dataStream) {
console.log(data); // full response chunk with metadata
}
// Option 3: access final results
const messages = await res.messages; // full message history
const usage = await res.usage; // token usage
エラー処理パターン
const model = ai.createModel("cloudbase");
try {
const result = await model.generateText({
model: "deepseek-v4-flash",
messages: [{ role: "user", content: "Generate a concise onboarding checklist." }],
});
console.log(result.text);
} catch (error) {
console.error("Failed to call CloudBase AI from Web", error);
}
型定義
interface BaseChatModelInput {
model: string; // required: model name
messages: Array<ChatModelMessage>; // required: message array
temperature?: number; // optional: sampling temperature
topP?: number; // optional: nucleus sampling
}
type ChatModelMessage =
| { role: "user"; content: string }
| { role: "system"; content: string }
| { role: "assistant"; content: string };
interface GenerateTextResult {
text: string; // generated text
messages: Array<ChatModelMessage>; // full message history
usage: Usage; // token usage
rawResponses: Array<unknown>; // raw model responses
error?: unknown; // error if any
}
interface StreamTextResult {
textStream: AsyncIterable<string>; // incremental text stream
dataStream: AsyncIterable<DataChunk>; // full data stream
messages: Promise<ChatModelMessage[]>;// final message history
usage: Promise<Usage>; // final token usage
error?: unknown; // error if any
}
interface Usage {
prompt_tokens: number;
completion_tokens: number;
total_tokens: number;
}
ベストプラクティス
- まず2段階の事前確認を実行してください — ①利用資格(
DescribeEnvPostpayPackageによる Token Credits リソースパックの確認)+ ②グループの準備状況(有効なモデルを確認するDescribeAIModels、正式なサポートモデルカタログを確認するDescribeManagedAIModelList、対象モデルが見つからない場合はModels[]をすべて置き換え、Status: 1を指定するUpdateAIModel)。事前確認を省略すると、実行時に「model not found」/「model not enabled」エラーが発生します。 - モデルがすでに有効になっていると思い込まないでください —
deepseek-v4-flashも、hunyuan-*も、その他のモデルも同様です。必ず最初にDescribeAIModelsで確認してください。対象モデルが見つからない場合は、DescribeManagedAIModelListで正確なModel文字列を調べ(綴りを推測したり、ベンダーのプレフィックスを作ったりしないでください)、その後UpdateAIModelで有効にしてください。 createModelが受け付ける値は、次の3種類だけです —"cloudbase"(メインのマネージドグループ)、"hunyuan-exp"(レガシー組み込みモデル、Growth Plan のシナリオ向け)、またはCreateAIModelで登録したユーザー定義の GroupName(必ずcustom-で始まる必要があります。例:custom-kimi、custom-openai-compat)。createModel("deepseek")/createModel("kimi")/createModel("custom")のように推測して指定するのは絶対にやめてください。- SDK のメソッド名やパラメーターを作り出さないでください。 この SKILL.md は
@cloudbase/js-sdkの AI 機能に関する正式なリファレンスです。コードを書く前に、ここ(または下記の Type Definitions セクション)でメソッドのシグネチャを確認してください。メソッドやフィールドがここに記載されていない場合は、作業を中断して確認するか、MCP ツールを使って実際の仕様を確認してください。推測はしないでください。 - 新しいマネージドモデルを有効にする前に料金を提示してください —
DescribeManagedAIModelListはModelSpec(コンテキスト長、最大入力/出力トークン数)とModelChargingInfo(入力/出力/キャッシュの料金、課金単位)を返します。UpdateAIModelを呼び出す前に、料金をユーザーに提示してください。 - 応答が長い場合はストリーミングを使用してください — 体感レイテンシーが改善し、操作性も高まります。
- エラーを適切に処理してください — AI 呼び出しを try/catch で囲んでください。
accessKeyを安全に保管してください — 公開可能なキーを使用し、シークレットキーは絶対に使用しないでください。- 早めに初期化してください — アプリのエントリーポイントで SDK をセットアップし、ルーティングを開始する前に認証と AI の両方を使用できる状態にしてください。
- AI 機能に匿名認証を使用しないでください — 新しい環境では匿名ログインがデフォルトで無効になっており、匿名ユーザーには AI モデルの権限がありません。AI API を呼び出す前に、確認済みのサインイン(電話番号、メールアドレス、ユーザー名+パスワード、WeChat、カスタム)を必須にしてください。プロバイダーの設定は
auth-tool-cloudbaseスキルに、ブラウザーでのサインインフローはauth-web-cloudbaseスキルに任せてください。AI モデルスキルでは、呼び出しを許可する前にauth.getSession()を確認し、loginTypeを検証します。 - 「事前確認の失敗」と「モデル呼び出しの失敗」を区別してください — 前者の場合、ユーザーはリソースパックを購入するか、
UpdateAIModelを呼び出す必要があります。後者は、プロンプト/パラメーター/ネットワークの問題です。それぞれに異なる案内をしてください。 - TypeScript:SDK の型エラーを抑制するために
anyを使用しないでください。 SDK には型定義が含まれています。エラーが発生した場合は、unknownと型ガードを使って型を絞り込むか、実際に使用する形状を正確に定義したinterfaceを記述するか、ローカルの.d.tsで型を拡張してください。: any、as any、@ts-ignore、@ts-nocheckは絶対に使用しないでください。web-developmentスキルの Engineering constitution を参照してください。 - 完了を宣言する前に、自分で検証してください。
tsc --noEmitとプロジェクトのビルドを実行し、agent-browserでページを開いて、実際に AI 呼び出しを行ってください。次のことを確認してください:(a)テキストストリームが UI に届く、(b)新しいコンソールエラーがない、(c)result.usageがゼロではない。「動作するはずです」と、根拠なしに言うのは認められません。web-development/browser-testing.mdに従ってください。