Chat com IA
OpenAI ou Gemini via Cloud Function. Chave nunca no app. Streaming, histórico e system prompt.
A chave da API nunca fica no app: valores em --dart-define ficam no binário e podem ser extraídos. O Flutter só conhece a URL da function; a chave fica no servidor.
App → POST {message, history} → Cloud/Edge Function → OpenAI / GeminiImplementação
Pelo MCP: peça ao assistente "adiciona ai_chat no meu projeto". Ele roda add_feature por você. Veja MCP do Kasy.
-
Rode:
kasy add ai_chat -
Responda o que a CLI pedir: provedor (OpenAI ou Gemini), system prompt e chave.
-
Confirme o resultado por backend:
Backend Deploy Firebase Automático ( functions:aiChat)Supabase Automático ( ai-chat --no-verify-jwt)API REST Você implementa o endpoint que recebe {message, history}A CLI já preenche
AI_CHAT_ENDPOINTnolaunch.jsonsozinha.
O consumo da API é cobrado de você, não do usuário. Cada conversa dentro do app gasta crédito da sua chave no provedor. Antes de liberar o chat para todo mundo, defina um limite de gasto no painel do provedor e acompanhe o uso.
Informações
O que vem na UI
- Bolhas de chat estilo WhatsApp (usuário à direita, IA à esquerda)
- Streaming via SSE: palavras aparecem uma a uma enquanto a IA gera, igual ao ChatGPT
- Indicador "assistente está digitando" até o primeiro chunk chegar
- Scroll automático e campo multiline com envio por teclado
- Histórico persistido por backend (Firestore / Supabase / REST)
System prompt
É a instrução invisível que define a personalidade do agente. O usuário nunca vê. Fica no servidor.
Sem system prompt: ChatGPT genérico, responde qualquer coisa.
Com system prompt: agente com foco definido.Exemplo:
"Você é o assistente do app Fitsync. Responda apenas sobre treinos e nutrição.
Se perguntarem outra coisa, diga educadamente que não pode ajudar."Alterar depois da configuração:
# Firebase: edite functions/.env e faça re-deploy
firebase deploy --only functions:aiChat
# Supabase
supabase secrets set AI_SYSTEM_PROMPT="Nova instrução aqui" --project-ref SEU_REF
supabase functions deploy ai-chat --no-verify-jwt --project-ref SEU_REFLimite de contexto
Por padrão o app envia apenas as últimas 20 mensagens (10 trocas) como contexto. O histórico completo continua salvo no banco (o usuário vê tudo), mas a IA recebe só o trecho recente. Isso reduz custo e melhora a qualidade.
Para ajustar, edite em lib/features/ai_chat/providers/ai_chat_notifier.dart:
const int _kMaxContextMessages = 20; // altere aquiNenhuma mudança no servidor é necessária.
Usar OpenAI Assistants ou Gemini Gems
Para uma base de conhecimento maior (documentação, FAQs extensos), crie um Assistente e aponte o app para ele. O Flutter não muda: só troque AI_CHAT_ENDPOINT no launch.json:
"--dart-define=AI_CHAT_ENDPOINT=https://seu-servidor.com/api/assistant"Seu servidor recebe {message, history} e repassa para o Assistente. A interface do app fica idêntica.
Nunca coloque a chave da API no --dart-define ou no .env do app. Use sempre secret no servidor.
Atualizado em 03/11/2026

