【ITニュース解説】Giving DeepSeek a Spin
2025年09月18日に「Dev.to」が公開したITニュース「Giving DeepSeek a Spin」について初心者にもわかりやすく解説しています。
ITニュース概要
ブックマーク整理機能で利用していたGemini APIにエラーが増加したため、DeepSeek APIへ切り替えて試用を開始した。既存コードの大幅な変更は不要で、安定性が向上するか監視していく。
ITニュース解説
筆者は以前、ウェブブラウザのブックマークを効率的に整理するための便利な機能を開発した。この機能は、Googleが提供する大規模なAIモデルであるGeminiを利用し、ワンクリックでブックマークを適切なカテゴリに分類できるものだ。この機能は多くのユーザーから好評を得ていた。
しかし最近、Geminiの利用中にいくつかの問題が発生し始めた。具体的には、ウェブサーバーが一時的にサービスを提供できないことを示す「503エラー」が時折発生したり、AIからの回答が全く返ってこない「空のレスポンス」があったり、AIからの応答を待つ時間が1分を超えてしまう「タイムアウト」が増加してきたのだ。筆者はこれらの問題の原因について、いくつかの可能性を推測している。一つは、大量のブックマークを処理する際にAIに渡す情報量(これを「コンテキスト」と呼ぶ)が長くなりすぎること。もう一つは、AIとプログラムを連携させるための仕組みである「API」への呼び出し回数が頻繁すぎること。そして、おそらく最も考えられるのは、無料で利用できる「Gemini 2.5 Flash」のプランを使っていることが影響しているのではないか、ということだ。これらの問題の原因を特定するためには、さらに調査の時間が必要だと感じている。
そこで、これらの問題を抱えたままにするのではなく、別のAIモデルを試してみることにした。目をつけたのは「DeepSeek」というAIモデルだ。DeepSeekがGeminiよりも安定した性能を発揮するかどうか、筆者は非常に興味を持っている。ブックマーク整理機能の核となるAI部分をDeepSeekに切り替えることで、問題が解決されることを期待している。
DeepSeekのAPIを利用する方法は、公式ドキュメントでいくつか紹介されているが、筆者はJavaScriptのプログラムでHTTP通信を行うためのライブラリである「axios」をシンプルに使うことにした。まず、DeepSeekのサービスを利用するために必要な「APIキー」を取得する。このAPIキーは、ユーザーが正式な利用者であることをDeepSeekに証明するための重要な情報で、秘密にして管理する必要がある。
APIキーを取得したら、以前Gemini用に作成した、AIに指示を出すための文章(これを「プロンプト」と呼ぶ)をそのままDeepSeekにも再利用し、AIとの通信を担う「send」関数をDeepSeek向けに作成した。
この「send」関数の中では、まずDeepSeekのAPIエンドポイント、つまり通信先のURLをpathとして指定している。次に、AIに送るメッセージや設定をまとめたdataというオブジェクトを用意する。
このdataオブジェクトには、いくつかの重要な情報が含まれている。
messagesには、AIに伝えたい内容が含まれる。contentにはブックマーク整理の具体的な指示やブックマークデータそのものを記述し、roleには「user」と設定して、これがユーザーからのメッセージであることを示している。
modelには、使用するDeepSeekのAIモデルの名前である「deepseek-chat」を指定する。
max_tokensは、AIが生成する応答の最大の長さを指定する。ここでは「8192」という大きな値が設定されており、AIが十分な長さの応答を生成できるようにしている。
response_formatは、AIからの応答の形式を指定するもので、ここでは「text」(テキスト形式)と設定している。
streamは、AIからの応答をリアルタイムで少しずつ受け取るかどうかを設定する項目で、ここでは「false」として、応答が全て生成されてから一括で受け取るようにしている。
temperatureは、AIの応答の創造性や多様性を調整するパラメータで、「1」は比較的高めに設定され、より多様な応答を期待していることを意味する。
top_pも応答の確率分布に関する設定で、「1」は幅広い選択肢から応答を生成するようAIに指示している。
これらの情報を含むdataオブジェクトを使って、axios.postメソッドでDeepSeekのAPIエンドポイントにHTTPリクエストを送信する。
この際、リクエストのヘッダー情報として、Content-Typeには送信するデータがJSON形式であることを、Authorizationには先ほど取得したAPIキーを含める。Bearer ${process.env.DS_KEY}という形式は、APIキーをコードに直接書き込まず、プログラムが実行される環境に安全に保存されたAPIキー(process.env.DS_KEY)を使用するための一般的な方法だ。
APIからの応答を受け取った後、プログラムはres?.status !== 200という条件で、HTTPステータスコードが200(通信成功)であるかどうかを確認する。もし200以外であれば、エラーが発生したと判断して処理を中断する。通信が成功していれば、AIからの応答データの中から、実際にAIが生成したメッセージの内容を抽出し、その内容を「send」関数の戻り値として返す。
Gemini用の「send」関数からDeepSeek用の「send」関数への切り替えは非常にスムーズだった。以前Gemini用に設計したプロンプトをそのままDeepSeekでも利用できたため、AIに与える指示の内容を変更する必要はなかった。また、プログラムの他の部分も、AIとの通信を行うこの「send」関数の中身を書き換えるだけで済み、他のコードに影響を与えることなく、ほぼ「置き換え」感覚でAIモデルを切り替えることができた。これは開発者にとって、異なるAIモデルを柔軟に試す上で非常に大きなメリットとなる。
DeepSeekに切り替わった新しいバージョンのChrome拡張機能は、現在すでに利用可能になっている。筆者は今後、DeepSeekのパフォーマンス、特に安定性についてしばらく監視を続ける予定だ。もしDeepSeekがGeminiよりも安定した運用を実現できれば、ブックマーク整理機能の利用者にとって、より信頼性の高い、快適なサービス提供につながるだろう。興味のあるユーザーは、筆者の開発した「Bookmark Dashboard」拡張機能を試し、DeepSeek版のワンクリックブックマーク整理機能を体験できる。