(公式サイトまとめ)DeepSeek-V3
こんにちは、makokonです。
2024年末に公開されたDeepSeek-V3が随分と評判がいいようです。
優れた性能/コストレシオ、普通にOpenAIと同様にAPI利用できるということで、興味がつきません。
早速使ってみたという記事を書くべきかと思ったのですが、とりあえず公式サイトにある情報をまとめてみましょう。
情報は2025/1/5現在のサイトを見ております。
結論としては、非常に魅力的なLLMであり、個人的には使っていこうと思っていますが、業務用途など責任のある用途には、様子を見たほうがいいかなと思っています。
はじめに DeepSeek APIを使用するための基本的な情報
DeepSeek APIは、OpenAI互換の形式を利用しています。設定を変更することで、OpenAI SDKやOpenAI API互換のソフトウェアを利用してDeepSeek APIにアクセスできます。
APIの基本URLは https://api.deepseek.com ですが、OpenAI互換性のために https://api.deepseek.com/v1 も使用可能です。ただし、この「v1」はモデルのバージョンとは関係ありません。
最新のdeepseek-chatモデルであるDeepSeek-V3を利用するには、モデルを model='deepseek-chat' と指定します。
APIキーの取得
APIキーは申請が必要です。
下記サイトからサインインして、APIキーを発行してください。
https://platform.deepseek.com/sign_in
APIコールの基本
OpenAIと互換性があるということで、利用方法は簡単です。
ここでは、pythonからの呼び出し方法を示します。
#pip3 install openai
from openai import OpenAI
client = OpenAI(api_key="<DeepSeek API Key>", base_url="https://api.deepseek.com")
response = client.chat.completions.create(
model="deepseek-chat",
messages=[
{"role": "system", "content": "You are a helpful assistant"},
{"role": "user", "content": "Hello"},
],
stream=False
)
print(response.choices[0].message.content)
DeepSeek APIとbase_urlの設定を除けば、呼び出し方も結果の取得も同じですね。これなら今までのOpenAIを利用したアプリケーションがそのまま利用できそうです。
トークン価格
DeepSeek APIのトークンに基づく価格設定を示します。
deepseek-chatモード: 64Kのコンテキスト長と8Kの最大出力トークンを持ちます。出力トークンはmax_tokensで設定可能です。
現在、2025年2月8日16:00(UTC)まで、すべてのユーザーが割引価格を利用できます。それ以降は、通常価格に戻るそうです。(とは言っても、最近の競争の激しさだと、延長してくれるかもしれないですね。)
通常価格だとしてもとっても安いですよね。
料金の計算:
費用 = トークン数 × 単価。
料金は、チャージした残高や付与された残高から直接差し引かれ、両方の残高がある場合は付与された残高が優先的に使用されます。
価格は変更される可能性があり、DeepSeekは調整する権利を持っています。実際の使用量に基づいてチャージし、最新の価格情報を定期的に確認することをお勧めします。
推奨温度(temperatuere)
パラメータの設定に関するガイドラインを提供しています。デフォルトの値は1.0ですが、用途に応じて変更することを推奨しています。
(結構使い勝手に影響するかもしれませんね。この数値はOpenAI互換とかいってほうっておくと、結果に深刻な影響があるかもしれません。)
コーディング / 数学: Temperatureを0.0に設定。これは、最も決定論的で予測可能な応答を得るためです。
データクリーニング / データ分析: Temperatureを1.0に設定。バランスの取れた応答を得るのに適しています。
一般的な会話: Temperatureを1.3に設定。より多様で自然な会話を生成します。
翻訳: Temperatureを1.3に設定。自然な翻訳を促進します。
クリエイティブライティング / 詩: Temperatureを1.5に設定。創造性を高めるために使用します。
トークンの使用方法
DeepSeek APIで使用されるトークンとその使用方法について説明しています。トークンは、自然言語テキストを表現するためにモデルが使用する基本単位であり、課金にも使用されます。一般的に、トークンは「文字」や「単語」として理解できます。
トークンの換算率:
1英字キャラクター ≈ 0.3トークン
1中国語キャラクター ≈ 0.6トークン
ただし、異なるモデルでは異なるトークン化方法が使用されるため、換算率は変動することがあります。実際に処理されたトークン数は、モデルの返す使用結果に基づいて確認できます。
オフラインでのトークン使用量の計算:
デモトークナイザーコードが含まれているzipパッケージを実行することで、入力や出力のトークン使用量を計算できます。
https://cdn.deepseek.com/api-docs/deepseek_v2_tokenizer.zip
レート制限
現時点では、DeepSeek APIはユーザーのレート制限を設けていないそうです。
ただし、サーバーが高いトラフィック負荷を受けている場合、429(Rate Limit Reached)や503(Server Overloaded)のエラーが発生することがあります。このような場合は、少し待ってから再試行するようにしてください。もしこの状況が続く場合は、サポートに連絡することをお勧めします。
サーバーの状況で発生するレート制限のエラーは、実際にいつ発生するか読めないだけに、実行時にはエラーチェックが欠かせないですね。実用的なアプリの作成においては、多少制限が厳しくなっても保証してくれる数値がほしいなあ。
こんな感じのチェックを入れれば、適当にリトライすると思うけど結局エラーの発生するレベルがわからないとなあ。
import time
import requests
from openai import OpenAI
from openai.error import RateLimitError, APIError
def call_deepseek_api(client, max_retries=5):
for attempt in range(max_retries):
try:
response = client.chat.completions.create(
model="deepseek-chat",
messages=[
{"role": "system", "content": "You are a helpful assistant"},
{"role": "user", "content": "Hello"},
],
stream=False
)
return response.choices[0].message.content
except RateLimitError:
print("Rate limit reached. Retrying...")
except APIError as e:
if e.http_status == 503:
print("Server overloaded. Retrying...")
else:
raise
time.sleep(2 ** attempt) # Exponential backoff
raise Exception("Max retries exceeded")
# OpenAI SDKを使用してDeepSeek APIを初期化
client = OpenAI(api_key="<DeepSeek API Key>", base_url="https://api.deepseek.com")
# DeepSeek APIを呼び出し、応答を取得
try:
result = call_deepseek_api(client)
print(result)
except Exception as e:
print(f"API呼び出しに失敗しました: {e}")
主要なエラーコード
API利用時に発生する主要なエラーとその対策の簡単なまとめです。
他にもあるのかは、確認できていません。
400 - Invalid Format
原因: リクエストボディの形式が無効です。
解決策: エラーメッセージのヒントに従ってリクエストボディを修正してください。詳細はDeepSeek APIのドキュメントを参照してください。
401 - Authentication Fails
原因: APIキーが間違っているため認証に失敗しました。
解決策: APIキーを確認してください。持っていない場合は、新しくAPIキーを作成してください。
402 - Insufficient Balance
原因: 残高が不足しています。
解決策: アカウントの残高を確認し、チャージページで資金を追加してください。
422 - Invalid Parameters
原因: リクエストに無効なパラメーターが含まれています。
解決策: エラーメッセージのヒントに従ってリクエストパラメーターを修正してください。詳細はDeepSeek APIのドキュメントを参照してください。
429 - Rate Limit Reached
原因: リクエストを送信し過ぎています。
解決策: リクエストのペースを適切に調整してください。また、OpenAIなどの他のLLMサービスプロバイダーのAPIを一時的に使用することをお勧めします。
500 - Server Error
原因: サーバーが問題に遭遇しました。
解決策: 少し待ってからリクエストを再試行してください。問題が続く場合はサポートに連絡してください。
503 - Server Overloaded
原因: 高トラフィックによりサーバーが過負荷です。
解決策: 少し待ってからリクエストを再試行してください。
DeepSeek-V3のリリース情報2024/12/06
新機能と改善点
速度向上: V2の3倍速い60トークン/秒の処理速度。
強化された能力: より高度なタスクを処理可能。
API互換性: 既存のAPIとの互換性を保持。
オープンソース: モデルと関連論文が完全にオープンソース化。
V3の新機能
671B MoEパラメータ: 大規模なMixture of Expertsパラメータ。
37B活性化パラメータ: 実際にアクティブになるパラメータ数。
14.8Tの高品質トークンでトレーニング: より豊富なデータセットを使用。
リソースリンク
価格情報
2025年2月8日まで: V2と同じ価格設定。
2025年2月8日以降: 更新された価格が適用されます(詳細未記載)。
このアップデートにより、DeepSeek-V3は性能が向上し、より多くのユースケースに対応できるようになっています。
主な性能比較
かなり優秀ですね。claude3.5やGPT4oに見劣りしていないです。というより勝っていますね。日本語性能と、安定性や、安全性が確認できれば使うべきなのかなあ。
DeepSeekchatAPIの主要パラメータ
API呼び出しにあたって、必須のパラメータまたは設定可能パラメータの抜粋です。おそらく、設定可能パラメータはもっとたくさんあるし、設定数値は、時期によって変更することがあるのではないかと思われます。
Body
必須
メッセージのリストを含むオブジェクト。
messages
型: object[]
必須
設定可能範囲: メッセージ数 >= 1
説明: これまでの会話を構成するメッセージのリスト。
含まれる要素:
content:
型: string
必須
説明: システムメッセージの内容。
role:
型: string
必須
設定可能範囲: [system]
説明: メッセージの作者の役割。
name:
型: string
説明: 参加者を区別するためのオプションの名前。
model
型: string
必須
設定可能範囲: [deepseek-chat]
説明: 使用するモデルのID。
frequency_penalty
型: number
Null許可
設定可能範囲: >= -2 かつ <= 2
デフォルト値: 0
説明: 新しいトークンの生成頻度に基づくペナルティ。
max_tokens
型: integer
Null許可
設定可能範囲: > 1
デフォルト値: 4096
説明: チャット完了で生成可能な最大トークン数。
presence_penalty
型: number
Null許可
設定可能範囲: >= -2 かつ <= 2
デフォルト値: 0
説明: 新しいトークンがこれまでのテキストに出現しているかに基づくペナルティ。
response_format
型: object
Null許可
stop
型: object
Null許可
stream
型: boolean
Null許可
説明: 設定すると、部分的なメッセージデルタが送信されます。
temperature
型: number
Null許可
設定可能範囲: <= 2
デフォルト値: 1
説明: サンプリング温度。高い値は出力がランダムになり、低い値は焦点が絞られた決定論的になります。
top_p
型: number
Null許可
設定可能範囲: <= 1
デフォルト値: 1
説明: トークンの確率質量に基づくサンプリング。
tools
型: object[]
Null許可
tool_choice
型: object
Null許可
logprobs
型: boolean
Null許可
説明: 出力トークンの対数確率を返すかどうか。
top_logprobs
型: integer
Null許可
設定可能範囲: <= 20
説明: 各トークン位置で最も可能性の高いトークンの数を指定する整数。
主なFAQ
サイト記載のFAQです。
アカウント関連
アカウントにサインインできない
最近のアカウント活動が自動リスク管理システムをトリガーし、アカウントへのアクセスが一時的に停止されている可能性があります。異議申し立てを希望する場合は、指定のフォームに記入してください。迅速に対応いたします。
メールで登録できない
「ログインに失敗しました。現在、あなたのメールドメインは登録をサポートしていません。」というエラーメッセージが表示された場合は、DeepSeekがそのメールをサポートしていないためです。別のメールサービスプロバイダーを使用してください。問題が解決しない場合は、service@deepseek.comにお問い合わせください。
請求関連
残高に有効期限はありますか?
チャージした残高には有効期限はありません。ただし、付与された残高の有効期限は請求ページで確認できます。
API呼び出し関連
API呼び出し時にレート制限はありますか?アカウントの制限を増やすことはできますか?
各アカウントに設定されたレート制限は、リアルタイムのトラフィック状況とアカウントの短期的な利用履歴に基づいて動的に調整されます。個別アカウントのレート制限の増加は現在サポートされていません。
APIの速度がウェブサービスより遅いと感じるのはなぜですか?
ウェブサービスはストリーミング出力を使用しており、モデルがトークンを生成するたびに逐次的に表示されます。APIはデフォルトで非ストリーミング出力(stream=false)を使用しており、生成が完了するまで出力は返されません。API呼び出しでストリーミング出力を使用することで、インタラクティブ性を最適化できます。
APIはLangChainをサポートしていますか?
はい、サポートしています。以下のデモコード(deepseek_v2_langchain.py)を参考にしてください。必要に応じてAPIキーを置き換えてください。
APIはEmbeddingをサポートしていますか?
現時点ではサポートしていませんが、開発計画に含まれています。
オフラインでトークン使用量を計算する方法は?
Token & Token Usageを参照してください。
注意事項
DeepSeekを利用するにあたっての注意事項が下記サイトにあります。
重要そうなことについて、ピックアップしておきます。
4. 入力と出力
入力データに関する権利を有することを保証する必要があります。
安全なデータ処理のもと、サービスの改善にデータを利用する場合があります。
6. 料金と支払い
有料サービスを利用する際は、前払いが必要です。
価格や利用条件についての変更は通知されます。
返金には条件があり、必要な証明を提出する必要があります。
9. 準拠法と管轄
規約の解釈や紛争は中国の法律に従います。
紛争は交渉を通じて解決し、必要に応じて裁判所に訴えることができます。
気になった部分は、これくらいでしょうか。
サービスの改善にデータを利用する事があるらしいのですが、これが学習に使うかどうかは明言されていません。業務上の利用は避けるほうが懸命かもしれません。
また、トラブルが起きた場合には中国の法律によって、判断されます。万が一裁判になった場合は、中国の裁判所でしょう。つまり、何も保証されない(気にしすぎ?)ということでしょう。
ぜひ使ってみたいLLMですが、業務として利用するのはまだ先かもしれません。