@ryoppippi

Cursor EditorでOllamaを使う

19 Apr 2024 ・ 6 min read


はじめに

Cursor Editorすごいですよね! ChatGPTとの​連携が​強力で、​コーディングの​体験が​とても​良いです。

https://cursor.sh/

また、​昨今では​ChatGPT対抗の​Local LLMの​開発も​盛んです。 特に​Ollamaを​使うと、​Local LLMを​とても​簡単に​使うことができます。

https://ollama.com/

最近では

  • Command R
  • Command R+
  • Llama3

など、​一部​GPT-4を​超える​性能を​持つモデルも​登場しています。

Local LLMの​魅力は​なんと​いっても​その​種類の​豊富さ、​そして​無料で​使える​ことです。

しかし、​Cursor Editorでは​そのままでは​Ollamaを​使うことができません。

Cursorで​OpenAI以外の​LLM Providerを​使うには

そも​そも​Cursor Editorは​以下の​Providerに​対応しています。

  • OpenAI
  • Claude
  • Azure OpenAI

しかし、​世の​中には​OpenAI互換の​APIと​いう​ものが​存在します。 これらの​APIを​呼び出す仕組みが​Cursor Editorには​用意されています。​それが​Endpointの​変更です。

Cursor Editor Cursor Editorの​Model設定画面 Endpointを​変更する​ことで、​OpenAI以外の​LLM Providerを​使うことができる

その​ため、​各社の​モデルを​OpenAI API互換に​変換して​提供してくれる​サービスが​あったりします。

https://OpenRouter.ai

こういった​サービスを​使うと、​例えば​Cohere社のCommand R+を​Cursor Editorで​呼び出せたりできます。

https://mosya.dev/blog/cursor-commandr

ところで、​Ollamaは​OpenAI API互換の​APIを​提供しています。

https://ollama.com/blog/openai-compatibility

では、​ここに​Ollamaの​endpointであるhttp://localhost:11434/v1を​指定してみましょう。

すると…​エラーが​出ますね。 なぜでしょう…​?

なぜCursorで​Ollamaを​使えないのか

Cursor Editor Cursor Editorで​Developer Toolを​開いてみる

結論から​言うと、​Cursorで​LLMを​呼び出す時は​以下の​経路で​リクエストが​送られます。

Cursor Editor

Cursor Server

LLM Provider(OpenAI etc.)

Cursor Server

Cursor Editor

Cursor Editorから​Cursor Serverに​送られる​リクエストの​中には、​Endpointの​情報も​含まれています。 そして、​Cursor Serverは​その情報を​元に、​リクエストを​LLM Providerに​送ります。

その​ため、localhostを​指定しちゃうと、​Cursor Serverから​通信が​こないんですねえ。

なので​localの​ollama serverを​公開して、​Proxyする​必要が​あるのですね。

一番​簡単な​解決策

一番​簡単なのは、​ollamaの​エンドポイントをngrokなりcloudflaredで​公開しちゃう​ことです。

https://github.com/ollama/ollama/blob/main/docs/faq.md#how-can-i-use-ollama-with-ngrok

これで​得られた​URLを​Cursor Editorの​Model設定画面に​入力すれば、​Ollamaを​使うことができます。

しかし、​この​方​法には​大きな​問題が​あります。 それは、​OpenAIの​サーバーに​接続できなくなる、と​いう​致命的な​問題です。

いちいち設定画面に​行って​Endpointを​都度変更するのは​面倒ですよね。

Proxy Server作った

そこで、​Proxy Serverを​作りました。 https://github.com/ryoppippi/proxy-worker-for-cursor-with-ollama

コードも​簡単なんで​全部​載せちゃいます。

https://github.com/ryoppippi/proxy-worker-for-cursor-with-ollama/blob/a3fac9a07706f64e16f67882369ebea568027e37/main.ts

簡単に​Proxy Serverを​立てるなら​Honoと​Denoを​使うと​いうのは​常識​(?)ですね。

  • Deno: 依存関係インストールも​一瞬、​テストも​linterも​fmtも​すぐ​動く。​urlから​fileを​取得して​すぐ​実行できて​便利
  • Hono: 簡単に​サーバーが​かける。​説明不要

使うには

deno run -A https://raw.githubusercontent.com/ryoppippi/proxy-worker-for-cursor-with-ollama/main/main.ts

で​サーバーが​立ち​上がります。

あとは、cloudflaredが​発行してくれる​URLに/v1を​つけた​ものを​Cursor EditorのOpenAI API Key -> Endpointに​入力し、Model Namesに​使いたい​モデルの​名前を​追加すれば、​任意の​Ollamaで​動く​モデルを​使うことができます。

Cursor Editor

(また、​この​Proxy Serverに​念の​為に​アクセス制限を​したい​人は、​環境変数にOPENAI_API_KEYを​設定すると、​キーで​アクセス制限を​かけてくれます。​)

Future Works

  • Perplexity AIも​OpenAI API互換なので、​対応しても​いいかも
  • Honoと​聞いたら​もちろん、​Cloudflare Workers AIに​対応してみるのも​おもしろそう。​ただ、​OpenAI API互換ではないので​ちょっと​ゴニョゴニョする​必要が​ある、かも。
comment on bluesky / twitter
CC BY-NC-SA 4.0 2022-PRESENT © ryoppippi