Una respuesta sobre sus documentos es tan buena como el texto del que se construyó, y cuando pega archivos completos en un chat, no puede saber qué parte utilizó realmente el modelo. GroupDocs.Search.Mcp, ejecutándose localmente en Docker, le brinda a Claude Desktop, Cursor o Copilot un primitivo diferente: get_text_fragments devuelve solo los fragmentos que coinciden con una consulta, con unas pocas palabras de contexto y el archivo del que provienen, de modo que el agente responde con citas:
¿Qué dicen mis contratos sobre penalizaciones? Cite los fragmentos, con suficiente contexto para entender cada uno.
La versión paso a paso con configuración y solución de problemas está en la documentación: How to get the matching passages instead of reading whole files.
¿Por qué las respuestas se alejan de los documentos?
Porque la ventana de contexto es un presupuesto, y los documentos completos lo consumen de forma ineficiente. Una pregunta sobre penalizaciones quizá necesite solo tres frases de cincuenta páginas. Al pegar las cincuenta páginas, el modelo tiene que encontrar esas tres frases por sí mismo, entre todo lo demás, y luego mantenerlas mientras escribe. Los contextos largos se resumen, el material inicial pierde peso, y la respuesta comienza a basarse en la percepción general del modelo sobre lo que suelen decir los contratos, en lugar de lo que dicen los suyos. La industria llama a esta disciplina context engineering; la forma más simple de aplicarla es no cargar texto que no necesita.
¿Cómo es un fragmento?
El índice ya contiene el texto de cada documento, por lo que el servidor puede extraer el pasaje alrededor de cada coincidencia. Estos son respuestas reales de nuestra prueba, contra cinco contratos sintéticos. Los valores predeterminados, ocho palabras a cada lado, dan una frase:
-> get_text_fragments {"query":"penalty","indexName":"contracts"}
<- === contracts/acme-master-services-agreement.pdf (1 occurrence(s)) ===
[content] …before the end of the Term, a termination penalty of
three monthly fees applies, payable within 30…
Veinte palabras a cada lado devuelven la cláusula completa:
-> get_text_fragments {"query":"penalty","indexName":"contracts",
"termsBefore":20,"termsAfter":20,"maxFragmentsPerDocument":1}
<- === contracts/acme-master-services-agreement.pdf (1 occurrence(s)) ===
…convenience on 90 days written notice.
12.3 If the Client terminates before the end of the Term, a termination
penalty of three monthly fees applies, payable within 30 days of the
termination date.
14.2 Force majeure: neither party is…
termsBefore y termsAfter son un dial: pequeño para “qué archivos y aproximadamente dónde”, grande para “cítame la cláusula”. maxFragmentsPerDocument y maxDocuments limitan el tamaño de la respuesta, de modo que una palabra que aparece doscientos veces no inunde el contexto.
El presupuesto, lado a lado
Reading the files Searching the index
------------------------------------- -------------------------------------
agent opens every document search: which files match (JSON)
context grows with the corpus get_text_fragments: the passages
long files crowd out the question (~8 words either side, per file)
repeated for every question answer cites file + passage
the index is reused next time
La diferencia crece con el corpus. Para tres archivos cortos apenas importa. Para una carpeta de contratos extensos, informes y correos, los fragmentos para una pregunta son unas cuantas cientos de palabras, frente al texto completo de cada documento candidato.
Cuando las palabras difieren
La búsqueda de texto completo coincide con palabras, lo que es una ventaja para la fundamentación (cada coincidencia es explicable) y una limitación para el recall (un sinónimo se pierde). El trabajo del agente es probar variantes, y puede ver qué coincidió realmente cada variante:
-> search {"query":"renewal OR renews","indexName":"contracts"}
<- umbrella-office-lease.pdf, terms ["renewal", "renews"]
-> search {"query":"renewl","indexName":"contracts","fuzzy":true}
<- umbrella-office-lease.pdf, terms ["renewal", "renews", "rent"]
La coincidencia difusa salvó una falta de ortografía y también incluyó rent. Como la respuesta enumera los términos que coincidió, un agente, o usted, puede ver la coincidencia excesiva en lugar de confiar ciegamente. Esa transparencia es lo que “grounded” debería significar: no solo “la respuesta cita una fuente”, sino “puede ver cómo se encontró la fuente”.
Cómo se ve una respuesta fundamentada
Pida citas, y la respuesta llegará en una forma que puede verificar de un vistazo:
Dos contratos incluyen una penalización por terminación. Acme MSA, cláusula 12.3: “a termination penalty of three monthly fees applies, payable within 30 days of the termination date.” Acuerdo de consultoría de Globex, sección 9: “the Client pays 50 percent of the fees remaining for the current phase.” El NDA de Initech menciona terminación y penalización pero indica que no hay penalización.
Si un resumen interpreta mal una cita, la mala interpretación queda justo al lado de la cita.
Límites honestos
- En modo de evaluación un índice contiene como máximo 100 documentos y una búsqueda devuelve como máximo 10. El modo de evaluación también añade una línea “Evaluation only…” al texto indexado de algunos formatos, lo que puede aparecer en los fragmentos; licencie el servidor y vuelva a crear el índice para eliminarla. Llame a
get_license_statusprimero. - El contexto del fragmento se cuenta en palabras, no en oraciones, por lo que un pasaje puede comenzar a mitad de oración; aumente
termsBeforecuando sea importante. - No hay OCR: los escaneos sin capa de texto no tienen pasajes que devolver.
- Solo Docker; en Linux añada
--user "$(id -u):$(id -g)".
Preguntas frecuentes
¿Cómo hago que Claude cite fuentes de mis documentos?
Proporciónele una herramienta que devuelva el texto fuente con el nombre del archivo. get_text_fragments hace exactamente eso, y una instrucción como “cite el pasaje y su archivo” lo convierte en hábito.
¿Esto reduce el uso de tokens?
Evita cargar documentos completos para responder una pregunta: el agente solo lee los pasajes coincidentes. Cuánto se ahorra depende del tamaño de sus archivos.
¿Puede el agente seguir leyendo un archivo completo cuando lo necesite?
Sí, con sus propias herramientas de archivo. Los fragmentos sirven para encontrar y citar; lea el archivo completo cuando el pasaje no sea suficiente.
Profundice más
- Documentación, guía canónica: How to get the matching passages instead of reading whole files
- Centro de documentación: GroupDocs.Search MCP Server
- Empiece aquí: Do you need a vector database to ask questions about a folder of documents?
- Relacionado: Why an AI agent should not read 300 contracts to answer one question
- Relacionado: grep can’t read PDF: give your coding agent a document index
- Relacionado: Search your email archive with an AI agent: PST, MSG, EML and the attachments inside
- Relacionado: Project memory for AI agents: one index per project, kept current
- Modelo on‑premise y de seguridad: 3 architectures for AI document processing, and the one that keeps files inside your network
- Preguntas: GroupDocs Search forum
- Fuente: GroupDocs.Search.Mcp on GitHub