会話型AIが簡単に:RasaとDockerを使用したチャットボットデモのゼロからの開発

このブログ記事は2024年10月25日に更新されました。

今日のデジタル環境では、高速でパーソナライズされたインタラクションに対するユーザーの期待がかつてないほど高まっており、会話型AIチャットボットは、企業がユーザーと関わる方法を変革しています。 これらのAI駆動のバーチャルアシスタントは、人間のような会話をシミュレートし、単に質問に答えるだけでなく、ユーザーをプロセスを通じて導き、さらには問題を自律的に解決できるように設計されています。

成功するチャットボットを構築するための重要な要素は、よくある質問(FAQ)を効果的に管理することです。 しかし、RAG(Retrieval-Augmented Generation)システムの台頭により、企業は単純なFAQ処理からより高度なソリューションに移行しています。 RAGボット、特に抽出型ボットは、膨大なデータセットから関連情報を取得することで、正確で文脈に応じた回答を提供することに優れています。 基本的なインタラクション以上のものを求める組織のために、Rasaのようなプラットフォームは、チャットボットが実行可能なステップを踏み、ユーザーの問題を解決し、複雑なワークフローを通じてユーザーを導くことを可能にするツールを提供し、ユーザーの満足度を高め、企業がより複雑なタスクを自動化することを可能にします。

この記事では、 Drasa フレームワークとDockerを使用して、コンテナ化された会話型AIチャットボットを構築およびデプロイする方法について説明します。

濃い紫色の背景にドッカーとラサのロゴ

ラサに会う 

チャットボットの取り扱いの複雑さに対処するための1つのオプションは、会話型AIフレームワークであるRasaです。 Rasaの新しいテクノロジーは完全に オープンソースではありませんが、高度なチャットボットを作成するためのソリューションを提供します。 開発者は、月に数回の本番環境での会話をサポートする無料の 開発者ライセンス にアクセスできます。 

Rasaは、チャットボットが自然言語を理解し、重要な詳細を抽出し、会話の文脈に基づいてインテリジェントに応答することを可能にします。 LLMネイティブの対話システムCALMなどの機能により、Rasaは単純な意図認識を超えて、チャットボットが複雑な会話を効果的にナビゲートできるようにします。

Rasa は、開発者が会話型AIチャットボットを構築およびデプロイできるようにし、柔軟なアーキテクチャと強力な対話理解機能を提供します(図 1)。

Rasaは、チャットボットや仮想アシスタントなどの会話型AIアプリケーションを構築する際に、開発者がチャットボットの動作と機能を完全に制御できるように、柔軟でカスタマイズ可能なアーキテクチャを提供します。 

Rasaの対話システムは、LLMの推論機能を使用してユーザーを支援する最善の方法を特定する複合アプローチですが、アシスタントがユーザーとどのように関与すべきかを規制するルールベースの対話フローによって規制され、ビジネスプロセスが忠実に守られ、ブランドエクスペリエンスが一貫していることを保証します。 このアプローチにより、よりスマートで、より回復力があり、より流暢なAIアシスタントを作成することができ、正確に制御され、透過的に説明され、効果的に測定できます。 ビジネス定義のロジックに従い、定型的な回答のみを提供することを選択することで、CALMアシスタントはインタラクションの一貫性と信頼性を確保できます。

さらに、Rasaは大量の会話を処理するように拡張でき、カスタムアクション、API、および外部サービスで拡張できます。 この機能により、データベースアクセス、外部API呼び出し、ビジネスロジックなどの追加機能をチャットボットに統合できます。

Rasaのコンテナ化が重要な理由

Rasaのコンテナ化は、会話型AIチャットボットの開発と展開のプロセスにいくつかの重要な利点をもたらします。 ここでは、Rasaのコンテナ化が重要な4つの主な理由を見てみましょう。

1. Dockerは、アプリケーションを実行するための一貫性のある移植可能な環境を提供します。

Rasaをコンテナ化することで、チャットボットアプリケーション、その依存関係、およびランタイム環境を自己完結型のユニットにパッケージ化できます。 このアプローチにより、コンテナ化されたRasaチャットボットを開発マシン、ステージングサーバー、本番クラスタなどのさまざまな環境にデプロイでき、設定や互換性の問題を最小限に抑えることができます。 

Dockerは、Rasaチャットボットの依存関係の管理を簡素化します。 必要なすべてのライブラリ、パッケージ、および構成をコンテナー内にカプセル化することで、他のシステム依存関係との競合を回避し、チャットボットが必要な特定のバージョンのライブラリにアクセスできるようにすることができます。 このコンテナ化により、異なるシステムへの依存関係を手動でインストールおよび構成する必要がなくなり、デプロイプロセスがより合理化され、信頼性が高くなります。

2. Dockerは、Rasaチャットボットの環境の再現性を保証します。

コンテナ内の正確な依存関係、ライブラリ、構成を定義することで、チャットボットが異なるデプロイ間で一貫して実行されることを保証できます。 

3. Dockerは、Rasaチャットボットのシームレスなスケーラビリティを可能にします。

コンテナを使用すると、チャットボットのインスタンスを複数のノードまたはサーバーに簡単に複製および分散できるため、大量のユーザーインタラクションを処理できます。 

4. Dockerは、チャットボットとホストシステム間、および同じホスト上で実行されている異なるコンテナ間の分離を提供します。

この分離により、チャットボットの依存関係とランタイム環境がホストシステムや他のアプリケーションに干渉しないようにします。 また、依存関係やバージョン管理が容易になり、競合を防ぎ、チャットボットが操作できるクリーンで隔離された環境を確保することができます。

ML モデルのデモ アプリケーションの構築

Rasa と Docker の機能を組み合わせることで、開発者は、よくある質問の処理に優れた LLM 搭載のチャットボット デモを作成できます。 デモは、一般的なクエリとそれに対応する回答のデータセットでトレーニングできるため、チャットボットは同様の質問を高い精度で理解し、応答できます。 

私たちは何を作っているのですか?

このガイドでは、ビジネスロジックをシームレスに実行し、自然な会話型のインタラクションを維持しながら、送金をスムーズに処理できる言語モデル駆動型のアシスタントを作成します。 さっそく始めましょう。

はじめ

このチュートリアルを完了するには、次の主要コンポーネントが不可欠です。

ML FAQ デモ アプリのデプロイは、次の手順を含む簡単なプロセスです。

  • リポジトリをクローンします。 
  • 構成ファイルをセットアップします。 
  • ラサを初期化します。
  • モデルをトレーニングして実行します。 
  • ウェブチャット UI アプリを起動します。 

これらの各手順について、以下で説明します。

プロジェクトのクローン作成

開始するには、リポジトリをクローンします。

git clone https://github.com/dockersamples/docker-ml-faq-rasa

次のステップに進む前に、各ファイルを1つずつ見ていきましょう。

ファイル: domain.yml

このファイルには、アシスタントが実行できる操作、アシスタントの応答方法、および会話中に記憶または使用できる情報について説明します。

ファイル: data/flows.yml

これは、アシスタントがどのように操作し、決定を下すべきかについてのガイドラインを設定します。 後のセクションでは、手順を追って説明します。

ファイル内のトレーニング ストーリーの手順の内訳を次に示します。

ストーリー:ハッピーパス

  • ユーザーが意図を持って挨拶する: greet

ファイル: config.yml

Rasaプロジェクトの設定パラメータは、このファイルに含まれています。 構成ファイルの内訳は次のとおりです。

1. アシスタント ID:

  • Assistant_id: placeholder_default
  • このプレースホルダー値は、アシスタントの一意の識別子に置き換える必要があります。

2. ラサNLU構成:

  • 言語: en
    • 自然言語の理解に使用する言語を指定します。
  • パイプライン:
    • パイプラインは、アシスタントがユーザー入力を解釈して応答を生成するために従う一連の処理ステップです。
    • SingleStepLLMCommandGenerator: これはパイプラインのステップの 1 つであり、大規模言語モデル (LLM)、特に GPT-4 モデルを使用してコマンドを生成する役割を担います。 これは、複雑なクエリを理解して応答するアシスタントの能力を強化するために使用できます。

3. ラサコア構成:

  • 檄:
    • これらは、アシスタントがさまざまな状況でどのような行動を取るかを決定するために使用するルールまたは戦略です。
    • FlowPolicy: このポリシーは、会話フローを管理し、アシスタントがユーザーと対話するときに論理的な順序に従うようにします。
    •  コメントアウトされたポリシー (like EnterpriseSearchPolicyRulePolicy) は、必要に応じて有効にできるオプションのポリシーです。 エンタープライズ検索システムとの統合や、会話中に特定のルールを適用するなどを処理します。

ファイル: actions.py

チャットボットが実行できるカスタムアクションは、このファイルに含まれています。 API からのデータの取得、データベースとの通信、またはその他の固有のビジネス ロジックの実行はすべて、アクションの例です。

コードの説明:

  • この ActionHelloWorld クラスは、 Action rasa_sdkによって提供されるクラスを拡張します。
  • この name メソッドは、カスタムアクションの名前 (この場合は action_hello_world) を定義します。
  • このメソッドは run 、カスタム アクションのロジックが実装される場所です。
  • この run メソッド内では、ディスパッチャー オブジェクトを使用して、ユーザーにメッセージを送り返します。 この例では、送信される Hello World!メッセージは です。
  • return [] ステートメントは、カスタム アクションの実行が完了したことを示します。

ファイル: endpoints.yml

チャットボットのエンドポイントは、外部サービスやカスタムアクションの Webhook URL など、このファイルで指定されます。  

ラサの初期化

前提: 

このコマンドは、現在のディレクトリ($(pwd))にある新しいRasaプロジェクトを初期化します。

docker run -v ./:/app -e RASA_PRO_LICENSE=${RASA_PRO_LICENSE} -e OPENAI_API_KEY=${OPENAI_API_KEY} europe-west3-docker.pkg.dev/rasa-releases/rasa-pro/rasa-pro:3.9.3 init --template tutorial --no-prompt

環境変数の値 RASA_PRO_LICENSEを置き換える OPENAI_API_KEY 

基本的なディレクトリ構造を設定し、次のような Rasa プロジェクト actions.ymlに必要なファイルを作成します。 domain.yml, と data/flows.yml. このフラグは、 -p コンテナ内のポート 5005 をホスト上の同じポートにマッピングし、Rasaサーバーにアクセスできるようにします。 <IMAGE>:3.9.3 は、使用するRasaの特定のバージョンのDockerイメージを指します。

モデルのトレーニング

次のコマンドは、プロジェクトディレクトリで指定されたデータと設定を使用して Rasa モデルをトレーニングします。

docker run -v ./:/app -e RASA_PRO_LICENSE=${RASA_PRO_LICENSE} -e OPENAI_API_KEY=${OPENAI_API_KEY} europe-west3-docker.pkg.dev/rasa-releases/rasa-pro/rasa-pro:3.9.3 init --template tutorial --no-prompt

このフラグは -v 、コンテナ内の現在のディレクトリ ()$(pwd) をマウントし、プロジェクトファイルへのアクセスを許可します。 train フラグは、構成ファイルを自動的に検出してトレーニング モデルを開始するものを指定します。

モデルの検査

このコマンドは、トレーニング済みのRasaモデルをインタラクティブモードで実行し、チャットボットの応答をテストできるようにします。

docker run -p 5005:5005 -v ./:/app \
            -e RASA_PRO_LICENSE=${RASA_PRO_LICENSE} \
            -e OPENAI_API_KEY=${OPENAI_API_KEY} \
europe-west3-docker.pkg.dev/rasa-releases/rasa-pro/rasa-pro:3.9.3 \
            inspect

このコマンドは、現在のプロジェクトディレクトリ()のmodelsディレクトリからトレーニング済みモデルをロードします。$(pwd)チャットボットはターミナルからアクセスできるため、インタラクティブな会話をしたり、モデルの応答を確認したりできます。

Rasa が実行されていることを確認します。 これで、メッセージを送信し、curlを使用してモデルをテストできます。

curl http://localhost:5005


Hello from Rasa: 3.9.3

インスペクターの使用

上記のコマンドは、トレーニング済みの Rasa モデルを Web UI 経由でアクセス可能なサーバーとして実行し、検査とテストを行います。 ブラウザでURLを開きます。 

http://localhost:5005/webhooks/inspector/inspect.html

フラグは、 -p コンテナ内のポート 5005 をホスト上の同じポートにマッピングし、Rasaサーバをアクセス可能にします。 

Rasa Inspectorは、Rasaフレームワーク内の貴重なツールであり、開発者や会話型AIデザイナーがチャットボットを理解し、洗練するのを支援するように設計されています。 これは、Rasaモデルの意思決定プロセスを視覚化およびデバッグするためのユーザーフレンドリーなインターフェイスを提供します。 Rasa Inspector を使用すると、ボットがユーザー入力をどのように解釈するか、どのインテントが検出されるか、トレーニングデータに基づいて会話がどのように流れるかを確認できます。 このツールは、インテントの分類、エンティティ抽出、および対話管理に関する問題を特定して解決するのに特に役立ちます。 

ランニングモデル

チャットボットがソケットを使用できるようにするには、それに応じて設定する必要があります。 まず、 credentials.yml ファイルを開き、スニペットのコメントを解除します socketio 。 次に、次のコード ブロックに示すように値を設定します。 これらの変更が行われると、Rasaモデルを実行できます。

socketio:
  user_message_evt: user_uttered
  bot_message_evt: bot_uttered
  session_persistence: false

models フラグは -m 、学習済みモデルを含むディレクトリを指定します。 このフラグにより --enable-api 、Rasa APIが有効になり、外部アプリケーションがチャットボットと対話できるようになります。 このフラグにより --cors "*" 、クロスオリジンリソース共有 (CORS) は、異なるドメインからの要求を処理できます。 このフラグは --debug 、ログ記録とトラブルシューティングを強化するためのデバッグモードを有効にします。

docker run -d -p 5005:5005 -v ./:/app \
            -e RASA_PRO_LICENSE=${RASA_PRO_LICENSE} \
            -e OPENAI_API_KEY=${OPENAI_API_KEY} \
           europe-west3-docker.pkg.dev/rasa-releases/rasa-pro/rasa-pro:3.9.3 \
            run -m models --enable-api --cors "*" --debug

ボット WebUI の作成

docker run -p 8080:80 harshmanvar/docker-ml-faq-rasa:webchat

ブラウザで http://localhost:8080 を開きます (図 7)。

チャットボットの振る舞い

最初の「ハッピーパス」シナリオでは、チャットボットが段階的にガイドし、送金を完了する前にいくら送りたいかを尋ねます。 図 8 は、この相互作用を示しています。 

2 つ目のシナリオ「一度にすべて」は、友人の名前、金額、その他すべての詳細を 1 つのメッセージで提供する方法を示しています。 図 9 は、チャットボットがこれを効率的に処理する方法を示しています。 

「心の変化」シナリオは、会話の途中でリクエストを切り替えたときにチャットボットがどのように適応するかを示しています(図 10)。

Rasa のドキュメントにアクセスして、さまざまなファイルの使用方法とフローを理解する方法について詳しく学んでください。

作成ファイルを使用したサービスの定義

Docker 作成 ファイル内でサービスがどのように表示されるかを次に示します。

サンプル アプリケーションには、次のパーツがあります。

  • rasa サービスは、 rasa-pro/rasa-pro:3.9.3 画像。 
  • これは、Rasa API と通信するためのポート 5005 を公開します。 
  • 現在のディレクトリ(./)はコンテナ内のボリュームとしてマウントされ、Rasaプロジェクトファイルにアクセスできます。 
  • コマンド run -m models --enable-api --cors "*" --debug は、指定されたオプションで Rasa サーバーを起動します。
  • webchat サービスは、現在のコンテキスト (). にある Dockerfile-webchat ファイルを使用してイメージをビルドします。 Port 8080 ホストは、WebChat インターフェイスにアクセスするためにコンテナ内のポート 80 にマップされます。

リポジトリを複製するか、 docker-compose.yml GitHub から直接ファイルをダウンロードできます。

コンテナサービスの起動

WebChat アプリケーションは、Docker Compose を使用して起動できます。 ファイル内の環境変数 (RASA_PRO_LICENSE, OPENAI_API_KEY) docker-compose.yaml を更新し、docker compose up -d --build コマンドを実行します。

次に、 docker compose ps コマンドを使用して、スタックが正しく実行されていることを確認します。

Docker ダッシュボードを使用したコンテナーの表示

また、Docker ダッシュボードを利用して、コンテナの ID を表示し、アプリケーションに簡単にアクセスまたは管理することもできます (図 11)。

結論

万丈!Docker を使用して Rasa アプリケーションをコンテナ化する方法を学習しました。 1 つの YAML ファイルで、Docker Compose を使用して ML デモモデルアプリを数秒ですばやくビルドしてデプロイする方法を示しました。 いくつかの追加の手順を実行するだけで、このチュートリアルを適用しながら、さらに複雑なアプリケーションを構築できます。 ハッピーデベロップメント!

さらに詳しく