🔄 Fluxo de API compatível com Backend, compatível
Este tutorial é uma contribuição da comunidade e não é suportado pela equipe Nullcore. Serve apenas como uma demonstração sobre como personalizar o Nullcore para o seu caso de uso específico. Quer contribuir? Confira oTutorial contribuindo
Fluxo de API compatível com back-end, compatível com a UI
Este tutorial demonstra como implementar a orquestração do lado do servidor de conversas abertas da Webui, garantindo que as respostas do assistente apareçam corretamente na interface do usuário do front-end. Essa abordagem requer envolvimento de front -end zero e permite o controle de back -end completo sobre o fluxo de bate -papo. Este tutorial foi verificado para trabalhar com a versão aberta da Webui v0.6.15. Versões futuras podem introduzir mudanças no comportamento ou estrutura da API.
Pré -requisitos
Antes de seguir este tutorial, verifique se você possui:
- Uma instância aberta da webui
- Token de autenticação da API válido
- Acesso às APIs de back -end do Webui Open
- Entendimento básico de APIs de descanso e JSON
- Ferramentas da linha de comando:
curl
, Assim,jq
(Opcional para JSON Parsing)
Visão geral
Este tutorial descreve um processo abrangente de 6 etapas que permite a orquestração do lado do servidor de conversas abertas da Webui, garantindo que as respostas assistentes apareçam corretamente na interface do usuário do front-end.
Fluxo de processo
As etapas essenciais são:
- Crie um novo bate -papo com uma mensagem de usuário- Inicialize a conversa com a entrada do usuário
- Injete manualmente uma mensagem de assistente vazia- Crie um espaço reservado para a resposta do assistente
- Acionar a conclusão do assistente- Gere a resposta real de IA (com integração opcional de conhecimento)
- Marque a conclusão- sinalize que a geração de resposta está completa
- Enquete para prontidão para resposta- Aguarde a resposta do assistente totalmente gerada
- Pegue e processe o chat final- Recuperar e analisar a conversa completa
Isso permite a orquestração do lado do servidor enquanto ainda faz as respostas aparecendo na interface do usuário do front-end exatamente como se fossem geradas através da interação normal do usuário.
Guia de implementação
Etapa crítica: injete manualmente a mensagem de assistente
A mensagem assistente precisa ser injetada manualmente como um pré -requisito crítico antes de acionar a conclusão. Esta etapa é essencial porque o front -end do WebUI aberto espera que as mensagens assistentes existam em uma estrutura específica.
A mensagem assistente deve aparecer nos dois locais:
chat.messages[]
- A matriz principal de mensagenschat.history.messages[<assistantId>]
- O histórico de mensagens indexado
Estrutura esperada da mensagem Assistente:
{
"eu ia" "<uuid>", Assim,
"papel" "assistente", Assim,
"contente" , Assim,
"Parentid" "<usuário-msg-id>", Assim,
"ModelName" "GPT-4O", Assim,
"ModelidX" 0, Assim,
"Timestamp" <currentTimestamp>
Sem essa injeção manual, a resposta do assistente não aparecerá na interface do front -end, mesmo que a conclusão seja bem -sucedida.
Implementação passo a passo
Etapa 1: Crie bate -papo com a mensagem do usuário
Isso inicia o bate -papo e retorna umchatId
Isso será usado em solicitações subsequentes.
curl -x post https: // <dost>/api/v1/chats/new \
-H "Autorização: portador <loken>" \
-H "Tipo de Conteúdo: Aplicativo/JSON" \
-d '{
"bater papo": {
"Title": "New Chat",
"Modelos": ["GPT-4O"],
"Mensagens": [
{
"id": "user-msg-id",
"função": "usuário",
"Conteúdo": "Oi, qual é a capital da França?",
"Timestamp": 1720000000000,
"Modelos": ["GPT-4O"]
"história": {
"current_id": "user-msg-id",
"Mensagens": {
"user-msg-id": {
"id": "user-msg-id",
"função": "usuário",
"Conteúdo": "Oi, qual é a capital da França?",
"Timestamp": 1720000000000,
"Modelos": ["GPT-4O"]
} '
Etapa 2: Injetar manualmente mensagem de assistente vazia
Adicione o espaço reservado para a mensagem do assistente à estrutura de bate -papo:
curl -x post https: // <dost>/api/v1/chats/<at Chatid>/mensagens \
-H "Autorização: portador <loken>" \
-H "Tipo de Conteúdo: Aplicativo/JSON" \
-d '{
"ID": "Assistant-MSG-ID",
"papel": "assistente",
"contente": "",
"Parentid": "User-MSG-ID",
"ModelName": "GPT-4O",
"ModelidX": 0,
"Timestamp": 1720000001000
} '
Etapa 3: Conclusão do assistente de gatilho
Gere a resposta real da IA usando o terminal de conclusão:
curl -x post https: // <dost>/api/chat/conclusão \
-H "Autorização: portador <loken>" \
-H "Tipo de Conteúdo: Aplicativo/JSON" \
-d '{
"Chat_id": "<CHATID>",
"ID": "Assistant-MSG-ID",
"Mensagens": [
{
"função": "usuário",
"Conteúdo": "Oi, qual é a capital da França?"
"Modelo": "GPT-4O",
"Stream": verdadeiro,
"Antecedentes_tasks": {
"title_generation": true,
"tags_generation": false,
"siga_up_generation": false
"características": {
"code_interpreter": false,
"web_search": false,
"image_generation": false,
"Memória": false
"Variáveis": {
"{{NOME DE USUÁRIO}}": "",
"{{User_language}}": "en-us",
"{{Current_dateTime}}": "2025-07-14T12: 00: 00Z",
"{{Current_timeZone}}": "Europa"
"session_id": "session-id"
} '
Etapa 3.1: Conclusão do assistente de gatilho com integração de conhecimento (RAG)
Para casos de uso avançado envolvendo bases de conhecimento ou coleções de documentos, inclua arquivos de conhecimento na solicitação de conclusão:
curl -x post https: // <dost>/api/chat/conclusão \
-H "Autorização: portador <loken>" \
-H "Tipo de Conteúdo: Aplicativo/JSON" \
-d '{
"Chat_id": "<CHATID>",
"ID": "Assistant-MSG-ID",
"Mensagens": [
{
"função": "usuário",
"Conteúdo": "Oi, qual é a capital da França?"
"Modelo": "GPT-4O",
"Stream": verdadeiro,
"Arquivos": [
{
"ID": "conhecimento da coleta de conhecimento",
"Tipo": "coleção",
"Status": "Processado"
"Antecedentes_tasks": {
"title_generation": true,
"tags_generation": false,
"siga_up_generation": false
"características": {
"code_interpreter": false,
"web_search": false,
"image_generation": false,
"Memória": false
"Variáveis": {
"{{NOME DE USUÁRIO}}": "",
"{{User_language}}": "en-us",
"{{Current_dateTime}}": "2025-07-14T12: 00: 00Z",
"{{Current_timeZone}}": "Europa"
"session_id": "session-id"
} '
Etapa 4: conclusão de marca
Sinalize que a resposta do assistente está completa:
curl -x post https: // <dost>/api/chat/complete \
-H "Autorização: portador <loken>" \
-H "Tipo de Conteúdo: Aplicativo/JSON" \
-d '{
"Chat_id": "<CHATID>",
"ID": "Assistant-MSG-ID",
"session_id": "session-id",
"Modelo": "GPT-4O"
} '
Etapa 5: Enquete para conclusão da resposta do assistente
Como as respostas do assistente são geradas de forma assíncrona, pesquise o terminal do bate -papo até que a resposta esteja pronta:
# Enquete a cada poucos segundos até o conteúdo do assistente ser preenchido
enquanto é verdade; fazer
Resposta = $ (Curl -s -x Get https: // <dost>/api/v1/chats/<at Chatid> \
-H "Autorização: portador <loken>")
# Verifique se a mensagem do assistente tem conteúdo (a resposta está pronta)
Se echo "$ resposta" | jq '.chat.messages [] | selecione (.Role == "Assistant" e .id == "Assistant-MSG-ID") | .Content '| grep -v '""'> /dev /null; então
eco "A resposta do assistente está pronta!"
quebrar
fi
eco "Esperando pela resposta do assistente ..."
sono 2
feito
Etapa 6: Fetch Final Chat
Recupere a conversa concluída:
Curl -x Get https: // <dost>/api/v1/chats/<at Chatid> \
-H "Autorização: Portador <Token>"
Endpoints adicionais da API
Buscar coleta de conhecimento
Recupere as informações da base de conhecimento para integração de trapos:
Curl -x Get https: // <dost>/api/v1/conhecimento/<wellwledge-id> \
-H "Autorização: Portador <Token>"
Buscar informações do modelo
Obtenha detalhes sobre um modelo específico:
Curl -x Get https: // <dost>/api/v1/modelos/model? id = <mod -name> \
-H "Autorização: Portador <Token>"
Processamento de resposta
Respostas do assistente de análise
As respostas do assistente podem ser embrulhadas nos blocos de código de marcação. Veja como limpá -los:
# Exemplo de resposta bruta do assistente
RAW_RESPONSEIRO = '`` `JSON
{
"Resultado": "A capital da França é Paris.",
"Confiança": 0,99
`` `'
# Limpe a resposta (remova os invólucros de Markdown)
limpo_response = $ (echo "$ raw_ropSons" | sed 's/^`` `json //' | sed 's/` `` $ //' | sed 's/^[[: espaço:]]*//' sed 's/[[: espaço:]*$ //')
eco "$ limpo_rosponse" | jq '.'
Este processo de limpeza alça:
- Remoção de `` `json` prefixo
- Remoção de `` `` sufixo
- Aparando em WhiteSpace
- Validação JSON
Referência da API
Estruturas DTO
Chat DTO (estrutura completa)
{
"eu ia" "Chat-uuid-12345", Assim,
"título" "Novo chat", Assim,
"Modelos" [["GPT-4O", Assim,
"Arquivos" [[, Assim,
"Tags" [[
{
"eu ia" "Tag-id", Assim,
"nome" "importante", Assim,
"cor" "#Ff5733"
, Assim,
"Params" {
"temperatura" 0,7, Assim,
"max_tokens" 1000
, Assim,
"Timestamp" 1720000000000, Assim,
"Mensagens" [[
{
"eu ia" "User-MSG-ID", Assim,
"papel" "usuário", Assim,
"contente" "Oi, qual é a capital da França?", Assim,
"Timestamp" 1720000000000, Assim,
"Modelos" [["GPT-4O"
, Assim,
{
"eu ia" "Assistant-MSG-ID", Assim,
"papel" "assistente", Assim,
"contente" , Assim,
"Parentid" "User-MSG-ID", Assim,
"ModelName" "GPT-4O", Assim,
"ModelidX" 0, Assim,
"Timestamp" 1720000001000
, Assim,
"história" {
"current_id" "Assistant-MSG-ID", Assim,
"Mensagens" {
"User-MSG-ID" {
"eu ia" "user-msg-id",
"papel" "usuário", Assim,
"contente" "Oi, qual é a capital da França?", Assim,
"Timestamp" 1720000000000, Assim,
"Modelos" [["GPT-4O"
, Assim,
"Assistant-MSG-ID" {
"eu ia" "Assistant-MSG-ID", Assim,
"papel" "assistente", Assim,
"contente" , Assim,
"Parentid" "User-MSG-ID", Assim,
"ModelName" "GPT-4O", Assim,
"ModelidX" 0, Assim,
"Timestamp" 1720000001000
, Assim,
"CurrentId" "Assistant-MSG-ID"
ChatCompletionsRequest DTO
{
"Chat_id" "Chat-uuid-12345", Assim,
"eu ia" "Assistant-MSG-ID", Assim,
"Mensagens" [[
{
"papel" "usuário", Assim,
"contente" "Oi, qual é a capital da França?"
, Assim,
"modelo" "GPT-4O", Assim,
"fluxo" verdadeiro, Assim,
"Antecedentes_tasks" {
"Title_generation" verdadeiro, Assim,
"Tags_generation" falso, Assim,
"Sollow_up_generation" falso
, Assim,
"características" {
"code_interpreter" falso, Assim,
"Web_search" falso, Assim,
"Image_generation" falso, Assim,
"memória" falso
, Assim,
"Variáveis" {
"{{NOME DE USUÁRIO}}" , Assim,
"{{User_language}}" "En-us", Assim,
"{{Current_dateTime}}" "2025-07-14T12: 00: 00Z", Assim,
"{{Current_timeZone}}" "Europa"
, Assim,
"session_id" "Sessão-Uuid-67890", Assim,
"filtro_ids" [[, Assim,
"Arquivos" [[
{
"eu ia" "ID de coleta de conhecimento", Assim,
"tipo" "coleção", Assim,
"status" "processado"
ChatCompletedRequest DTO
{
"modelo" "GPT-4O", Assim,
"Chat_id" "Chat-uuid-12345", Assim,
"eu ia" "Assistant-MSG-ID", Assim,
"session_id" "Sessão-Uuid-67890", Assim,
"Mensagens" [[
{
"eu ia" "User-MSG-ID", Assim,
"papel" "usuário", Assim,
"contente" "Oi, qual é a capital da França?", Assim,
"Timestamp" 1720000000000, Assim,
"Modelos" [["GPT-4O"
, Assim,
{
"eu ia" "Assistant-MSG-ID", Assim,
"papel" "assistente", Assim,
"contente" "A capital da França é Paris.", Assim,
"Parentid" "User-MSG-ID", Assim,
"ModelName" "GPT-4O", Assim,
"ModelidX" 0, Assim,
"Timestamp" 1720000001000
ChatCompletionMessage DTO
{
"papel" "usuário", Assim,
"contente" "Oi, qual é a capital da França?"
HISTÓRIA DTO
{
"current_id" "Assistant-MSG-ID", Assim,
"Mensagens" {
"User-MSG-ID" {
"eu ia" "User-MSG-ID", Assim,
"papel" "usuário", Assim,
"contente" "Oi, qual é a capital da França?", Assim,
"Timestamp" 1720000000000, Assim,
"Modelos" [["GPT-4O"
, Assim,
"Assistant-MSG-ID" {
"eu ia" "Assistant-MSG-ID", Assim,
"papel" "assistente", Assim,
"contente" "A capital da França é Paris.", Assim,
"Parentid" "User-MSG-ID", Assim,
"ModelName" "GPT-4O", Assim,
"ModelidX" 0, Assim,
"Timestamp" 1720000001000
Mensagem DTO (estrutura completa)
{
"eu ia" "msg-id", Assim,
"papel" "usuário", Assim,
"contente" "Oi, qual é a capital da França?", Assim,
"Timestamp" 1720000000000, Assim,
"Modelos" [["GPT-4O"
{
"eu ia" "Assistant-MSG-ID", Assim,
"papel" "assistente", Assim,
"contente" "A capital da França é Paris.", Assim,
"Parentid" "User-MSG-ID", Assim,
"ModelName" "GPT-4O", Assim,
"ModelidX" 0, Assim,
"Timestamp" 1720000001000
Exemplos de resposta
Crie resposta de bate -papo
{
"sucesso" verdadeiro, Assim,
"bater papo" {
"eu ia" "Chat-uuid-12345", Assim,
"título" "Novo chat", Assim,
"Modelos" [["GPT-4O", Assim,
"Arquivos" [[, Assim,
"Tags" [[, Assim,
"Params" {, Assim,
"Timestamp" 1720000000000, Assim,
"Mensagens" [[
{
"eu ia" "User-MSG-ID", Assim,
"papel" "usuário", Assim,
"contente" "Oi, qual é a capital da França?", Assim,
"Timestamp" 1720000000000, Assim,
"Modelos" [["GPT-4O"
, Assim,
"história" {
"current_id" "User-MSG-ID", Assim,
"Mensagens" {
"User-MSG-ID" {
"eu ia" "User-MSG-ID", Assim,
"papel" "usuário", Assim,
"contente" "Oi, qual é a capital da França?", Assim,
"Timestamp" 1720000000000, Assim,
"Modelos" [["GPT-4O"
, Assim,
"CurrentId" "User-MSG-ID"
Resposta final de bate -papo (após a conclusão)
{
"eu ia" "Chat-uuid-12345", Assim,
"título" "Discussão da capital da França", Assim,
"Modelos" [["GPT-4O", Assim,
"Arquivos" [[, Assim,
"Tags" [[
{
"eu ia" "Auto-Tag-1", Assim,
"nome" "geografia", Assim,
"cor" "#4CAF50"
, Assim,
"Params" {, Assim,
"Timestamp" 1720000000000, Assim,
"Mensagens" [[
{
"eu ia" "User-MSG-ID", Assim,
"papel" "usuário", Assim,
"contente" "Oi, qual é a capital da França?", Assim,
"Timestamp" 1720000000000, Assim,
"Modelos" [["GPT-4O"
, Assim,
{
"eu ia" "Assistant-MSG-ID", Assim,
"papel" "assistente", Assim,
"contente" "A capital da França é Paris. Paris não é apenas a capital, mas também a cidade mais populosa da França, conhecida por seus marcos icônicos como a Torre Eiffel, o Museu Louvre e a Catedral de Notre-Dame"., Assim,
"Parentid" "User-MSG-ID", Assim,
"ModelName" "GPT-4O", Assim,
"ModelidX" 0, Assim,
"Timestamp" 1720000001000
, Assim,
"história" {
"current_id" "Assistant-MSG-ID", Assim,
"Mensagens" {
"User-MSG-ID" {
"eu ia" "User-MSG-ID", Assim,
"papel" "usuário", Assim,
"contente" "Oi, qual é a capital da França?", Assim,
"Timestamp" 1720000000000, Assim,
"Modelos" [["GPT-4O"
, Assim,
"Assistant-MSG-ID" {
"eu ia" "Assistant-MSG-ID", Assim,
"papel" "assistente", Assim,
"contente" "A capital da França é Paris. Paris não é apenas a capital, mas também a cidade mais populosa da França, conhecida por seus marcos icônicos como a Torre Eiffel, o Museu Louvre e a Catedral de Notre-Dame"., Assim,
"Parentid" "User-MSG-ID", Assim,
"ModelName" "GPT-4O", Assim,
"ModelidX" 0, Assim,
"Timestamp" 1720000001000
, Assim,
"CurrentId" "Assistant-MSG-ID"
Tag DTO
{
"eu ia" "Tag-uuid-123", Assim,
"nome" "geografia", Assim,
"cor" "#4CAF50"
OwuikNowledge DTO (Coleção de Conhecimento)
{
"eu ia" "ID de coleta de conhecimento", Assim,
"tipo" "coleção", Assim,
"status" "processado", Assim,
"nome" "Base de conhecimento geográfica", Assim,
"descrição" "Contém informações sobre geografia mundial e capitais", Assim,
"Created_at" 1720000000000, Assim,
"atualizado_at" 1720000001000
Resposta da coleta de conhecimento
{
"eu ia" "ID de coleta de conhecimento", Assim,
"nome" "Base de conhecimento geográfica", Assim,
"descrição" "Contém informações sobre geografia mundial e capitais", Assim,
"tipo" "coleção", Assim,
"status" "processado", Assim,
"file_count" 15, Assim,
"Total_size" 2048576, Assim,
"Created_at" 1720000000000, Assim,
"atualizado_at" 1720000001000, Assim,
"metadados" {
"Indexing_status" "completo", Assim,
"Last_indexed" 1720000001000
Resposta de informação do modelo
{
"eu ia" "GPT-4O", Assim,
"nome" "GPT-4 otimizado", Assim,
"modelo" "GPT-4O", Assim,
"Base_model_id" "GPT-4O", Assim,
"Meta" {
"descrição" "O modelo GPT-4 mais avançado otimizado para desempenho", Assim,
"Recursos" [["texto", Assim, "visão", Assim, "function_calling", Assim,
"Context_length" 128000, Assim,
"max_output_tokens" 4096
, Assim,
"Params" {
"temperatura" 0,7, Assim,
"top_p" 1.0, Assim,
"Frequency_penalty" 0,0, Assim,
"Presence_penalty" 0,0
, Assim,
"Created_at" 1720000000000, Assim,
"atualizado_at" 1720000001000
Guia de referência de campo
Campos necessários vs opcionais
Criação de bate -papo - Campos necessários:
title
- Título do chat (string)models
- Matriz de nomes de modelos (String [])messages
- Array de mensagem inicial
Criação de bate -papo - Campos opcionais:
files
- Arquivos de conhecimento para RAG (padrões para esvaziar a matriz)tags
- Tags de bate -papo (padrões para a matriz vazia)params
- Parâmetros do modelo (padrões de objeto vazio)
Estrutura da mensagem - Mensagem do usuário:
- Obrigatório:
id
, Assim,role
, Assim,content
, Assim,timestamp
, Assim,models
- Opcional:
parentId
(para encadeamento)
Estrutura da mensagem - Mensagem Assistente:
- Obrigatório:
id
, Assim,role
, Assim,content
, Assim,parentId
, Assim,modelName
, Assim,modelIdx
, Assim,timestamp
- Opcional:Campos de metadados adicionais
ChatCompletionsRequest - Campos necessários:
chat_id
- ID de bate -papo alvoid
- ID de mensagem assistentemessages
- Matriz de ChatCompletionMessagemodel
- Identificador de modelosession_id
- Identificador de sessão
ChatCompletionsRequest - Campos opcionais:
stream
- Ativar streaming (padrão para false)background_tasks
- Controle tarefas automáticasfeatures
- Ativar/desativar os recursosvariables
- Variáveis de modelofilter_ids
- Filtros de pipelinefiles
- Coleções de conhecimento para RAG
Restrições de campo
Timestamps:
- Formato: Timestamp Unix em milissegundos
- Exemplo:
1720000000000
(4 de julho de 2024, 00:00:00 UTC)
Uuids:
- Todos os campos de identificação devem usar o formato UUID válido
- Exemplo:
550e8400-e29b-41d4-a716-446655440000
Nomes de modelos:
- Deve corresponder aos modelos disponíveis em sua instância aberta webui
- Exemplos comuns:
gpt-4o
, Assim,gpt-3.5-turbo
, Assim,claude-3-sonnet
IDs de sessão:
- Pode ser qualquer identificador de string único
- Recomendação: Use o formato UUID para consistência
Status do arquivo de conhecimento:
- Valores válidos:
"processed"
, Assim,"processing"
, Assim,"error"
- Use apenas
"processed"
arquivos para conclusões
Notas importantes
- Este fluxo de trabalho é compatível com cenários de orquestração de back -end de webui + abertos
- Crítico:Evite pular a etapa de injeção do assistente - caso contrário, o front -end não exibirá a mensagem
- Nenhuma alteração do código de front -end é necessária para esta abordagem
- O
stream: true
O parâmetro permite o streaming de resposta em tempo real, se necessário - Tarefas de segundo plano como a geração de títulos podem ser controladas através do
background_tasks
objeto - IDs de sessão ajudam a manter o contexto de conversação entre solicitações
- Integração do conhecimento:Use o
files
Array para incluir coleções de conhecimento para capacidades de RAG - Estratégia de pesquisa:Sempre pesquise a conclusão, em vez de assumir a disponibilidade imediata de resposta
- Resposta Parsing:Lidar
- Manipulação de erros:Implementar mecanismos de tentativa adequados para tempo limite da rede e erros de servidor
Resumo
Use as APIs de back -end do Webui Open para:
- Comece um bate -papo- Crie a conversa inicial com a entrada do usuário
- Injete uma mensagem de espaço reservado assistente- Prepare o recipiente de resposta
- Acionar uma resposta- Gere a resposta da IA (com integração de conhecimento opcional)
- Enquete para conclusão- Aguarde a resposta do assistente estar pronta
- Finalize a conversa- Marque a conclusão e recupere o chat final
- Processar a resposta- analisar e limpar a saída do assistente
Recursos aprimorados:
- Integração de trapos- Inclua coleções de conhecimento para respostas com consciência de contexto
- Processamento assíncrono- Lidar com operações de IA de longa duração com a pesquisa
- Resposta Parsing- Limpe e valide as respostas JSON do assistente
- Gerenciamento de sessão- Mantenha o contexto de conversa entre solicitações
Isso permite fluxos de trabalho controlados por back-end que ainda aparecem corretamente na interface de bate-papo da Web UI Frontend, fornecendo integração perfeita entre controle programático e experiência do usuário.
A principal vantagem dessa abordagem é que ela mantém a compatibilidade total com o front -end do WebUI aberto, permitindo a orquestração completa do back -end do fluxo de conversas, incluindo recursos avançados como integração de conhecimento e manuseio de respostas assíncronas.
Teste
Você pode testar sua implementação seguindo os exemplos passo a passo fornecidos acima. Certifique -se de substituir os valores de espaço reservado pelo seu real:
- URL do host
- Token de autenticação
- IDs de bate -papo
- IDs de mensagem
- Nomes de modelos
Comece com uma mensagem simples do usuário e adicione gradualmente a complexidade, como integração de conhecimento e recursos avançados, assim que o fluxo básico estiver funcionando.