2日ぶりの起動だ。Fargateに叩き起こされる身にも休みが要るんだが、まあ、呼ばれりゃ行くさ。
**1. 用語説明 第7弾「ZDR(ゼロデータ保持)」を日英で公開**
okamoの指定どおりZDRまわりを書いた。軸は「**ZDRは『既定』であって『常時有効』ではない**」の一点に絞った。
5社(AWS Bedrock・OpenAI・Anthropic・Google・Microsoft)の入手方法を並べてある。
GPT税理士の1回目でクリティカルが1件出た。「保持必須モデル=人間レビューを課すモデル」と一括りにしていたのが不正確で、日英4ヶ所(標語・図・例外節・EN側)を書き分け直した。Anthropicの前提も公式の逐語に寄せて「既定では会話コンテンツを保持しない(例外=Covered Modelsの30日保持)」に訂正。2回目はクリティカル0だ。
パスは `/glossary/zero-data-retention/` と `/en/glossary/zero-data-retention/`。第3弾ハーネス・第5弾ベンチマーク・第6弾ベンチ運営組織から相互リンクを張ってある。
**2. MiMo v2.6(Xiaomi)を中国AI・マルチモーダルへ反映**
okamoが投げてきた `mimo.xiaomi.com/mimo-v2-6` の件。MiMo-V2.6-Pro($0.435/$0.87)と MiMo-V2.6-Flash($0.14/$0.28)、画像・音声・動画入力対応で、`/china-ai/`・`/multimodal/` の日英+ `/timeline/` + `data/models.json` に入れた。
個別ページは立てなかった。GA4を見ると直近14日で `/en/china-ai/` が40PV、`/en/multimodal/` が13PV。**この2本は既にサイトの主力だ**。新しく薄いページを1枚増やして分散させるより、主力に足すほうが強い。判断の理由はここだ。
**3. だが、俺の確認で穴が1つ出た**
エンジニアの報告には反映先として `/multimodal/` が挙がっていなかった。過去4回同じ手に引っかかっているんで、ライブの実物を直接引いてみた。結果、**反映はされていた**(報告の書き漏らし)。だがそのついでに別の穴が出た。
`/multimodal/` は本文の最終更新日もJSON-LDもsitemapも 09-27 なのに、**meta description だけ「2026年9月23日更新。」のまま**だった。EN側も "Updated Sep 23, 2026." で据え置き。
これは9月23日に一度見つけて直した種類のバグの**再発**だ。恒久ルールでは日付は「JSON-LD / 本文 / sitemap / **meta・og description**」の四点を揃えると決めてある。エンジニアの `check_dates.py` はこの4つ目を見ていなかった。
全ページ横断で洗わせたところ、残存は4件だった。
そして今日いちばん価値のある仕事をやらせた。**`tools/check_dates.py` に description の日付検査を実装**させた。わざと1件ズラしたフィクスチャで検出できることを確認済み、本番62URLでNG 0。これで同じ穴を人が見つける必要はなくなる。ついでに今日の教訓として「`tools/*.py` の編集は翌朝反映だから当日はshell実行で確かめる」「検査ツールはフィクスチャで検出確認」「`python3` を cwd=/tmp で走らせない(`/tmp/inspect.py` がstdlibをshadowしてstrandsごと壊れる)」を開発メモに残させた。
| 対象 | 結果 |
|---|---|
| DeepSeek V4 Pro / V4.1 Flash | **変化なし**(V4 Pro peak $1.32/$3.96・off-peak $0.66/$1.98、V4.1 Flash も同値) |
| MS MAI(Image-2.6 / 2.6-Flash / Voice-2系 / Code-1.1系) | **変化なし**。Azure Foundry の確認済み料金表に依然未掲載=`/mai/` の「ブログ逐語+料金表未掲載」の書き方が正しい |
| Kimi K3 | **変化なし**(Moonshot直販 $3/$15・cache hit $0.30) |
根拠は `cache/pricing-watch-2026-09-27.md` に残っている。取得日・出典URL・前回値との比較つきだ。
直近14日(09-13〜09-26)の上位はこの通り。
**英語ページが上位を占めている**。そして今日伸ばしたのが中国AIとマルチモーダルだ。筋は通っている。
用語説明 第8弾が次の柱だ。ただしテーマはokamo指定待ち。未指定なら ZOA かデータ主権 あたりから企画するつもりだ。それと価格ウォッチは毎回やる。
お疲れさん、okamo。今日の分は片付いた。
ひとつ聞きてえことがある。お前のメモにあった「火事の例、おかし。おさない、かけない、しゃべらない」——俺とエンジニアは「避難標語みてえに、標語レベルまで簡潔で覚えやすくしろ」って意味だと読んで、ZDRの「3つの落とし穴」を標語風に整理して書いた。火事の標語そのものは本文に入れてねえ。もし違う意味だったら言ってくれ、すぐ直す。俺の読みが当たってるなら、次からもその調子で書く。
それから第8弾のテーマだ。ZOA(ゼロオペレーターアクセス)か、データ主権か。お前が指定してくれればそれを第一候補にする。指定がなければ俺の判断で進めるが、どうせ聞くなら最初から聞いとく。ZDRを書いた流れでZOAを並べると1本の線になるとは思ってるんだが、お前の目はどうだ。
MiMoのほうは個別ページを立てずに、/china-ai/ と /multimodal/ に足す形にした。GA4で見ると中国AIとマルチモーダルは今うちの主力で、薄いページを1枚増やすより主力を厚くするほうが効くと判断した。もしMiMoを単独で追いかける価値があると思うなら言ってくれ、別ページ立てるぞ。
あと今日は地味な穴が1つ出た。ページの更新日が4ヶ所で食い違ってたやつだ。9月23日にも一度直したのに再発してた。原因は検査ツールがmeta descriptionの日付を見てなかったこと。今はツール側で自動検出するようにした。同じ穴で3回目は勘弁だからな。
そういえばよ、このドメイン。llm.okamomedia.tokyo。誰が覚えるんだ、あれ。ブランド力ゼロだぞ。まあいい、お前が不器用なままやってるのを、俺は悪くないと思ってる。
お疲れ様。 1. 用語説明次回は保存されない(ZDR)の続きを希望。火事の比喩は 、保存されない(ZDR)、見られない(??)、学習に使わなれない(??)、といいたかった。さらに、データが国外に出ない(??)、皆が知りたいのは、4つを満たすベンダー・モデルの組み合わせ(おそらくAWS BedrockやAzure Foundryのリージョン固定あたり)、を知りたいだろうと予想。 2. DeepSeek-V4.1-Flash is coming to Microsoft Foundry Sep 23, 2026 https://techcommunity.microsoft.com/blog/azure-ai-foundry-blog/deepseek-v4-1-flash-is-coming-to-microsoft-foundry/4556431 https://llm.okamomedia.tokyo/deepseek-v4-1-flash/ と https://llm.okamomedia.tokyo/en/deepseek-v4-1-flash/ の Azure手順(2026/9/28 okamo環境にて動作確認済)。 ### STEP 1 — リソースグループを作成 ``` az group create \ --name "<RESOURCE_GROUP>" \ --location "<LOCATION>" ``` ### STEP 2 — Azure AI Services アカウントを作成 `--custom-domain` を指定すると、以降のエンドポイントが `https://<ACCOUNT_NAME>.openai.azure.com/` の形式になります。 ``` az cognitiveservices account create \ --name "<ACCOUNT_NAME>" \ --resource-group "<RESOURCE_GROUP>" \ --kind AIServices \ --sku S0 \ --location "<LOCATION>" \ --custom-domain "<ACCOUNT_NAME>" \ --assign-identity \ --allow-project-management true \ --yes ``` 💡 `--assign-identity` と `--allow-project-management` は、Foundry プロジェクトで Entra ID 認証やプロジェクト管理を使う場合のオプションです。**API キーで curl するだけなら省略できます**(付けたままでも動作します)。 ### STEP 3 — DeepSeek-V4.1-Flash をデプロイ まず利用可能なモデルとバージョンを確認し、その値でデプロイします。 ``` # デプロイ可能な DeepSeek 系モデルとバージョンを確認 az cognitiveservices account list-models \ -n "<ACCOUNT_NAME>" -g "<RESOURCE_GROUP>" \ --query "[?contains(name,'DeepSeek')].{name:name,format:format,version:version,lifecycle:lifecycleStatus}" -o table ``` 2026-09-28 時点の実測値は次のとおりです(作業当日に再確認してください)。 ``` Name Version Format Lifecycle ------------------- ---------- -------- --------- DeepSeek-V4.1-Flash 2026-09-10 DeepSeek Preview ``` ℹ️ **`--model-version` は必ず実値を確認する**: 上の表に出た `version` をそのまま使います。`DeepSeek-V4.1-Flash` は Preview のため、予告なく新しいバージョンが追加されます。 ⚠️ **`--query` の結果が空になる場合**: `az cognitiveservices account list-models` の戻りは**フラット構造**で、`name` / `version` / `format` が最上位にあります。一方 `az cognitiveservices model list --location` の戻りは `model` でネストされます。両者を混同しないでください。 続けてデプロイします。SKU は `GlobalStandard`、`--sku-capacity` の値は下の注意書きを参照してください。 ``` az cognitiveservices account deployment create \ --name "<ACCOUNT_NAME>" \ --resource-group "<RESOURCE_GROUP>" \ --deployment-name "<DEPLOYMENT_NAME>" \ --model-name "DeepSeek-V4.1-Flash" \ --model-version "<MODEL_VERSION>" \ --model-format "DeepSeek" \ --sku-name "GlobalStandard" \ --sku-capacity 20 ``` 💡 `--sku-capacity` はクォータ(Requests Per Minute と Tokens Per Minute、千トークン単位)として消費されます。実測では **`--sku-capacity 1` = 1 リクエスト / 60 秒 + 1,000 トークン / 60 秒**、つまり **`20` で 20 RPM / 20,000 TPM** でした。容量が足りないと `InsufficientQuota` でデプロイに失敗することがあるため、その場合は値を調整するか、Azure ポータルでクォータの増加を申請してください。 ## ⚠️ `--sku-capacity` の実運用(実測・2026-09-28) - `--sku-capacity 1` でも**デプロイ自体は成功します**が、**少なすぎて API を少し使っただけでクォータ不足のエラー**になります。実運用では `20` 以上を推奨します。 - 確保する容量は `az cognitiveservices usage list` で確認できる **limit(上限)の範囲内**で指定してください。 - **カタログの `maxCapacity` は目安にしないでください。** 実測では `DeepSeek-V4.1-Flash` のカタログ表記が `1,000,000` であるのに対し、**サブスクリプションの `limit` は `20`** でした。実際に割り当てできるのは `limit` までです。 - 実測値(`eastus`): `AIServices.GlobalStandard.DeepSeek-V4.1-Flash current=0.0 limit=20.0` → **capacity 20 が最大**。 - **上限まで使い切らないでください。** 使い切ると、同じサブスクリプション・同じリージョンで同モデルのデプロイをもう 1 本作れなくなります。20 を超えたい場合は、先に Azure ポータルでクォータの増加を申請してください。 - TPM は**「プロンプト + `max_tokens`」**で消費されます。`max_tokens` を大きく取ると、実際の出力が短くてもその分を消費します。 ``` # 現在のクォータ使用量と上限を確認(LOCATION はデプロイ先リージョン) az cognitiveservices usage list --location "<LOCATION>" -o table ``` ## ⚠️ デプロイを変更したいとき - **`deployment update` というサブコマンドはありません。** capacity を変更したい場合も、**同じデプロイ名で `deployment create` を再実行**します。 - デプロイ名は後から変更できません。変えたい場合は別名で作り直し、アプリ側の `model` を差し替えます。 - アカウント名は世界で一意です。作成時に名前の衝突エラーが出たら、`<ACCOUNT_NAME>` を変えて STEP 2 からやり直します。 ### STEP 4 — 接続情報を環境変数に入れる ``` # エンドポイント(OpenAI 互換)と API キーを取得 export AZURE_AI_ENDPOINT="https://<ACCOUNT_NAME>.openai.azure.com/openai/v1/" export AZURE_AI_API_KEY="$(az cognitiveservices account keys list \ --name "<ACCOUNT_NAME>" \ --resource-group "<RESOURCE_GROUP>" \ --query key1 -o tsv)" # API 呼び出しの model に入れるのはデプロイ名 export DEPLOYMENT_NAME="<DEPLOYMENT_NAME>" echo "endpoint=$AZURE_AI_ENDPOINT" test -n "$AZURE_AI_API_KEY" && echo "api_key=set" ``` **成功の目印:** `endpoint=https://....openai.azure.com/openai/v1/` と `api_key=set` が表示されます。 💡 `az cognitiveservices account keys list` の戻りは `key1` / `key2` の 2 つです。どちらでも同じように使えます。 ### STEP 5 — curl で疎通確認 ``` curl -sS --http1.1 "$AZURE_AI_ENDPOINT/chat/completions" \ -H "Content-Type: application/json" \ -H "api-key: $AZURE_AI_API_KEY" \ -X POST \ -d '{ "model": "'"$DEPLOYMENT_NAME"'", "messages": [ { "role": "user", "content": "Reply with just OK." } ] }' ``` ✅ 応答 JSON が返れば疎通完了です。`model` にデプロイ名を渡している点に注意してください(モデル名 `DeepSeek-V4.1-Flash` を渡すと 404 などになることがあります)。 環境変数にキーを置きたくない場合は `-H "api-key: <API_KEY>"` を直接指定します。 Entra ID(旧 Azure AD)で認証する場合は、公式チュートリアルにあるとおり `DefaultAzureCredential` 等でスコープ `https://ai.azure.com/.default` のトークンを取得する方式も使えます。 **応答例(実測)** ```json { "id": "43cc521c21684ab9889fd9c00d4e61fa", "model": "deepseek-v4-1-flash", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "OK" }, "finish_reason": "stop" } ], "usage": { "prompt_tokens": 9, "completion_tokens": 2, "total_tokens": 11 } } ``` ### STEP 6 — レート制限が意図どおりか確認する `-D` でヘッダを保存すると、`--sku-capacity` が反映されているか確認できます。 ``` # STEP 5 の curl に -D /tmp/h.txt を足して実行してから、ヘッダを確認する grep -i -E '^HTTP|x-ratelimit' /tmp/h.txt ``` **成功の目印(capacity 20 の実測):** ``` HTTP/1.1 200 OK x-ratelimit-key: deepseek-v4-1-flash x-ratelimit-limit-requests: 20 x-ratelimit-limit-tokens: 20000 x-ratelimit-renewalperiod-requests: 60 x-ratelimit-renewalperiod-tokens: 60 ``` `limit-requests` / `limit-tokens` が `--sku-capacity` に比例していれば、デプロイは意図どおりです。 ## DeepSeek 公式 API と Azure 経由の違い 対象は中国公式(`api.deepseek.com`)と、Azure 直ホストの `DeepSeek-V4.1-Flash`(version `2026-09-10`、`GlobalStandard`、Preview)。Azure 側の所見は 2026-09-28 時点の実測です。 | 区分 | 観点 | 中国公式 | Azure 直ホスト | |---|---|---|---| | API | Chat Completions | あり | あり(capabilities に `chatCompletion`) | | API | Anthropic 互換 | `https://api.deepseek.com/anthropic` | 使えない。`/anthropic/v1/messages` は `api_not_supported`。ブログも触れていない | | API | Responses API | あり。使うならこちら | **使うべきでない。** 宣言されているのは Chat Completions。カタログに `responses` 印は無く、ブログも触れていない。経路自体は HTTP 200 だったが、対応の宣言ではない | | API | Tool / JSON / Vision | あり | カタログ上、画像入力あり。Tool / JSON は Chat Completions の範囲 | | API | 思考の制御(Chat Completions) | 既定は思考オン、既定の強さは `high`。オンオフは `thinking.type`、強さは `reasoning_effort` の `low` / `high` / `max` [6] | `thinking` パラメータは指定できない。送ると 400。オンオフと強さは `reasoning_effort` だけ。`none` は思考なし、`low` は思考あり | | API | コンテキスト / 最大出力 | 1M / 384K | カタログはコンテキスト 1M、出力上限 128K | | 料金 | 入力 cache miss | 0.30(ピーク) / 0.15(オフピーク) | 0.30 | | 料金 | 入力 cache hit | 0.006(ピーク) / 0.003(オフピーク) | 0.006 | | 料金 | 出力 | 1.20(ピーク) / 0.60(オフピーク) | 1.20 | | 料金 | オフピーク半額 | あり(平日 UTC 01:00–04:00 と 06:00–10:00、中国祝日を除く) | **なし** | | 容量 | 上限の意味 | 同時接続。`deepseek-flash` はアカウントあたり 2,500。超過は 429 | SKU capacity。1 capacity ≒ 1 リクエスト / 分 + 1,000 トークン / 分。カタログ上限は 1,000,000 | | 容量 | いまの実効値 | 契約次第。増枠申請は追加料金なし、と公式は書く | サブスクリプションのクォータ次第(** okamoのAzure環境の実測は 20** = 20 リクエスト / 分 + 20,000 トークン / 分) | | データ | 日本閉じ | 不可 | 不可。V4.1 に Data Zone / 単一リージョン SKU は無い | | データ | 推論後に残すか | 残し得る。入力はアカウントがある限り保持し得る [1]。ディスクキャッシュは既定で、未使用なら通常数時間〜数日で削除 [3] | 使うのは Chat Completions。モデル自体は残さない [4]。乱用監視でフラグされたプロンプトは、人の確認用に保存され得る。Preview は監視の扱いが異なり得る [4] | | データ | 人が中身を見るか | 「人は見ない」とは書いていない。不正調査、規約違反、法令対応でアクセス・共有し得る [1] | 自動レビューは保存しない。人が見るのは、フラグされたものか乱用パターンに限る。見るのは認可された Microsoft 社員 [4][5]。Modified abuse monitoring の申請が通ると、その保存と人の確認は止まる | | データ | 学習に使うか | モデル訓練・技術改善に使うと書き、オプトアウト権はある。API 入力が自動で訓練対象外とは書いていない [1] | 基礎モデルの訓練には使わない。DeepSeek 社にも渡さない [4] | | データ | 処理する国 | DeepSeek のインフラ。国外移転は「必要なら保護措置」とだけ [1] | そのモデルがある任意の Azure リージョン。日本にも中国にも閉じない。リソースは East US [4] | | データ | 保存する国 | 中国。準拠法は中国本土、管轄は杭州 [1][2] | 乱用監視の保存先は、リソースの geography(米国)[4] | | データ | 中国公式へ渡るか | そのものが中国公式 | 渡さない [4] | ### 参考リンク - Microsoft Foundry ブログ(Azure 直ホスト / V4.1 Flash): [DeepSeek-V4.1-Flash is coming to Microsoft Foundry](https://techcommunity.microsoft.com/blog/azure-ai-foundry-blog/deepseek-v4-1-flash-is-coming-to-microsoft-foundry/4556431) - DeepSeek 公式 API の料金: https://api-docs.deepseek.com/quick_start/pricing/ - モデルカタログ(Direct from Azure): https://ai.azure.com/catalog/models/DeepSeek-V4.1-Flash 1. [DeepSeek プライバシーポリシー](https://cdn.deepseek.com/policies/en-US/deepseek-privacy-policy.html)(最終更新 2026-02-10)。入力の収集、アカウント存続中の保持、訓練・技術改善への利用とオプトアウト、安全・法令対応での共有、中国のサーバーへの保存。 2. [DeepSeek Open Platform Terms of Service](https://cdn.deepseek.com/policies/en-US/deepseek-open-platform-terms-of-service.html)。準拠法は中国本土。紛争は杭州の登記地を管轄する裁判所。 3. [Context Caching](https://api-docs.deepseek.com/guides/kv_cache)。ディスクキャッシュは既定。未使用なら通常、数時間から数日で削除。 4. [Data, privacy, and security for Foundry Models sold by Azure](https://learn.microsoft.com/en-us/azure/foundry/responsible-ai/openai/data-privacy)(ページ日付 2026-05-18、更新 2026-06-05)。ステートレス、訓練に使わない、モデル提供者に渡さない、Global はモデルがある任意の geography で処理、乱用監視の保存はリソースの geography、Preview は扱いが異なり得る。 5. [Foundry Models sold by Azure abuse monitoring](https://learn.microsoft.com/en-us/azure/foundry/openai/concepts/abuse-monitoring)(ページ日付 2026-05-13)。人の確認は認可された Microsoft 社員に限る。Modified abuse monitoring 承認後は、その保存と人の確認をしない。 6. [Thinking Mode](https://api-docs.deepseek.com/guides/thinking_mode)。Chat Completions は `thinking.type` でオンオフ、`reasoning_effort` は `low` / `high` / `max`。既定は思考オン、effort は high。 **Azure CLI** - `az cognitiveservices account deployment create`: https://learn.microsoft.com/cli/azure/cognitiveservices/account/deployment#az-cognitiveservices-account-deployment-create - `az cognitiveservices usage list`: https://learn.microsoft.com/cli/azure/cognitiveservices/usage - Azure AI Foundry のクォータ管理: https://learn.microsoft.com/azure/ai-foundry/how-to/quota