Use o SmartSplit quando precisar processar um documento longo que não cabe em uma única chamada de IA. Ele divide o conteúdo em blocos temáticos coerentes e autocontidos — cada bloco pode ser enviado para uma IA separadamente, sem perder contexto.

O SmartSplit cobre pelo menos 90% do texto original. Nenhuma parte relevante do conteúdo é descartada.

Quando usar

SituaçãoFerramenta
Manter só o trecho relevante de um textoSmartCut
Processar um documento inteiro em partesSmartSplit
Conteúdo longo demais para uma única chamada de IASmartSplit
Precisar que todo o conteúdo seja coberto, sem perdasSmartSplit

Exemplo

const { smartSplit } = require('@/app/v4/smartSplit');
const globalDataHelper = require('@/app/v2/src/globalData');

const result = await smartSplit({
  text: 'Conteúdo longo com múltiplos tópicos...',
  globalData: new globalDataHelper(),
  hostId: 'uuid-do-host',
  avatarId: 'uuid-do-avatar',
  options: {
    generalInstructions: 'Agrupe por tópico. Repita títulos e cabeçalhos nos blocos onde forem relevantes.',
  },
});

if (result.success) {
  for (const block of result.blocks) {
    console.log(`[${block.label}] ${block.text}`);
  }
}

Parâmetros

text
string
required

Texto a ser dividido em blocos

globalData
object
required

Instância de GlobalData

hostId
string
required

ID do host

avatarId
string

ID do avatar

options.generalInstructions
string

Instruções para a IA sobre como agrupar os blocos. Exemplos: "agrupe por tópico", "repita cabeçalhos nos blocos onde forem relevantes"

options.model
string
default: "parasail-gpt-oss-120b"

Modelo LLM para o particionamento

options.provider
string
default: "parasail"

Provedor do modelo LLM

Resposta

{
  "success": true,
  "blocks": [
    {
      "lines": [0, 1, 2, 3, 4, 5],
      "text": "Título do documento\nIntrodução ao tema...\nContexto geral...",
      "label": "Introdução"
    },
    {
      "lines": [0, 6, 7, 8, 9, 10],
      "text": "Título do documento\nDetalhes do produto X...\nEspecificações técnicas...",
      "label": "Produto X"
    },
    {
      "lines": [0, 11, 12, 13, 14],
      "text": "Título do documento\nPolítica de preços...\nCondições comerciais...",
      "label": "Preços e condições"
    }
  ],
  "coverage": 0.97,
  "totalLines": 15,
  "sessionsUsed": 1
}

Campos da Resposta

success
boolean

true quando o particionamento foi concluído com cobertura suficiente

blocks
object[]

Blocos resultantes do particionamento

coverage
number

Fração do texto original coberta pelos blocos (0–1). Ex: 0.97 = 97%

totalLines
number

Total de linhas no texto original

sessionsUsed
number

Número de chamadas de IA realizadas

Erros

CódigoDescrição
success: false, reason: coverage_below_thresholdA IA não cobriu pelo menos 90% do texto. Os blocos parciais ainda são retornados
success: false, reason: errorErro interno durante o processamento