Udemy 新コース: 作って学ぶMicrosoft 365 Copilot Chat !

Power Apps に Azure DeepSeek R1 に接続する | Power Platform

DeepSeek R1 がAzure 上で提供されました。

DeepSeek R1 is now available on Azure AI Foundry and GitHub | Microsoft Azure Blog

OpenAI が Azure OpenAI なら Azure DeepSeek R1 ですね!

DeepSeek-R1は、以下の特徴を持つモデルです。この AI 分野の発展の速度は凄まじいですね。

  • タスクの推論能力:言語、科学的推論、コーディングタスクに優れています。
  • パラメータ:総パラメータ数は6710億、アクティブパラメータは370億。
  • コンテキスト長:128kのコンテキスト長を持ちます。
  • トレーニング方法:強化学習(RL)と精選されたデータセットでの微調整を組み合わせたトレーニングプロセスを採用。
  • 進化:以前のバージョンであるDeepSeek-R1-Zeroから進化し、読みやすさや言語の一貫性の問題を改善。

ピュアなモデルの利用方法のご紹介として、とりあえずQAアシスタントアプリでも試しに作ってみようと思います。以下のようにYouTubeで紹介しておりますのでこちらもご興味がありましたらご確認ください。

モデルの比較

いろいろなところで様々な観点で比較されておりますが、公式の情報を見てみましょう。

CategoryBenchmark (Metric)Claude-3.5-Sonnet-1022GPT-4o 0513DeepSeek V3OpenAI o1-miniOpenAI o1-1217DeepSeek R1
ArchitectureMoEMoE
# Activated Params37B37B
# Total Params671B671B
EnglishMMLU (Pass@1)88.387.288.585.291.890.8
MMLU-Redux (EM)88.988.089.186.792.9
MMLU-Pro (EM)78.072.675.980.384.0
DROP (3-shot F1)88.383.791.683.990.292.2
IF-Eval (Prompt Strict)86.584.386.184.883.3
GPQA-Diamond (Pass@1)65.049.959.160.075.771.5
SimpleQA (Correct)28.438.224.97.047.030.1
FRAMES (Acc.)72.580.573.376.982.5
AlpacaEval2.0 (LC-winrate)52.051.170.057.887.6
ArenaHard (GPT-4-1106)85.280.485.592.092.3
CodeLiveCodeBench (Pass@1-COT)33.834.253.863.465.9
Codeforces (Percentile)20.323.658.793.496.696.3
Codeforces (Rating)7177591134182020612029
SWE Verified (Resolved)50.838.842.041.648.949.2
Aider-Polyglot (Acc.)45.316.049.632.961.753.3
MathAIME 2024 (Pass@1)16.09.339.263.679.279.8
MATH-500 (Pass@1)78.374.690.290.096.497.3
CNMO 2024 (Pass@1)13.110.843.267.678.8
ChineseCLUEWSC (EM)85.487.990.989.992.8
C-Eval (EM)76.776.086.568.991.8
C-SimpleQA (Correct)55.458.768.040.363.7

DeepSeek-R1は、言語、科学的推論、コーディングタスクなどのステップバイステップのトレーニングプロセスを使用して、推論タスクに優れています。671Bの合計パラメータを備え、37Bのアクティブパラメータと128kのコンテキスト長を特徴としています。

DeepSeek-R1は、Chain-of-Thought(CoT)推論を拡張することで性能を向上させた以前の推論中心モデルの進歩を基にしています。DeepSeek-R1は、強化学習(RL)を厳選されたデータセットでのファインチューニングと組み合わせることで、さらに進化しています。これは、RLのみに依存し、強力な推論能力を示した以前のバージョン、DeepSeek-R1-Zeroから進化しましたが、読みづらい出力や言語の一貫性の問題がありました。これらの制限に対処するために、DeepSeek-R1は少量のコールドスタートデータを取り入れ、推論指向のRLとキュレーションされたデータセットでの教師ありファインチューニングを組み合わせた洗練されたトレーニングパイプラインを採用しています。これにより、推論ベンチマークでの最先端の性能を達成するモデルが実現しました。

出典: GitHub – deepseek-ai/DeepSeek-R1

これはすぐに試してみるしかない!ということで Power Platform からも使って独自のアプリやフローに組み込んでみたいと思います。

オリジナルのDeep Seek レポジトリ

オリジナルのレポジトリはこちらにあります。

https://github.com/deepseek-ai/DeepSeek-R1

利用にあたっての推奨事項

DeepSeek-R1シリーズモデルを利用する際に、期待されるパフォーマンスを達成するためにベンチマーキングを含む以下の構成に従うことをお勧めします。

  • システムプロンプトを追加しないようにしましょう。すべての指示はユーザープロンプト内に含まれるべきです。
  • 数学の問題に関しては、「段階を追って考え、最終的な答えを \boxed{} 内に入れてください。」という指示をプロンプトに含めることをお勧めします。
  • モデルの性能を評価する際は、複数のテストを行い、その結果を平均化することをお勧めします。

追加の推奨事項

モデルの推論出力(<think>タグ内に含まれる)は、モデルの最終応答よりも有害なコンテンツを含む可能性があります。アプリケーションが推論出力をどのように使用または表示するかを考慮する必要があります。製品環境では、推論出力を抑制することを検討してください。

個人的にはこのThinkタグの中身が好きですね。なんか乙女心のようにいろいろ考えてから返答している様が見れても面白いです。

サポートされている言語

現在では英語科中国語がサポートされていますので、日本語の必要に応じて翻訳サービスを挟む必要があります。

Property説明
サポートされるデータ型入力 テキスト、出力 テキスト
サポートされている言語en (英語), zh (中国語)

Extract from the original model evaluation

ライセンス

DeepSeek R1 は MIT ライセンスで提供されています。

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

上記の要約はこんな感じです。

  1. 自由な使用:ソフトウェアを自由に使用、コピー、修正、結合、公開、配布、サブライセンス、販売する権利が与えられます。
  2. 著作権表示:上記の著作権表示と許諾表示をすべてのコピーまたは重要な部分に含める必要があります。
  3. 無保証:ソフトウェアは「現状のまま」提供され、いかなる種類の保証もありません。特に、商品性、特定目的への適合性、非侵害についての保証は明示的にも暗示的にも行われません。
  4. 責任制限:著作者または著作権者は、ソフトウェアの使用またはその他の取引に起因または関連するいかなる請求、損害、その他の責任についても責任を負いません。

コードサンプル

入力

API の仕様を確認すると、 OpenAI と同じですね。OpenAI のAPI 仕様に慣れている方は学習コスト無しで利用できます。

コピーしました!

REST curl
AAD_TOKEN=$(az account get-access-token --resource=https://ai.azure.com | grep -o '"accessToken": "[^"]*' | awk -F'"' '{print $4}');
curl -X POST "<ENDPOINT_URL>/chat/completions" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer $AAD_TOKEN" \
    -d '{
        "messages": [
            {
                "role": "user",
                "content": "I am going to Paris, what should I see?"
            }
        ],
        "max_tokens": 2048,
        "model": "DeepSeek-R1"
    }'

出力

マルチターンがサポートされています。この点も OpenAI と同じです。

コピーしました!

REST curl
AAD_TOKEN=$(az account get-access-token --resource=https://ai.azure.com | grep -o '"accessToken": "[^"]*' | awk -F'"' '{print $4}');
curl -X POST "<ENDPOINT_URL>/chat/completions" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer $AAD_TOKEN" \
    -d '{
        "messages": [
            {
                "role": "user",
                "content": "I am going to Paris, what should I see?"
            },
            {
                "role": "assistant",
                "content": "Paris, the capital of France, is known for its stunning architecture, art museums, historical landmarks, and romantic atmosphere. Here are some of the top attractions to see in Paris:\n \n 1. The Eiffel Tower: The iconic Eiffel Tower is one of the most recognizable landmarks in the world and offers breathtaking views of the city.\n 2. The Louvre Museum: The Louvre is one of the world's largest and most famous museums, housing an impressive collection of art and artifacts, including the Mona Lisa.\n 3. Notre-Dame Cathedral: This beautiful cathedral is one of the most famous landmarks in Paris and is known for its Gothic architecture and stunning stained glass windows.\n \n These are just a few of the many attractions that Paris has to offer. With so much to see and do, it's no wonder that Paris is one of the most popular tourist destinations in the world."
            },
            {
                "role": "user",
                "content": "What is so great about #1?"
            }
        ],
        "max_tokens": 2048,
        "model": "DeepSeek-R1"
    }'

注意事項

システムプロンプトを追加せず、ユーザープロンプト内にすべての指示を含めることが推奨されるようです。

システムプロンプトは追加しないアーキテクチャでやってみようと思います。

価格

現在は無料で提供されています。

料金計算ツール | Microsoft Azure

サンプルアプリ

会話UI アプリとして Power Apps、API接続にPower Automate クラウドフローを利用します。

モデルデプロイ

Azure AI Foundry

モデルのデプロイを行います。

Azure AI Foundry にアクセスします。

モデルのカタログからDeepSeek R1 を選択してデプロイします。現在はバナーが出ていて選びやすいです。

Power Apps

App.OnStart

App.OnStart プロパティに最初の発話を入れています。まず、簡単な挨拶が assistant からの発話として、宣言した messages に格納されます。これを次のギャラリーで表示します。

コピーしました!

Power Fx
ClearCollect(messages, {
    role:"assistant",
    content:"Hi there! How do you do today?"
})

Gallery1

高さの伸縮可能なギャラリーを挿入して、これを会話の履歴保持コントロールとします。

レイアウトをニュースフィードにします。

Gallery1 の Items には、messages コレクションが設定されています。

履歴保持用のギャラリーには3つのコントロールが含まれています。

Imageコントロールには、アシスタントからのメッセージの場合、画像を DeepSeek のアイコンにしています。

アップロードした画像のファイル名をいれるようにしてください。

コピーしました!

Power Fx
If(ThisItem.role = "assistant", 'deepseek-light-aistudio', User().Image)

ButtonCanvas1

送信ボタン ButtonCanvas1 にはOnSelect プロパティにメッセージ送信とテキスト入力コントロールのリセット、さらに受信したメッセージのmessages コレクションへの追加が組み込まれています。

コピーしました!

Power Fx
Collect(messages, {role:"user", content:TextInputCanvas1.Value});
Reset(TextInputCanvas1);
Collect(messages, {role:"assistant", content: DeepSeekPowerApps.Run(JSON(messages)).reply});

先にPower Automate の設定が必要です。Power Automate のフローを作成してから式の設定をしましょう。

Power Automate

トリガーは以下のようになっています。

Power Apps からJSON 化して受けとった messages コレクションを json 式でJSON 型で利用できるようにします。

コピーしました!

Power Automate Expression
json(triggerBody()?['text'])

会話のAPIは以下のような形式です。

https://DeepSeek-R1-xxxxx.eastus2.models.ai.azure.com/v1/chat/completions

エンドポイントは Azure AI Foundry から取得できます。

モデルカタログから DeepSeek を選び、既存のデプロイから探しましょう。

HTTPリクエストはOpenAI とほぼ同じですが以下のように設定します。

Body にはJSON型に変換した messages を利用して、以下のように設定します。

コピーしました!

JSON
{
  "messages": @{outputs('messages')},
  "max_tokens": 2048,
  "model": "DeepSeek-R1"
}

DeepSeekからの 応答メッセージ内容 は以下のようにテキストのみを抽出します。

コピーしました!

Power Automate Expression
body('HTTP')['choices'][0]['message']['content']

応答にそのままこの出力をreply として設定します。

これで利用することができます。以上、ご参考になれば幸いです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Index