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

Kubernetes上でエビデンスベースのRAGチャットボットを構築

Python、LangGraph、PostgreSQL、LKEを使用し、航空会社の複雑なポリシーからコンテキストに応じた引用付きの回答を生成します。

RAGチャットボットの構築プロセスを解説

Kubernetesインフラのプロビジョニングから、ポリシードキュメントのインデックス作成、エビデンスベースの回答のテストまで、構築プロセス全体をご確認ください。

始める前に

インフラのプロビジョニング、ドキュメントのアップロード、アプリケーションの展開に必要な認証情報とコマンドラインツールを準備する必要があります。

  • Akamai CloudアカウントとAPIトークン
  • OpenAI APIキー
  • ローカルにインストールされたTerraform
  • ローカルにインストールされたkubectl
  • ローカルにインストールされたs3cmd
  • GitHubリポジトリへのアクセス
  • デプロイキー用のSSHキーペア

4つのステップでRAGチャットボットを構築

インフラのプロビジョニング、ナレッジベースのアップロード、アプリケーションの展開、完成したチャットボットの検証を行います。

プロジェクトのクローンを作成します。

git clone https://github.com/akamai-developers/rag-langgraph-k8s-quickstart.git
cd rag-langgraph-k8s-quickstart

Terraformのサンプルファイルをコピーし、Akamai Cloud APIトークンと好みのリソース設定でそのファイルの設定を行います。

cp terraform/terraform.tfvars.example terraform/terraform.tfvars

LKEクラスター、2つのPostgreSQLデータベース、およびObject Storageのバケットをプロビジョニングします。

cd terraform
terraform init
terraform plan
terraform apply

Terraformの出力を保護します。それには機密性の高い接続情報が含まれています。

Terraformの出力を環境変数にロードします。

export S3_BUCKET=$(terraform output -raw S3_BUCKET_NAME)
export S3_ENDPOINT=$(terraform output -raw S3_ENDPOINT)
export S3_ACCESS_KEY=$(terraform output -raw S3_ACCESS_KEY)
export S3_SECRET_KEY=$(terraform output -raw S3_SECRET_KEY)

付属している航空会社のポリシードキュメントをアップロードします。

s3cmd sync ../documents/ s3://${S3_BUCKET}/ \
--host=${S3_ENDPOINT} \
--host-bucket=${S3_ENDPOINT} \
--access_key=${S3_ACCESS_KEY} \
--secret_key=${S3_SECRET_KEY}

サンプルポリシーは、PDF、HTML、またはテキストファイル形式の独自のドキュメントに置き換えることができます。

生成されたkubeconfigを設定します。

export KUBECONFIG=./kubeconfig.yaml

keycloakの名前空間からApp Platformの初期認証情報を取得し、サインインします。

App Platformで次のことを行います。

  1. Harborコンテナレジストリをインストールします。
  2. GitHubデプロイキーを生成します。
  3. リポジトリに公開鍵を追加します。
  4. 秘密鍵はSealed Secretとして保存します。
  5. コードリポジトリを接続します。
  6. アプリケーションのイメージを構築します。
  7. OpenAI、PostgreSQL、Object Storage、および管理用APIキーのSealed Secretを作成します。
  8. 両方のPostgreSQLデータベースにネットワークポリシーを追加します。
  9. charts/workflow.example.yamlを使用してワークロードを作成します。
  10. アプリケーションのパブリックサービスを作成します。

リポジトリやワークロード設定に認証情報をハードコードしてはなりません。

アプリケーションが動作していることを確認します。

curl http://<your-service-endpoint>/api/health

データベースを初期化します。

curl -X POST \
--header "x-api-key: <your-admin-api-key>" \
http://<your-service-endpoint>/api/admin/initialize_databases

ポリシードキュメントのインデックスを作成します。

curl -X POST \
--header "x-api-key: <your-admin-api-key>" \
http://<your-service-endpoint>/api/admin/index_documents

返されたジョブIDを使用して、進捗状況を確認します。

curl -X GET \
--header "x-api-key: <your-admin-api-key>" \
http://<your-service-endpoint>/api/admin/index_documents/<job-id>

インデックス作成が完了したら、サービスエンドポイントを開き、アップロードされたポリシーについて質問します。

よくある質問(FAQ)

よくある質問(FAQ)

航空会社のポリシードキュメントから関連するセクションを抽出し、それを使用して証拠となる引用を添えた回答を生成します。

このアプリケーションは、Object Storageに保存されたPDF、HTML、テキストファイルを処理できます。

1つは、セマンティック検索のためにベクトル埋め込みを保存します。もう1つは、会話履歴とLangGraphの状態を保存します。

いいえ。現在のプロジェクトは、埋め込みとチャット補完にOpenAI APIを使用します。後からそれを調整し、GPUを使用したLKEノード上でオープン・ソース・モデルを動作させることができます。

はい。ドキュメントディレクトリ内にあるサンプルの航空会社のポリシーをアップロードする前に、ご自身の対応ファイルに置き換えてください。

このプロジェクトは、OpenAI、データベース、Object Storage、デプロイキー、管理者認証情報にSealed Secretを使用します。

インデックス作成エンドポイントがジョブIDを返します。チャットボットをテストする前に、ステータスエンドポイントを使用してジョブの進捗状況を確認してください。

いいえ。Akamai Cloudクレジットは、対象のAkamai Cloudインフラに適用されます。OpenAI APIの使用料は別途請求されます。