Um chat de IA dentro do app
O chat da receita, sobre o registro de que ele fala. O componente, o cliente de streaming e o contexto que a página envia são os reais; só a resposta do modelo é determinística e roda no navegador — por isso esta página não precisa de chave de API.
Pedido nº 1043
Ada Lovelace
- Cliente
- Ada Lovelace
- Situação
- Enviado
- Total
- R$ 32,90
- Feito em
- 1º de setembro de 2026
Pergunte o que quiser sobre este pedido — onde está, quando chega, quanto custou.
app/api/chat/route.go
// app/api/chat/route.go
func POST(c *trilha.Ctx) error {
who := AIChatWho(c)
if ok, after := AIChatLimit.Allow(who); !ok {
c.Header("Retry-After", strconv.Itoa(after))
return trilha.Errorf(http.StatusTooManyRequests, "too many questions")
}
c.Audit("ai.chat.asked", who)
return ai.ServeOpts{
HTML: ui.ChatHTML,
Context: AIChatContext,
Page: AIChatAnswerPage,
}.Serve(c, AIChatClient, AIChatAgent())
}
// the page
ui.Chat(c, ui.ChatOpts{
Action: "/api/chat",
History: AIChatLog.Read(AIChatWho(c)),
Context: map[string]string{"order_id": o.ID},
})
ui.ChatScript(c)O que está fingindo
Só a resposta. Não há servidor atrás desta página: o site da documentação é estático, e o script responde os mesmos eventos que o ai.Serve emite. Num aplicativo o formulário também funciona com o JavaScript desligado — a mesma rota responde tudo de uma vez e a página volta com a resposta dentro.