# Assistente copilot sobre um agente de AI ReAct

Um copilot é um assistente que fica dentro de um produto e responde perguntas sobre ele em linguagem comum. Ele conduz o usuário por uma tarefa complexa em vez de devolver uma lista de resultados de busca. O que ele responde depende do que esse usuário está fazendo. Esta arquitetura constrói um copilot sobre um agente ReAct, que raciocina sobre cada requisição e então age chamando uma ferramenta. Use-a quando as respostas estão nos seus próprios documentos e dados, e não no conjunto de treinamento de um modelo.

ReAct vem de *reasoning and acting*: raciocinar e agir. O agente não responde apenas a partir do prompt. Ele lê a requisição, decide se já consegue responder e chama uma ferramenta quando não consegue. Cada chamada de ferramenta retorna dados que o agente lê antes de decidir de novo. O loop termina quando o agente tem uma resposta adequada, ou quando esgota as formas de encontrar uma e retorna um erro.

Esse loop é um padrão, não uma arquitetura da Azion, e tem a mesma forma onde quer que execute.

```mermaid
flowchart LR
  User["O usuário faz uma pergunta"] -->|"Requisição"| Agent["O agente raciocina sobre o que precisa"]
  Agent -->|"Precisa de mais informações"| Tools["Ferramentas: busca, bancos de dados, documentos"]
  Tools -->|"Dados recuperados"| Agent
  Agent -->|"Tem uma resposta adequada"| Answer["Resposta retornada ao usuário"]
  Agent -->|"Não encontra resposta"| Error["Mensagem de erro retornada ao usuário"]
```

---

## Diagrama da arquitetura

O diagrama coloca esse loop na Azion, nomeando cada parte por que a requisição passa:

```mermaid
flowchart LR
  User["O usuário envia uma requisição"] -->|"Requisição HTTP"| Node["Data center mais saudável da rede"]
  Node -->|"Entrega a requisição à aplicação"| App["A aplicação aplica suas regras"]
  App -->|"Executa o código do agente"| Fn["A função contém o loop ReAct"]
  Fn -->|"Consulta semântica"| Search["Busca vetorial sobre os embeddings armazenados"]
  Search -->|"Lê a base de conhecimento"| DB["SQL Database"]
  DB -->|"Registros e trechos correspondentes"| Fn
  Fn -->|"Chamada de ferramenta"| Tools["Ferramentas e documentos externos"]
  Tools -->|"Dados recuperados"| Fn
  Fn -->|"Resposta, ou uma mensagem de erro"| User
```

Leia o diagrama a partir da função, para os dois lados: tudo à esquerda dela é o caminho que qualquer aplicação na Azion percorre. A requisição chega ao data center mais saudável da rede, e a aplicação aplica suas regras antes que o código do agente execute. Tudo à direita dela é o trabalho do próprio agente. As setas para os armazenamentos e as ferramentas vão nos dois sentidos porque o agente lê deles uma vez a cada passagem pelo loop. Quantas passagens uma requisição leva é decidido pelo agente, não fixado na implantação.

### Fluxo de dados

Uma requisição percorre a arquitetura nesta ordem:

1. O usuário envia uma requisição à aplicação que hospeda o copilot.
2. O data center mais saudável da rede atende à requisição.
3. A aplicação a processa, executando qualquer regra configurada nela.
4. A aplicação chama a função que contém a lógica do agente de AI, e o loop de raciocínio começa.
5. O agente analisa o contexto da consulta e recorre às suas ferramentas e recursos externos: mecanismos de busca semântica ou vetorial, bancos de dados e documentos. Ele continua recuperando dados até que os dados que tem sejam relevantes o suficiente para responder.
6. Uma resposta adequada volta ao usuário pelo mesmo caminho. Quando o agente não encontra nenhuma, o fluxo termina com uma mensagem de erro que informa o problema ao usuário.

---

## Componentes

- [Applications](/pt-br/documentacao/plataforma/applications/): constrói e hospeda a aplicação que responde à requisição do usuário a partir da infraestrutura distribuída da Azion. As regras que você configura aqui executam antes do agente, então uma requisição pode ser autenticada ou rejeitada antes de alcançar o seu código.
- [Functions](/pt-br/documentacao/plataforma/functions/): executa código próximo ao usuário final, que é onde ficam o loop de raciocínio e a lógica personalizada de tratamento de requisições e respostas. Uma única execução contém o loop inteiro, então o prompt, as chamadas de ferramenta e a decisão de parar ficam todos no mesmo lugar.
- [SQL Database](/pt-br/documentacao/plataforma/sql-database/): uma solução SQL projetada para aplicações serverless. Ela contém a base de conhecimento que o agente lê. É isso que mantém as respostas presas aos seus próprios dados, e não ao que o modelo aprendeu no treinamento.
- [Vector Search](/pt-br/documentacao/plataforma/sql-database/vector-search/): permite implementar mecanismos de busca semântica sobre os registros do SQL Database. Aqui, uma pergunta e um trecho correspondem quando significam a mesma coisa, então o agente recupera contexto que uma consulta por palavra-chave não encontraria.
- **Infraestrutura distribuída da Azion**: a arquitetura altamente distribuída em que todas as partes acima executam. O copilot não tem região a escolher, porque quem responde é o data center mais saudável.

---

## Implementação

- [Primeiros passos com Applications](/pt-br/documentacao/plataforma/applications/primeiros-passos/) - cria a aplicação que recebe a requisição.
- [Criar um banco de dados](/pt-br/documentacao/guias/desenvolvimento-de-aplicacoes/dados/gerenciar-bancos-dados-edge-sql/) - cria o SQL Database que o agente consulta.
- [Primeiros passos com Functions](/pt-br/documentacao/plataforma/functions/primeiros-passos/) - escreve a função que carrega a lógica do agente.
- [Instanciar uma função](/pt-br/documentacao/guias/desenvolvimento-de-aplicacoes/primeiros-passos/instanciar-functions/) - anexa essa função à aplicação.
- [Guia do Vector Search](/pt-br/documentacao/guias/desenvolvimento-de-aplicacoes/dados/edge-sql-vector-search/) - constrói as consultas semânticas que o agente executa sobre a base de conhecimento.

---

## Recursos relacionados

- [AI Inference](/pt-br/documentacao/plataforma/ai-inference.md): Os modelos que Azion executa, para a etapa de raciocínio de que o agente depende.
- [Invocação de modelos](/pt-br/documentacao/plataforma/ai-inference/invocacao-de-modelos.md): O corpo da requisição que uma função envia ao chamar um modelo.
- [SQL Database](/pt-br/documentacao/plataforma/sql-database.md): O armazenamento que contém a base de conhecimento e seus embeddings.
- [Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics.md): O tráfego e a performance da aplicação que serve o copilot.
- [Real-Time Events](/pt-br/documentacao/plataforma/real-time-events.md): As requisições individuais e os logs a consultar quando uma resposta volta errada.
