[{"data":1,"prerenderedAt":2332},["ShallowReactive",2],{"blog-article-/pt-br/blog/zero-hallucination-qa":3,"blog-list-pt-br":1423},{"id":4,"title":5,"body":6,"config":1407,"date":1408,"description":1409,"draft":1410,"extension":1411,"image":1407,"meta":1412,"navigation":1413,"path":1414,"seo":1415,"stem":1416,"tags":1417,"toolbar":1407,"translationKey":1421,"updated":1408,"__hash__":1422},"blog/pt-br/blog/zero-hallucination-qa.md","Como implementei Q&A «zero alucinação» no leitor",{"type":7,"value":8,"toc":1371},"minimark",[9,17,32,35,40,47,52,57,75,80,93,98,132,135,139,157,164,168,183,188,225,232,236,249,274,279,396,414,420,422,426,433,448,455,475,481,483,487,490,496,498,502,525,534,595,598,609,619,626,628,632,639,645,652,656,663,671,678,682,692,735,746,752,754,758,773,781,787,790,825,835,843,849,856,860,868,874,885,887,891,897,901,908,912,935,942,944,948,954,1012,1018,1020,1024,1031,1049,1053,1073,1083,1085,1089,1100,1103,1126,1137,1143,1145,1149,1164,1175,1177,1181,1202,1213,1215,1219,1238,1244,1246,1250,1338,1345,1356],[10,11,12],"p",{},[13,14],"img",{"alt":15,"src":16},"Capa: Q&A zero alucinação","https://cdn.linghuxiong.com/resources/snapshots/ai-chat-cover.png",[18,19,20],"blockquote",{},[10,21,22,23,27,28,31],{},"Este artigo compartilha a implementação de engenharia de ",[24,25,26],"strong",{},"Q&A zero alucinação"," no nosso leitor com IA: as respostas se baseiam estritamente no texto do livro aberto e as afirmações-chave podem ser ",[24,29,30],{},"rastreadas em um clique"," até a passagem exata. Se você está desenvolvendo leitura com IA, Q&A de documentos ou apps no estilo RAG, esperamos que três iterações de lições e a arquitetura final sejam úteis.",[33,34],"hr",{},[36,37,39],"h2",{"id":38},"i-evolução-em-três-estágios","I. Evolução em três estágios",[10,41,42,43,46],{},"O Q&A zero alucinação não foi projetado de forma perfeita no primeiro dia. Evoluiu sob tensão entre ",[24,44,45],{},"custo, latência e precisão",". Abaixo está uma visão cronológica dos três estágios—contexto útil para entender por que a arquitetura atual tem esta forma.",[48,49],"mermaid",{":config":50,"code":51},"config","flowchart%20LR%0A%20%20%20%20P1%5BEst%C3%A1gio%201%3A%20Texto%20integral%20no%20contexto%5D%20--%3E%20P2%5BEst%C3%A1gio%202%3A%20LLM%20extrai%20frases-chave%5D%0A%20%20%20%20P2%20--%3E%20P3%5BEst%C3%A1gio%203%3A%20%C3%8Dndice%20de%20segmentos%20%2B%20Tool%20retrieval%5D%0A%20%20%20%20P1%20-.-%3E%7CLento%2C%20caro%2C%20impreciso%20em%20livros%20longos%7C%20X1%5BDescontinuado%5D%0A%20%20%20%20P2%20-.-%3E%7CPerde%20detalhe%2C%20ainda%20lento%7C%20X2%5BDescontinuado%5D%0A%20%20%20%20P3%20--%3E%7CAtual%7C%20OK%5BZero%20alucina%C3%A7%C3%A3o%20%2B%20rastre%C3%A1vel%5D",[53,54,56],"h3",{"id":55},"estágio-1-inserir-o-livro-inteiro-no-contexto-o-mais-simplese-o-primeiro-a-falhar","Estágio 1: Inserir o livro inteiro no contexto (o mais simples—e o primeiro a falhar)",[10,58,59,62,63,66,67,70,71,74],{},[24,60,61],{},"Abordagem:"," Quando o usuário abre um livro e faz uma pergunta, colocar ",[24,64,65],{},"todo o texto extraído"," no System Prompt ou na mensagem do usuário e deixar o modelo de conversa responder. Se o livro exceder cerca de ",[24,68,69],{},"400 mil caracteres",", aplicar ",[24,72,73],{},"truncamento rígido","—só se mantém o início; os capítulos posteriores ficam invisíveis para o modelo.",[10,76,77],{},[24,78,79],{},"Vantagens:",[81,82,83,87,90],"ul",{},[84,85,86],"li",{},"Custo de implementação muito baixo; quase sem pré-processamento;",[84,88,89],{},"Funciona razoavelmente em livros curtos e documentos simples—o modelo realmente «viu o livro inteiro»;",[84,91,92],{},"UX simples: pergunta e resposta, sem estado «aguarde enquanto analisamos».",[10,94,95],{},[24,96,97],{},"Desvantagens (rapidamente inaceitáveis):",[81,99,100,106,112,122],{},[84,101,102,105],{},[24,103,104],{},"Respostas lentas:"," Cada pergunta reenvia um payload enorme; o tempo até o primeiro token e a latência total crescem com o tamanho do livro;",[84,107,108,111],{},[24,109,110],{},"Custo alto de tokens:"," Você paga o input do livro inteiro em cada pergunta;",[84,113,114,117,118,121],{},[24,115,116],{},"Livros longos distorcem muito:"," Após 400 mil caracteres, a segunda metade, apêndices e conclusões podem não existir para o modelo—e a UI muitas vezes ",[24,119,120],{},"não indica claramente"," que houve truncamento;",[84,123,124,127,128,131],{},[24,125,126],{},"Granularidade de recuperação zero:"," O modelo precisa «procurar uma agulha no palheiro» em centenas de milhares de caracteres—fácil perder detalhes e mais fácil produzir ",[24,129,130],{},"resumos plausíveis sem base","—exatamente o que apps de leitura devem evitar.",[10,133,134],{},"O estágio 1 serve para um MVP, não para um produto de qualidade.",[53,136,138],{"id":137},"estágio-2-llm-mais-leve-para-extrair-frases-chave-comprimir-contextomas-demais","Estágio 2: LLM mais leve para extrair frases-chave (comprimir contexto—mas demais)",[10,140,141,143,144,147,148,151,152,156],{},[24,142,61],{}," Antes do Q&A (ou na primeira abertura do livro), usar um ",[24,145,146],{},"modelo mais barato"," sobre o corpo: dividir por capítulo do Spine (ou segmentar o livro), extrair ",[24,149,150],{},"frases-chave",", manter marcas de posição como ",[153,154,155],"code",{},"[fArquivo-início-fim]",", depois concatenar trechos em um contexto mais curto para o Q&A posterior.",[10,158,159,160,163],{},"Pipeline típico: ",[24,161,162],{},"Extract → Cache → Chat",". Extrair uma vez (offline ou sob demanda), guardar um «conjunto de frases-chave», reutilizar em cada pergunta—a mesma ideia de muitos protótipos de Q&A de documentos que comprimem primeiro e depois respondem.",[10,165,166],{},[24,167,79],{},[81,169,170,177,180],{},[84,171,172,173,176],{},"Cada pergunta envia ",[24,174,175],{},"muito menos texto","; o consumo de tokens por requisição cai em relação ao estágio 1;",[84,178,179],{},"O pré-processamento pode ser em cache; sem re-extrair por pergunta no mesmo livro;",[84,181,182],{},"As marcas de posição lançam bases para citações.",[10,184,185],{},[24,186,187],{},"Desvantagens (ainda falha em livros longos):",[81,189,190,196,206,215],{},[84,191,192,195],{},[24,193,194],{},"Perda massiva de detalhe:"," As «frases-chave» são selecionadas pelo modelo; qualificadores, contraexemplos e cadeias argumentativas são frequentemente descartados—as respostas ficam «corretas mas parciais»;",[84,197,198,201,202,205],{},[24,199,200],{},"Contexto ainda grande em livros longos:"," Mesmo bundles de frases-chave em obras grandes são consideráveis—latência e custo são ",[24,203,204],{},"aliviados, não resolvidos",";",[84,207,208,211,212,205],{},[24,209,210],{},"Erro duplo de LLM:"," A extração pode falhar; o Q&A pode interpretar mal trechos—os erros ",[24,213,214],{},"se acumulam",[84,216,217,220,221,224],{},[24,218,219],{},"Contexto estático:"," Quer o usuário pergunte sobre um capítulo ou sobre a estrutura do livro, o modelo sempre recebe o ",[24,222,223],{},"mesmo blob pré-extraído","—sem estreitamento dinâmico pela pergunta.",[10,226,227,228,231],{},"Lição: o problema não é «se comprimimos», mas ",[24,229,230],{},"se a compressão é sob demanda e se podemos voltar ao texto fonte",".",[53,233,235],{"id":234},"estágio-3-índice-de-segmentos-tool-retrieval-sob-demanda-texto-fonte-de-volta-atual","Estágio 3: Índice de segmentos + Tool retrieval sob demanda + texto fonte de volta (atual)",[10,237,238,240,241,248],{},[24,239,61],{}," Inspirado em ",[242,243,247],"a",{"href":244,"rel":245},"https://github.com/VectifyAI/PageIndex",[246],"nofollow","PageIndex",". Em relação ao estágio 2, três mudanças centrais:",[250,251,252,258,268],"ol",{},[84,253,254,257],{},[24,255,256],{},"O pré-processamento produz um índice estruturado"," (resumos no nível do índice + spans exatos de caracteres), não trechos usados diretamente como contexto de Q&A;",[84,259,260,263,264,267],{},[24,261,262],{},"Cada pergunta usa Tool Calling para recuperar sob demanda",", depois ",[24,265,266],{},"puxa texto fonte com marcas de posição"," para responder;",[84,269,270,273],{},[24,271,272],{},"System Prompt + frontend"," impõem formato de citação e suportam saltos com clique e destaque no leitor.",[10,275,276],{},[24,277,278],{},"Comparação dos três estágios:",[280,281,282,301],"table",{},[283,284,285],"thead",{},[286,287,288,292,295,298],"tr",{},[289,290,291],"th",{},"Dimensão",[289,293,294],{},"Estágio 1 (texto integral)",[289,296,297],{},"Estágio 2 (frases-chave)",[289,299,300],{},"Estágio 3 (atual)",[302,303,304,323,337,351,365,382],"tbody",{},[286,305,306,310,313,316],{},[307,308,309],"td",{},"Contexto por pergunta",[307,311,312],{},"Livro inteiro (ou metade frontal truncada)",[307,314,315],{},"Frases-chave pré-extraídas",[307,317,318,319,322],{},"Apenas trechos de ",[24,320,321],{},"texto fonte"," relevantes para a pergunta",[286,324,325,328,331,334],{},[307,326,327],{},"Precisão em livros longos",[307,329,330],{},"Colapsa após ~400k chars",[307,332,333],{},"Depende da extração; perde detalhe",[307,335,336],{},"Recuperação por TOC/span; sem truncamento rígido do livro inteiro",[286,338,339,342,345,348],{},[307,340,341],{},"Velocidade de resposta",[307,343,344],{},"Lenta",[307,346,347],{},"Um pouco melhor; livros longos ainda lentos",[307,349,350],{},"Recuperação + contexto curto—visivelmente mais rápido",[286,352,353,356,359,362],{},[307,354,355],{},"Custo de tokens",[307,357,358],{},"Muito alto",[307,360,361],{},"Médio-alto",[307,363,364],{},"Pré-processamento amortizado + pagar sob necessidade",[286,366,367,370,373,376],{},[307,368,369],{},"Rastreabilidade",[307,371,372],{},"Fraca (difícil citar)",[307,374,375],{},"Tags existem mas conteúdo já filtrado",[307,377,378,379],{},"Notas de rodapé mapeiam ",[24,380,381],{},"spans reais de fonte",[286,383,384,387,390,393],{},[307,385,386],{},"Complexidade de engenharia",[307,388,389],{},"Baixa",[307,391,392],{},"Média",[307,394,395],{},"Alta",[10,397,398,401,402,405,406,409,410,413],{},[24,399,400],{},"Por que paramos no estágio 3:"," Para leitura, zero alucinação não é «mostrar ao modelo o máximo de texto possível», mas ",[24,403,404],{},"«antes de responder, obter evidência fonte para a pergunta»",". Os estágios 1–2 lutaram o ",[24,407,408],{},"tamanho do contexto","; o estágio 3 divide o pipeline em ",[24,411,412],{},"índice (pré-processar) → recuperar (Tool) → evidência (fonte) → responder (geração restrita)","—equilibrando precisão, custo e rastreabilidade.",[10,415,416,417,231],{},"A seguir o detalhe do ",[24,418,419],{},"estágio 3",[33,421],{},[36,423,425],{"id":424},"ii-definição-do-problema-em-qa-de-livros-alucinação-dói-mais-que-no-chat-genérico","II. Definição do problema: Em Q&A de livros, alucinação dói mais que no chat genérico",[10,427,428,429,432],{},"Os usuários perdoam erros ocasionais em um chatbot geral. Em ",[24,430,431],{},"Q&A de livros",", o custo é maior:",[81,434,435,442,445],{},[84,436,437,438,441],{},"Perguntam o que ",[24,439,440],{},"este livro"," diz—não o que vive na memória paramétrica do modelo;",[84,443,444],{},"Uma «opinião do livro» plausível pode enganar notas, citações e compartilhamentos;",[84,446,447],{},"Sem fontes, não podem verificar—a confiança é difícil de construir.",[10,449,450,451,454],{},"Assim, «zero alucinação» torna-se três regras ",[24,452,453],{},"executáveis",":",[250,456,457,463,469],{},[84,458,459,462],{},[24,460,461],{},"Perguntas sobre o livro devem consultar o livro primeiro:"," Tudo o que possa ser sobre o livro aberto deve passar por recuperação (Tool) antes da resposta;",[84,464,465,468],{},[24,466,467],{},"Respostas devem ser rastreáveis:"," Afirmações-chave com marcas de posição que a UI possa analisar e saltar;",[84,470,471,474],{},[24,472,473],{},"Dizer quando não encontrar:"," Se o livro não contém, dizer—não disfarçar conhecimento geral como «o que o livro diz».",[10,476,477,478,480],{},"O resto segue o fluxo de dados do ",[24,479,419],{}," e como essas regras se implementam.",[33,482],{},[36,484,486],{"id":485},"iii-arquitetura-pré-processar-tool-retrieval-geração-restrita-citações-clicáveis","III. Arquitetura: Pré-processar → Tool retrieval → Geração restrita → Citações clicáveis",[48,488],{":config":50,"code":489},"flowchart%20TB%0A%20%20%20%20subgraph%20prep%20%5BPr%C3%A9-processamento%20offline%20%2F%20primeira%20vez%5D%0A%20%20%20%20%20%20%20%20A%5BDividir%20livro%20por%20TOC%20ou%20comprimento%5D%20--%3E%20B%5BResumos%20de%20segmentos%20com%20LLM%5D%0A%20%20%20%20%20%20%20%20B%20--%3E%20C%5BPersistir%20cache%20Segment%20localmente%5D%0A%20%20%20%20end%0A%0A%20%20%20%20subgraph%20ask%20%5BPergunta%20do%20usu%C3%A1rio%5D%0A%20%20%20%20%20%20%20%20D%5BInput%20do%20usu%C3%A1rio%5D%20--%3E%20E%7BExiste%20cache%20Segment%3F%7D%0A%20%20%20%20%20%20%20%20E%20--%3E%7CN%C3%A3o%7C%20F%5BExtrair%20texto%20integral%20%2F%20pedir%20pr%C3%A9-processamento%5D%0A%20%20%20%20%20%20%20%20F%20--%3E%20prep%0A%20%20%20%20%20%20%20%20E%20--%3E%7CSim%7C%20G%5BRegistrar%20Tool%20Calling%5D%0A%20%20%20%20end%0A%0A%20%20%20%20subgraph%20retrieve%20%5BRecupera%C3%A7%C3%A3o%20por%20Tool%5D%0A%20%20%20%20%20%20%20%20G%20--%3E%20H%7BTipo%20de%20pergunta%7D%0A%20%20%20%20%20%20%20%20H%20--%3E%7CVis%C3%A3o%20geral%20%2F%20cr%C3%ADtica%7C%20I%5Bget_full_book_segment_summaries%5D%0A%20%20%20%20%20%20%20%20H%20--%3E%7CFatos%20%2F%20pessoas%20%2F%20cap%C3%ADtulo%7C%20J%5Bget_related_segment_summaries%5D%0A%20%20%20%20%20%20%20%20J%20--%3E%20K%5BLLM%20escolhe%20IDs%20de%20segmentos%20do%20cat%C3%A1logo%20de%20resumos%5D%0A%20%20%20%20%20%20%20%20K%20--%3E%20L%5BObter%20fonte%20por%20span%20%2B%20marcas%20de%20posi%C3%A7%C3%A3o%5D%0A%20%20%20%20%20%20%20%20I%20--%3E%20M%5BConcatenar%20todos%20os%20resumos%20de%20segmentos%5D%0A%20%20%20%20end%0A%0A%20%20%20%20subgraph%20answer%20%5BGerar%20e%20exibir%5D%0A%20%20%20%20%20%20%20%20L%20--%3E%20N%5BResultados%20Tool%20de%20volta%20ao%20modelo%5D%0A%20%20%20%20%20%20%20%20M%20--%3E%20N%0A%20%20%20%20%20%20%20%20N%20--%3E%20O%5BRegras%20de%20cita%C3%A7%C3%A3o%20no%20System%20Prompt%5D%0A%20%20%20%20%20%20%20%20O%20--%3E%20P%5BResposta%20em%20streaming%20%2B%20notas%20de%20posi%C3%A7%C3%A3o%5D%0A%20%20%20%20%20%20%20%20P%20--%3E%20Q%5BRenderizar%20notas%20clic%C3%A1veis%5D%0A%20%20%20%20%20%20%20%20Q%20--%3E%20R%5BClique%20%E2%86%92%20pr%C3%A9-visualiza%C3%A7%C3%A3o%20%E2%86%92%20saltar%20e%20destacar%5D%0A%20%20%20%20end",[10,491,492,493],{},"Ideia central: ",[24,494,495],{},"não deixar o modelo «responder de memória»—obrigá-lo a «reunir evidência, responder e marcar fontes».",[33,497],{},[36,499,501],{"id":500},"iv-pré-processamento-transformar-o-livro-inteiro-em-um-índice-de-segmentos-pesquisável","IV. Pré-processamento: Transformar o livro inteiro em um índice de segmentos pesquisável",[10,503,504,505,508,509,512,513,516,517,520,521,524],{},"Se cada pergunta ainda usasse contexto de livro integral do ",[24,506,507],{},"estágio 1",", livros longos estouram o orçamento de tokens e a recuperação é grossa demais. Estágio 3: no primeiro chat de IA para um livro, rodar em segundo plano uma ",[24,510,511],{},"tarefa de resumo de segmentos","—dividir por ",[24,514,515],{},"TOC"," ou ",[24,518,519],{},"comprimento de texto"," em ",[153,522,523],{},"Segment","s, resumir cada um, persistir em IndexedDB local.",[10,526,527,528,530,531,454],{},"Cada ",[153,529,523],{}," contém resumo mais ",[24,532,533],{},"posição física no corpo",[280,535,536,546],{},[283,537,538],{},[286,539,540,543],{},[289,541,542],{},"Campo",[289,544,545],{},"Significado",[302,547,548,562,575,585],{},[286,549,550,559],{},[307,551,552,555,556],{},[153,553,554],{},"startFileIndex"," / ",[153,557,558],{},"endFileIndex",[307,560,561],{},"Índice de arquivo Spine (PDF: um arquivo por página)",[286,563,564,572],{},[307,565,566,555,569],{},[153,567,568],{},"startOffset",[153,570,571],{},"endOffset",[307,573,574],{},"Início/fim em caracteres",[286,576,577,582],{},[307,578,579],{},[153,580,581],{},"sequence",[307,583,584],{},"Ordem linear de leitura",[286,586,587,592],{},[307,588,589],{},[153,590,591],{},"title",[307,593,594],{},"Título do TOC",[10,596,597],{},"A divisão equilibra precisão e custo: se o corpo de um nó TOC tiver menos de ~20KB, resumir só esse nó; nós irmãos podem fundir-se em lotes (15–20KB) antes de chamadas LLM; blocos longos sem estrutura dividem-se em intervalos de ~30–40 mil caracteres.",[10,599,600,601,604,605,608],{},"O System Prompt de resumo exige ",[24,602,603],{},"manter marcas de posição inline"," (",[153,606,607],{},"[fNúmero-Número-Número]",") para o texto fonte obtido por Tool alinhar com offsets do Spine. Restrição central:",[610,611,617],"pre",{"className":612,"code":614,"language":615,"meta":616},[613],"language-text","Se o conteúdo do resumo se relacionar com uma passagem, manter a marca de posição no final [fNúmero-Número-Número] (ex. [f1-90-109]).\nAs marcas são atômicas—não alterar, fundir ou omitir qualquer caractere ou dígito.\n","text","",[153,618,614],{"__ignoreMap":616},[10,620,621,622,625],{},"Após o pré-processamento, o Q&A depende de um ",[24,623,624],{},"índice estruturado de segmentos",", não do contexto do livro inteiro—pré-requisito de engenharia para zero alucinação em livros longos.",[33,627],{},[36,629,631],{"id":630},"v-sistema-de-marcas-de-posição-codificar-onde-no-texto","V. Sistema de marcas de posição: Codificar «onde» no texto",[10,633,634,635,638],{},"Zero alucinação exige conteúdo da fonte ",[24,636,637],{},"e"," proveniência analisável por máquina e saltável na UI. Usamos marcas inline:",[610,640,643],{"className":641,"code":642,"language":615},[613],"[f{fileIndex}-{startChar}-{endChar}]\n",[153,644,642],{"__ignoreMap":616},[10,646,647,648,651],{},"Exemplo: ",[153,649,650],{},"[f5-123-165]"," = arquivo Spine 5 (base 0), caracteres 123–165.",[53,653,655],{"id":654},"_51-como-as-marcas-entram-no-corpo-do-texto","5.1 Como as marcas entram no corpo do texto",[10,657,658,659,662],{},"A camada de extração acrescenta ",[153,660,661],{},"[f{fileIndex}-{start}-{end}]"," no fim dos segmentos:",[610,664,669],{"className":665,"code":667,"language":668,"meta":616},[666],"language-typescript","const position = `[f${fileIndex}-${absOffset}-${absOffset + segment.length}]`;\nfileLines.push(segment.text.trim() + position);\n","typescript",[153,670,667],{"__ignoreMap":616},[10,672,673,674,677],{},"Quer resumos de pré-processamento quer trechos de Tool, as posições alinham com ",[24,675,676],{},"offsets de caracteres do Spine","—não números de página estimados pelo modelo.",[53,679,681],{"id":680},"_52-restrições-na-saída-do-modelo","5.2 Restrições na saída do modelo",[10,683,684,685,691],{},"O System Prompt inclui ",[24,686,687],{},[688,689,690],"span",{},"Position Citation Rules","—cinco pontos centrais:",[250,693,694,704,714,720,729],{},[84,695,696,699,700,703],{},[24,697,698],{},"Formato padrão:"," Deve usar ",[153,701,702],{},"[f_fileIndex-startChar-endChar]","; as três partes numéricas são obrigatórias;",[84,705,706,709,710,713],{},[24,707,708],{},"Copiar só das fontes atuais:"," Notas de rodapé ",[24,711,712],{},"verbatim"," das mensagens system/user ou retornos Tool deste turno;",[84,715,716,719],{},[24,717,718],{},"Sem fabricação:"," Não calcular, editar ou inventar posições;",[84,721,722,725,726,205],{},[24,723,724],{},"Preferir omissão:"," Se não houver marca válida no contexto, responder normalmente—",[24,727,728],{},"não emitir marcas de posição",[84,730,731,734],{},[24,732,733],{},"Inline com afirmações:"," Marcas seguem a frase relevante; sem listas de citações no final.",[10,736,737,738,741,742,745],{},"A UI também filtra marcas inválidas ",[24,739,740],{},"de duas partes"," ocasionais (ex. ",[153,743,744],{},"[f1-293]",") antes de renderizar.",[10,747,748],{},[13,749],{"alt":750,"src":751},"Popup de rastreio de citação","https://cdn.linghuxiong.com/resources/snapshots/ai-chat.png",[33,753],{},[36,755,757],{"id":756},"vi-tool-calling-recuperar-primeiro-responder-depois","VI. Tool Calling: Recuperar primeiro, responder depois",[10,759,760,761,764,765,768,769,772],{},"Quando o chat está ligado a um livro (",[153,762,763],{},"resourceId"," presente, ",[153,766,767],{},"chatType === 'chat'","), registramos duas Tools com executors antes de cada geração—ciclo ",[24,770,771],{},"function calling"," compatível com OpenAI.",[53,774,776,777,780],{"id":775},"_61-get_related_segment_summaries-busca-segmentada-direcionada","6.1 ",[153,778,779],{},"get_related_segment_summaries"," — Busca segmentada direcionada",[10,782,783,784,231],{},"Para: conceitos, personagens, enredo, detalhes de capítulo—",[24,785,786],{},"intenção clara de recuperação",[10,788,789],{},"Fluxo:",[250,791,792,799,805,808,818],{},[84,793,794,795,798],{},"O modelo reescreve a formulação do usuário em ",[24,796,797],{},"termos prováveis no livro"," («Optimize Search Queries» no System Prompt);",[84,800,801,802,205],{},"Chamar Tool com ",[153,803,804],{},"question",[84,806,807],{},"Agrupar todos os resumos de segmentos por orçamento de tokens (~30k tokens por lote, máx. 5 lotes);",[84,809,810,811,814,815,205],{},"Cada lote: requisição LLM separada escolhe IDs de segmentos relevantes (máx. 5) de ",[153,812,813],{},"{ id, title, summary }",", JSON como ",[153,816,817],{},"{\"Thinking\":\"...\",\"answer\":[\"1\",\"3\"]}",[84,819,820,821,824],{},"Para segmentos selecionados, puxar ",[24,822,823],{},"texto fonte com marcas"," do Spine—não resumos—como resultado Tool.",[10,826,827,830,831,834],{},[24,828,829],{},"Design-chave: Tool devolve fonte, não resumos."," O modelo responde a partir de parágrafos reais com ",[153,832,833],{},"[f…]"," inline, evitando deriva «resumo → re-resumo».",[53,836,838,839,842],{"id":837},"_62-get_full_book_segment_summaries-visão-geral-do-livro","6.2 ",[153,840,841],{},"get_full_book_segment_summaries"," — Visão geral do livro",[10,844,845,846,231],{},"Para: «resumir o livro», «avaliar este livro», «estrutura/temas globais»—",[24,847,848],{},"visão global",[10,850,851,852,855],{},"Concatenar todos os campos ",[153,853,854],{},"summary"," dos segmentos por ordem de leitura—evitar perder capítulos-chave só com relevância por bloco.",[53,857,859],{"id":858},"_63-system-prompt-livro-primeiro-tools-primeiro","6.3 System Prompt: Livro primeiro, tools primeiro",[10,861,862,863,454],{},"Com livro ligado, aplica-se ",[24,864,865],{},[688,866,867],{},"Core Principles for Reading Assistant",[610,869,872],{"className":870,"code":871,"language":615},[613],"1. Book First, Tool First\n   - Qualquer pergunta possivelmente sobre o livro deve chamar tools primeiro;\n   - Respostas devem basear-se sobretudo na recuperação—nunca inventar «conteúdo do livro» sem recuperação.\n\n2. General Knowledge as Fallback Only\n   - Só para: conversa casual / usuário pede explicitamente ignorar o livro / tools sem resultado;\n   - Se o livro não tem, dizer «não mencionado neste livro» antes de conhecimento geral.\n\n3. Direct Style\n   - Ir ao assunto—evitar «com base nos materiais fornecidos…» e frases vazias semelhantes.\n",[153,873,871],{"__ignoreMap":616},[10,875,876,877,880,881,884],{},"A geração roda o ciclo de tools: ",[153,878,879],{},"tool_calls"," → executar → acrescentar ",[153,882,883],{},"role: tool"," → continuar até texto final. Com tools ativas, o canal thinking desliga-se para evitar conflitos de protocolo.",[33,886],{},[36,888,890],{"id":889},"vii-rastreabilidade-no-frontend-da-nota-de-rodapé-ao-destaque","VII. Rastreabilidade no frontend: Da nota de rodapé ao destaque",[10,892,893,894,896],{},"A saída ",[153,895,650],{}," do modelo não se mostra em bruto; a camada de render transforma em citações clicáveis.",[53,898,900],{"id":899},"_71-renderização-de-notas","7.1 Renderização de notas",[10,902,903,904,907],{},"Normalizar marcas para links Markdown como ",[153,905,906],{},"[1]([f5-123-165])",", renderizar como notas numeradas; deduplicar a mesma posição para evitar sobrecarga na UI.",[53,909,911],{"id":910},"_72-interação-por-clique","7.2 Interação por clique",[250,913,914,923,929],{},[84,915,916,919,920,922],{},[24,917,918],{},"Primeiro clique:"," Analisar ",[153,921,833],{}," → fileIndex + offsets → extrair texto do Spine → pré-visualização (título TOC opcional);",[84,924,925,928],{},[24,926,927],{},"Mesma nota de novo:"," Fechar pré-visualização;",[84,930,931,934],{},[24,932,933],{},"Confirmar salto:"," Abrir vista de leitura, destacar intervalo de caracteres.",[10,936,937,938,941],{},"Da marca copiada do modelo ao texto visível pelo usuário, a cadeia ",[24,939,940],{},"nunca passa por outra chamada LLM","—determinística e reproduzível.",[33,943],{},[36,945,947],{"id":946},"viii-casos-limite-e-degradação-honesta","VIII. Casos limite e degradação honesta",[10,949,950,951,454],{},"Zero alucinação ≠ «sempre há resposta»—significa ",[24,952,953],{},"sem evidência, sem fabricação",[280,955,956,966],{},[283,957,958],{},[286,959,960,963],{},[289,961,962],{},"Cenário",[289,964,965],{},"Comportamento",[302,967,968,976,988,996,1004],{},[286,969,970,973],{},[307,971,972],{},"Resumos de segmentos ainda não prontos",[307,974,975],{},"Extrair texto integral e resumir primeiro",[286,977,978,981],{},[307,979,980],{},"Tool não encontra nada",[307,982,983,984,987],{},"Devolver ",[153,985,986],{},"(No relevant segment excerpts found…)","; o modelo deve dizer que não está no livro",[286,989,990,993],{},[307,991,992],{},"Marcas inválidas de duas partes do modelo",[307,994,995],{},"Frontend filtra; sem notas quebradas",[286,997,998,1001],{},[307,999,1000],{},"Conversa casual",[307,1002,1003],{},"System Prompt permite conhecimento geral fora do livro",[286,1005,1006,1009],{},[307,1007,1008],{},"Exportar conversa",[307,1010,1011],{},"Notas podem virar deep links do leitor para compartilhar/arquivar",[10,1013,1014],{},[13,1015],{"alt":1016,"src":1017},"Exportação de conversa","https://cdn.linghuxiong.com/resources/snapshots/ai-chat-export.png",[33,1019],{},[36,1021,1023],{"id":1022},"ix-compromisso-de-design-por-que-não-vector-rag","IX. Compromisso de design: Por que não «vector RAG»?",[10,1025,1026,1027,1030],{},"Colegas em Q&A de documentos perguntam com frequência: se fazem retrieval-augmented generation, por que não ",[24,1028,1029],{},"Embedding + vector DB Top-K","?",[10,1032,1033,1036,1037,1040,1041,1044,1045,1048],{},[24,1034,1035],{},"Estamos fazendo RAG","—recuperar antes de gerar. A diferença: «RAG» na comunidade implica muitas vezes ",[24,1038,1039],{},"similaridade vetorial","; nosso estágio 3 é ",[24,1042,1043],{},"índice de segmentos + Tool com pull de fonte sob demanda","—",[24,1046,1047],{},"sem camada vetorial por design",". Seguem razões arquiteturais, sem negar o valor do vector RAG.",[53,1050,1052],{"id":1051},"escopo-não-sem-recuperação-mas-sem-recuperação-vetorial","Escopo: não «sem recuperação», mas «sem recuperação vetorial»",[81,1054,1055,1064],{},[84,1056,1057,1060,1061,205],{},[24,1058,1059],{},"RAG amplo:"," recuperar → gerar → ",[24,1062,1063],{},"fazemos isso",[84,1065,1066,1069,1070,231],{},[24,1067,1068],{},"Vector RAG:"," recall via similaridade de embedding → ",[24,1071,1072],{},"não nesta versão",[10,1074,1075,1076,1079,1080,1082],{},"O pré-processamento constrói um ",[24,1077,1078],{},"índice de resumos de segmentos","; o modelo escolhe segmentos via Tools e obtém ",[24,1081,321],{},". A recuperação existe sem modelo de embedding separado nem manutenção de índice vetorial.",[33,1084],{},[53,1086,1088],{"id":1087},"razão-1-providers-llm-personalizadosmanter-a-superfície-de-integração-pequena","Razão 1: Providers LLM personalizados—manter a superfície de integração pequena",[10,1090,1091,1092,1095,1096,1099],{},"Os usuários podem usar ",[24,1093,1094],{},"suas API keys",", URLs base personalizadas ou ",[24,1097,1098],{},"Ollama local","—o modelo de chat é escolha deles; custo e caminho de dados sob controle.",[10,1101,1102],{},"O vector RAG típico alarga a integração:",[81,1104,1105,1116,1119],{},[84,1106,1107,1108,1111,1112,1115],{},"Além do ",[24,1109,1110],{},"modelo de chat",", costuma precisar de ",[24,1113,1114],{},"modelo de embedding"," (outro nome, às vezes outro endpoint);",[84,1117,1118],{},"Ollama local precisa de modelo de embedding à parte e compatibilidade de dimensão/API;",[84,1120,1121,1122,1125],{},"Mais modos de falha: chat OK mas ",[24,1123,1124],{},"recuperação vazia","—embedding, índice ou dimensão inconsistentes; mais difícil depurar que um provider de ponta a ponta.",[10,1127,1128,1129,1132,1133,1136],{},"Aqui, ",[24,1130,1131],{},"seleção de segmentos e resposta compartilham a mesma configuração de provider","—sem «chat em A, índice em B». Para apps com ",[24,1134,1135],{},"LLM plugável",", isso muitas vezes supera alguns pontos de recall.",[10,1138,1139],{},[13,1140],{"alt":1141,"src":1142},"Providers de IA personalizados","https://cdn.linghuxiong.com/resources/snapshots/ai-customize-providers.png",[33,1144],{},[53,1146,1148],{"id":1147},"razão-2-embeddings-ligam-se-ao-índicetrocar-de-provider-é-caro","Razão 2: Embeddings ligam-se ao índice—trocar de provider é caro",[10,1150,1151,1152,1155,1156,1159,1160,1163],{},"Em vector RAG, ",[24,1153,1154],{},"vetores não são formato intermediário universal","—são coordenadas sob um modelo de embedding. Índice com A, consulta com B: similaridade normalmente ",[24,1157,1158],{},"incomparável","—muitas vezes ",[24,1161,1162],{},"re-embedding completo",", e dimensões (768 / 1024 / 1536 …) fixam o schema de armazenamento.",[10,1165,1166,1167,1170,1171,1174],{},"O estágio 3 persiste ",[24,1168,1169],{},"resumos estruturados + spans de caracteres",", não vetores; trocar modelo de chat ",[24,1172,1173],{},"não reconstrói o índice","; a cadeia de evidência (posições fonte) se mantém—alinhado com «experimentar LLMs diferentes a qualquer momento».",[33,1176],{},[53,1178,1180],{"id":1179},"razão-3-roteamento-estruturado-costuma-bastar-para-documentos-longos-com-toc","Razão 3: Roteamento estruturado costuma bastar para documentos longos com TOC",[10,1182,1183,1184,1187,1188,1191,1192,1195,1196,1201],{},"E-books e PDF têm normalmente ",[24,1185,1186],{},"estrutura de capítulos","; o pré-processamento produz ",[24,1189,1190],{},"títulos + resumos de segmentos",". Para «o que diz o capítulo X» ou «como o livro define Y», escolher segmentos no catálogo e ",[24,1193,1194],{},"puxar fonte"," funciona bem na prática; a Tool devolve ",[24,1197,1198,1199],{},"fonte com ",[153,1200,833],{},", zero alucinação ancora-se em spans de caracteres.",[10,1203,1204,1205,1208,1209,1212],{},"Vetores ajudam em semântica difusa, multilíngue, desajuste literal em passagens longas; para leitores com ",[24,1206,1207],{},"TOC + pré-processamento + rastreabilidade forte",", investir em ",[24,1210,1211],{},"Tool + devolução de fonte + regras de citação"," costuma ter melhor ROI.",[33,1214],{},[53,1216,1218],{"id":1217},"futuro-recall-híbrido-não-reescrita","Futuro: Recall híbrido, não reescrita",[10,1220,1221,1222,1225,1226,1229,1230,1233,1234,1237],{},"Podemos acrescentar ",[24,1223,1224],{},"recall grosso vetorial"," (embedding só para Top-N capítulos candidatos), terminando sempre em ",[24,1227,1228],{},"escolher segmento → fonte → rastreio clicável","—regras zero alucinação inalteradas. Se adicionado: embedding ",[24,1231,1232],{},"opcional",", avisos explícitos de ",[24,1235,1236],{},"re-indexar"," ao mudar modelos—evitar recuperação errada silenciosa.",[10,1239,1240,1241],{},"Até lá: ",[24,1242,1243],{},"qualquer API de chat compatível com OpenAI funciona; trocar modelo de chat não reconstrói o índice local.",[33,1245],{},[36,1247,1249],{"id":1248},"x-resumo","X. Resumo",[280,1251,1252,1265],{},[283,1253,1254],{},[286,1255,1256,1259,1262],{},[289,1257,1258],{},"Etapa",[289,1260,1261],{},"Método",[289,1263,1264],{},"Papel",[302,1266,1267,1278,1291,1305,1316,1327],{},[286,1268,1269,1272,1275],{},[307,1270,1271],{},"Pré-processar",[307,1273,1274],{},"Dividir por TOC/comprimento + cache de resumos",[307,1276,1277],{},"Livros longos pesquisáveis e localizáveis",[286,1279,1280,1283,1288],{},[307,1281,1282],{},"Marcas de posição",[307,1284,1285,1287],{},[153,1286,155],{}," na fonte",[307,1289,1290],{},"Proveniência analisável",[286,1292,1293,1296,1302],{},[307,1294,1295],{},"Tool retrieval",[307,1297,1298,1299],{},"Segmentos por pergunta / resumos do livro, devolver ",[24,1300,1301],{},"fonte",[307,1303,1304],{},"Forçar evidência antes de responder",[286,1306,1307,1310,1313],{},[307,1308,1309],{},"System Prompt",[307,1311,1312],{},"Livro primeiro, sem marcas falsas, dizer quando falta",[307,1314,1315],{},"Restringir geração",[286,1317,1318,1321,1324],{},[307,1319,1320],{},"Frontend",[307,1322,1323],{},"Nota → pré-visualização → saltar e destacar",[307,1325,1326],{},"Usuário verifica evidência",[286,1328,1329,1332,1335],{},[307,1330,1331],{},"Sem recuperação vetorial",[307,1333,1334],{},"Provider único; trocar modelo de chat sem re-indexar",[307,1336,1337],{},"Menor custo de integração e migração",[10,1339,1340,1341,1344],{},"«Zero alucinação» não significa que o modelo nunca erra—significa ",[24,1342,1343],{},"engenharia que prende a saída a uma cadeia de evidência",": sem recuperação → não fingir conteúdo do livro; com recuperação → dar posições fonte verificáveis.",[10,1346,1347,1348,1351,1352,1355],{},"Se você desenvolve leitura com IA ou Q&A de documentos, esperamos que o caminho ",[24,1349,1350],{},"texto integral → frases-chave → Tool-first sob demanda",", mais ",[24,1353,1354],{},"marcas inline + devolução de fonte",", seja uma implementação de referência útil.",[18,1357,1358],{},[10,1359,1360,1361,1366,1367,231],{},"Estas são lições do desenvolvimento do leitor com IA ",[242,1362,1365],{"href":1363,"rel":1364},"https://reader.linghuxiong.com",[246],"Foxycape","—apenas para referência. Experimente o leitor na ",[242,1368,1370],{"href":1369},"/pt-br#download","página de download",{"title":616,"searchDepth":1372,"depth":1372,"links":1373},2,[1374,1380,1381,1382,1383,1387,1394,1398,1399,1406],{"id":38,"depth":1372,"text":39,"children":1375},[1376,1378,1379],{"id":55,"depth":1377,"text":56},3,{"id":137,"depth":1377,"text":138},{"id":234,"depth":1377,"text":235},{"id":424,"depth":1372,"text":425},{"id":485,"depth":1372,"text":486},{"id":500,"depth":1372,"text":501},{"id":630,"depth":1372,"text":631,"children":1384},[1385,1386],{"id":654,"depth":1377,"text":655},{"id":680,"depth":1377,"text":681},{"id":756,"depth":1372,"text":757,"children":1388},[1389,1391,1393],{"id":775,"depth":1377,"text":1390},"6.1 get_related_segment_summaries — Busca segmentada direcionada",{"id":837,"depth":1377,"text":1392},"6.2 get_full_book_segment_summaries — Visão geral do livro",{"id":858,"depth":1377,"text":859},{"id":889,"depth":1372,"text":890,"children":1395},[1396,1397],{"id":899,"depth":1377,"text":900},{"id":910,"depth":1377,"text":911},{"id":946,"depth":1372,"text":947},{"id":1022,"depth":1372,"text":1023,"children":1400},[1401,1402,1403,1404,1405],{"id":1051,"depth":1377,"text":1052},{"id":1087,"depth":1377,"text":1088},{"id":1147,"depth":1377,"text":1148},{"id":1179,"depth":1377,"text":1180},{"id":1217,"depth":1377,"text":1218},{"id":1248,"depth":1372,"text":1249},null,"2026-06-03","Notas de engenharia sobre Q&A zero alucinação em um leitor com IA—respostas baseadas no livro aberto, com citações em um clique até o trecho exato.",false,"md",{},true,"/pt-br/blog/zero-hallucination-qa",{"title":5,"description":1409},"pt-br/blog/zero-hallucination-qa",[1418,1419,1420],"leitor","AI","engenharia","zero-hallucination-qa","HqreQtoYQB04cgdCfwJ13S_juhaEOfZ9iMbDiXlsWDU",[1424],{"id":4,"title":5,"body":1425,"config":1407,"date":1408,"description":1409,"draft":1410,"extension":1411,"image":1407,"meta":2329,"navigation":1413,"path":1414,"seo":2330,"stem":1416,"tags":2331,"toolbar":1407,"translationKey":1421,"updated":1408,"__hash__":1422},{"type":7,"value":1426,"toc":2297},[1427,1431,1439,1441,1443,1447,1449,1451,1461,1465,1473,1477,1499,1501,1503,1513,1517,1521,1531,1535,1559,1563,1565,1572,1588,1592,1672,1682,1686,1688,1690,1694,1704,1708,1722,1726,1728,1730,1732,1736,1738,1740,1752,1758,1806,1808,1814,1819,1823,1825,1827,1831,1836,1840,1842,1846,1851,1855,1857,1863,1891,1897,1901,1903,1905,1913,1917,1921,1923,1945,1951,1955,1959,1963,1965,1971,1976,1982,1984,1986,1990,1992,1996,1998,2014,2018,2020,2022,2026,2070,2074,2076,2078,2082,2092,2094,2108,2114,2116,2118,2124,2126,2140,2146,2150,2152,2154,2162,2168,2170,2172,2184,2190,2192,2194,2204,2208,2210,2212,2278,2282,2288],[10,1428,1429],{},[13,1430],{"alt":15,"src":16},[18,1432,1433],{},[10,1434,22,1435,27,1437,31],{},[24,1436,26],{},[24,1438,30],{},[33,1440],{},[36,1442,39],{"id":38},[10,1444,42,1445,46],{},[24,1446,45],{},[48,1448],{":config":50,"code":51},[53,1450,56],{"id":55},[10,1452,1453,62,1455,66,1457,70,1459,74],{},[24,1454,61],{},[24,1456,65],{},[24,1458,69],{},[24,1460,73],{},[10,1462,1463],{},[24,1464,79],{},[81,1466,1467,1469,1471],{},[84,1468,86],{},[84,1470,89],{},[84,1472,92],{},[10,1474,1475],{},[24,1476,97],{},[81,1478,1479,1483,1487,1493],{},[84,1480,1481,105],{},[24,1482,104],{},[84,1484,1485,111],{},[24,1486,110],{},[84,1488,1489,117,1491,121],{},[24,1490,116],{},[24,1492,120],{},[84,1494,1495,127,1497,131],{},[24,1496,126],{},[24,1498,130],{},[10,1500,134],{},[53,1502,138],{"id":137},[10,1504,1505,143,1507,147,1509,151,1511,156],{},[24,1506,61],{},[24,1508,146],{},[24,1510,150],{},[153,1512,155],{},[10,1514,159,1515,163],{},[24,1516,162],{},[10,1518,1519],{},[24,1520,79],{},[81,1522,1523,1527,1529],{},[84,1524,172,1525,176],{},[24,1526,175],{},[84,1528,179],{},[84,1530,182],{},[10,1532,1533],{},[24,1534,187],{},[81,1536,1537,1541,1547,1553],{},[84,1538,1539,195],{},[24,1540,194],{},[84,1542,1543,201,1545,205],{},[24,1544,200],{},[24,1546,204],{},[84,1548,1549,211,1551,205],{},[24,1550,210],{},[24,1552,214],{},[84,1554,1555,220,1557,224],{},[24,1556,219],{},[24,1558,223],{},[10,1560,227,1561,231],{},[24,1562,230],{},[53,1564,235],{"id":234},[10,1566,1567,240,1569,248],{},[24,1568,61],{},[242,1570,247],{"href":244,"rel":1571},[246],[250,1573,1574,1578,1584],{},[84,1575,1576,257],{},[24,1577,256],{},[84,1579,1580,263,1582,267],{},[24,1581,262],{},[24,1583,266],{},[84,1585,1586,273],{},[24,1587,272],{},[10,1589,1590],{},[24,1591,278],{},[280,1593,1594,1606],{},[283,1595,1596],{},[286,1597,1598,1600,1602,1604],{},[289,1599,291],{},[289,1601,294],{},[289,1603,297],{},[289,1605,300],{},[302,1607,1608,1620,1630,1640,1650,1662],{},[286,1609,1610,1612,1614,1616],{},[307,1611,309],{},[307,1613,312],{},[307,1615,315],{},[307,1617,318,1618,322],{},[24,1619,321],{},[286,1621,1622,1624,1626,1628],{},[307,1623,327],{},[307,1625,330],{},[307,1627,333],{},[307,1629,336],{},[286,1631,1632,1634,1636,1638],{},[307,1633,341],{},[307,1635,344],{},[307,1637,347],{},[307,1639,350],{},[286,1641,1642,1644,1646,1648],{},[307,1643,355],{},[307,1645,358],{},[307,1647,361],{},[307,1649,364],{},[286,1651,1652,1654,1656,1658],{},[307,1653,369],{},[307,1655,372],{},[307,1657,375],{},[307,1659,378,1660],{},[24,1661,381],{},[286,1663,1664,1666,1668,1670],{},[307,1665,386],{},[307,1667,389],{},[307,1669,392],{},[307,1671,395],{},[10,1673,1674,401,1676,405,1678,409,1680,413],{},[24,1675,400],{},[24,1677,404],{},[24,1679,408],{},[24,1681,412],{},[10,1683,416,1684,231],{},[24,1685,419],{},[33,1687],{},[36,1689,425],{"id":424},[10,1691,428,1692,432],{},[24,1693,431],{},[81,1695,1696,1700,1702],{},[84,1697,437,1698,441],{},[24,1699,440],{},[84,1701,444],{},[84,1703,447],{},[10,1705,450,1706,454],{},[24,1707,453],{},[250,1709,1710,1714,1718],{},[84,1711,1712,462],{},[24,1713,461],{},[84,1715,1716,468],{},[24,1717,467],{},[84,1719,1720,474],{},[24,1721,473],{},[10,1723,477,1724,480],{},[24,1725,419],{},[33,1727],{},[36,1729,486],{"id":485},[48,1731],{":config":50,"code":489},[10,1733,492,1734],{},[24,1735,495],{},[33,1737],{},[36,1739,501],{"id":500},[10,1741,504,1742,508,1744,512,1746,516,1748,520,1750,524],{},[24,1743,507],{},[24,1745,511],{},[24,1747,515],{},[24,1749,519],{},[153,1751,523],{},[10,1753,527,1754,530,1756,454],{},[153,1755,523],{},[24,1757,533],{},[280,1759,1760,1768],{},[283,1761,1762],{},[286,1763,1764,1766],{},[289,1765,542],{},[289,1767,545],{},[302,1769,1770,1780,1790,1798],{},[286,1771,1772,1778],{},[307,1773,1774,555,1776],{},[153,1775,554],{},[153,1777,558],{},[307,1779,561],{},[286,1781,1782,1788],{},[307,1783,1784,555,1786],{},[153,1785,568],{},[153,1787,571],{},[307,1789,574],{},[286,1791,1792,1796],{},[307,1793,1794],{},[153,1795,581],{},[307,1797,584],{},[286,1799,1800,1804],{},[307,1801,1802],{},[153,1803,591],{},[307,1805,594],{},[10,1807,597],{},[10,1809,600,1810,604,1812,608],{},[24,1811,603],{},[153,1813,607],{},[610,1815,1817],{"className":1816,"code":614,"language":615,"meta":616},[613],[153,1818,614],{"__ignoreMap":616},[10,1820,621,1821,625],{},[24,1822,624],{},[33,1824],{},[36,1826,631],{"id":630},[10,1828,634,1829,638],{},[24,1830,637],{},[610,1832,1834],{"className":1833,"code":642,"language":615},[613],[153,1835,642],{"__ignoreMap":616},[10,1837,647,1838,651],{},[153,1839,650],{},[53,1841,655],{"id":654},[10,1843,658,1844,662],{},[153,1845,661],{},[610,1847,1849],{"className":1848,"code":667,"language":668,"meta":616},[666],[153,1850,667],{"__ignoreMap":616},[10,1852,673,1853,677],{},[24,1854,676],{},[53,1856,681],{"id":680},[10,1858,684,1859,691],{},[24,1860,1861],{},[688,1862,690],{},[250,1864,1865,1871,1877,1881,1887],{},[84,1866,1867,699,1869,703],{},[24,1868,698],{},[153,1870,702],{},[84,1872,1873,709,1875,713],{},[24,1874,708],{},[24,1876,712],{},[84,1878,1879,719],{},[24,1880,718],{},[84,1882,1883,725,1885,205],{},[24,1884,724],{},[24,1886,728],{},[84,1888,1889,734],{},[24,1890,733],{},[10,1892,737,1893,741,1895,745],{},[24,1894,740],{},[153,1896,744],{},[10,1898,1899],{},[13,1900],{"alt":750,"src":751},[33,1902],{},[36,1904,757],{"id":756},[10,1906,760,1907,764,1909,768,1911,772],{},[153,1908,763],{},[153,1910,767],{},[24,1912,771],{},[53,1914,776,1915,780],{"id":775},[153,1916,779],{},[10,1918,783,1919,231],{},[24,1920,786],{},[10,1922,789],{},[250,1924,1925,1929,1933,1935,1941],{},[84,1926,794,1927,798],{},[24,1928,797],{},[84,1930,801,1931,205],{},[153,1932,804],{},[84,1934,807],{},[84,1936,810,1937,814,1939,205],{},[153,1938,813],{},[153,1940,817],{},[84,1942,820,1943,824],{},[24,1944,823],{},[10,1946,1947,830,1949,834],{},[24,1948,829],{},[153,1950,833],{},[53,1952,838,1953,842],{"id":837},[153,1954,841],{},[10,1956,845,1957,231],{},[24,1958,848],{},[10,1960,851,1961,855],{},[153,1962,854],{},[53,1964,859],{"id":858},[10,1966,862,1967,454],{},[24,1968,1969],{},[688,1970,867],{},[610,1972,1974],{"className":1973,"code":871,"language":615},[613],[153,1975,871],{"__ignoreMap":616},[10,1977,876,1978,880,1980,884],{},[153,1979,879],{},[153,1981,883],{},[33,1983],{},[36,1985,890],{"id":889},[10,1987,893,1988,896],{},[153,1989,650],{},[53,1991,900],{"id":899},[10,1993,903,1994,907],{},[153,1995,906],{},[53,1997,911],{"id":910},[250,1999,2000,2006,2010],{},[84,2001,2002,919,2004,922],{},[24,2003,918],{},[153,2005,833],{},[84,2007,2008,928],{},[24,2009,927],{},[84,2011,2012,934],{},[24,2013,933],{},[10,2015,937,2016,941],{},[24,2017,940],{},[33,2019],{},[36,2021,947],{"id":946},[10,2023,950,2024,454],{},[24,2025,953],{},[280,2027,2028,2036],{},[283,2029,2030],{},[286,2031,2032,2034],{},[289,2033,962],{},[289,2035,965],{},[302,2037,2038,2044,2052,2058,2064],{},[286,2039,2040,2042],{},[307,2041,972],{},[307,2043,975],{},[286,2045,2046,2048],{},[307,2047,980],{},[307,2049,983,2050,987],{},[153,2051,986],{},[286,2053,2054,2056],{},[307,2055,992],{},[307,2057,995],{},[286,2059,2060,2062],{},[307,2061,1000],{},[307,2063,1003],{},[286,2065,2066,2068],{},[307,2067,1008],{},[307,2069,1011],{},[10,2071,2072],{},[13,2073],{"alt":1016,"src":1017},[33,2075],{},[36,2077,1023],{"id":1022},[10,2079,1026,2080,1030],{},[24,2081,1029],{},[10,2083,2084,1036,2086,1040,2088,1044,2090,1048],{},[24,2085,1035],{},[24,2087,1039],{},[24,2089,1043],{},[24,2091,1047],{},[53,2093,1052],{"id":1051},[81,2095,2096,2102],{},[84,2097,2098,1060,2100,205],{},[24,2099,1059],{},[24,2101,1063],{},[84,2103,2104,1069,2106,231],{},[24,2105,1068],{},[24,2107,1072],{},[10,2109,1075,2110,1079,2112,1082],{},[24,2111,1078],{},[24,2113,321],{},[33,2115],{},[53,2117,1088],{"id":1087},[10,2119,1091,2120,1095,2122,1099],{},[24,2121,1094],{},[24,2123,1098],{},[10,2125,1102],{},[81,2127,2128,2134,2136],{},[84,2129,1107,2130,1111,2132,1115],{},[24,2131,1110],{},[24,2133,1114],{},[84,2135,1118],{},[84,2137,1121,2138,1125],{},[24,2139,1124],{},[10,2141,1128,2142,1132,2144,1136],{},[24,2143,1131],{},[24,2145,1135],{},[10,2147,2148],{},[13,2149],{"alt":1141,"src":1142},[33,2151],{},[53,2153,1148],{"id":1147},[10,2155,1151,2156,1155,2158,1159,2160,1163],{},[24,2157,1154],{},[24,2159,1158],{},[24,2161,1162],{},[10,2163,1166,2164,1170,2166,1174],{},[24,2165,1169],{},[24,2167,1173],{},[33,2169],{},[53,2171,1180],{"id":1179},[10,2173,1183,2174,1187,2176,1191,2178,1195,2180,1201],{},[24,2175,1186],{},[24,2177,1190],{},[24,2179,1194],{},[24,2181,1198,2182],{},[153,2183,833],{},[10,2185,1204,2186,1208,2188,1212],{},[24,2187,1207],{},[24,2189,1211],{},[33,2191],{},[53,2193,1218],{"id":1217},[10,2195,1221,2196,1225,2198,1229,2200,1233,2202,1237],{},[24,2197,1224],{},[24,2199,1228],{},[24,2201,1232],{},[24,2203,1236],{},[10,2205,1240,2206],{},[24,2207,1243],{},[33,2209],{},[36,2211,1249],{"id":1248},[280,2213,2214,2224],{},[283,2215,2216],{},[286,2217,2218,2220,2222],{},[289,2219,1258],{},[289,2221,1261],{},[289,2223,1264],{},[302,2225,2226,2234,2244,2254,2262,2270],{},[286,2227,2228,2230,2232],{},[307,2229,1271],{},[307,2231,1274],{},[307,2233,1277],{},[286,2235,2236,2238,2242],{},[307,2237,1282],{},[307,2239,2240,1287],{},[153,2241,155],{},[307,2243,1290],{},[286,2245,2246,2248,2252],{},[307,2247,1295],{},[307,2249,1298,2250],{},[24,2251,1301],{},[307,2253,1304],{},[286,2255,2256,2258,2260],{},[307,2257,1309],{},[307,2259,1312],{},[307,2261,1315],{},[286,2263,2264,2266,2268],{},[307,2265,1320],{},[307,2267,1323],{},[307,2269,1326],{},[286,2271,2272,2274,2276],{},[307,2273,1331],{},[307,2275,1334],{},[307,2277,1337],{},[10,2279,1340,2280,1344],{},[24,2281,1343],{},[10,2283,1347,2284,1351,2286,1355],{},[24,2285,1350],{},[24,2287,1354],{},[18,2289,2290],{},[10,2291,1360,2292,1366,2295,231],{},[242,2293,1365],{"href":1363,"rel":2294},[246],[242,2296,1370],{"href":1369},{"title":616,"searchDepth":1372,"depth":1372,"links":2298},[2299,2304,2305,2306,2307,2311,2316,2320,2321,2328],{"id":38,"depth":1372,"text":39,"children":2300},[2301,2302,2303],{"id":55,"depth":1377,"text":56},{"id":137,"depth":1377,"text":138},{"id":234,"depth":1377,"text":235},{"id":424,"depth":1372,"text":425},{"id":485,"depth":1372,"text":486},{"id":500,"depth":1372,"text":501},{"id":630,"depth":1372,"text":631,"children":2308},[2309,2310],{"id":654,"depth":1377,"text":655},{"id":680,"depth":1377,"text":681},{"id":756,"depth":1372,"text":757,"children":2312},[2313,2314,2315],{"id":775,"depth":1377,"text":1390},{"id":837,"depth":1377,"text":1392},{"id":858,"depth":1377,"text":859},{"id":889,"depth":1372,"text":890,"children":2317},[2318,2319],{"id":899,"depth":1377,"text":900},{"id":910,"depth":1377,"text":911},{"id":946,"depth":1372,"text":947},{"id":1022,"depth":1372,"text":1023,"children":2322},[2323,2324,2325,2326,2327],{"id":1051,"depth":1377,"text":1052},{"id":1087,"depth":1377,"text":1088},{"id":1147,"depth":1377,"text":1148},{"id":1179,"depth":1377,"text":1180},{"id":1217,"depth":1377,"text":1218},{"id":1248,"depth":1372,"text":1249},{},{"title":5,"description":1409},[1418,1419,1420],1780489852854]