Rasa - Estrutura de IA Conversacional
Rasa é uma estrutura open-source para construir assistentes conversacionais contextuais. Diferentemente de chatbots apenas de prompt, Rasa dá a você controle explícito sobre diálogo: você define intenções, entidades, e fluxos, e o assistente segue lógica de negócio que você especifica em vez de tudo que o modelo improvisa. Tudo executa em sua própria infraestrutura, que é importante para domínios regulados. Rasa moderno (CALM) mistura compreensão baseada em LLM com execução de fluxo determinístico — o modelo interpreta, seus fluxos decidem.
Instalação
| Método | Comando |
|---|
| pip | pip install rasa |
| Novo projeto | rasa init |
| Requisitos | Python 3.9–3.11 (verifique suporte atual) |
| Verificar | rasa --version |
Estrutura do Projeto
| Caminho | Contém |
|---|
domain.yml | Intenções, entidades, slots, respostas, ações |
data/nlu.yml | Exemplos de treinamento por intenção |
data/stories.yml | Caminhos de conversa de exemplo |
data/rules.yml | Regras determinísticas |
data/flows.yml | Fluxos de lógica de negócio CALM |
config.yml | Pipeline NLU/política |
actions/actions.py | Ações Python customizadas |
CLI Principal
| Comando | Descrição |
|---|
rasa init | Scaffold um novo assistente |
rasa train | Treinar o modelo |
rasa shell | Chat com ele no terminal |
rasa run | Iniciar o servidor |
rasa run actions | Iniciar o servidor de ações customizadas |
rasa test | Executar testes contra histórias de teste |
rasa interactive | Treinamento/correção interativa |
rasa data validate | Verificar consistência de dados |
Definindo Intenções e Respostas
# 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)
Fluxos (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
| Tipo de passo | Faz |
|---|
collect | Pedir e preencher um slot |
action | Executar uma ação customizada ou utter |
link | Pular para outro fluxo |
set_slots | Atribuir valores de slot |
next com if | Ramificação condicional |
Fluxos são determinísticos: o LLM decide qual fluxo o usuário quer, mas o fluxo em si executa exatamente como escrito.
Ações Customizadas
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 []
Execute com rasa run actions (porta padrão 5055).
Testando
rasa test # testes end-to-end
rasa test nlu --cross-validation
rasa data validate # capturar desvios de domínio/dados
| Tipo de teste | Verifica |
|---|
| Testes NLU | Acurácia de intenção/entidade |
| Testes de história | Caminhos de conversa completos |
| Cross-validation | Generalização de NLU |
Canais e Deployment
| Canal | Nota |
|---|
| REST | Endpoint HTTP padrão |
| Web widget | Chat incorporável |
| Slack / Teams / Telegram | Conectores integrados |
| Voz | Via integrações de telefonia |
| Deployment | Docker, Kubernetes/Helm, self-hosted |
Rasa vs Chatbots Apenas de LLM
| Aspecto | Rasa | Bot LLM apenas de prompt |
|---|
| Controle | Fluxos/lógica de negócio explícitos | Emergente, difícil de constranger |
| Previsibilidade | Alta | Variável |
| Conformidade | Caminhos auditáveis | Difícil |
| Hosting | Completamente self-hosted | Geralmente dependente de API |
| Melhor para | Assistentes regulados e orientados a tarefas | Conversa aberta |
Para agentes abertos veja LangGraph ou Mastra; força de Rasa é fluxos de tarefa determinísticos e auditáveis.
Recursos