Cursor でも Bedrock 経由で Claude 3 Opus を使いたい!!!
はじめに
Amazon Bedrock で Claude 3 Opus が利用できるようになりましたね!
ですが、私のお気に入りのエディタである Cursor は、Anthropic の API を直で叩いたり、Azure OpenAI Service の API は利用できるものの、Bedrock には対応していません。。。
いつかアップデートされるのを待つしかないかなぁ、と思っていたところ以下の記事を見つけました。
なるほど!OpenAI 互換のエンドポイントを用意すれば、いろんな API を叩くことができるのか!
そこで、この記事では AWS 上に OpenAI 互換の API を用意し、その API 経由で Bedrock を呼び出すことで Cursor から Bedrock の Claude 3 Opus を利用できるか試してみたいと思います。
利用するもの
ALB + Lambda で実装するかあ、と考えていたらこんな素晴らしいリポジトリが aws-samples にありました。
ALB + (Lambda または Fargate)で OpenAI 互換の API をサクっと構築できるようです。
CloudFormation テンプレートもあるので、このアセットを使っていくことにします。
カスタム API key を作成する
まずは、カスタム API Key を用意します。この API Key を利用して前述の API を呼び出すのですが、CloudFormation テンプレートのデフォルト値は bedrock
になっています。セキュアにするために、独自の API Key を用意しましょう。
- AWSマネジメントコンソールを開き、Systems Managerサービスに移動します。
- 左側のナビゲーションペインで、「パラメータストア」をクリックします。
- 「パラメータの作成」ボタンをクリックします。
- 「パラメータの作成」ウィンドウで、以下のオプションを選択します:
- 名前:
BedrockProxyAPIKey
など何のパラメータかわかる任意の名前を入力します - 説明: オプションで、パラメータの説明を入力します。
- 利用枠: 標準 を選択します。
- タイプ:
安全な文字列
を選択します。 - 値: 任意の文字列を入力します。ここで設定した値が API Key になります。
(※ スペースや特殊文字などは利用しないこと)
- 名前:
- 「パラメータの作成」をクリックします。
使用したパラメータ名(例: "BedrockProxyAPIKey")は次の手順で使うので控えておきましょう。API Key として設定した値も、最後に Cursor の設定を行うときに利用します。
Bedrock Access Gateway をデプロイする
リポジトリの中ごろに CloudFormation の Launch ボタンがあります。
Lambda または ECS(Fargate) が利用可能です。
You can also choose to use AWS Fargate behind the ALB instead of AWS Lambda, the main difference is the latency of the first byte for streaming response (Fargate is lower).
とのことなので、好きな方を選びましょう。今回は ECS(Fargate) のほうをデプロイしてみます。
スタックの作成画面が開くので、次へを押します。
任意のスタック名を入力しましょう。
ApiKeyParam 欄には作成したパラメータストアの名前を入力します。
スタックオプションの設定画面では特に設定は行わないため、画面下部にスクロールして 次へ
を押します。
確認して作成画面の下部にスクロールし、チェックを入れます。
設定値が問題ないことが確認できたら、送信
を押します。
スタックの作成が始まり、5 分程度待ってステータスが CREATE_COMPLETE
に変わったら作成完了です。
出力
タブに発行された URL が API の BaseUrl となります。
Cursor にエンドポイントを設定する
Cursor を立ち上げ、右上の歯車ボタンを押して設定画面を開きます。
Models
を開き、+ Add model
からモデルを追加します。
今回は以下の 3 つのモデルを追加しましょう。
anthropic.claude-3-opus-20240229-v1:0
anthropic.claude-3-sonnet-20240229-v1:0
anthropic.claude-3-haiku-20240307-v1:0
また、Bedrock で利用できるモデル以外はすべて OFF にしておきます。
次に OpenAI API Key 欄に入力をしていきます。
Override OpenAI Base URL
欄に BaseUrl の値を入力し、Save を押します。
そして、パラメータストアに設定した API Key の値を入力し、Verify
を押します。
以上で設定は完了です。
使ってみる
あとはいつもの Cursor の使い方と一緒です。
Chat を開いて、model を anthropic.claude-3-opus-20240229-v1:0
に設定すれば、Bedrock 経由で Opus を利用することができます!
もちろん Mistral など他モデルも利用できます。
おわりに
この記事では、AWS 上に OpenAI 互換の API を用意することで、Cursor から Amazon Bedrock の Claude 3 Opus などのモデルを利用する方法を試してみました。
無理やり動かしているからか、AI Edit 機能などの挙動がちょっと怪しいところもあったので色々検証してみたいと思います。
Discussion
記事通りに実践してみた所、Cursorにて下記エラーが出ました。
何か解決方法の知見がありましたら教えていただけると幸いです。
使用modelはclaude-3-5-sonnetでcursorのsettingsに記載ミスはないと思われます。
またcurlでのリクエストでは問題なくresponseが返却(contentに対する回答が記載)されています。
cursor 側の挙動が変更されて、動かなくなっていることが原因ですね。
わたしが知る限り
anthropic
の名前がある場合にcursor 側でバリデーションckをしてからリクエストする2つの変更があり、動かなくなっていることを確認しています。
変更1については
にgateway側の修正リクエストを投げています。
一向にmergeされないので、私のrepoからとって、ご自身のECR リポジトリにimageを保存するのが早いと思います。(imageの作成時にcfn templateは fargateがarmアーキテクチャ前提で、account id もハードコードされているので、そこに注意する必要があります)
変更2については
スクショの通り、
gpt-
から始まるダミーの名前を使えばgateway側がデフォルトでanthropic.claude-3-sonnet-20240229-v1:0
を使うようになっているので取りあえず動くようにできます。