[生成AI] DeepSeek R1のローカル実行とCursorとの接続

# １．DeepSeek R1のローカル実行
遅まきながら、下記の資料「Run DeepSeek-R1 on Your Laptop with Ollama」を参考に、DeepSeek R1のローカル実行などを試してみました。実行環境は、Windows 11です。

https://dev.to/shayy/run-deepseek-locally-on-your-laptop-37hl


**（１）Ollmaのインストール**
下記サイトより、ollamaのインストーラをダウンロードし、実行します。

[Download Ollama](https://ollama.com/download "Download Ollama")　

ollamaは、スタンドアローンで様々なLLMを実行できるOSSです。
ライセンスはMIT Licenseになります。

https://github.com/ollama/ollama

インストールが完了したら、ターミナルを開き、下記のバージョン確認のコマンドを実行することで、インストール確認とします。

```
PS C:\tmp> Ollama -v
ollama version is 0.5.7
```

**（２）モデルをダウンロード**
DeepSeek-R1の場合、1.5b、7b、8b、14b、32b、70b、671bのパラメータ数のモデルが使用できます。1.5bは、パラメータ数が1.5 billion、すなわち15億になります。また、様々な蒸留モデルを利用できます。詳細は、下記の記事を参照してください。

https://ollama.com/library/deepseek-r1

7bを使用する場合、ダウンロードコマンドは下記になります。

```
ollama pull deepseek-r1:7b
```

実行結果は、下記のようになります。

![スクリーンショット 2025-01-24 22.05.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3982568/46a336c6-835e-8016-78bf-9f07261b5998.png)


**（３）モデルを実行**
下記のコマンドでモデルが起動し、チャットが利用できます。

```
ollama run deepseek-r1:7b
```
なお、APIサーバのホストは"localhost:11434"となります。


# ２．Cursorとの接続

下記の資料を元に、ローカルで動作するDeepSeek R1とCursorを接続してみます。

https://dev.to/basstimam/deepseek-r1-on-cursor-with-ollama-1pph

cursorから、localhost上のAIサーバに直接アクセスできないようなので、ngrokを使用します。ngrokは、ローカルに起動したサーバを外部公開するためのfornt doorの機能を提供しています。

https://ngrok.com/

**（１）ngrokの準備**
　①　ngrokにアカウントを作る
　②　エージェントツール(ngrok.exe)をダウンロードして、PATHが通った場所に配置する。
　③  "ngrok config add-authtoken"コマンドで、AUTHTOKENを設定する。

https://download.ngrok.com/downloads/windows?tab=download

**（２）環境変数OLLAMA_ORIGINSを設定**
環境変数OLLAMA_ORIGINSに*を設定します。

![スクリーンショット 2025-01-30 22.27.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3982568/cf44db53-1dcc-d816-1655-8f6e2d0b662e.png)

**（３）Ollamaのサーバを再起動**
タスクバーのインジケータの中に隠されているアイコンを右クリックし"Quit Ollma"を押下し終了します。

![Ollamaサーバ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3982568/33dd0725-3556-dfca-0980-1772041aa16d.png)

![Ollma終了.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3982568/e1b3ef8e-ae59-466b-533f-ac123ec838a0.png)

スタート画面から、Ollamaのサーバを起動します。
![スクリーンショット 2025-01-30 22.35.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3982568/5132e0fb-baad-8793-5b45-f69994c3c993.png)

**（３）モデルを実行**
下記のコマンドで、モデルを起動します。

```
ollama run deepseek-r1:7b
```

**（４）ngrokの実行**
別のターミナルを開き、下記のコマンドでollamaの外部公開を行います。

```
ngrok http 11434 --host-header="localhost:11434"
```

実行すると下記のような画面になります。
Forwardingで表示されているもの(513e-118-106-20-71.ngrok-free.app)を使用します。
この値はngrokコマンド実行するたびに、毎回変わります。

![スクリーンショット 2025-01-30 21.31.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3982568/53807cd7-683e-ca56-aff1-46d13ca42426.png)

**（５）[cursorの設定] モデルの登録**
Cursor Setting -> Modelsで、起動しているモデル名を登録します。
今回の場合、"deepseek-r1:7b"になります。

![スクリーンショット 2025-01-30 22.43.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3982568/e394b146-f46a-53c7-2c76-a447e5eefed3.png)

**（５）[cursorの設定] OpenAI Keyを設定**
下記を設定し、有効にします。
なお、Verifyは失敗するけど気にしないでください。

<table>
  <thead>
    <tr>
      <th>項目</th>
      <th>設定値</th>
      <th>備考</th>
    </tr>
  </thead>
  <tr>
    <td>Override OpenAI Base URL</td>
    <td>https://513e-118-106-20-71.ngrok-free.app/v1</td>
    <td>ngrokでForwardingされたURLに"/v1"を付け加えます</td>
  </tr>
  <tr>
    <td>OpenAI Key</td>
    <td>ollama</td>
    <td></td>
  </tr>
</table>

![スクリーンショット 2025-01-30 22.50.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3982568/04ee6779-f90c-4bee-eb72-69dc840edd29.png)

**（６）モデルを選択して、AIと対話**
モデルに"deepseek-r1:7b"を指定することで対話可能です。
ただ、私の環境だと、応答時間が遅く、ちょっと実用的ではありませんでした。

![スクリーンショット 2025-01-30 22.55.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3982568/479e263c-2698-21c8-0095-27e786f43397.png)

ローカル起動しているDeepSeek R1に直接チャットすると、すぐにレスポンスがあるので、
**Cursor ⇔ ngrokのForwarding先 ⇔ ngrokのエージェント ⇔ ローカルのDeep Seek R1**
と通信が走るので、その間にボトルネックがありそうです。
（ひょっとしたら、ngrokを優勝にグレードアップしたら解決するかも)



![スクリーンショット 2025-01-30 23.01.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3982568/573c312c-9c00-7575-6488-d2c2cabc9638.png)


2025.01.30 山崎作成