[{"data":1,"prerenderedAt":1842},["ShallowReactive",2],{"blog-article-/es-es/blog/foxycape-pdf-obsidian":3,"blog-list-es-es":270},{"id":4,"title":5,"body":6,"config":254,"date":255,"description":256,"draft":257,"extension":258,"image":254,"meta":259,"navigation":260,"path":261,"seo":262,"stem":263,"tags":264,"toolbar":254,"translationKey":268,"updated":255,"__hash__":269},"blog/es-es/blog/foxycape-pdf-obsidian.md","Foxycape PDF — Un lector PDF para Obsidian que permanece conectado a tus notas",{"type":7,"value":8,"toc":237},"minimark",[9,17,23,26,31,34,53,56,60,65,68,74,78,81,86,90,93,121,126,130,133,138,143,147,159,164,168,171,176,180,183,188,192,199,204,208,211,216,221,225,232],[10,11,12],"p",{},[13,14],"img",{"alt":15,"src":16},"Foxycape PDF","https://cdn.linghuxiong.com/resources/obsidian/introduce/logo-64x64.png",[18,19,20],"blockquote",{},[10,21,22],{},"Un lector PDF para Obsidian que permanece conectado a tus notas — resaltados, citas y enlaces profundos que te llevan de vuelta a la fuente.",[24,25],"hr",{},[27,28,30],"h2",{"id":29},"por-qué","Por qué",[10,32,33],{},"Leer PDF dentro de Obsidian a menudo rompe el ciclo de toma de notas:",[35,36,37,41,44,47,50],"ul",{},[38,39,40],"li",{},"Los resaltados se quedan en el PDF; tus notas del vault están en otro lugar.",[38,42,43],{},"Capturar una figura suele significar una captura de pantalla borrosa.",[38,45,46],{},"Las citas e imágenes pegadas rara vez apuntan a la página o región exacta.",[38,48,49],{},"Las páginas PDF claras resultan duras en un tema de vault oscuro.",[38,51,52],{},"Cambiar de lector puede romper los enlaces de página/selección que ya usas.",[10,54,55],{},"Foxycape PDF cubre estas lagunas sin pedirte que abandones Obsidian.",[27,57,59],{"id":58},"funciones","Funciones",[61,62,64],"h3",{"id":63},"resaltado-sincronización-con-notas","Resaltado → sincronización con notas",[10,66,67],{},"En lugar de dejar los resaltados aislados en el PDF, cada nuevo resaltado puede crear o actualizar una nota Markdown con el mismo nombre, añadir el extracto con un enlace de retorno y, opcionalmente, abrir esa nota en un panel dividido. Desactívalo en cualquier momento en la configuración.",[10,69,70],{},[13,71],{"alt":72,"src":73},"","https://cdn.linghuxiong.com/resources/obsidian/introduce/highlight-notes.gif",[61,75,77],{"id":76},"extraer-imágenes-incrustadas","Extraer imágenes incrustadas",[10,79,80],{},"Olvídate de las capturas borrosas. Pasa el cursor sobre una imagen incrustada (o usa el control táctil en móvil) para previsualizar, copiar o descargar el archivo original.",[10,82,83],{},[13,84],{"alt":72,"src":85},"https://cdn.linghuxiong.com/resources/obsidian/introduce/embed-images.gif",[61,87,89],{"id":88},"citar-texto-e-imágenes-y-volver","Citar texto e imágenes y volver",[10,91,92],{},"Las citas permanecen vinculadas a la fuente, para que puedas volver al PDF desde la nota más tarde:",[35,94,95,110,113],{},[38,96,97,98,102,103,102,106,109],{},"Copiar una cita de texto como Markdown con un enlace profundo (",[99,100,101],"code",{},"#page="," / ",[99,104,105],{},"#selection=",[99,107,108],{},"#markId=",").",[38,111,112],{},"Copiar una cita de imagen; pegar en Markdown para guardar un PNG junto al PDF e insertar un enlace clicable.",[38,114,115,116,120],{},"Clic derecho en la imagen de la nota → ",[117,118,119],"strong",{},"Abrir en Foxycape"," para volver a la página y resaltar la región original.",[10,122,123],{},[13,124],{"alt":72,"src":125},"https://cdn.linghuxiong.com/resources/obsidian/introduce/cite-and-back.gif",[61,127,129],{"id":128},"páginas-pdf-adaptadas-al-tema","Páginas PDF adaptadas al tema",[10,131,132],{},"Las páginas PDF brillantes pueden chocar con un vault oscuro. Opcionalmente remapea los colores vectoriales en escala de grises al primer plano/fondo de tu tema (BETA) — para todos los temas, solo oscuro o solo claro. Las ilustraciones en color se mantienen tal cual.",[10,134,135],{},[13,136],{"alt":72,"src":137},"https://cdn.linghuxiong.com/resources/obsidian/introduce/theme-adapt.gif",[10,139,140],{},[13,141],{"alt":72,"src":142},"https://cdn.linghuxiong.com/resources/obsidian/introduce/theme-adapt-dark.gif",[61,144,146],{"id":145},"compatible-con-los-enlaces-pdf-integrados-de-obsidian","Compatible con los enlaces PDF integrados de Obsidian",[10,148,149,150,152,153,155,156,158],{},"Cambiar de lector no debería romper los enlaces que ya tienes. Foxycape entiende los enlaces al estilo Obsidian ",[99,151,101],{}," y ",[99,154,105],{},", puede convertirse en el visor PDF predeterminado, reutiliza una pestaña abierta cuando es posible y añade ",[99,157,108],{}," para saltos precisos a resaltados.",[10,160,161],{},[13,162],{"alt":72,"src":163},"https://cdn.linghuxiong.com/resources/obsidian/introduce/compat-links.gif",[61,165,167],{"id":166},"resaltados-y-lista-de-resaltados","Resaltados y lista de resaltados",[10,169,170],{},"Rotulador, subrayado ondulado y subrayado recto con colores personalizados. Explora los resaltados en una lista — filtra, ordena, salta o elimina.",[10,172,173],{},[13,174],{"alt":72,"src":175},"https://cdn.linghuxiong.com/resources/obsidian/introduce/annotations.gif",[61,177,179],{"id":178},"copia-inteligente-eliminar-saltos-de-línea-suaves","Copia inteligente — eliminar saltos de línea suaves",[10,181,182],{},"Las líneas del PDF suelen insertar cortes duros a mitad de frase. Selecciona y copia como de costumbre: Foxycape elimina esos saltos suaves para que el pegado se lea como prosa continua, conservando los saltos de párrafo reales.",[10,184,185],{},[13,186],{"alt":72,"src":187},"https://cdn.linghuxiong.com/resources/obsidian/introduce/smart-copy.gif",[61,189,191],{"id":190},"navegación-y-búsqueda","Navegación y búsqueda",[10,193,194,195,198],{},"Esquema (índice), miniaturas de página, selector de página y búsqueda en el documento (",[99,196,197],{},"Mod+F",") con opciones de mayúsculas / diacríticos / palabra completa. La búsqueda usa la capa de texto del PDF (sin OCR).",[10,200,201],{},[13,202],{"alt":72,"src":203},"https://cdn.linghuxiong.com/resources/obsidian/introduce/navigate-search.gif",[61,205,207],{"id":206},"diseño-de-lectura","Diseño de lectura",[10,209,210],{},"Zoom (automático / ancho de página / porcentajes), desplazamiento vertical u horizontal, diseño simple / doble / libro, rotación de página, PDF protegidos con contraseña. Funciona en escritorio y móvil.",[10,212,213],{},[13,214],{"alt":72,"src":215},"https://cdn.linghuxiong.com/resources/obsidian/introduce/layout.gif",[10,217,218],{},[13,219],{"alt":72,"src":220},"https://cdn.linghuxiong.com/resources/obsidian/introduce/layout-1.gif",[61,222,224],{"id":223},"establecer-como-lector-pdf-predeterminado","Establecer como lector PDF predeterminado",[10,226,227,228,231],{},"Para la experiencia más fluida — enlaces profundos, resaltados y páginas adaptadas al tema — activa ",[117,229,230],{},"Usar como visor PDF predeterminado"," en la configuración de Foxycape para que Obsidian abra los PDF con Foxycape por defecto.",[10,233,234],{},[13,235],{"alt":72,"src":236},"https://cdn.linghuxiong.com/resources/obsidian/introduce/set-default.gif",{"title":72,"searchDepth":238,"depth":238,"links":239},2,[240,241],{"id":29,"depth":238,"text":30},{"id":58,"depth":238,"text":59,"children":242},[243,245,246,247,248,249,250,251,252,253],{"id":63,"depth":244,"text":64},3,{"id":76,"depth":244,"text":77},{"id":88,"depth":244,"text":89},{"id":128,"depth":244,"text":129},{"id":145,"depth":244,"text":146},{"id":166,"depth":244,"text":167},{"id":178,"depth":244,"text":179},{"id":190,"depth":244,"text":191},{"id":206,"depth":244,"text":207},{"id":223,"depth":244,"text":224},null,"2026-08-11","Resaltados, citas y enlaces profundos que te llevan de vuelta a la fuente — Foxycape PDF mantiene la lectura y la toma de notas en Obsidian en un solo flujo.",false,"md",{},true,"/es-es/blog/foxycape-pdf-obsidian",{"title":5,"description":256},"es-es/blog/foxycape-pdf-obsidian",[265,266,267],"Obsidian","PDF","Foxycape","foxycape-pdf-obsidian","STbB3BfWUVeXrjMoq__q33q72UNle_cVDq3jXYaDt4M",[271,436],{"id":4,"title":5,"body":272,"config":254,"date":255,"description":256,"draft":257,"extension":258,"image":254,"meta":433,"navigation":260,"path":261,"seo":434,"stem":263,"tags":435,"toolbar":254,"translationKey":268,"updated":255,"__hash__":269},{"type":7,"value":273,"toc":418},[274,278,282,284,286,288,300,302,304,306,308,312,314,316,320,322,324,340,344,346,348,352,356,358,366,370,372,374,378,380,382,386,388,392,396,398,400,404,408,410,414],[10,275,276],{},[13,277],{"alt":15,"src":16},[18,279,280],{},[10,281,22],{},[24,283],{},[27,285,30],{"id":29},[10,287,33],{},[35,289,290,292,294,296,298],{},[38,291,40],{},[38,293,43],{},[38,295,46],{},[38,297,49],{},[38,299,52],{},[10,301,55],{},[27,303,59],{"id":58},[61,305,64],{"id":63},[10,307,67],{},[10,309,310],{},[13,311],{"alt":72,"src":73},[61,313,77],{"id":76},[10,315,80],{},[10,317,318],{},[13,319],{"alt":72,"src":85},[61,321,89],{"id":88},[10,323,92],{},[35,325,326,334,336],{},[38,327,97,328,102,330,102,332,109],{},[99,329,101],{},[99,331,105],{},[99,333,108],{},[38,335,112],{},[38,337,115,338,120],{},[117,339,119],{},[10,341,342],{},[13,343],{"alt":72,"src":125},[61,345,129],{"id":128},[10,347,132],{},[10,349,350],{},[13,351],{"alt":72,"src":137},[10,353,354],{},[13,355],{"alt":72,"src":142},[61,357,146],{"id":145},[10,359,149,360,152,362,155,364,158],{},[99,361,101],{},[99,363,105],{},[99,365,108],{},[10,367,368],{},[13,369],{"alt":72,"src":163},[61,371,167],{"id":166},[10,373,170],{},[10,375,376],{},[13,377],{"alt":72,"src":175},[61,379,179],{"id":178},[10,381,182],{},[10,383,384],{},[13,385],{"alt":72,"src":187},[61,387,191],{"id":190},[10,389,194,390,198],{},[99,391,197],{},[10,393,394],{},[13,395],{"alt":72,"src":203},[61,397,207],{"id":206},[10,399,210],{},[10,401,402],{},[13,403],{"alt":72,"src":215},[10,405,406],{},[13,407],{"alt":72,"src":220},[61,409,224],{"id":223},[10,411,227,412,231],{},[117,413,230],{},[10,415,416],{},[13,417],{"alt":72,"src":236},{"title":72,"searchDepth":238,"depth":238,"links":419},[420,421],{"id":29,"depth":238,"text":30},{"id":58,"depth":238,"text":59,"children":422},[423,424,425,426,427,428,429,430,431,432],{"id":63,"depth":244,"text":64},{"id":76,"depth":244,"text":77},{"id":88,"depth":244,"text":89},{"id":128,"depth":244,"text":129},{"id":145,"depth":244,"text":146},{"id":166,"depth":244,"text":167},{"id":178,"depth":244,"text":179},{"id":190,"depth":244,"text":191},{"id":206,"depth":244,"text":207},{"id":223,"depth":244,"text":224},{},{"title":5,"description":256},[265,266,267],{"id":437,"title":438,"body":439,"config":254,"date":254,"description":1828,"draft":257,"extension":258,"image":254,"meta":1829,"navigation":260,"path":1830,"seo":1831,"stem":1840,"tags":254,"toolbar":254,"translationKey":254,"updated":254,"__hash__":1841},"blog/es-es/blog/zero-hallucination-qa.md","Cómo implementé preguntas y respuestas sin alucinaciones en nuestro lector",{"type":7,"value":440,"toc":1794},[441,447,460,462,466,473,478,482,500,505,516,521,555,558,562,579,586,590,605,610,647,654,658,671,696,701,818,836,842,844,848,855,870,877,897,903,905,909,912,918,920,924,947,956,1016,1019,1030,1039,1046,1048,1052,1063,1069,1076,1080,1087,1095,1102,1106,1116,1159,1170,1176,1178,1182,1197,1205,1211,1214,1249,1259,1267,1273,1280,1284,1292,1298,1309,1311,1315,1321,1325,1332,1336,1359,1366,1368,1372,1378,1436,1442,1444,1448,1455,1473,1477,1497,1508,1510,1514,1525,1528,1551,1562,1568,1570,1574,1589,1600,1602,1606,1627,1638,1640,1644,1663,1669,1671,1675,1762,1769,1780],[10,442,443],{},[13,444],{"alt":445,"src":446},"Portada: Q&A sin alucinaciones","https://cdn.linghuxiong.com/resources/snapshots/ai-chat-cover.png",[18,448,449],{},[10,450,451,452,455,456,459],{},"Este artículo comparte la implementación técnica de ",[117,453,454],{},"Q&A sin alucinaciones"," en nuestro lector con IA: las respuestas se basan estrictamente en el texto del libro abierto y las afirmaciones clave pueden ",[117,457,458],{},"rastrearse con un clic"," hasta el pasaje exacto. Si desarrollas lectura con IA, Q&A documental o aplicaciones tipo RAG, esperamos que tres iteraciones y la arquitectura final te resulten útiles.",[24,461],{},[27,463,465],{"id":464},"i-evolución-en-tres-etapas","I. Evolución en tres etapas",[10,467,468,469,472],{},"El Q&A sin alucinaciones no se diseñó perfecto desde el primer día. Evolucionó bajo la tensión entre ",[117,470,471],{},"coste, latencia y precisión",". A continuación, las tres etapas en orden cronológico—contexto para entender por qué la arquitectura actual tiene esta forma.",[474,475],"mermaid",{":config":476,"code":477},"config","flowchart%20LR%0A%20%20%20%20P1%5BEtapa%201%3A%20Texto%20completo%5D%20--%3E%20P2%5BEtapa%202%3A%20LLM%20frases%20clave%5D%0A%20%20%20%20P2%20--%3E%20P3%5BEtapa%203%3A%20%C3%8Dndice%20segmentos%20%2B%20Tool%5D%0A%20%20%20%20P1%20-.-%3E%7CLento%2C%20caro%2C%20impreciso%20en%20libros%20largos%7C%20X1%5BDescartado%5D%0A%20%20%20%20P2%20-.-%3E%7CP%C3%A9rdida%20de%20detalle%2C%20a%C3%BAn%20lento%7C%20X2%5BDescartado%5D%0A%20%20%20%20P3%20--%3E%7CActual%7C%20OK%5BCero%20alucinaciones%20%2B%20trazable%5D",[61,479,481],{"id":480},"etapa-1-volcar-todo-el-libro-en-el-contexto-lo-más-simpley-lo-primero-que-falla","Etapa 1: Volcar todo el libro en el contexto (lo más simple—y lo primero que falla)",[10,483,484,487,488,491,492,495,496,499],{},[117,485,486],{},"Enfoque:"," Cuando el usuario abre un libro y pregunta, meter ",[117,489,490],{},"todo el cuerpo de texto extraído"," en el system prompt o el mensaje de usuario y dejar que el modelo de chat responda. Si el libro supera unos ",[117,493,494],{},"400.000 caracteres",", ",[117,497,498],{},"truncado duro","—solo queda el inicio; los capítulos posteriores son invisibles para el modelo.",[10,501,502],{},[117,503,504],{},"Ventajas:",[35,506,507,510,513],{},[38,508,509],{},"Coste de implementación muy bajo, casi sin preprocesado;",[38,511,512],{},"Funciona razonablemente en libros cortos y documentos simples—el modelo realmente «vio todo el libro»;",[38,514,515],{},"UX simple: preguntar y obtener respuesta, sin estado «espere mientras analizamos».",[10,517,518],{},[117,519,520],{},"Inconvenientes (pronto inaceptables):",[35,522,523,529,535,545],{},[38,524,525,528],{},[117,526,527],{},"Respuestas lentas:"," Cada pregunta reenvía una carga enorme; el tiempo hasta el primer token y la latencia total crecen con la longitud del libro;",[38,530,531,534],{},[117,532,533],{},"Coste de tokens alto:"," Se paga la entrada del libro completo en cada pregunta;",[38,536,537,540,541,544],{},[117,538,539],{},"Libros largos muy distorsionados:"," Tras 400k caracteres, la segunda mitad, anexos y conclusiones casi no existen—y la UI ",[117,542,543],{},"no suele indicar claramente"," el truncado;",[38,546,547,550,551,554],{},[117,548,549],{},"Granularidad de búsqueda cero:"," El modelo debe «encontrar una aguja en un pajar» entre cientos de miles de caracteres—fácil omitir detalles y producir ",[117,552,553],{},"resúmenes plausibles sin base","—exactamente lo que las apps de lectura deben evitar.",[10,556,557],{},"La etapa 1 sirve para un MVP, no para una solución de producto.",[61,559,561],{"id":560},"etapa-2-un-llm-ligero-extrae-frases-clave-comprimir-contextodemasiado-agresivo","Etapa 2: Un LLM ligero extrae frases clave (comprimir contexto—demasiado agresivo)",[10,563,564,566,567,570,571,574,575,578],{},[117,565,486],{}," Antes del Q&A (o al abrir por primera vez), ejecutar un ",[117,568,569],{},"modelo más barato"," sobre el cuerpo: dividir por capítulo spine (o trocear el libro), extraer ",[117,572,573],{},"frases clave",", conservar etiquetas de posición como ",[99,576,577],{},"[fArchivo-inicio-fin]",", luego concatenar extractos en un contexto más corto para el Q&A posterior.",[10,580,581,582,585],{},"Pipeline típico: ",[117,583,584],{},"Extract → Cache → Chat",". Extraer una vez (offline o bajo demanda), guardar un «paquete de frases clave», reutilizarlo en cada pregunta—como muchos prototipos de Q&A documental: comprimir primero, responder después.",[10,587,588],{},[117,589,504],{},[35,591,592,599,602],{},[38,593,594,595,598],{},"Cada pregunta envía ",[117,596,597],{},"mucho menos texto","; el consumo de tokens por petición baja respecto a la etapa 1;",[38,600,601],{},"El preprocesado puede cachearse; sin reextracción por pregunta en el mismo libro;",[38,603,604],{},"Las etiquetas de posición sientan las bases de las citas.",[10,606,607],{},[117,608,609],{},"Inconvenientes (siguen fallando en libros largos):",[35,611,612,618,628,637],{},[38,613,614,617],{},[117,615,616],{},"Pérdida fuerte de detalle:"," Las «frases clave» las elige el modelo; calificadores, contraejemplos y cadenas argumentales se pierden a menudo—respuestas «correctas pero parciales»;",[38,619,620,623,624,627],{},[117,621,622],{},"Contexto aún grande en obras largas:"," Incluso los paquetes de frases clave son considerables—latencia y coste ",[117,625,626],{},"se alivian, no se resuelven",";",[38,629,630,633,634,627],{},[117,631,632],{},"Doble error de LLM:"," La extracción puede omitir; el Q&A puede leer mal los extractos—los errores ",[117,635,636],{},"se acumulan",[38,638,639,642,643,646],{},[117,640,641],{},"Contexto estático:"," Pregunte el usuario por un capítulo o la estructura global, el modelo recibe siempre ",[117,644,645],{},"el mismo blob preextraído","—sin estrechamiento dinámico según la pregunta.",[10,648,649,650,653],{},"La lección: el problema no es «si comprimimos», sino ",[117,651,652],{},"«si la compresión es bajo demanda y si podemos volver al texto fuente»",".",[61,655,657],{"id":656},"etapa-3-índice-de-segmentos-tool-bajo-demanda-devolución-del-texto-fuente-actual","Etapa 3: Índice de segmentos + Tool bajo demanda + devolución del texto fuente (actual)",[10,659,660,662,663,670],{},[117,661,486],{}," Inspirado en ",[664,665,669],"a",{"href":666,"rel":667},"https://github.com/VectifyAI/PageIndex",[668],"nofollow","PageIndex",". Frente a la etapa 2, tres cambios centrales:",[672,673,674,680,690],"ol",{},[38,675,676,679],{},[117,677,678],{},"El preprocesado produce un índice estructurado"," (resúmenes a nivel TOC + spans de caracteres exactos), no extractos usados directamente como contexto Q&A;",[38,681,682,685,686,689],{},[117,683,684],{},"Cada pregunta usa Tool Calling para buscar bajo demanda",", luego ",[117,687,688],{},"obtiene texto fuente con etiquetas de posición"," para responder;",[38,691,692,695],{},[117,693,694],{},"System prompt + frontend"," imponen el formato de cita y permiten clic → salto → resaltado en el lector.",[10,697,698],{},[117,699,700],{},"Comparación de las tres etapas:",[702,703,704,723],"table",{},[705,706,707],"thead",{},[708,709,710,714,717,720],"tr",{},[711,712,713],"th",{},"Dimensión",[711,715,716],{},"Etapa 1 (texto completo)",[711,718,719],{},"Etapa 2 (frases clave)",[711,721,722],{},"Etapa 3 (actual)",[724,725,726,745,759,773,787,804],"tbody",{},[708,727,728,732,735,738],{},[729,730,731],"td",{},"Contexto por pregunta",[729,733,734],{},"Libro entero (o primera mitad truncada)",[729,736,737],{},"Frases clave preextraídas",[729,739,740,741,744],{},"Solo fragmentos de ",[117,742,743],{},"fuente"," relevantes",[708,746,747,750,753,756],{},[729,748,749],{},"Precisión en libros largos",[729,751,752],{},"Colapso tras ~400k caracteres",[729,754,755],{},"Depende de la extracción; pierde detalle",[729,757,758],{},"Búsqueda por TOC/span; sin truncado duro del libro entero",[708,760,761,764,767,770],{},[729,762,763],{},"Velocidad de respuesta",[729,765,766],{},"Lenta",[729,768,769],{},"Algo mejor; libros largos aún lentos",[729,771,772],{},"Búsqueda + contexto corto—notablemente más rápido",[708,774,775,778,781,784],{},[729,776,777],{},"Coste de tokens",[729,779,780],{},"Muy alto",[729,782,783],{},"Medio-alto",[729,785,786],{},"Preprocesado amortizado + pago bajo demanda",[708,788,789,792,795,798],{},[729,790,791],{},"Trazabilidad",[729,793,794],{},"Débil (citas difíciles)",[729,796,797],{},"Hay etiquetas pero contenido filtrado",[729,799,800,801],{},"Notas al pie → ",[117,802,803],{},"spans fuente reales",[708,805,806,809,812,815],{},[729,807,808],{},"Complejidad técnica",[729,810,811],{},"Baja",[729,813,814],{},"Media",[729,816,817],{},"Alta",[10,819,820,823,824,827,828,831,832,835],{},[117,821,822],{},"Por qué nos quedamos en la etapa 3:"," En lectura, cero alucinaciones no es «mostrar al modelo el máximo texto», sino ",[117,825,826],{},"«antes de responder, obtener pruebas fuente para la pregunta»",". Las etapas 1–2 luchaban con el ",[117,829,830],{},"tamaño del contexto","; la etapa 3 divide el pipeline en ",[117,833,834],{},"índice (preprocesado) → búsqueda (Tool) → prueba (fuente) → respuesta (generación restringida)","—equilibrio entre precisión, coste y trazabilidad.",[10,837,838,839,653],{},"A continuación el detalle de ",[117,840,841],{},"la etapa 3",[24,843],{},[27,845,847],{"id":846},"ii-definición-del-problema-en-qa-de-libros-la-alucinación-duele-más-que-en-un-chat-genérico","II. Definición del problema: En Q&A de libros, la alucinación duele más que en un chat genérico",[10,849,850,851,854],{},"Los usuarios perdonan errores ocasionales en un chatbot general. En ",[117,852,853],{},"Q&A de libros",", el coste es mayor:",[35,856,857,864,867],{},[38,858,859,860,863],{},"Preguntan qué dice ",[117,861,862],{},"este libro","—no lo que vive en la memoria paramétrica del modelo;",[38,865,866],{},"Una «opinión del libro» plausible puede inducir a error en notas, citas y reenvíos;",[38,868,869],{},"Sin fuentes, no hay verificación—la confianza cuesta de construir.",[10,871,872,873,876],{},"«Cero alucinaciones» se traduce en tres reglas ",[117,874,875],{},"exigibles",":",[672,878,879,885,891],{},[38,880,881,884],{},[117,882,883],{},"Las preguntas sobre el libro deben consultar el libro primero:"," Todo lo que pueda concernir al libro abierto pasa por la búsqueda (Tool) antes de responder;",[38,886,887,890],{},[117,888,889],{},"Las respuestas deben ser trazables:"," Las afirmaciones clave llevan etiquetas de posición que la UI puede parsear y saltar;",[38,892,893,896],{},[117,894,895],{},"Decir cuando no se encuentra:"," Si el libro no lo contiene, decirlo—no disfrazar conocimiento general como «lo que dice el libro».",[10,898,899,900,902],{},"El resto sigue el flujo de datos de ",[117,901,841],{}," y cómo se aplican estas reglas.",[24,904],{},[27,906,908],{"id":907},"iii-arquitectura-preprocesado-tool-generación-restringida-citas-clicables","III. Arquitectura: Preprocesado → Tool → Generación restringida → Citas clicables",[474,910],{":config":476,"code":911},"flowchart%20TB%0A%20%20%20%20subgraph%20prep%20%5BOffline%20%2F%20primer%20preprocesado%5D%0A%20%20%20%20%20%20%20%20A%5BDividir%20libro%20por%20TOC%20o%20longitud%5D%20--%3E%20B%5BRes%C3%BAmenes%20de%20segmentos%20LLM%5D%0A%20%20%20%20%20%20%20%20B%20--%3E%20C%5BPersistir%20cach%C3%A9%20Segment%20localmente%5D%0A%20%20%20%20end%0A%0A%20%20%20%20subgraph%20ask%20%5BPregunta%20del%20usuario%5D%0A%20%20%20%20%20%20%20%20D%5BEntrada%20del%20usuario%5D%20--%3E%20E%7B%C2%BFExiste%20cach%C3%A9%20Segment%3F%7D%0A%20%20%20%20%20%20%20%20E%20--%3E%7CNo%7C%20F%5BExtraer%20texto%20completo%20%2F%20ofrecer%20preprocesado%5D%0A%20%20%20%20%20%20%20%20F%20--%3E%20prep%0A%20%20%20%20%20%20%20%20E%20--%3E%7CS%C3%AD%7C%20G%5BRegistrar%20Tool%20Calling%5D%0A%20%20%20%20end%0A%0A%20%20%20%20subgraph%20retrieve%20%5BB%C3%BAsqueda%20Tool%5D%0A%20%20%20%20%20%20%20%20G%20--%3E%20H%7BTipo%20de%20pregunta%7D%0A%20%20%20%20%20%20%20%20H%20--%3E%7CVisi%C3%B3n%20global%20%2F%20rese%C3%B1a%7C%20I%5Bget_full_book_segment_summaries%5D%0A%20%20%20%20%20%20%20%20H%20--%3E%7CHechos%20%2F%20personas%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%20elige%20IDs%20de%20segmento%20del%20cat%C3%A1logo%5D%0A%20%20%20%20%20%20%20%20K%20--%3E%20L%5BObtener%20fuente%20por%20span%20%2B%20etiquetas%20de%20posici%C3%B3n%5D%0A%20%20%20%20%20%20%20%20I%20--%3E%20M%5BConcatenar%20todos%20los%20res%C3%BAmenes%20de%20segmentos%5D%0A%20%20%20%20end%0A%0A%20%20%20%20subgraph%20answer%20%5BGenerar%20y%20mostrar%5D%0A%20%20%20%20%20%20%20%20L%20--%3E%20N%5BResultados%20Tool%20al%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%5BReglas%20de%20cita%20del%20system%20prompt%5D%0A%20%20%20%20%20%20%20%20O%20--%3E%20P%5BRespuesta%20en%20streaming%20%2B%20notas%20de%20posici%C3%B3n%5D%0A%20%20%20%20%20%20%20%20P%20--%3E%20Q%5BRenderizar%20notas%20clicables%5D%0A%20%20%20%20%20%20%20%20Q%20--%3E%20R%5BClic%20%E2%86%92%20vista%20previa%20%E2%86%92%20salto%20y%20resaltado%5D%0A%20%20%20%20end",[10,913,914,915],{},"Idea central: ",[117,916,917],{},"no dejar que el modelo «responda de memoria»—obligarlo a «reunir pruebas, responder y marcar fuentes».",[24,919],{},[27,921,923],{"id":922},"iv-preprocesado-convertir-el-libro-en-un-índice-de-segmentos-buscable","IV. Preprocesado: Convertir el libro en un índice de segmentos buscable",[10,925,926,927,930,931,934,935,938,939,942,943,946],{},"Si cada pregunta siguiera usando el contexto ",[117,928,929],{},"etapa 1"," del libro entero, los libros largos revientan el presupuesto de tokens y la búsqueda es demasiado gruesa. Etapa 3: en el primer chat IA de un libro, ejecutar en segundo plano un ",[117,932,933],{},"job de resumen de segmentos","—división por ",[117,936,937],{},"TOC"," o ",[117,940,941],{},"longitud de texto"," en ",[99,944,945],{},"Segment","s, resumir cada uno, persistir en IndexedDB local.",[10,948,949,950,952,953,876],{},"Cada ",[99,951,945],{}," contiene resumen más ",[117,954,955],{},"posición física en el cuerpo",[702,957,958,968],{},[705,959,960],{},[708,961,962,965],{},[711,963,964],{},"Campo",[711,966,967],{},"Significado",[724,969,970,983,996,1006],{},[708,971,972,980],{},[729,973,974,102,977],{},[99,975,976],{},"startFileIndex",[99,978,979],{},"endFileIndex",[729,981,982],{},"Índice de archivo spine (PDF: un archivo por página)",[708,984,985,993],{},[729,986,987,102,990],{},[99,988,989],{},"startOffset",[99,991,992],{},"endOffset",[729,994,995],{},"Inicio/fin en caracteres",[708,997,998,1003],{},[729,999,1000],{},[99,1001,1002],{},"sequence",[729,1004,1005],{},"Orden de lectura lineal",[708,1007,1008,1013],{},[729,1009,1010],{},[99,1011,1012],{},"title",[729,1014,1015],{},"Título TOC",[10,1017,1018],{},"La división equilibra precisión y coste: nodo TOC bajo ~20 KB → resumir solo ese nodo; nodos hermanos fusionados en lotes (15–20 KB) antes del LLM; bloques largos no estructurados en rangos ~30–40k caracteres.",[10,1020,1021,1022,1025,1026,1029],{},"El system prompt de resumen exige ",[117,1023,1024],{},"conservar etiquetas de posición inline"," (",[99,1027,1028],{},"[fNúmero-Número-Número]",") para que la fuente obtenida por Tool se alinee con offsets spine. Restricción central:",[1031,1032,1037],"pre",{"className":1033,"code":1035,"language":1036,"meta":72},[1034],"language-text","If summary content relates to a passage, keep the trailing position tag [fNumber-Number-Number] (e.g. [f1-90-109]).\nTags are atomic—do not alter, merge, or omit any character or digit.\n","text",[99,1038,1035],{"__ignoreMap":72},[10,1040,1041,1042,1045],{},"Tras el preprocesado, el Q&A depende de un ",[117,1043,1044],{},"índice de segmentos estructurado",", no del contexto del libro entero—requisito técnico del cero alucinaciones en libros largos.",[24,1047],{},[27,1049,1051],{"id":1050},"v-sistema-de-etiquetas-de-posición-codificar-el-de-dónde-en-el-texto","V. Sistema de etiquetas de posición: Codificar el «de dónde» en el texto",[10,1053,1054,1055,1058,1059,1062],{},"Cero alucinaciones exige contenido de la fuente ",[117,1056,1057],{},"y"," ",[117,1060,1061],{},"procedencia"," analizable por máquina y alcanzable en la UI. Usamos etiquetas inline:",[1031,1064,1067],{"className":1065,"code":1066,"language":1036},[1034],"[f{fileIndex}-{startChar}-{endChar}]\n",[99,1068,1066],{"__ignoreMap":72},[10,1070,1071,1072,1075],{},"Ejemplo: ",[99,1073,1074],{},"[f5-123-165]"," = archivo spine 5 (base 0), caracteres 123–165.",[61,1077,1079],{"id":1078},"_51-cómo-se-escriben-las-etiquetas-en-el-cuerpo","5.1 Cómo se escriben las etiquetas en el cuerpo",[10,1081,1082,1083,1086],{},"La capa de extracción añade ",[99,1084,1085],{},"[f{fileIndex}-{start}-{end}]"," al final de cada segmento:",[1031,1088,1093],{"className":1089,"code":1091,"language":1092,"meta":72},[1090],"language-typescript","const position = `[f${fileIndex}-${absOffset}-${absOffset + segment.length}]`;\nfileLines.push(segment.text.trim() + position);\n","typescript",[99,1094,1091],{"__ignoreMap":72},[10,1096,1097,1098,1101],{},"Resúmenes de preprocesado o extractos Tool: las posiciones se alinean con ",[117,1099,1100],{},"offsets de caracteres spine","—no números de página estimados por el modelo.",[61,1103,1105],{"id":1104},"_52-restricciones-sobre-la-salida-del-modelo","5.2 Restricciones sobre la salida del modelo",[10,1107,1108,1109,1115],{},"El system prompt incluye ",[117,1110,1111],{},[1112,1113,1114],"span",{},"Position Citation Rules","—cinco puntos esenciales:",[672,1117,1118,1128,1138,1144,1153],{},[38,1119,1120,1123,1124,1127],{},[117,1121,1122],{},"Formato estándar:"," Debe usar ",[99,1125,1126],{},"[f_fileIndex-startChar-endChar]","; las tres partes numéricas obligatorias;",[38,1129,1130,1133,1134,1137],{},[117,1131,1132],{},"Copiar solo de fuentes actuales:"," Notas ",[117,1135,1136],{},"verbatim"," de mensajes system/user o retornos Tool de esta ronda;",[38,1139,1140,1143],{},[117,1141,1142],{},"Sin fabricación:"," No calcular, editar ni inventar posiciones;",[38,1145,1146,1149,1150,627],{},[117,1147,1148],{},"Preferir omisión:"," Sin etiqueta válida en el contexto → responder con normalidad—",[117,1151,1152],{},"no emitir etiquetas de posición",[38,1154,1155,1158],{},[117,1156,1157],{},"Inline con las afirmaciones:"," Etiquetas tras la frase relevante; sin listas de citas al final.",[10,1160,1161,1162,1165,1166,1169],{},"La UI también filtra etiquetas ",[117,1163,1164],{},"bipartitas"," inválidas ocasionales (p. ej. ",[99,1167,1168],{},"[f1-293]",") antes del render.",[10,1171,1172],{},[13,1173],{"alt":1174,"src":1175},"Ventana de trazado de citas","https://cdn.linghuxiong.com/resources/snapshots/ai-chat.png",[24,1177],{},[27,1179,1181],{"id":1180},"vi-tool-calling-primero-buscar-luego-responder","VI. Tool Calling: Primero buscar, luego responder",[10,1183,1184,1185,1188,1189,1192,1193,1196],{},"Cuando el chat está vinculado a un libro (",[99,1186,1187],{},"resourceId"," presente, ",[99,1190,1191],{},"chatType === 'chat'","), registramos dos Tools con executors antes de cada generación—bucle ",[117,1194,1195],{},"function calling"," compatible con OpenAI.",[61,1198,1200,1201,1204],{"id":1199},"_61-get_related_segment_summaries-búsqueda-dirigida-de-segmentos","6.1 ",[99,1202,1203],{},"get_related_segment_summaries"," — Búsqueda dirigida de segmentos",[10,1206,1207,1208,653],{},"Para: conceptos, personajes, trama, detalles de capítulo—",[117,1209,1210],{},"intención de búsqueda clara",[10,1212,1213],{},"Flujo:",[672,1215,1216,1223,1229,1232,1242],{},[38,1217,1218,1219,1222],{},"El modelo reformula la pregunta en ",[117,1220,1221],{},"términos probables en el libro"," («Optimize Search Queries» en el system prompt);",[38,1224,1225,1226,627],{},"Llamada Tool con ",[99,1227,1228],{},"question",[38,1230,1231],{},"Agrupar todos los resúmenes de segmentos por presupuesto de tokens (~30k tokens por lote, máx. 5 lotes);",[38,1233,1234,1235,1238,1239,627],{},"Por lote: petición LLM separada elige IDs relevantes (máx. 5) de ",[99,1236,1237],{},"{ id, title, summary }",", JSON como ",[99,1240,1241],{},"{\"Thinking\":\"...\",\"answer\":[\"1\",\"3\"]}",[38,1243,1244,1245,1248],{},"Para segmentos elegidos, extraer ",[117,1246,1247],{},"texto fuente etiquetado"," del spine—not resúmenes—como resultado Tool.",[10,1250,1251,1254,1255,1258],{},[117,1252,1253],{},"Diseño clave: el Tool devuelve fuente, no resúmenes."," El modelo responde desde párrafos reales con ",[99,1256,1257],{},"[f…]"," inline, evitando la deriva «resumen → re-resumen».",[61,1260,1262,1263,1266],{"id":1261},"_62-get_full_book_segment_summaries-visión-global-del-libro","6.2 ",[99,1264,1265],{},"get_full_book_segment_summaries"," — Visión global del libro",[10,1268,1269,1270,653],{},"Para: «resumir el libro», «reseñar este libro», «estructura/temas globales»—",[117,1271,1272],{},"vista global",[10,1274,1275,1276,1279],{},"Concatenar todos los campos ",[99,1277,1278],{},"summary"," de segmentos en orden de lectura—evitar perder capítulos clave solo por relevancia por trozo.",[61,1281,1283],{"id":1282},"_63-system-prompt-libro-primero-herramientas-primero","6.3 System prompt: Libro primero, herramientas primero",[10,1285,1286,1287,876],{},"Con libro vinculado, aplica ",[117,1288,1289],{},[1112,1290,1291],{},"Core Principles for Reading Assistant",[1031,1293,1296],{"className":1294,"code":1295,"language":1036},[1034],"1. Book First, Tool First\n   - Any question possibly about the book must call tools first;\n   - Answers must rely mainly on retrieval—never invent “book content” without retrieval.\n\n2. General Knowledge as Fallback Only\n   - Only for: casual chat / user explicitly skips the book / tools return nothing;\n   - If the book lacks it, say “not mentioned in this book” before general knowledge.\n\n3. Direct Style\n   - Get to the point—avoid “based on the provided materials…” and similar filler.\n",[99,1297,1295],{"__ignoreMap":72},[10,1299,1300,1301,1304,1305,1308],{},"La generación ejecuta el bucle Tool: ",[99,1302,1303],{},"tool_calls"," → ejecutar → añadir ",[99,1306,1307],{},"role: tool"," → continuar hasta el texto final. Con tools activos, el canal thinking está desactivado para evitar conflictos de protocolo.",[24,1310],{},[27,1312,1314],{"id":1313},"vii-trazabilidad-en-frontend-de-la-nota-al-resaltado","VII. Trazabilidad en frontend: De la nota al resaltado",[10,1316,1317,1318,1320],{},"La salida ",[99,1319,1074],{}," del modelo no se muestra en bruto; la capa de render convierte etiquetas en citas clicables.",[61,1322,1324],{"id":1323},"_71-render-de-notas","7.1 Render de notas",[10,1326,1327,1328,1331],{},"Normalizar etiquetas a enlaces Markdown como ",[99,1329,1330],{},"[1]([f5-123-165])",", mostrar como notas numeradas; deduplicar la misma posición.",[61,1333,1335],{"id":1334},"_72-interacción-al-clic","7.2 Interacción al clic",[672,1337,1338,1347,1353],{},[38,1339,1340,1343,1344,1346],{},[117,1341,1342],{},"Primer clic:"," Parsear ",[99,1345,1257],{}," → fileIndex + offsets → extraer texto spine → vista previa (título TOC opcional);",[38,1348,1349,1352],{},[117,1350,1351],{},"Misma nota otra vez:"," Cerrar vista previa;",[38,1354,1355,1358],{},[117,1356,1357],{},"Confirmar salto:"," Abrir vista de lectura, resaltar rango de caracteres.",[10,1360,1361,1362,1365],{},"Del etiqueta copiada del modelo al texto fuente visible para el usuario, la cadena ",[117,1363,1364],{},"nunca pasa por otra llamada LLM","—determinista y reproducible.",[24,1367],{},[27,1369,1371],{"id":1370},"viii-casos-límite-y-degradación-honesta","VIII. Casos límite y degradación honesta",[10,1373,1374,1375,876],{},"Cero alucinaciones ≠ «siempre hay respuesta»—es ",[117,1376,1377],{},"sin prueba, sin invención",[702,1379,1380,1390],{},[705,1381,1382],{},[708,1383,1384,1387],{},[711,1385,1386],{},"Escenario",[711,1388,1389],{},"Comportamiento",[724,1391,1392,1400,1412,1420,1428],{},[708,1393,1394,1397],{},[729,1395,1396],{},"Resúmenes de segmentos no listos",[729,1398,1399],{},"Extraer primero texto completo y resumir",[708,1401,1402,1405],{},[729,1403,1404],{},"Tool no encuentra nada",[729,1406,1407,1408,1411],{},"Devolver ",[99,1409,1410],{},"(No relevant segment excerpts found…)","; el modelo debe decir «no está en el libro»",[708,1413,1414,1417],{},[729,1415,1416],{},"Etiquetas bipartitas inválidas del modelo",[729,1418,1419],{},"Filtrado en frontend; sin notas rotas",[708,1421,1422,1425],{},[729,1423,1424],{},"Charla informal",[729,1426,1427],{},"El system prompt permite conocimiento general fuera del libro",[708,1429,1430,1433],{},[729,1431,1432],{},"Exportar chat",[729,1434,1435],{},"Las notas pueden ser deep links del lector para compartir/archivar",[10,1437,1438],{},[13,1439],{"alt":1440,"src":1441},"Exportación de chat","https://cdn.linghuxiong.com/resources/snapshots/ai-chat-export.png",[24,1443],{},[27,1445,1447],{"id":1446},"ix-compromiso-de-diseño-por-qué-no-rag-vectorial","IX. Compromiso de diseño: ¿Por qué no «RAG vectorial»?",[10,1449,1450,1451,1454],{},"Colegas en Q&A documental suelen preguntar: si haces generación aumentada por recuperación, ¿por qué no ",[117,1452,1453],{},"Embedding + base vectorial Top-K","?",[10,1456,1457,1460,1461,1464,1465,1468,1469,1472],{},[117,1458,1459],{},"Sí hacemos RAG","—buscar antes de generar. La diferencia: «RAG» en el discurso comunitario suele implicar ",[117,1462,1463],{},"similaridad vectorial","; nuestra etapa 3 es ",[117,1466,1467],{},"índice de segmentos + Tool con fuente bajo demanda","—",[117,1470,1471],{},"sin capa vectorial por diseño",". Abajo: razones arquitectónicas, sin negar el valor del RAG vectorial.",[61,1474,1476],{"id":1475},"alcance-no-sin-búsqueda-sino-sin-búsqueda-vectorial","Alcance: no «sin búsqueda», sino «sin búsqueda vectorial»",[35,1478,1479,1488],{},[38,1480,1481,1484,1485,627],{},[117,1482,1483],{},"RAG amplio:"," buscar → generar → ",[117,1486,1487],{},"lo hacemos",[38,1489,1490,1493,1494,653],{},[117,1491,1492],{},"RAG vectorial:"," recuperación por similitud de embedding → ",[117,1495,1496],{},"no en esta versión",[10,1498,1499,1500,1503,1504,1507],{},"El preprocesado construye un ",[117,1501,1502],{},"índice de resúmenes de segmentos","; el modelo elige segmentos vía Tools y obtiene ",[117,1505,1506],{},"texto fuente",". Hay búsqueda sin modelo de embedding separado ni mantenimiento de índice vectorial.",[24,1509],{},[61,1511,1513],{"id":1512},"razón-1-proveedores-llm-personalizadossuperficie-de-integración-pequeña","Razón 1: Proveedores LLM personalizados—superficie de integración pequeña",[10,1515,1516,1517,1520,1521,1524],{},"Los usuarios pueden conectar ",[117,1518,1519],{},"sus propias API keys",", base URL personalizadas u ",[117,1522,1523],{},"Ollama local","—el modelo de chat es su elección; coste y ruta de datos bajo control.",[10,1526,1527],{},"El RAG vectorial típico amplía la integración:",[35,1529,1530,1541,1544],{},[38,1531,1532,1533,1536,1537,1540],{},"Además del ",[117,1534,1535],{},"modelo de chat",", suele hacer falta un ",[117,1538,1539],{},"modelo de embedding"," (otro nombre, a veces otro endpoint);",[38,1542,1543],{},"Ollama local necesita modelo de embedding aparte más compatibilidad de dimensión/API;",[38,1545,1546,1547,1550],{},"Más modos de fallo: chat OK pero ",[117,1548,1549],{},"búsqueda vacía","—embedding, índice o dimensión; más difícil depurar que un proveedor de extremo a extremo.",[10,1552,1553,1554,1557,1558,1561],{},"Aquí, ",[117,1555,1556],{},"elección de segmentos y respuesta comparten una config de proveedor","—no «chat en A, índice en B». Para apps ",[117,1559,1560],{},"LLM enchufables",", eso suele pesar más que unos puntos de recall.",[10,1563,1564],{},[13,1565],{"alt":1566,"src":1567},"Proveedores de IA personalizados","https://cdn.linghuxiong.com/resources/snapshots/ai-customize-providers.png",[24,1569],{},[61,1571,1573],{"id":1572},"razón-2-los-embeddings-atan-el-índicecambiar-de-proveedor-cuesta-caro","Razón 2: Los embeddings atan el índice—cambiar de proveedor cuesta caro",[10,1575,1576,1577,1580,1581,1584,1585,1588],{},"En RAG vectorial, ",[117,1578,1579],{},"los vectores no son un formato intermedio universal","—son coordenadas bajo un modelo de embedding. Índice con A, consulta con B: la similitud suele ser ",[117,1582,1583],{},"incomparable","—a menudo ",[117,1586,1587],{},"re-embedding completo",", y dimensiones (768 / 1024 / 1536 …) fijan el esquema de almacenamiento.",[10,1590,1591,1592,1595,1596,1599],{},"La etapa 3 persiste ",[117,1593,1594],{},"resúmenes estructurados + spans de caracteres",", no vectores; cambiar modelo de chat ",[117,1597,1598],{},"no reconstruye el índice","; la cadena de prueba (posiciones fuente) se mantiene—alineado con «probar distintos LLM en cualquier momento».",[24,1601],{},[61,1603,1605],{"id":1604},"razón-3-el-enrutamiento-estructurado-suele-bastar-en-documentos-largos-con-toc","Razón 3: El enrutamiento estructurado suele bastar en documentos largos con TOC",[10,1607,1608,1609,1612,1613,1616,1617,1620,1621,1626],{},"E-books y PDF suelen tener ",[117,1610,1611],{},"estructura de capítulos","; el preprocesado da ",[117,1614,1615],{},"títulos de segmento + resúmenes",". Para «qué dice el capítulo X» o «cómo define el libro Y», elegir segmentos del catálogo y ",[117,1618,1619],{},"tirar de la fuente"," funciona bien en la práctica; el Tool devuelve ",[117,1622,1623,1624],{},"fuente con ",[99,1625,1257],{},", el cero alucinaciones sigue anclado en spans de caracteres.",[10,1628,1629,1630,1633,1634,1637],{},"Los vectores ayudan en semántica difusa, multilingüe, coincidencia literal larga; en lectores ",[117,1631,1632],{},"TOC + preprocesado + trazabilidad fuerte",", invertir en ",[117,1635,1636],{},"Tool + devolución de fuente + reglas de cita"," suele tener mejor ROI.",[24,1639],{},[61,1641,1643],{"id":1642},"futuro-recuperación-híbrida-no-reescritura","Futuro: Recuperación híbrida, no reescritura",[10,1645,1646,1647,1650,1651,1654,1655,1658,1659,1662],{},"Podríamos añadir ",[117,1648,1649],{},"recuperación vectorial gruesa"," (embedding solo para Top-N capítulos candidatos), terminando siempre en ",[117,1652,1653],{},"elegir segmento → fuente → traza clicable","—reglas de cero alucinaciones sin cambio. Si se añade: embedding ",[117,1656,1657],{},"opcional",", avisos explícitos de ",[117,1660,1661],{},"reindexar"," al cambiar modelo—evitar recuperación errónea silenciosa.",[10,1664,1665,1666],{},"Hasta entonces: ",[117,1667,1668],{},"cualquier API chat compatible OpenAI funciona; cambiar modelo de chat no reconstruye el índice local.",[24,1670],{},[27,1672,1674],{"id":1673},"x-resumen","X. Resumen",[702,1676,1677,1690],{},[705,1678,1679],{},[708,1680,1681,1684,1687],{},[711,1682,1683],{},"Paso",[711,1685,1686],{},"Método",[711,1688,1689],{},"Rol",[724,1691,1692,1703,1716,1729,1740,1751],{},[708,1693,1694,1697,1700],{},[729,1695,1696],{},"Preprocesado",[729,1698,1699],{},"División TOC/longitud + caché de segmentos",[729,1701,1702],{},"Libros largos buscables y localizables",[708,1704,1705,1708,1713],{},[729,1706,1707],{},"Etiquetas de posición",[729,1709,1710,1712],{},[99,1711,577],{}," en la fuente",[729,1714,1715],{},"Procedencia analizable por máquina",[708,1717,1718,1721,1726],{},[729,1719,1720],{},"Tool",[729,1722,1723,1724],{},"Segmentos / resúmenes de libro por pregunta, devolver ",[117,1725,743],{},[729,1727,1728],{},"Forzar pruebas antes de responder",[708,1730,1731,1734,1737],{},[729,1732,1733],{},"System prompt",[729,1735,1736],{},"Libro primero, sin etiquetas falsas, decir cuando falta",[729,1738,1739],{},"Restringir generación",[708,1741,1742,1745,1748],{},[729,1743,1744],{},"Frontend",[729,1746,1747],{},"Nota → vista previa → salto y resaltado",[729,1749,1750],{},"El usuario verifica pruebas",[708,1752,1753,1756,1759],{},[729,1754,1755],{},"Sin búsqueda vectorial",[729,1757,1758],{},"Un proveedor; cambiar modelo chat sin reindexar",[729,1760,1761],{},"Menor coste de integración y migración",[10,1763,1764,1765,1768],{},"«Cero alucinaciones» no significa que el modelo nunca se equivoque—significa que ",[117,1766,1767],{},"la ingeniería ata la salida a una cadena de pruebas",": sin búsqueda → no fingir contenido del libro; con búsqueda → posiciones fuente verificables.",[10,1770,1771,1772,1775,1776,1779],{},"Si desarrollas lectura con IA o Q&A documental, esperamos que el camino ",[117,1773,1774],{},"texto completo → frases clave → Tool-first bajo demanda",", más ",[117,1777,1778],{},"etiquetas de posición inline + devolución de fuente",", sea una implementación de referencia útil.",[18,1781,1782],{},[10,1783,1784,1785,1789,1790,653],{},"Estas son lecciones del lector IA ",[664,1786,267],{"href":1787,"rel":1788},"https://reader.linghuxiong.com",[668],"—solo como referencia. Prueba el lector en la ",[664,1791,1793],{"href":1792},"/es-es#download","página de descarga",{"title":72,"searchDepth":238,"depth":238,"links":1795},[1796,1801,1802,1803,1804,1808,1815,1819,1820,1827],{"id":464,"depth":238,"text":465,"children":1797},[1798,1799,1800],{"id":480,"depth":244,"text":481},{"id":560,"depth":244,"text":561},{"id":656,"depth":244,"text":657},{"id":846,"depth":238,"text":847},{"id":907,"depth":238,"text":908},{"id":922,"depth":238,"text":923},{"id":1050,"depth":238,"text":1051,"children":1805},[1806,1807],{"id":1078,"depth":244,"text":1079},{"id":1104,"depth":244,"text":1105},{"id":1180,"depth":238,"text":1181,"children":1809},[1810,1812,1814],{"id":1199,"depth":244,"text":1811},"6.1 get_related_segment_summaries — Búsqueda dirigida de segmentos",{"id":1261,"depth":244,"text":1813},"6.2 get_full_book_segment_summaries — Visión global del libro",{"id":1282,"depth":244,"text":1283},{"id":1313,"depth":238,"text":1314,"children":1816},[1817,1818],{"id":1323,"depth":244,"text":1324},{"id":1334,"depth":244,"text":1335},{"id":1370,"depth":238,"text":1371},{"id":1446,"depth":238,"text":1447,"children":1821},[1822,1823,1824,1825,1826],{"id":1475,"depth":244,"text":1476},{"id":1512,"depth":244,"text":1513},{"id":1572,"depth":244,"text":1573},{"id":1604,"depth":244,"text":1605},{"id":1642,"depth":244,"text":1643},{"id":1673,"depth":238,"text":1674},"[object Object]",{},"/es-es/blog/zero-hallucination-qa",{"title":438,"description":1832},{"Notas de ingeniería sobre Q&A sin alucinaciones en un lector con IA":1833,"date":1834,"updated":1834,"translationKey":1835,"tags":1836,"draft":257},"respuestas ancladas en el libro abierto, con citas en un clic al pasaje exacto.","2026-06-03","zero-hallucination-qa",[1837,1838,1839],"lector","IA","ingeniería","es-es/blog/zero-hallucination-qa","-XkeW6Vl93GVQKL7wH7-be5dAy1leU1SJApBgfNxkEQ",1786513822381]