AI / MLCloudflareSaaS / FaaS

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は作成できます。作成する際は名前を入れるだけで、細かな設定などは不要でした。

作成すると、管理画面右上に小さく「API」と書かれたボタンがあります。これをクリックすることで、AI Gatewayを呼び出す際の実装方法がみれます。

こんな感じです。利用するプラットフォームによってAPIエンドポイントが変わります。ただ、パッとみた感じ、最後のパスが変わるだけ・・・のようにも見えました。

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ダッシュボードから確認できます。

その他にもレスポンスのキャッシュやレートリミット(アカウント単位)などの設定もできました。

試してみて

この機能だけであれば、課金も発生しないのがよいですね。レスポンスキャッシュやレートリミットについても、自前で実装することを考えると、こっちに寄せるのが気楽かなというふうに感じました。一方でログについては、LangSmithも試してみたいところですので、併用かどちらかによせてしまうかもしれません。

参考記事

ブックマークや限定記事(予定)など

WP Kyotoサポーター募集中

WordPressやフロントエンドアプリのホスティング、Algolia・AWSなどのサービス利用料を支援する「WP Kyotoサポーター」を募集しています。
月額または年額の有料プランを契約すると、ブックマーク機能などのサポーター限定機能がご利用いただけます。

14日間のトライアルも用意しておりますので、「このサイトよく見るな」という方はぜひご検討ください。

広告ここから
広告ここまで

Related Category posts