name: context-retriever version: "1.0.0" description: | Utilice esta habilidad para recuperar fragmentos relevantes de documentos RFP desde la base vectorial. Soporta búsqueda por similitud semántica y MMR (Maximal Marginal Relevance) para diversidad. Permite filtrado por metadatos (source, page_number, category) y threshold de confianza. NO usar para ingestar documentos - solo para búsqueda y recuperación.
Context Retriever Skill
Propósito
Esta habilidad permite a los agentes especializados (Legal, Técnico, Financiero) recuperar contexto relevante de los documentos RFP indexados. Implementa estrategias avanzadas de recuperación para maximizar la calidad del contexto:
- MMR (Maximal Marginal Relevance): Penaliza la redundancia para obtener chunks diversos
- Filtrado por Metadatos: Permite a cada agente buscar solo en su dominio
- Score Thresholding: Descarta resultados de baja confianza para evitar alucinaciones
- Citas Precisas: Cada resultado incluye page_number, source_file y chunk_id
Directrices de Uso Operativo
Cuándo Usar
- Responder preguntas sobre contenido de documentos RFP
- Buscar cláusulas o términos específicos
- Recuperar contexto para análisis especializado (legal, técnico, financiero)
Cuándo NO Usar
- Ingestar nuevos documentos (usar RFPDocumentLoader)
- Consultas generales que no requieren contexto del RFP
- Cuando el Vector Store no tiene documentos indexados
Entrada
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
query |
str |
✅ | La pregunta o concepto a buscar |
top_k |
int |
❌ | Número de chunks a recuperar (default: 4) |
search_type |
SearchType |
❌ | SIMILARITY o MMR (default: MMR) |
metadata_filter |
dict |
❌ | Filtros clave-valor para limitar búsqueda |
score_threshold |
float |
❌ | Umbral mínimo de similitud (default: 0.65) |
Salida
RetrievalOutput con:
results: Lista deContextResultcon content, metadata, relevance_scorequery: La query original normalizadatotal_found: Cantidad de resultados antes del thresholdwarning: Mensaje si hay pocos resultados o baja confianza
Filtrado por Metadatos
Los agentes pueden filtrar resultados usando metadata_filter:
# Solo buscar en páginas del anexo técnico
metadata_filter = {
"source": "anexo_tecnico.pdf",
}
# Solo buscar después de página 10
metadata_filter = {
"page": {"$gt": 10}
}
# Combinar filtros
metadata_filter = {
"source": "pliego_bases.pdf",
"page": {"$gte": 5, "$lte": 20}
}
Ejemplos de Invocación (Few-Shot)
Ejemplo 1: Búsqueda estándar con MMR
Usuario: "¿Cuáles son las multas por incumplimiento?"
Acción:
retriever.retrieve(
query="multas por incumplimiento contrato penalidades",
top_k=4,
search_type=SearchType.MMR
)
Ejemplo 2: Búsqueda filtrada por agente legal
Usuario: "Busca la cláusula de garantía en los documentos legales"
Razonamiento: Usuario menciona "legales", filtrar por source que contenga "legal" o "contrato"
Acción:
retriever.retrieve(
query="cláusula garantía cumplimiento",
metadata_filter={"source": {"$contains": "legal"}},
search_type=SearchType.MMR
)
Ejemplo 3: Búsqueda de alta precisión
Usuario: "Necesito información muy precisa sobre ISO 27001"
Razonamiento: Usuario pide alta precisión, aumentar threshold.
Acción:
retriever.retrieve(
query="ISO 27001 certificación seguridad información",
score_threshold=0.75,
top_k=3
)
Manejo de Errores
| Error | Respuesta del Sistema |
|---|---|
| Vector Store vacío | IndexEmptyError con instrucciones para ingestar documentos |
| Sin resultados sobre threshold | Retorna lista vacía con warning explicativo |
| Timeout de búsqueda | SearchTimeoutError con query que falló |
Diagrama de Flujo
flowchart TD
A[Query Input] --> B{Vector Store Ready?}
B -->|No| E[IndexEmptyError]
B -->|Yes| C{Search Type?}
C -->|Similarity| D1[similarity_search_with_score]
C -->|MMR| D2[max_marginal_relevance_search]
D1 --> F[Apply Metadata Filter]
D2 --> F
F --> G[Apply Score Threshold]
G --> H{Results > 0?}
H -->|No| I[Return Empty + Warning]
H -->|Yes| J[Format ContextResult]
J --> K[Return RetrievalOutput]
Invariants
- Results are always ordered by relevance score (descending)
- k parameter is always >= 1 and <= 50
- Metadata filters are always validated before query execution
Error Cases
| Error Condition | Behavior | Recovery |
|---|---|---|
| Vector store not initialized | Raise VectorStoreError | Caller handles initialization |
| Invalid metadata filter | Validation error | Return empty results |
| Embedding API failure | Propagate exception | Retry at caller level |
Test Scenarios
See: tests/bdd/features/pipeline/retrieve_node.feature