Skip to main content

Respostas

Toda action deve retornar um objeto de resposta que indica ao motor o que fazer com o resultado. O SDK v2 oferece dois tipos principais: ResponseToAgent e ResponseToUser.

ResponseStatus

Enum que indica o resultado da execução da action:

from actions_sdk.core.types.responses import ResponseStatus

ResponseStatus.SUCCESS # Execução concluída com sucesso
ResponseStatus.ERROR # Falha na execução
ResponseStatus.WARNING # Concluído com ressalvas

ResponseToAgent

Retorna o resultado para o LLM processar e decidir o próximo passo. Use quando a action executou uma operação e o agente precisa raciocinar sobre o resultado antes de responder ao usuário.

from actions_sdk.core.types.responses import ResponseStatus, ResponseToAgent

return ResponseToAgent(
status=ResponseStatus.SUCCESS,
instruction="Dados recuperados com sucesso.",
detail="GET /api/dados → 200 OK, 3 registros retornados.",
state_updates=state.get_full_state(),
)

Campos

CampoTipoObrigatórioDescrição
statusResponseStatusNão (padrão: SUCCESS)Status da execução
instructionstrInstrução para o LLM — descreve o que aconteceu e o que fazer
detailstr | NoneNãoInformação técnica adicional (não vai para o LLM)
functionslist[SystemFunction] | NoneNãoFunções de sistema a executar (EndChat, TransferToHuman, etc.)
state_updatesdict | NoneNãoAtualizações de estado da sessão
memory_updatesdict | NoneNãoAtualizações de memória
metadatadict | NoneNãoMetadados extras

Boas práticas para instruction

O campo instruction é o que o LLM recebe. Seja descritivo:

# Ruim — pouca informação
instruction="Dados obtidos."

# Bom — o LLM sabe o que aconteceu e o que fazer com isso
instruction=(
f"Consulta à API concluída com sucesso.\n"
f"Resultado: {dados}\n"
f"Informe ao usuário os detalhes encontrados."
)

Exemplo com erro

import traceback

try:
resultado = operacao()
return ResponseToAgent(
status=ResponseStatus.SUCCESS,
instruction=f"Operação concluída: {resultado}",
state_updates=state.get_full_state(),
)
except Exception as erro:
return ResponseToAgent(
status=ResponseStatus.ERROR,
instruction=f"Falha na operação: {traceback.format_exc()}",
detail=f"Exceção: {type(erro).__name__}: {erro}",
state_updates=state.get_full_state(),
)

ResponseToUser

Envia uma mensagem diretamente ao usuário, encerrando o ciclo atual do LLM. Use quando a action sabe exatamente o que dizer ao usuário sem precisar de processamento adicional pelo LLM.

from actions_sdk.core.types.responses import ResponseStatus, ResponseToUser
from actions_sdk.core.types.message_components import TextMessage

return ResponseToUser(
instruction="Action retornou mensagem de confirmação ao usuário.",
message=TextMessage(body="Sua solicitação foi processada com sucesso!"),
status=ResponseStatus.SUCCESS,
state_updates=state.get_full_state(),
)

Campos

CampoTipoObrigatórioDescrição
messagestr | MessageComponent | listConteúdo enviado ao usuário
statusResponseStatusNão (padrão: SUCCESS)Status da execução
instructionstr | NoneNãoDescrição para o histórico do LLM
functionslist[SystemFunction] | NoneNãoFunções de sistema (EndChat, etc.)
fileslist[FileContent] | NoneNãoArquivos a enviar ao usuário
state_updatesdict | NoneNãoAtualizações de estado
memory_updatesdict | NoneNãoAtualizações de memória
topicstr | NoneNãoTópico da mensagem

Normalização automática de message

O campo message aceita múltiplos formatos e é normalizado automaticamente:

# String simples → TextMessage automático
ResponseToUser(message="Olá!")

# MessageComponent direto
ResponseToUser(message=TextMessage(body="Olá!"))

# Lista de componentes
ResponseToUser(message=[
TextMessage(body="Resultado encontrado:"),
InteractiveList(...)
])

Veja os Componentes de Mensagem disponíveis.


ResponseToAgent vs ResponseToUser

ResponseToAgentResponseToUser
DestinoLLM (agente)Usuário final
Ciclo LLMContinuaEncerra
Quando usarResultado de operação para o LLM processarMensagem já definida para o usuário
Campo message✅ (obrigatório)
Campo instruction✅ (obrigatório)Opcional (registrado no histórico)

SystemFunctions

SystemFunctions são ações especiais que o motor executa junto com a resposta. São passadas no campo functions de ResponseToUser ou ResponseToAgent.

EndChat

Encerra a conversa:

from actions_sdk.core.types.responses import EndChat, ResponseToUser

return ResponseToUser(
instruction="Encerrando atendimento.",
message="Atendimento finalizado. Obrigado por entrar em contato!",
functions=[
EndChat(
reason="Usuário finalizou o atendimento.",
session_info={"motivo": "conclusao_natural"}, # opcional
service_evaluation=False, # opcional, default true — ex. retorno de HSM informativo
)
],
)
CampoTipoDescrição
reasonstrMotivo do encerramento
session_infodict | NoneDados extras da sessão
service_evaluationboolSe true (default), o servidor consumidor dispara a pesquisa de satisfação (CSAT) ao final do atendimento. Definir false para pular o CSAT — ex. em retorno de HSM informativo, onde a pesquisa não faz sentido

TransferToHuman

Transfere para atendimento humano:

from actions_sdk.core.types.responses import TransferToHuman, ResponseToUser

return ResponseToUser(
message="Vou transferir você para um atendente.",
functions=[
TransferToHuman(
reason="Usuário solicitou falar com humano.",
external_skill_name="Suporte Técnico", # opcional
)
],
)
CampoTipoDescrição
reasonstrMotivo da transferência
external_skill_namestr | NoneNome da fila de destino
external_skill_idstr | NoneID da fila de destino
session_infodict | NoneDados extras da sessão

RedirectToSkill

Redireciona para outra skill do agente:

from actions_sdk.core.types.responses import RedirectToSkill, ResponseToAgent

return ResponseToAgent(
status=ResponseStatus.SUCCESS,
instruction="Redirecionando para skill de suporte.",
functions=[
RedirectToSkill(
skill_name="suporte_tecnico",
reason="Usuário precisa de suporte técnico especializado.",
)
],
)
CampoTipoDescrição
skill_namestrNome da skill de destino
reasonstrMotivo do redirecionamento
session_infodict | NoneDados extras da sessão

RedirectToAgent

Redireciona para outro agente:

from actions_sdk.core.types.responses import RedirectToAgent, ResponseToAgent

return ResponseToAgent(
status=ResponseStatus.SUCCESS,
instruction="Redirecionando para agente especializado.",
functions=[
RedirectToAgent(
agent_id="uuid-do-agente",
reason="Demanda fora do escopo deste agente.",
)
],
)
CampoTipoDescrição
agent_idstrID do agente de destino
reasonstrMotivo do redirecionamento
session_infodict | NoneDados extras da sessão

SkillTransfer

Transferência para skill com nome amigável:

from actions_sdk.core.types.responses import SkillTransfer, ResponseToAgent

return ResponseToAgent(
status=ResponseStatus.SUCCESS,
instruction="Transferindo para skill de vendas.",
functions=[SkillTransfer(name="Vendas", reason="Usuário quer comprar.")],
)

Erros e Exceções

Não há exceções lançadas pelos tipos de resposta em si. Os erros ocorrem dentro da lógica da action. A prática recomendada é capturar todas as exceções e retornar ResponseToAgent(status=ResponseStatus.ERROR, ...) — nunca deixar a exception propagar sem tratamento.