Se puede dividir texto en piezas. Se pueden generar embeddings desde texto. Pero conectar estas dos operaciones -- de manera confiable, eficiente y con seguimiento adecuado de metadatos -- es donde la mayoría de las implementaciones RAG fallan. La Sesión 222 construyó la capa de integración que cierra esta brecha. Nueve nuevas funciones, 19 pruebas y un pipeline completo de extremo a extremo que toma bytes crudos de documentos y produce vectores indexados y buscables en una sola llamada a función.
El pipeline completo de documentos
rustpub fn ingest_document(
store: &mut VectorStore,
bytes: &[u8],
document_id: u64,
entity_type: &str,
field_name: &str,
mime_type: Option<&str>,
extension: Option<&str>,
chunk_options: Option<ChunkOptions>,
) -> Result<usize, ChunkEmbedError> {
// Paso 1: Extraer texto del documento
let text = extract_document(bytes, mime_type, extension)?;
// Paso 2: Dividir el texto en chunks
let chunks = chunk_text(&text, &opts);
// Paso 3: Embeber cada chunk
let embedded = embed_chunks(&chunks)?;
// Paso 4: Almacenar en vector store
store_document_embeddings(store, document_id, entity_type, field_name, &embedded)?;
Ok(embedded.len())
}Cinco etapas en una llamada a función: extraer, dividir, embeber, almacenar y retornar el conteo.
En código FLIN, el chunking es típicamente invisible:
flinentity LegalDocument {
title: text
content: semantic text
jurisdiction: text
}
doc = LegalDocument.create({
title: "Employment Contract Template",
content: document_extract(body.file),
jurisdiction: "OHADA"
})
save doc
// Automáticamente: chunk -> embeber -> almacenar vectoresEsta es la Parte 131 de la serie "Cómo construimos FLIN", que documenta cómo un CEO en Abidjan y un CTO de IA diseñaron y construyeron un lenguaje de programación desde cero.
Navegación de la serie: - [130] Estrategias de chunking de texto - [131] Integración chunk-embedding (estás aquí) - [132] Extracción de texto de CSV, XLSX, RTF y XML