Ir para o conteúdo
Trilha

Um agente que age sobre os dados do app

O mesmo chat, com os passos do agente na tela. Cada ferramenta chamada é uma linha que dá para ler, e a única que muda alguma coisa não muda: ela abre um pedido na fila abaixo, onde uma pessoa decide. Só o modelo é roteirizado, no navegador — 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 onde está o pedido 1043 — ou peça para cancelar, e veja o que o agente faz em vez disso.

Experimente: “onde está meu pedido?”, “quanto custou?”, “cancelar o pedido 1043”.

a ferramenta que pede em vez de fazer
// The tool that does not do what it says: cancelling is not the
// model's to do. It opens a request and tells the model so.
func AIAgentCancelTool(c *trilha.Ctx) *ai.Tool {
	return ai.NewTool("cancel_order",
		"Ask a person to cancel an order. This does not cancel anything.",
		ai.Schema(`{"type":"object","properties":{"order_id":{"type":"string"},"reason":{"type":"string"}},"required":["order_id","reason"]}`),
		ai.Typed(func(ctx context.Context, in struct {
			OrderID string `json:"order_id"`
			Reason  string `json:"reason"`
		}) (string, error) {
			o, ok := AIAgentOrders.Find(AIAgentWho(c), in.OrderID)
			if !ok {
				return "there is no order " + in.OrderID + " on this account", nil
			}
			id, err := trilha.Use[*approval.Approvals](c).Open(c, approval.Request{
				Kind:   AIAgentCancelKind,
				Subject: "Cancel order " + o.ID,
				Target: "/orders/" + o.ID,
				Assign: approval.Role("support"),
				Due:    time.Now().Add(AIAgentCancelDue),
				Data:   map[string]string{"order_id": o.ID, "reason": in.Reason},
			})
			if err != nil {
				return "", err
			}
			return "request " + id + " is waiting for a person to decide; " +
				"the order has not changed", nil
		}))
}

O que está fingindo

Só o modelo. O componente, os passos, a fila e os botões são os reais; não há servidor atrás desta página, porque o site da documentação é estático. O script responde os mesmos eventos que o ai.Serve emite, chamadas de ferramenta incluídas.

Ler a receita: Um agente de IA