Pular para o conteúdo

Rasa - Estrutura de IA Conversacional

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étodoComando
pippip install rasa
Novo projetorasa init
RequisitosPython 3.9–3.11 (verifique suporte atual)
Verificarrasa --version

Estrutura do Projeto

CaminhoContém
domain.ymlIntenções, entidades, slots, respostas, ações
data/nlu.ymlExemplos de treinamento por intenção
data/stories.ymlCaminhos de conversa de exemplo
data/rules.ymlRegras determinísticas
data/flows.ymlFluxos de lógica de negócio CALM
config.ymlPipeline NLU/política
actions/actions.pyAções Python customizadas

CLI Principal

ComandoDescrição
rasa initScaffold um novo assistente
rasa trainTreinar o modelo
rasa shellChat com ele no terminal
rasa runIniciar o servidor
rasa run actionsIniciar o servidor de ações customizadas
rasa testExecutar testes contra histórias de teste
rasa interactiveTreinamento/correção interativa
rasa data validateVerificar 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 passoFaz
collectPedir e preencher um slot
actionExecutar uma ação customizada ou utter
linkPular para outro fluxo
set_slotsAtribuir valores de slot
next com ifRamificaçã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 testeVerifica
Testes NLUAcurácia de intenção/entidade
Testes de históriaCaminhos de conversa completos
Cross-validationGeneralização de NLU

Canais e Deployment

CanalNota
RESTEndpoint HTTP padrão
Web widgetChat incorporável
Slack / Teams / TelegramConectores integrados
VozVia integrações de telefonia
DeploymentDocker, Kubernetes/Helm, self-hosted

Rasa vs Chatbots Apenas de LLM

AspectoRasaBot LLM apenas de prompt
ControleFluxos/lógica de negócio explícitosEmergente, difícil de constranger
PrevisibilidadeAltaVariável
ConformidadeCaminhos auditáveisDifícil
HostingCompletamente self-hostedGeralmente dependente de API
Melhor paraAssistentes regulados e orientados a tarefasConversa aberta

Para agentes abertos veja LangGraph ou Mastra; força de Rasa é fluxos de tarefa determinísticos e auditáveis.

Recursos