Documentação da API
Utilize a API compatível com OpenAI do Seven Assistant para integrar funcionalidades de IA nas suas próprias aplicações.
Início rápido
O seu primeiro pedido à API em 2 minutos
Como funciona
A API do Seven Assistant é totalmente compatível com OpenAI. Isto significa que todas as ferramentas, bibliotecas e SDK que funcionam com a API da OpenAI também funcionam com o Seven Assistant. Só precisa de alterar o URL base.
Criar uma chave API
Nas Configurações, secção “Chaves API”
Definir o URL base
YOUR_DOMAIN/v1/
Chamar a API
Como na OpenAI, com os mesmos formatos
Primeiro pedido com curl
curl YOUR_DOMAIN/v1/chat/completions \
-H "Authorization: Bearer sk-educa-YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "educa-ai",
"messages": [
{"role": "system", "content": "És um assistente prestável."},
{"role": "user", "content": "O que é a fotossíntese?"}
]
}'Autenticação
Criar e utilizar chaves API
Criar uma chave API
- 1Abra a app do Seven Assistant e vá a Configurações → Chaves API.
- 2Clique em “Criar chave API” e atribua um nome (p. ex. “O meu projeto”).
- 3Copie a chave imediatamente. Só será mostrada uma vez.
Utilização da chave
Envie a chave no cabeçalho Authorization:
Authorization: Bearer sk-educa-xxxxxxxxxxxxx⚠ Notas de segurança
- •Nunca inclua a sua chave API em código do lado do cliente (JavaScript no navegador).
- •Guarde as chaves em variáveis de ambiente, não no código-fonte.
- •Se uma chave for comprometida, revogue-a imediatamente nas Configurações.
- •Crie chaves separadas para projetos diferentes.
Modelos disponíveis
Escolha o modelo adequado ao seu caso de utilização
educa-ai
Modelo de utilização geral
O melhor modelo para a maioria dos casos de utilização. Alta qualidade na geração de texto, resumos, traduções e resposta a perguntas.
educa-ai-mistral
Mistral Small 3.1
Modelo mais rápido e eficiente. Ideal para volumes elevados de pedidos, tarefas simples e aplicações em tempo real.
educa-ai-code
Qwen3 Coder
Especializado em programação e geração de código. Ideal para autocompletar, depuração e tarefas técnicas.
Obter os modelos através da API
curl YOUR_DOMAIN/v1/models \
-H "Authorization: Bearer sk-educa-YOUR_API_KEY"Chat Completions
POST /v1/chat/completions
Formato do pedido
{
"model": "educa-ai",
"messages": [
{"role": "system", "content": "És professor de Biologia."},
{"role": "user", "content": "Explica a mitose em termos simples."}
],
"temperature": 0.7,
"max_tokens": 1000,
"stream": false
}Parâmetros
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| model | string | Sim | ID do modelo (p. ex. educa-ai) |
| messages | array | Sim | Lista de mensagens com role e content |
| temperature | number | Não | Criatividade (0.0 a 2.0, predefinição: depende do modelo) |
| max_tokens | integer | Não | Número máximo de tokens gerados |
| stream | boolean | Não | Ativar streaming (true/false) |
| top_p | number | Não | Amostragem de núcleo (0.0 a 1.0) |
Formato da resposta
{
"id": "chatcmpl-abc123",
"object": "chat.completion",
"created": 1711900000,
"model": "educa-ai",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "A mitose é o processo em que..."
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 28,
"completion_tokens": 156,
"total_tokens": 184
}
}Papéis das mensagens
systemDefine o comportamento e o contexto do assistente. É enviada como primeira mensagem.userA mensagem do utilizador: perguntas, instruções ou dados de entrada.assistantRespostas anteriores do assistente. Servem para o histórico da conversa.
Streaming
Respostas em tempo real através de Server-Sent Events (SSE)
Como funciona o streaming
Defina "stream": true no pedido. A resposta é transmitida como Server-Sent Events (SSE) e cada fragmento contém uma parte do texto. O fluxo termina com data: [DONE].
curl YOUR_DOMAIN/v1/chat/completions \
-H "Authorization: Bearer sk-educa-YOUR_API_KEY" \
-H "Content-Type: application/json" \
-N \
-d '{
"model": "educa-ai",
"messages": [{"role": "user", "content": "Conta até 5"}],
"stream": true
}'Fragmentos do fluxo
data: {"id":"chatcmpl-abc","object":"chat.completion.chunk","created":1711900000,"model":"educa-ai","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
data: {"id":"chatcmpl-abc","object":"chat.completion.chunk","created":1711900000,"model":"educa-ai","choices":[{"index":0,"delta":{"content":"1, "},"finish_reason":null}]}
data: {"id":"chatcmpl-abc","object":"chat.completion.chunk","created":1711900000,"model":"educa-ai","choices":[{"index":0,"delta":{"content":"2, "},"finish_reason":null}]}
data: {"id":"chatcmpl-abc","object":"chat.completion.chunk","created":1711900000,"model":"educa-ai","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
data: [DONE]Embeddings
POST /v1/embeddings
Para que servem os embeddings?
Os embeddings convertem texto em vetores numéricos. Estes vetores podem ser utilizados para pesquisa semântica, agrupamento (clustering), sistemas de recomendação e Retrieval Augmented Generation (RAG).
Exemplo
curl YOUR_DOMAIN/v1/embeddings \
-H "Authorization: Bearer sk-educa-YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "educa-ai",
"input": "A fotossíntese é o processo pelo qual as plantas convertem luz em energia."
}'Resposta
{
"object": "list",
"data": [
{
"object": "embedding",
"embedding": [0.0023, -0.0091, 0.0152, ...],
"index": 0
}
],
"model": "educa-ai",
"usage": {
"prompt_tokens": 18,
"total_tokens": 18
}
}Exemplos de código e integrações
Exemplos prontos a usar em Python, JavaScript e outras linguagens
from openai import OpenAI
client = OpenAI(
api_key="sk-educa-YOUR_API_KEY",
base_url="YOUR_DOMAIN/v1/"
)
# Chat Completion
response = client.chat.completions.create(
model="educa-ai",
messages=[
{"role": "system", "content": "És um professor prestável."},
{"role": "user", "content": "Cria 5 perguntas de quiz sobre a Idade Média."}
],
temperature=0.7,
max_tokens=1000
)
print(response.choices[0].message.content)
# Streaming
stream = client.chat.completions.create(
model="educa-ai",
messages=[{"role": "user", "content": "Explica a democracia."}],
stream=True
)
for chunk in stream:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="")
# Embeddings
embedding = client.embeddings.create(
model="educa-ai",
input="A fotossíntese explicada às crianças"
)
print(embedding.data[0].embedding[:5])Instalação: pip install openai
import OpenAI from "openai";
const client = new OpenAI({
apiKey: "sk-educa-YOUR_API_KEY",
baseURL: "YOUR_DOMAIN/v1/"
});
// Chat Completion
const response = await client.chat.completions.create({
model: "educa-ai",
messages: [
{ role: "system", content: "És um professor prestável." },
{ role: "user", content: "O que é a regra de três simples?" }
]
});
console.log(response.choices[0].message.content);
// Streaming
const stream = await client.chat.completions.create({
model: "educa-ai",
messages: [{ role: "user", content: "Explica o ciclo da água." }],
stream: true
});
for await (const chunk of stream) {
const content = chunk.choices[0]?.delta?.content;
if (content) process.stdout.write(content);
}Instalação: npm install openai
const response = await fetch("YOUR_DOMAIN/v1/chat/completions", {
method: "POST",
headers: {
"Authorization": "Bearer sk-educa-YOUR_API_KEY",
"Content-Type": "application/json"
},
body: JSON.stringify({
model: "educa-ai",
messages: [
{ role: "user", content: "Cria um plano semanal de Matemática para o 5.º ano." }
]
})
});
const data = await response.json();
console.log(data.choices[0].message.content);using Azure.AI.OpenAI;
using OpenAI.Chat;
using System.ClientModel;
var client = new ChatClient(
model: "educa-ai",
credential: new ApiKeyCredential("sk-educa-YOUR_API_KEY"),
options: new OpenAIClientOptions
{
Endpoint = new Uri("YOUR_DOMAIN/v1/")
}
);
var response = await client.CompleteChatAsync(
new ChatMessage[]
{
new SystemChatMessage("És um professor prestável."),
new UserChatMessage("O que é uma parábola em Matemática?")
}
);
Console.WriteLine(response.Value.Content[0].Text);NuGet: Azure.AI.OpenAI
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model="educa-ai",
api_key="sk-educa-YOUR_API_KEY",
base_url="YOUR_DOMAIN/v1/"
)
response = llm.invoke("Cria um resumo da Revolução Francesa.")
print(response.content)Instalação: pip install langchain-openai
Pode utilizar o Seven Assistant como assistente de IA no seu IDE. Configure o seguinte no config.json do Continue.dev:
{
"models": [
{
"title": "Seven Assistant",
"provider": "openai",
"model": "educa-ai",
"apiKey": "sk-educa-YOUR_API_KEY",
"apiBase": "YOUR_DOMAIN/v1/"
}
]
}Tratamento de erros e limites
Códigos de estado HTTP, mensagens de erro e limites de pedidos
Códigos de estado HTTP
| Código | Significado |
|---|---|
| 200 | Sucesso |
| 400 | Pedido inválido (p. ex. campo em falta, modelo desconhecido) |
| 401 | Chave API em falta ou inválida |
| 403 | Acesso à API não disponível para a sua conta |
| 429 | Limite de pedidos excedido: aguarde e tente novamente |
| 500 | Erro interno do servidor |
Formato da resposta de erro
{
"error": {
"message": "Model 'unknown-model' is not available.",
"type": "invalid_request_error",
"code": "model_not_found"
}
}Limites de pedidos
| Plano | Limite | Período |
|---|---|---|
| Pro | 100 pedidos | por dia |
A utilização de tokens é registada por chave API e pode ser consultada nas Configurações.
Limite de pedidos excedido?
- •Implemente recuo exponencial (exponential backoff): aguarde 1 s, 2 s, 4 s, 8 s, etc. entre tentativas.
- •Utilize cache para pedidos repetidos com conteúdo idêntico.
- •Utilize agrupamento (batching): combine várias perguntas num só prompt.
Pronto para começar?
Crie a sua primeira chave API e integre o Seven Assistant na sua aplicação.
Abrir app