メインコンテンツにスキップ
Background

エッジで高速化されたLLMチャットボットを構築

Akamai Functionsを使用してエッジでグローバルなチャットボットを展開し、専用GPUコンピューティングでオープン・ソース・モデルを実行します。

リクエストをエッジからモデルまで追跡

このアプリケーションがキャッシュの確認、ガードレールの適用、会話履歴の保存、GPU上でホストされているモデルへの新しいリクエストの送信をどのように行うのかをご確認ください。

始める前に

Ollamaのデプロイを検証する際、SSH経由でGPUインスタンスに接続します。そのため、インフラをプロビジョニングする前に公開鍵が利用可能であることを確認してください。

  • Akamai CloudアカウントとAkamai Functionsへのアクセス
  • Akamai Cloudの個人アクセストークン
  • LinodeとFirewallの読み取りおよび書き込み権限
  • Eventの読み取り権限
  • ローカルにインストールされたTerraform
  • ローカルにインストールされたSpin CLI
  • Spin用のakaプラグイン
  • ローカルにインストールされたNode.js
  • SSHキーペア

プロジェクトの構築

まず推論バックエンドをプロビジョニングし、続いてエッジアプリケーションを設定、テスト、展開します。

サンプルアプリケーションを複製し、そのアプリケーションディレクトリとインフラディレクトリを確認します。

プロジェクトリポジトリを複製します。

git clone https://github.com/akamai-developers/akamai-functions-llm-chatbot.git
cd akamai-functions-llm-chatbot

リポジトリに含まれる主要な要素は次の2つです。

  • Terraformとcloud-initの設定を含むinfrastructureディレクトリ
  • AstroフロントエンドとTypeScript APIを含むSpinアプリケーション

プロビジョニングを行う前に、Terraformの変数を確認します。環境に合わせて、リージョン、GPUプラン、モデル、関連するインフラ設定を調整します。

Terraformを使用してGPUインスタンスを作成し、Ollama推論サービスを設定します。

インフラディレクトリに移動し、Terraformを初期化します。

cd infrastructure
terraform init

Akamai Cloudの個人アクセストークンを設定します。

export LINODE_TOKEN="your-pat-here"

インフラをプロビジョニングします。

terraform apply

Terraformは専用のGPUインスタンスを作成し、cloud-initを使用して次のことを行います。

  • 必要なGPUドライバーをインストールする
  • Ollamaをインストールする
  • 設定済みのオープン・ソース・モデルを取得する
  • ポート11434でOllama APIを公開する
  • モデルが利用可能になるまで待つ

プロビジョニングが完了すると、TerraformはOllamaエンドポイントを返します。

ollama_endpoint = "http://<linode-ip>:11434"

通常、プロビジョニングとモデルの読み込みには数分かかります。

エッジアプリケーションをOllamaエンドポイントに接続し、そのキャッシュ管理APIを保護します。

次に進む前に、Spin CLI、Node.js、akaプラグインをインストールします。

Akamai Functionsプラグインをインストールまたは更新します。

spin plugins update
spin plugins install aka

このアプリケーションは、次の2つのデプロイ変数を使用します。

  • ollama_urlは、アプリケーションをGPU上でホストされているOllama APIに接続します。
  • secret_sauceは、応答のキャッシュをクリアするために使用されるエンドポイントを保護します。

secret_sauceの強力なランダム値を生成します。キャッシュ管理エンドポイントへのリクエストでは、X-SecretSauce HTTPヘッダーを使用してこの値を提供する必要があります。

リポジトリにトークン、シークレット、または本番環境のエンドポイント認証情報を保存してはなりません。

同じリモート推論バックエンドを使用しながら、Spinアプリケーションをローカルで実行します。

アプリケーションを起動し、必要な変数を渡します。

spin up --build \
--variable ollama_url="http://<linode-ip>:11434" \
--variable secret_sauce="<strong-random-secret>"

ブラウザーでローカルアプリケーションを開き、テストメッセージを送信します。

次のことを確認します。

  • チャットボットは、モデルが生成した回答を返す。
  • セッション中に会話履歴が保持される。
  • 繰り返される質問にキャッシュから回答することができる。
  • ガードレールに違反するリクエストは拒否される。
  • ブラウザーは会話履歴全体を操作または送信できない。

ローカル開発時にリモートのOllamaバックエンドを使用することで、ローカルGPUを必要とすることなくモデルのふるまいをテストすることができます。

アプリケーションをWebAssemblyにコンパイルし、Akamai Functionsに展開します。

展開する前に、お使いのアカウントでAkamai Functionsへのアクセスが有効化されていることを確認してください。まだ承認されていない場合は、アクセス権をリクエストし、リクエストの審査中はローカルでの構築を進めてください。

Akamai Functionsで認証します。

spin aka login

アプリケーションを構築し、展開します。

spin aka deploy --build \
--variable ollama_url="http://<linode-ip>:11434" \
--variable secret_sauce="<strong-random-secret>"

展開後、生成されたアプリケーションURLを開き、新しい質問を送信します。

展開されたアプリケーションは、Akamai FunctionsからフロントエンドとAPIを提供します。アプリケーションがキーバリューストアを確認したりGPU推論バックエンドにコンタクトしたりする前に、リクエストはエッジで検証されます。

エッジ処理により、モデルへの不要なリクエストが減少することを確認します。

新しい質問と繰り返される質問の両方でアプリケーションをテストします。

新しい質問に対して、アプリケーションは次のことを行います。

  1. 受信したメッセージを検証する。
  2. 入力とトピックのガードレールを適用する。
  3. セッション履歴を読み込む。
  4. 応答のキャッシュを確認する。
  5. キャッシュされた応答が存在しない場合、Ollamaにリクエストを送信する。
  6. 今後のリクエストに備えて回答を保存する。
  7. セッション履歴を更新する。

同じ質問が繰り返された場合、アプリケーションは新たなGPU推論サイクルを実行することなく、キャッシュされた応答をエッジから直接返すことができます。

テストが完了したら、不要になったインフラを削除します。

cd infrastructure
terraform destroy

専用GPUリソースは、削除されるまで課金され続けます。

よくある質問(FAQ)

よくある質問(FAQ)

Akamai Functionsは、フロントエンドとAPIの供給、リクエストの検証、ガードレールの適用、会話セッションの管理を行います。また、モデルにコンタクトする前に、分散された応答キャッシュを確認します。

このオープン・ソース・モデルは、専用のNVIDIA GPUを使用したAkamai Cloudインスタンス上で、Ollamaによって供給されます。Akamai Functions内では実行されません。

Spinアプリケーションは、高速の起動、強力なワークロード分離、Akamaiの分散型エッジインフラへの展開を実現するために、WebAssemblyへのコンパイルを行います。

このアプリケーションは各質問を正規化し、Akamai Functionsのキーバリューストアに既存の回答があるかどうかを確認します。キャッシュが見つかると、GPUに新たなリクエストを送信することなく、保存されている応答が返されます。

会話履歴は、Akamai Functionsのキーバリューストアにサーバー側で保存され、安全なCookie内でセッション識別子と関連付けられます。このサンプルでは、履歴は20件のメッセージに制限されています。

このサンプルは、プロンプトインジェクション、セカンダリリクエストピボット、コード生成リクエストが含まれているかどうかを確認します。また、メッセージの長さを制限し、システムプロンプトを使用して応答をアプリケーションの意図されたドメイン内に維持します。

はい。インフラ設定を通じて、ハードウェアおよびメモリの要件の範囲内で、Ollamaモデルを変更できます。

このオファーは、対象のクラウドサービスにのみ適用されます。専用GPUサービスは対象外です。プロジェクトをプロビジョニングする前に、現在のプロモーション規約をご確認ください。

はい。TypeScript APIは、LangChain.jsとOllama対応エンドポイントを使用するため、サンプル内の静的コンテキストはドキュメントローダー、レトリーバー、ベクトルストアによって拡張できます。

プロジェクトが完了したら、terraform destroyを実行し、GPUインスタンスと関連リソースがアカウントから削除されたことを確認してください。