retrieve: Búsqueda unificada con estimación de tokens
Firma
export async function retrieve(
env: Env,
queryVec: number[],
topK: number,
opts: RetrieveOpts,
filters?: SearchFilters,
): Promise<RetrievalResult>
Propósito
Búsqueda vectorial + trimming opcional. Devuelve chunks (recortados si activo) + estimaciones de tokens antes/después, para que consumidores (harness A/B, endpoints) midan ahorro sin lógica duplicada.
Parámetros
queryVec: Embedding de la query.topK: Chunks a recuperar (típicamente 5-10).opts.trim: Si true, aplicatrimChunksBySentence.opts.trimThreshold: Umbral coseno (default 0.38).opts.trimMinSentences: Mínimo por chunk (default 1).opts.trimWindow: Contexto ±N frases (default 0).filters: SearchFilters (sourceType, app).
Output
interface RetrievalResult {
chunks: ChunkMatch[];
tokensInContext: number; // post-trim
tokensBefore: number; // raw chunks
}
Lógica
- Búsqueda base:
searchChunks(env, queryVec, topK, filters)→ raw chunks. - Estimar tokens raw:
estimateTokens(raw)→ palabras × 1.3. - Si
opts.trim && env.AI:trimChunksBySentence(...)→ chunks recortados. - Estimar tokens trimmed:
estimateTokens(chunks). - Return con ambas estimaciones.
Fuentes de datos
- Entrada: Query embeddeada, topK, filtros.
- Salida: Chunks ± estimaciones.
- DB: D1 (buscador vectorial preexistente).
- API: Workers AI (trimming opcional).
Véase también
- [[feature—biblioteca—arcrift-sentence-trimming]]
- [[entity—functions—service—trim-chunks-by-sentence]]