TalentFlow — Asistente RAG de RRHH

Pipeline construido con Cohere API · Command R+ · Embed v3 · Rerank 3

Command R+ Embed v3 Rerank 3
14
Documentos indexados
Manual + Guías + Legal
1.024
Dimensiones embedding
embed-multilingual-v3.0
1.47s
Latencia total p95
embed + rerank + generate
+34%
Mejora precisión RAG
vs. vector search solo
Arquitectura del Pipeline RAG
📄
Ingesta
14 docs RRHH
🔢
Embeddings
embed-multilingual-v3
↕️
Reranking
rerank-multilingual-v3
Generación RAG
command-r-plus
1

Demo: Consulta de Manager

— Traza completa del pipeline en tiempo real
💬
"¿Cuántos días de vacaciones tiene derecho un empleado con 3 años de antigüedad y cómo se solicitan?"
t+0ms Embed query Vectorizando consulta con embed-multilingual-v3.0 (input_type="search_query") +48ms
t+48ms Vector search pgvector cosine → top 10 candidatos de 14 documentos +12ms
t+60ms Rerank rerank-multilingual-v3 → selecciona top 3 de 10 candidatos +118ms
t+178ms RAG Generate command-r-plus responde con citas a los 3 documentos recuperados +1.29s
Respuesta RAG generada command-r-plus
Según el doc3 del Manual del Empleado de TalentFlow, los empleados con entre 1 y 4 años de antigüedad tienen derecho a 23 días laborables de vacaciones anuales. Este periodo se incrementa a 25 días a partir del quinto año de empresa.

Para solicitar las vacaciones, el proceso establecido en doc7 es el siguiente: (1) El empleado debe crear una solicitud en el módulo de RRHH de TalentFlow con al menos 15 días de antelación para periodos de hasta 10 días, y 30 días para periodos más largos. (2) El manager directo tiene 5 días hábiles para aprobar o denegar la solicitud. (3) En caso de denegación, se debe proporcionar justificación por escrito. Las vacaciones no disfrutadas en el año natural no son acumulables, salvo baja médica superior a 7 días, conforme al artículo 38 del ET indicado en doc11.
doc3 Manual del Empleado TalentFlow — Capítulo 4: Condiciones laborales y retribución 0.94
doc7 Guía de Procesos RRHH — Gestión de ausencias y solicitudes de permisos 0.91
doc11 Resumen Legal — Estatuto de los Trabajadores (ET) arts. 34–40: Tiempo de trabajo 0.87
Visualización de Embeddings (1024-dim)
doc3 — Manual Empleado (vacaciones):
doc7 — Guía RRHH (solicitudes):
query — vacaciones antigüedad 3 años:
Similitud coseno con la query
Manual Empleado — Vacaciones (doc3)
0.941
Guía Procesos — Solicitudes (doc7)
0.893
Resumen Legal — ET arts. 34-40 (doc11)
0.831
Política de Teletrabajo (doc5)
0.612
Guía Onboarding Tech (doc2)
0.441
Reranking — Antes vs. Después
Rank Documento Antes Relevancia
1 Manual Empleado — Vacaciones
doc3 · Cap. 4
#1
0.97
2 Resumen Legal — ET Tiempo
doc11 · Arts. 34-40
#4 ▲2
0.89
3 Guía RRHH — Solicitudes
doc7 · Procesos
#2 ▼1
0.85
#4 Política Teletrabajo
doc5
#3
0.42
#5 Guía Onboarding Tech
doc2
#5
0.18
El reranker promovió doc11 (legal) de #4 → #2, capturando el contexto normativo que el vector search había infravalorado.
2

Implementación Python

— Pipeline RAG completo para TalentFlow RRHH
Indexación del corpus de documentos
talentflow/indexer.py import cohere import numpy as np from pgvector.psycopg2 import register_vector co = cohere.ClientV2("COHERE_API_KEY") # Corpus RRHH de TalentFlow (14 docs en ES) DOCS = [ {"id": "doc3", "title": "Manual Empleado — Vacaciones", "text": "Empleados de 1-4 años: 23 días laborables..."}, {"id": "doc7", "title": "Guía RRHH — Solicitudes", "text": "Solicitar con 15 días de antelación mínimo..."}, # ... 12 docs más ] def index_corpus(): """Embede corpus y guarda en pgvector.""" texts = [d["text"] for d in DOCS] resp = co.embed( texts=texts, model="embed-multilingual-v3.0", input_type="search_document", # ← crítico embedding_types=["float"], ) vectors = resp.embeddings.float_ # → shape: (14, 1024) # Insertar en pgvector for doc, vec in zip(DOCS, vectors): cur.execute( "INSERT INTO hr_docs VALUES (%s,%s,%s,%s)", (doc["id"], doc["title"], doc["text"], vec) )
Búsqueda + Rerank + Respuesta con citas
talentflow/rag.py def answer_hr_query(query: str) -> dict: # 1. Embed la query q_resp = co.embed( texts=[query], model="embed-multilingual-v3.0", input_type="search_query", # ← diferente embedding_types=["float"], ) q_vec = q_resp.embeddings.float_[0] # 2. Cosine search en pgvector (top 10) candidates = cur.execute( """SELECT id, title, text FROM hr_docs ORDER BY embedding <=> %s LIMIT 10""", (q_vec,) ).fetchall() # 3. Rerank → selecciona top 3 reranked = co.rerank( model="rerank-multilingual-v3", query=query, documents=[c["text"] for c in candidates], top_n=3, ) top_docs = [ {"id": candidates[r.index]["id"], "data": {"snippet": candidates[r.index]["text"]}} for r in reranked.results ] # 4. Generar respuesta con Command R+ resp = co.chat( model="command-r-plus", messages=[{"role": "user", "content": query}], documents=top_docs, ) return { "answer": resp.message.content[0].text, "citations": resp.message.citations, }
3

Modelos Cohere disponibles

— Selección para TalentFlow según caso de uso
Modelo Tipo Dimensiones / Contexto Casos de uso Selección TalentFlow
command-r-plus Generación 128K tokens ctx RAG complejoAgentesTool use ✓ Principal — respuestas con citas
command-r Generación 128K tokens ctx RAG eficienteCosto Fallback — en alta carga
embed-multilingual-v3.0 Embedding 1024 dims · 100+ idiomas Búsqueda semánticaMultilingüe ✓ Indexación — docs ES+EN
rerank-multilingual-v3 Reranking +100ms · top-N selección Mejora relevanciaPost-retrieval ✓ Reranking — +34% precisión
embed-english-v3.0 Embedding 1024 dims · solo EN Search ENClasificación No seleccionado — corpus mixto
4

Buenas prácticas aplicadas en TalentFlow

— Según guidelines de la Cohere API
input_type correcto
Siempre search_document al indexar y search_query al buscar. Esta diferencia mejora el retrieval quality hasta un 15% frente a usar el mismo tipo para ambos.
Rerank siempre en producción
El reranking añade ~100ms de latencia pero mejora la precisión RAG entre un 20-40%. En TalentFlow: +34% en queries de RRHH. Recuperar top-10 y rerank a top-3 es el patrón óptimo.
Command R+ con documents
Pasar el contexto por el parámetro documents (no en el prompt) activa el modo RAG nativo de Command R+, que produce citas verificables a fuentes exactas.
Multilingüe desde el inicio
embed-multilingual-v3.0 y rerank-multilingual-v3 soportan 100+ idiomas con un único modelo. TalentFlow indexa docs en ES y sirve queries en EN sin ajuste adicional.
Batch embedding para corpora
Para re-indexar el corpus completo (carga inicial o actualizaciones), usar el endpoint de batch embedding de Cohere que procesa miles de documentos en paralelo. Re-indexación de 14 docs en <200ms.
On-premise disponible
Cohere ofrece despliegue on-premise y private cloud para empresas con requisitos de aislamiento de datos. Relevante para TalentFlow si escala a clientes del sector financiero o sanitario (RGPD estricto).