Rasa - 会話型 AI フレームワーク チートシート
Rasa はコンテクスチュアル会話型アシスタント構築用のオープンソースフレームワークです。プロンプトのみのチャットボットとは異なり、Rasa は明示的なダイアログ制御を提供します: 意図、エンティティ、フローを定義し、アシスタントはモデルが即興できることではなく、指定したビジネスロジックに従います。すべてが独自のインフラストラクチャで実行されるため、規制対象ドメインにおいて重要です。最新の Rasa (CALM) は LLM ベースの理解と決定論的フロー実行をブレンドします — モデルが解釈し、フローが決定します。
インストール
| 方法 | コマンド |
|---|
| pip | pip install rasa |
| 新規プロジェクト | rasa init |
| 要件 | Python 3.9–3.11 (現在のサポートを確認) |
| 確認 | rasa --version |
プロジェクト構造
| パス | 含有内容 |
|---|
domain.yml | 意図、エンティティ、スロット、応答、アクション |
data/nlu.yml | 意図ごとの学習サンプル |
data/stories.yml | サンプル会話パス |
data/rules.yml | 決定論的ルール |
data/flows.yml | CALM ビジネスロジックフロー |
config.yml | NLU/ポリシーパイプライン |
actions/actions.py | カスタム Python アクション |
コア CLI
| コマンド | 説明 |
|---|
rasa init | 新規アシスタントをスカフォルド |
rasa train | モデルを学習 |
rasa shell | ターミナルでチャット |
rasa run | サーバーを起動 |
rasa run actions | カスタムアクションサーバーを起動 |
rasa test | テストストーリーに対してテスト実行 |
rasa interactive | インタラクティブトレーニング/修正 |
rasa data validate | データの一貫性をチェック |
意図と応答の定義
# domain.yml
intents:
- greet
- check_balance
responses:
utter_greet:
- text: "Hi! How can I help?"
slots:
account_id:
type: text
mappings:
- type: from_entity
entity: account_id
actions:
- action_fetch_balance
# data/nlu.yml
nlu:
- intent: check_balance
examples: |
- what's my balance
- how much money do I have
- show account [12345](account_id)
フロー (CALM)
# data/flows.yml
flows:
check_balance:
description: Look up the user's account balance
steps:
- collect: account_id
- action: action_fetch_balance
- action: utter_balance
| ステップタイプ | 実行内容 |
|---|
collect | スロット用にたずねて埋める |
action | カスタムまたはアクションを実行 |
link | 別のフローにジャンプ |
set_slots | スロット値を割り当て |
next with if | 条件付き分岐 |
フロー決定論的です: LLM がユーザーがどのフローを望むかを決定しますが、フロー自体は正確に記述どおり実行されます。
カスタムアクション
from rasa_sdk import Action, Tracker
from rasa_sdk.executor import CollectingDispatcher
class ActionFetchBalance(Action):
def name(self) -> str:
return "action_fetch_balance"
def run(self, dispatcher: CollectingDispatcher, tracker: Tracker, domain):
account = tracker.get_slot("account_id")
balance = lookup_balance(account)
dispatcher.utter_message(text=f"Your balance is ${balance}")
return []
rasa run actions で実行 (デフォルトポート 5055)。
テスト
rasa test # エンドツーエンドテスト
rasa test nlu --cross-validation
rasa data validate # ドメイン/データ不一致をキャッチ
| テストタイプ | チェック |
|---|
| NLU テスト | 意図/エンティティ精度 |
| ストーリーテスト | 完全な会話パス |
| クロスバリデーション | NLU の汎化 |
チャネルとデプロイメント
| チャネル | 注釈 |
|---|
| REST | デフォルト HTTP エンドポイント |
| ウェブウィジェット | 埋め込み可能なチャット |
| Slack / Teams / Telegram | 組み込みコネクタ |
| 音声 | 電話統合経由 |
| デプロイメント | Docker、Kubernetes/Helm、セルフホスト |
Rasa 対 LLM のみチャットボット
| 側面 | Rasa | プロンプトのみ LLM ボット |
|---|
| 制御 | 明示的フロー/ビジネスロジック | 突発的、制約が難しい |
| 予測可能性 | 高い | 変動的 |
| コンプライアンス | 監査可能なパス | 難しい |
| ホスティング | 完全セルフホスト | 通常 API 依存 |
| 最適用途 | 規制対象のタスク指向アシスタント | オープンエンド会話 |
オープンエンドエージェントは LangGraph または Mastra を参照。Rasa の強みは決定論的で監査可能なタスクフロー。
リソース