Saltar para o conteúdo
Blume
Português
Esc
navegarabrir⌘Jpré-visualizar
Nesta página

Ask AI

Um assistente na própria página fundamentado na sua documentação — perguntas sugeridas, instruções personalizadas, dimensionamento da recuperação, backends do Vercel AI Gateway a qualquer endpoint compatível com OpenAI, e a saída de servidor que ele exige.

Adicione um assistente que responde às perguntas dos leitores num painel de chat na própria página, apoiado por um endpoint de servidor com streaming e pelo AI SDK. É opcional, e a documentação estática continua totalmente estática até você ativá-lo:

ai: {
  ask: {
    enabled: true,
    provider: "gateway", // default
    model: "openai/gpt-5.5",
  },
}

Perguntas sugeridas

Preencha o estado vazio com alguns prompts iniciais. Cada um aparece como uma sugestão clicável — clique em uma para enviá-la — com um ícone Lucide opcional ao lado do rótulo:

ai: {
  ask: {
    enabled: true,
    suggestions: [
      { label: "What is Blume?", icon: "rocket" },
      { label: "How do I write a docs page?", icon: "file-text" },
      { label: "How do I configure the theme?", icon: "settings" },
    ],
  },
}

label é a pergunta que será feita; icon é opcional. Deixe suggestions sem definir (ou vazio) e o painel abre com um campo de entrada simples.

Instruções personalizadas

Adicione o seu próprio texto de system prompt com instructions — identidade, idioma, tom ou qualquer outra coisa que o assistente deva ter em mente:

ai: {
  ask: {
    enabled: true,
    instructions:
      "You are Bloomy, the Acme docs assistant. Answer in the language the question was asked in, and keep answers under three paragraphs.",
  },
}

Seu texto é acrescentado às instruções internas em vez de substituí-las: a parte interna carrega o contrato de fundamentação — responder apenas a partir das páginas recuperadas, citá-las como links Markdown — do qual as citações do painel de chat dependem, então ela permanece intacta independentemente do que você adicionar.

Fundamentação

O Ask AI é fundamentado na sua documentação. Para cada pergunta ele recupera as páginas mais relevantes — usando o mesmo índice léxico do Orama que alimenta a busca na página — e as injeta no system prompt do modelo, de forma que as respostas venham do seu conteúdo e não do conhecimento próprio do modelo. O assistente é instruído a responder apenas a partir das páginas recuperadas, a dizer quando algo não está coberto e a citar as páginas de onde tirou a informação.

A página em que o leitor está no momento é adicionada primeiro ao contexto e usada para limitar a recuperação ao idioma daquela página, para que as respostas continuem relevantes ao ponto em que ele está na documentação. A recuperação roda no momento da requisição a partir de um snapshot embutido no build, então funciona independentemente do seu provedor de busca — até mesmo quando a busca está definida como none — e não precisa de configuração.

A fundamentação está ativa para todos os backends, exceto o Inkeep, que roda a própria recuperação sobre o conteúdo que você indexou no painel dele.

Tamanho da recuperação

Quanta documentação uma pergunta carrega é a maior alavanca sobre quanto tempo o leitor espera pela primeira palavra: o modelo lê cada caractere injetado antes de emitir um token. Em um modelo de fronteira hospedado isso é imperceptível, mas em um backend auto-hospedado é o fator dominante. retrieval dimensiona isso:

ai: {
  ask: {
    enabled: true,
    retrieval: {
      maxResults: 3, // fewer pages retrieved per question
      excerptChars: 1200, // shorter excerpt from each one
      contextBudget: 3000, // smaller total injection
    },
  },
}
Opção Padrão Descrição
maxResults 6 Documentos recuperados por pergunta.
excerptChars 2000 Caracteres mantidos de cada página recuperada.
contextBudget 10000 Total de caracteres injetados, somando todos os trechos.

Os três não são intercambiáveis. contextBudget limita toda a injeção, excerptChars decide quão fundo o trecho de uma única página longa vai — aumente quando uma página contém a resposta inteira e o trecho a corta — e maxResults limita quantas páginas a recuperação adiciona. A página que o leitor está vendo é injetada além das recuperadas, então uma resposta pode citar até uma página a mais que maxResults.

Os padrões servem bem para um modelo hospedado. Reduza-os quando você estiver servindo a partir do seu próprio hardware e o tempo até o primeiro token importar mais que a abrangência; as respostas continuam fundamentadas de qualquer forma, e o assistente é instruído a dizer quando algo não está coberto em vez de preencher a lacuna.

Endpoint externo

Já tem um backend de API para IA? Aponte o painel para ele e mantenha o build da documentação estático:

ai: {
  ask: {
    enabled: true,
    endpoint: "https://api.example.com/v1/docs/ask",
  },
}

O Blume envia o mesmo corpo POST que a rota interna:

{
  "messages": [{ "role": "user", "content": "How do I deploy?" }],
  "page": { "path": "/deployment" }
}

Retorne uma resposta bem-sucedida cujo corpo seja um fluxo de texto UTF-8 puro. Se o endpoint estiver em outra origem, permita a origem da documentação com CORS: aceite OPTIONS e POST, permita o cabeçalho de requisição content-type e retorne os cabeçalhos CORS tanto no preflight quanto na resposta com streaming. Com endpoint definido, o Blume gera a interface de chat mas nenhuma rota de servidor, snapshot de fundamentação, dependência de provedor ou aviso de segredo de provedor; seu backend fica responsável pela recuperação, autenticação, limitação de taxa, acesso ao modelo e citações.

Saída de servidor obrigatória

O backend interno do Ask AI no Blume é uma rota de servidor (POST /api/ask), então ele não pode rodar num build estático. Mude para saída de servidor e escolha um adaptador:

deployment: {
  output: "server",
  adapter: "vercel",
}

Um build estático com o Ask AI ativado e sem um endpoint externo falha imediatamente com uma mensagem dizendo para você definir deployment.output como server. Veja Implantação para os adaptadores.

Backends

Por padrão o Ask AI passa pelo Vercel AI Gateway: model é uma string provider/model, então você troca de modelo alterando esse valor (openai/gpt-5.5, anthropic/claude-sonnet-4-5 e assim por diante) sem nenhum SDK de provedor para instalar. O gateway lê AI_GATEWAY_API_KEY do seu ambiente e é configurado automaticamente quando você faz o deploy na Vercel.

Defina provider para apontar o Ask AI para outro lugar. Cada backend lê sua chave de API a partir de uma variável de ambiente e faz streaming por meio de um SDK de provedor que você instala no seu projeto — apenas o que você usar:

provider model Variável de ambiente da chave de API SDK a instalar
gateway (padrão) uma string provider/model via o AI Gateway AI_GATEWAY_API_KEY nenhum — já vem com o Blume
openrouter qualquer modelo do OpenRouter OPENROUTER_API_KEY @openrouter/ai-sdk-provider
llmgateway qualquer modelo do LLMGateway LLMGATEWAY_API_KEY @ai-sdk/openai-compatible
inkeep um modelo de QA do Inkeep INKEEP_API_KEY @ai-sdk/openai-compatible
openai-compatible o que o seu endpoint servir definida com apiKeyEnv @ai-sdk/openai-compatible

Os SDKs são dependências de par opcionais, então adicione ao seu projeto aquele de que o seu backend precisa (por exemplo, npm install @openrouter/ai-sdk-provider). Se estiver faltando, o build avisa com o nome exato do pacote antes que o Vite falhe ao resolver o import.

Por exemplo, para usar o OpenRouter:

ai: {
  ask: {
    enabled: true,
    provider: "openrouter",
    model: "anthropic/claude-sonnet-4-5",
  },
}

Qualquer endpoint compatível com OpenAI funciona através de openai-compatible — informe a baseUrl e a variável de ambiente que contém a chave dele:

ai: {
  ask: {
    enabled: true,
    provider: "openai-compatible",
    baseUrl: "https://my-gateway.example.com/v1",
    apiKeyEnv: "MY_GATEWAY_API_KEY",
    model: "gpt-4o",
  },
}

Defina apiKeyEnv (e, para os provedores nomeados, baseUrl) em qualquer backend para apontar para uma variável de ambiente ou proxy diferente.

As chaves são lidas com process.env, o que cobre os adaptadores Node, Vercel e Netlify. No Cloudflare, exponha a chave através do runtime binding da plataforma. Ativar o Ask AI também liga o React para a ilha na página — veja Personalização.

Limitação de taxa

O endpoint POST /api/ask é não autenticado — ele precisa ser, para que o assistente na página possa chamá-lo. O Blume valida cada requisição — rejeitando corpos malformados, limitando a 1–40 mensagens e aceitando apenas os papéis user/assistant para que quem chama não possa injetar o próprio system prompt e reaproveitar a rota como um proxy genérico de LLM — para limitar quanto uma única chamada pode gastar com o seu modelo, mas isso não impede alguém de chamar o endpoint repetidamente. Se o abuso de custos for uma preocupação, coloque a rota atrás de um limitador de taxa — a limitação de taxa na borda do seu host (a da Vercel, por exemplo), um middleware, ou os limites de gasto por chave do seu provedor de modelos.

O endpoint é anunciado no manifesto de legibilidade para agentes junto com o restante da superfície legível por máquina do site.

Esta página foi útil?