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 | 맞춤형 또는 utter 동작 실행 |
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 # end-to-end tests
rasa test nlu --cross-validation
rasa data validate # catch domain/data mismatches
| 테스트 유형 | 확인 |
|---|
| NLU tests | 의도/엔티티 정확도 |
| Story tests | 전체 대화 경로 |
| Cross-validation | NLU 일반화 |
채널 및 배포
| 채널 | 참고 |
|---|
| REST | 기본 HTTP 엔드포인트 |
| Web widget | 임베드 가능한 채팅 |
| Slack / Teams / Telegram | 기본 제공 커넥터 |
| Voice | 통신 통합을 통해 |
| Deployment | Docker, Kubernetes/Helm, 자가호스팅 |
Rasa vs LLM 전용 챗봇
| 측면 | Rasa | 프롬프트 전용 LLM 봇 |
|---|
| 제어 | 명시적 흐름/비즈니스 논리 | 신흥, 제약 어려움 |
| 예측 가능성 | 높음 | 변수 |
| 규정 준수 | 감사 가능한 경로 | 어려움 |
| 호스팅 | 완전히 자가호스팅 | 보통 API 종속 |
| 최고의 용도 | 규제, 작업 지향 어시스턴트 | 오픈 엔드 대화 |
오픈 엔드 에이전트는 LangGraph 또는 Mastra를 참고하세요; Rasa의 강점은 결정론적이고 감사 가능한 작업 흐름입니다.
리소스