Un caso real: límites de fragmentación en GodRad RAG
Revisamos la función pública de fragmentación de GodRad y ejecutamos pruebas locales con datos sintéticos. No llamamos a su servicio, no procesamos documentos de usuarios y no consumimos una API de pago.
Necesidad identificada: comprobar que los fragmentos respeten el tamaño configurado y que entradas vacías no produzcan registros vacíos.
| Entrada / prueba | Original | Corrección local |
|---|---|---|
| 1.001 caracteres, límite 1.000 | Longitudes [1001, 0] | [1000, 1] |
| 2.500 caracteres sin puntos | [1001, 1001, 498] | [1000, 1000, 500] |
| Texto vacío o solo espacios | Un fragmento vacío | Ningún fragmento |
| Barrido de 3.000 longitudes (1..3000) | 2.000 casos con exceso de longitud | 0 casos con exceso |
| Casos con fragmento vacío en el barrido | 2 | 0 |
Qué se cambió
La división sin punto usa un índice inclusivo y sumaba un carácter al límite. Se reduce ese índice en uno. Además, se comprueba el texto sin espacios antes de añadir un fragmento. Es una corrección pequeña, probada fuera del proyecto original.
Limitación pendiente: cambiar chunk_overlap de 0 a 200 produjo el mismo texto en la prueba seleccionada; el código revisado almacena ese parámetro sin usarlo. Esta propuesta no implementa solapamiento ni demuestra cambios de calidad en recuperación.
Reproducir y revisar
Entorno de ejecución observado: Python 3.12.14, Pydantic 2.14.1. Ocho entradas dirigidas más un barrido de 3.000 longitudes. Prueba de función aislada, no de integración. No se infieren rendimiento de producción, ahorro económico ni impacto en respuestas RAG.
SHA-256 del archivo original con saltos de línea LF: f8cff1723bdd103f6c2bd98b1b20b520341618d4e264c6670c22c3ed2bd31b2a.
Descargar prueba Python · Descargar corrección propuesta · Resultados de la corrección
Con una copia del repositorio y sus dependencias: python probe_chunking.py /ruta/al/repositorio. El script carga únicamente los dos módulos indicados; revisa cualquier código externo antes de ejecutarlo. Aplica el parche en una copia y repite el comando para comparar.
Ver el parche
--- a/app/services/chunking.py
+++ b/app/services/chunking.py
@@ -23,7 +23,7 @@
if len(current_chunk_text) + len(para) <= self.chunk_size:
current_chunk_text += para + "\n\n"
else:
- if current_chunk_text:
+ if current_chunk_text.strip():
chunks.append(Chunk(
id=str(uuid.uuid4()),
tenant_id=tenant_id,
@@ -39,7 +39,7 @@
sub_para = para
while len(sub_para) > self.chunk_size:
split_idx = sub_para.rfind('.', 0, self.chunk_size)
- if split_idx == -1: split_idx = self.chunk_size
+ if split_idx == -1: split_idx = self.chunk_size - 1
chunks.append(Chunk(
id=str(uuid.uuid4()),
@@ -54,7 +54,7 @@
else:
current_chunk_text = para + "\n\n"
- if current_chunk_text:
+ if current_chunk_text.strip():
chunks.append(Chunk(
id=str(uuid.uuid4()),
tenant_id=tenant_id,
Estado: material preparado y publicado independientemente para revisión. No se ha enviado un mensaje al autor ni modificado su repositorio. La aceptación del cambio y cualquier colaboración posterior siguen pendientes.
Primero una entrega compartida
Un desarrollador puede aportar implementación y mantenimiento; otra persona puede aportar investigación de usuarios, distribución o acceso a un problema concreto. Esas aportaciones necesitan hacerse visibles. Antes de hablar de porcentajes, describe qué resultado entregarán juntos y cómo sabrán si valió la pena.
Esta plantilla genera una propuesta exploratoria. No es un contrato ni implica que una persona mencionada en otros recursos haya aceptado colaborar.
Los seis campos del piloto
Una conversación comercial más clara
Revenue sharing describe reparto de ingresos; profit sharing, reparto de utilidades. La segunda expresión requiere acordar qué costos se descuentan. Ninguna define por sí sola propiedad del código, obligaciones de soporte, exclusividad o duración.
Como agenda de conversación, anoten: aportaciones, titularidad de los materiales previos y nuevos, costos autorizados, forma de medir ingresos, calendario de revisión y salida. Los términos definitivos requieren un acuerdo específico entre las partes; esta página no los establece.
Ejemplo de alcance pequeño
Probar respuestas con fuentes sobre veinte documentos públicos. Una parte prepara diez preguntas y evalúa resultados; otra adapta la demo. Tras dos semanas se revisan errores, tiempo de trabajo y solicitudes de continuidad. Si no hay interés suficiente, se documenta el resultado y se cierra el piloto.
La utilidad de ese piloto es producir evidencia compartida. No requiere prometer una empresa, clientes o ingresos que aún no existen.
English summary: a non-binding collaboration brief. Start with scope, contributions and an exit criterion; discuss commercial terms only with clear definitions and mutual agreement.