Cloudflare AI Gatewayを、LangChain.jsで作ったアプリに入れてみた
Cloudflare Meetup OsakaでAI Gatewayの話を聞き、AI Gatewayを使ってみた。管理画面から名前を指定するだけでAI Gatewayを作成できる。APIエンドポイントはプラットフォームによって変わり、LangChain.jsでの実装方法が紹介された。Cloudflare Workersでの処理実行やログ機能の確認方法も解説。AI Gatewayの便利な機能や課金不要の利点があり、レスポンスキャッシュやレートリミットも設定可能。LangSmithなど他のツールとも併用が可能。
Cloudflare Meetup OsakaでAI Gatewayの話を聞いて気になったので、触ってみました。
目次
AI Gatewayの作成は、名前を指定するだけ
管理画面からAI Gatewayは作成できます。作成する際は名前を入れるだけで、細かな設定などは不要でした。
![](https://wp-kyoto.cdn.rabify.me/wp-content/uploads/2024/05/3e995643a5f7c8e151eea6f56c9e4850-20240517195622.png?&d=1140)
作成すると、管理画面右上に小さく「API」と書かれたボタンがあります。これをクリックすることで、AI Gatewayを呼び出す際の実装方法がみれます。
![](https://wp-kyoto.cdn.rabify.me/wp-content/uploads/2024/05/8395ee9f9cee77c5f91057a7190332e9-20240517195622.png?&d=1140)
こんな感じです。利用するプラットフォームによってAPIエンドポイントが変わります。ただ、パッとみた感じ、最後のパスが変わるだけ・・・のようにも見えました。
![](https://wp-kyoto.cdn.rabify.me/wp-content/uploads/2024/05/e4eee1197492a246927223f66a8e58bb-20240517195622.png?&d=1140)
LangChain.jsで呼び出す
サンプルコードではプラットフォームごとのSDKで紹介されていましたが、あえてLangChain.jsから使ってみます。LangChainのChatモデルやLLMモデルには、apiUrl
や{platformname}ApiUrl
などのパラメータが付いていることがあります。ここにCloudflareのAI Gatewayで発行したAPIエンドポイントを設定しましょう。例えばChatAnthoropic
であればこのようになります。
const model = new ChatAnthropic({
temperature: 0.9,
model: "claude-3-sonnet-20240229",
apiKey: process.env.ANTHROPIC_API_KEY,
maxTokens: 1024,
anthropicApiUrl: 'https://gateway.ai.cloudflare.com/v1/XXXXXXX/NAME/anthropic'
});
これをLangChainのLCEL(Chain)で実装しましょう。サンプルではRAGなのですが、便宜上質問への回答をするだけの実装にしています。
const template = `
ユーザからの質問があります。
ユーザの質問に対する回答を生成してください。
矛盾している内容がある場合は、その旨を回答してください。
# 制約
- 質問に関係のありそうな情報にのみ基づいて回答してください。
# ユーザからの質問
{question}
# 回答:`;
const customRagPrompt = PromptTemplate.fromTemplate(template);
const ragChain = await createStuffDocumentsChain({
llm: model,
prompt: customRagPrompt,
outputParser: new StringOutputParser(),
});
const result = await ragChain.invoke({
question,
});
return c.text(`${result}\n## Source\n${removeDuplicates(source).map(source => `- ${source.title}; ${source.url}`).join('\n')}`)
あとはこの処理をCloudflare Workersなどで実行してみましょう。エラーが起きずに動作すれば、組み込み成功です。もし動かない場合は、設定したAPI URLを削除してみて、プラットフォーム側のAPIで動くかどうかを確認してみましょう。
ダッシュボードで利用状況を確認しよう
AI Gatewayは、デフォルト設定だとログ機能が有効化されています。そのため、先ほどの処理を実行すると、プラットフォームに対するリクエストとレスポンスのログがCloudflareダッシュボードから確認できます。
![](https://wp-kyoto.cdn.rabify.me/wp-content/uploads/2024/05/f10ddd50254eabc8f8ba60522da8fc24-20240517195113.png?&d=1140)
その他にもレスポンスのキャッシュやレートリミット(アカウント単位)などの設定もできました。
![](https://wp-kyoto.cdn.rabify.me/wp-content/uploads/2024/05/8c4733012fa1d4f4a15b29fddb7518e0-20240517195328.png?&d=1140)
試してみて
この機能だけであれば、課金も発生しないのがよいですね。レスポンスキャッシュやレートリミットについても、自前で実装することを考えると、こっちに寄せるのが気楽かなというふうに感じました。一方でログについては、LangSmithも試してみたいところですので、併用かどちらかによせてしまうかもしれません。
参考記事
![](/images/undraw_happy_feeling.png)
ブックマークや限定記事(予定)など
WP Kyotoサポーター募集中
WordPressやフロントエンドアプリのホスティング、Algolia・AWSなどのサービス利用料を支援する「WP Kyotoサポーター」を募集しています。
月額または年額の有料プランを契約すると、ブックマーク機能などのサポーター限定機能がご利用いただけます。
14日間のトライアルも用意しておりますので、「このサイトよく見るな」という方はぜひご検討ください。