Split
Particiona um texto em blocos semanticamente coerentes sem persistir chunks
Você pode testar esta rota diretamente em nossa documentação interativa.
Versão “só particionar”: recebe um texto bruto, devolve blocos temáticos rotulados pela IA com { text, label, lines } e não toca em dataset ou chunks. Use partition quando também quiser persistir os blocos como chunks pesquisáveis.
Endpoint
POST /api/externalAPIs/public/smartSplit/split
Parâmetros
Texto a ser particionado. Obrigatório se mediaUrls não for fornecido.
URLs de mídia (imagens, PDFs, áudio, vídeo) convertidas em texto antes do particionamento. Obrigatório se text não for fornecido; ambos podem ser enviados juntos — o texto das mídias é concatenado antes do text.
ID do host. Inferido do token quando omitido; obrigatório para tokens de master admin.
ID do avatar usado como contexto da chamada.
Instruções livres anexadas ao prompt da IA (ex: "Agrupe por tópico").
Modelo LLM usado no particionamento.
Provedor do modelo LLM.
Máximo de linhas por janela de sessão de IA.
Linhas repetidas entre janelas adjacentes para continuidade de contexto.
Fração mínima de linhas que precisa ser coberta (0–1).
Tamanho máximo em caracteres de cada sub-texto na pré-divisão de textos longos.
Tamanho máximo em caracteres de cada bloco gerado pelo fallback mecânico.
Quando true, a resposta inclui uncoveredLines com índices e texto das linhas fora de cobertura.
A API aceita tanto camelCase quanto snake_case nos parâmetros. text ou mediaUrls é obrigatório; ambos podem ser fornecidos simultaneamente.
Exemplo
curl -X POST {{BASE_URL}}/api/externalAPIs/public/smartSplit/split \
-H "Authorization: Bearer {{TOKEN}}" \
-H "Content-Type: application/json" \
-d '{
"text": "Título do documento\nIntrodução ao tema...\nDetalhes do produto X...\nEspecificações técnicas...\nPolítica de preços...\nCondições comerciais...",
"options": {
"generalInstructions": "Agrupe por tópico. Repita títulos nos blocos onde forem relevantes."
}
}'
Resposta
{
"success": true,
"blocks": [
{
"lines": [0, 1],
"text": "Título do documento\nIntrodução ao tema...",
"label": "Introdução"
},
{
"lines": [0, 2, 3],
"text": "Título do documento\nDetalhes do produto X...\nEspecificações técnicas...",
"label": "Produto X"
},
{
"lines": [0, 4, 5],
"text": "Título do documento\nPolítica de preços...\nCondições comerciais...",
"label": "Preços e condições"
}
],
"coverage": 1.0,
"totalLines": 6,
"sessionsUsed": 1,
"fallbackUsed": false,
"failedSessions": 0,
"reasoning": "Agrupado por tópico, repetindo o título em cada bloco.",
"auditLog": [
"[SmartSplit] Iniciando particionamento de texto...",
"[SmartSplit] Particionamento concluído com sucesso"
],
"uncoveredLines": { "count": 0, "indices": [], "ranges": [], "lines": [] },
"costControl": {
"usage": {
"inputTokens": 320,
"outputTokens": 85,
"totalTokens": 405,
"isEstimated": false,
"source": "smart_split_aggregate"
},
"cost": {
"inputCost": 0.000032,
"outputCost": 0.000034,
"totalCost": 0.000066,
"currency": "USD",
"pricingMissing": false,
"matchedPricingKey": "openai:gpt-4.1-nano"
},
"control": { "decision": "allow", "reasons": [] },
"references": { "caller": "smartSplit", "provider": "openai", "model": "gpt-4.1-nano" },
"reconciliation": null
}
}
Campos da Resposta
true quando a cobertura atinge o limiar e não houve erro fatal.
Blocos resultantes do particionamento.
Fração das linhas originais cobertas pelos blocos (0–1).
Número total de linhas do texto de entrada.
Número de sessões de IA consumidas.
true quando ao menos uma janela precisou usar divisão mecânica em vez de IA.
Número de janelas que retornaram 0 blocos e acionaram o fallback.
Última reasoning do modelo, quando disponível.
Rastro passo a passo do particionamento.
Linhas do input que não foram cobertas por nenhum bloco. Presente quando options.includeUncoveredLines: true (padrão).
Dados de consumo e custo da operação. null em erros internos.
Erros
| Código | Descrição |
|---|---|
400 | text e mediaUrls ausentes ou vazios; hostId não resolvível |
401 | Token inválido ou ausente |
500 | Falha do LLM não recuperável após fallback |
Quando a cobertura fica abaixo do limiar, a resposta volta com HTTP 200, success: false e reason: "coverage_below_threshold" junto com os blocos parciais.
O pipeline interno é o mesmo de partition — janelas deslizantes de 400 linhas com 30 de overlap, cobertura mínima de 90% e fallback mecânico quando a IA falha. Veja Como funciona.