{"schemaVersion":1,"id":"https://lucioduran.com/topics/rag","url":"https://lucioduran.com/topics/rag","title":"RAG: retrieval, search and evaluation","description":"Lucio Durán’s RAG projects: hybrid retrieval, chunking, reranking, bilingual evaluation and incremental indexes with reproducible evidence.","language":"en","datePublished":"2026-11-10","dateModified":"2026-11-10","contentFormat":"text/markdown","content":"# RAG: retrieval, search and evaluation\n\nRAG combines document retrieval with answer generation. My public work in this area supports studying each stage separately: which evidence is retrieved, how much it costs to find, and whether it supports an answer. Project pages link to the experiments’ corpora, commands and reports.\n\nBy [Lucio Durán](<https://lucioduran.com/>) · Uruguay\n\n## Which decision are you making?\n\n### When an answer lacks evidence\n\nInspect retrieval first. RAG Evaluation Workbench compares BM25, dense and hybrid retrieval; Chunking Ablation Suite examines how chunking affects passages, tables and cross-references.\n\n### When language or budget changes\n\nMeasure those segments explicitly. Bilingual Retrieval Evals separates English and Spanish queries and documents; Reranker Budget Router studies reranking decisions under a pair budget.\n\n### When storage or the corpus changes\n\nCheck filters, updates and version consistency. Vector Search Portability compares engines using identical vectors; Incremental RAG Index exercises atomic publication and interrupted updates.\n\n## Projects and evidence\n\nEach project page provides code, environment details, published results and limitations. The experiments describe those configurations; they do not establish results in client systems.\n\n- ### [RAG Evaluation Workbench](<https://lucioduran.com/projects/rag-evaluation-workbench>)\n\n  Reproducible RAG evaluation with BM25, dense and hybrid retrieval, local CPU inference, and separate retrieval and answer metrics.\n\n  Python · License: MIT\n\n  [Read the project](<https://lucioduran.com/projects/rag-evaluation-workbench>) · [Repository](<https://github.com/lucioduran/rag-evaluation-workbench>)\n- ### [Chunking Ablation Suite](<https://lucioduran.com/projects/chunking-ablation-suite>)\n\n  Fixed, structural and semantic chunking ablations using the same MiniLM model. Measures complete retrieved evidence and indexing cost for code, tables and cross references.\n\n  Python · License: MIT\n\n  [Read the project](<https://lucioduran.com/projects/chunking-ablation-suite>) · [Repository](<https://github.com/lucioduran/chunking-ablation-suite>) · [Release v0.1.0](<https://github.com/lucioduran/chunking-ablation-suite/releases/tag/v0.1.0>)\n- ### [Bilingual Retrieval Evals](<https://lucioduran.com/projects/bilingual-retrieval-evals>)\n\n  EN/ES retrieval evaluation with BM25 and multilingual MiniLM. Separates languages, directions, accents and cultural expressions, with replayable rankings and evidence.\n\n  Python · License: MIT\n\n  [Read the project](<https://lucioduran.com/projects/bilingual-retrieval-evals>) · [Repository](<https://github.com/lucioduran/bilingual-retrieval-evals>) · [Release v0.1.0](<https://github.com/lucioduran/bilingual-retrieval-evals/releases/tag/v0.1.0>)\n- ### [Reranker Budget Router](<https://lucioduran.com/projects/reranker-budget-router>)\n\n  Reranking router with hard pair budgets, development-fitted policies and a local MiniLM cross-encoder. Publishes quality, latency, decisions and routing errors.\n\n  Python · License: MIT\n\n  [Read the project](<https://lucioduran.com/projects/reranker-budget-router>) · [Repository](<https://github.com/lucioduran/reranker-budget-router>) · [Release v0.1.0](<https://github.com/lucioduran/reranker-budget-router/releases/tag/v0.1.0>)\n- ### [Vector Search Portability](<https://lucioduran.com/projects/vector-search-portability>)\n\n  Real hnswlib and sqlite-vec comparison with identical vectors, filters and updates. Recall against exact search, concurrent read load and postfilter result loss.\n\n  Python · License: MIT\n\n  [Read the project](<https://lucioduran.com/projects/vector-search-portability>) · [Repository](<https://github.com/lucioduran/vector-search-portability>) · [Release v0.1.0](<https://github.com/lucioduran/vector-search-portability/releases/tag/v0.1.0>)\n- ### [Incremental RAG Index](<https://lucioduran.com/projects/incremental-rag-index>)\n\n  Versioned SQLite RAG indexes with content-hash embedding reuse and atomic publication. Compares full and incremental rebuilds and injects process exits.\n\n  Python · License: MIT\n\n  [Read the project](<https://lucioduran.com/projects/incremental-rag-index>) · [Repository](<https://github.com/lucioduran/incremental-rag-index>) · [Release v0.1.0](<https://github.com/lucioduran/incremental-rag-index/releases/tag/v0.1.0>)","headings":[{"level":1,"text":"RAG: retrieval, search and evaluation","url":"https://lucioduran.com/topics/rag#title"},{"level":2,"text":"Which decision are you making?","url":"https://lucioduran.com/topics/rag#decisions"},{"level":3,"text":"When an answer lacks evidence","url":"https://lucioduran.com/topics/rag#decision-1"},{"level":3,"text":"When language or budget changes","url":"https://lucioduran.com/topics/rag#decision-2"},{"level":3,"text":"When storage or the corpus changes","url":"https://lucioduran.com/topics/rag#decision-3"},{"level":2,"text":"Projects and evidence","url":"https://lucioduran.com/topics/rag#projects"},{"level":3,"text":"RAG Evaluation Workbench","url":"https://lucioduran.com/topics/rag#project-rag-evaluation-workbench"},{"level":3,"text":"Chunking Ablation Suite","url":"https://lucioduran.com/topics/rag#project-chunking-ablation-suite"},{"level":3,"text":"Bilingual Retrieval Evals","url":"https://lucioduran.com/topics/rag#project-bilingual-retrieval-evals"},{"level":3,"text":"Reranker Budget Router","url":"https://lucioduran.com/topics/rag#project-reranker-budget-router"},{"level":3,"text":"Vector Search Portability","url":"https://lucioduran.com/topics/rag#project-vector-search-portability"},{"level":3,"text":"Incremental RAG Index","url":"https://lucioduran.com/topics/rag#project-incremental-rag-index"}],"sections":[{"heading":"RAG: retrieval, search and evaluation","level":1,"url":"https://lucioduran.com/topics/rag","content":""},{"heading":"RAG: retrieval, search and evaluation","level":1,"url":"https://lucioduran.com/topics/rag#title","content":"RAG combines document retrieval with answer generation. My public work in this area supports studying each stage separately: which evidence is retrieved, how much it costs to find, and whether it supports an answer. Project pages link to the experiments’ corpora, commands and reports.\n\nBy [Lucio Durán](<https://lucioduran.com/>) · Uruguay"},{"heading":"Which decision are you making?","level":2,"url":"https://lucioduran.com/topics/rag#decisions","content":""},{"heading":"When an answer lacks evidence","level":3,"url":"https://lucioduran.com/topics/rag#decision-1","content":"Inspect retrieval first. RAG Evaluation Workbench compares BM25, dense and hybrid retrieval; Chunking Ablation Suite examines how chunking affects passages, tables and cross-references."},{"heading":"When language or budget changes","level":3,"url":"https://lucioduran.com/topics/rag#decision-2","content":"Measure those segments explicitly. Bilingual Retrieval Evals separates English and Spanish queries and documents; Reranker Budget Router studies reranking decisions under a pair budget."},{"heading":"When storage or the corpus changes","level":3,"url":"https://lucioduran.com/topics/rag#decision-3","content":"Check filters, updates and version consistency. Vector Search Portability compares engines using identical vectors; Incremental RAG Index exercises atomic publication and interrupted updates."},{"heading":"Projects and evidence","level":2,"url":"https://lucioduran.com/topics/rag#projects","content":"Each project page provides code, environment details, published results and limitations. The experiments describe those configurations; they do not establish results in client systems."},{"heading":"RAG Evaluation Workbench","level":3,"url":"https://lucioduran.com/topics/rag#project-rag-evaluation-workbench","content":"Reproducible RAG evaluation with BM25, dense and hybrid retrieval, local CPU inference, and separate retrieval and answer metrics.\n\nPython · License: MIT\n\n[Read the project](<https://lucioduran.com/projects/rag-evaluation-workbench>) · [Repository](<https://github.com/lucioduran/rag-evaluation-workbench>)"},{"heading":"Chunking Ablation Suite","level":3,"url":"https://lucioduran.com/topics/rag#project-chunking-ablation-suite","content":"Fixed, structural and semantic chunking ablations using the same MiniLM model. Measures complete retrieved evidence and indexing cost for code, tables and cross references.\n\nPython · License: MIT\n\n[Read the project](<https://lucioduran.com/projects/chunking-ablation-suite>) · [Repository](<https://github.com/lucioduran/chunking-ablation-suite>) · [Release v0.1.0](<https://github.com/lucioduran/chunking-ablation-suite/releases/tag/v0.1.0>)"},{"heading":"Bilingual Retrieval Evals","level":3,"url":"https://lucioduran.com/topics/rag#project-bilingual-retrieval-evals","content":"EN/ES retrieval evaluation with BM25 and multilingual MiniLM. Separates languages, directions, accents and cultural expressions, with replayable rankings and evidence.\n\nPython · License: MIT\n\n[Read the project](<https://lucioduran.com/projects/bilingual-retrieval-evals>) · [Repository](<https://github.com/lucioduran/bilingual-retrieval-evals>) · [Release v0.1.0](<https://github.com/lucioduran/bilingual-retrieval-evals/releases/tag/v0.1.0>)"},{"heading":"Reranker Budget Router","level":3,"url":"https://lucioduran.com/topics/rag#project-reranker-budget-router","content":"Reranking router with hard pair budgets, development-fitted policies and a local MiniLM cross-encoder. Publishes quality, latency, decisions and routing errors.\n\nPython · License: MIT\n\n[Read the project](<https://lucioduran.com/projects/reranker-budget-router>) · [Repository](<https://github.com/lucioduran/reranker-budget-router>) · [Release v0.1.0](<https://github.com/lucioduran/reranker-budget-router/releases/tag/v0.1.0>)"},{"heading":"Vector Search Portability","level":3,"url":"https://lucioduran.com/topics/rag#project-vector-search-portability","content":"Real hnswlib and sqlite-vec comparison with identical vectors, filters and updates. Recall against exact search, concurrent read load and postfilter result loss.\n\nPython · License: MIT\n\n[Read the project](<https://lucioduran.com/projects/vector-search-portability>) · [Repository](<https://github.com/lucioduran/vector-search-portability>) · [Release v0.1.0](<https://github.com/lucioduran/vector-search-portability/releases/tag/v0.1.0>)"},{"heading":"Incremental RAG Index","level":3,"url":"https://lucioduran.com/topics/rag#project-incremental-rag-index","content":"Versioned SQLite RAG indexes with content-hash embedding reuse and atomic publication. Compares full and incremental rebuilds and injects process exits.\n\nPython · License: MIT\n\n[Read the project](<https://lucioduran.com/projects/incremental-rag-index>) · [Repository](<https://github.com/lucioduran/incremental-rag-index>) · [Release v0.1.0](<https://github.com/lucioduran/incremental-rag-index/releases/tag/v0.1.0>)"}],"links":[{"text":"Lucio Durán","url":"https://lucioduran.com/"},{"text":"RAG Evaluation Workbench","url":"https://lucioduran.com/projects/rag-evaluation-workbench"},{"text":"Read the project","url":"https://lucioduran.com/projects/rag-evaluation-workbench"},{"text":"Repository","url":"https://github.com/lucioduran/rag-evaluation-workbench"},{"text":"Chunking Ablation Suite","url":"https://lucioduran.com/projects/chunking-ablation-suite"},{"text":"Read the project","url":"https://lucioduran.com/projects/chunking-ablation-suite"},{"text":"Repository","url":"https://github.com/lucioduran/chunking-ablation-suite"},{"text":"Release v0.1.0","url":"https://github.com/lucioduran/chunking-ablation-suite/releases/tag/v0.1.0"},{"text":"Bilingual Retrieval Evals","url":"https://lucioduran.com/projects/bilingual-retrieval-evals"},{"text":"Read the project","url":"https://lucioduran.com/projects/bilingual-retrieval-evals"},{"text":"Repository","url":"https://github.com/lucioduran/bilingual-retrieval-evals"},{"text":"Release v0.1.0","url":"https://github.com/lucioduran/bilingual-retrieval-evals/releases/tag/v0.1.0"},{"text":"Reranker Budget Router","url":"https://lucioduran.com/projects/reranker-budget-router"},{"text":"Read the project","url":"https://lucioduran.com/projects/reranker-budget-router"},{"text":"Repository","url":"https://github.com/lucioduran/reranker-budget-router"},{"text":"Release v0.1.0","url":"https://github.com/lucioduran/reranker-budget-router/releases/tag/v0.1.0"},{"text":"Vector Search Portability","url":"https://lucioduran.com/projects/vector-search-portability"},{"text":"Read the project","url":"https://lucioduran.com/projects/vector-search-portability"},{"text":"Repository","url":"https://github.com/lucioduran/vector-search-portability"},{"text":"Release v0.1.0","url":"https://github.com/lucioduran/vector-search-portability/releases/tag/v0.1.0"},{"text":"Incremental RAG Index","url":"https://lucioduran.com/projects/incremental-rag-index"},{"text":"Read the project","url":"https://lucioduran.com/projects/incremental-rag-index"},{"text":"Repository","url":"https://github.com/lucioduran/incremental-rag-index"},{"text":"Release v0.1.0","url":"https://github.com/lucioduran/incremental-rag-index/releases/tag/v0.1.0"}],"structuredData":[{"@context":"https://schema.org","@graph":[{"@type":"Person","@id":"https://lucioduran.com/#person","name":"Lucio Durán","url":"https://lucioduran.com/"},{"@type":"WebSite","@id":"https://lucioduran.com/#website","url":"https://lucioduran.com/","name":"Lucio Durán","inLanguage":["en","es"],"publisher":{"@id":"https://lucioduran.com/#person"}},{"@type":"CollectionPage","@id":"https://lucioduran.com/topics/rag#page","url":"https://lucioduran.com/topics/rag","name":"RAG: retrieval, search and evaluation","description":"Lucio Durán’s RAG projects: hybrid retrieval, chunking, reranking, bilingual evaluation and incremental indexes with reproducible evidence.","inLanguage":"en","author":{"@id":"https://lucioduran.com/#person"},"publisher":{"@id":"https://lucioduran.com/#person"},"isPartOf":{"@id":"https://lucioduran.com/#website"},"isAccessibleForFree":true,"datePublished":"2026-11-10","dateModified":"2026-11-10","mainEntity":{"@type":"ItemList","numberOfItems":6,"itemListElement":[{"@type":"ListItem","position":1,"name":"RAG Evaluation Workbench","url":"https://lucioduran.com/projects/rag-evaluation-workbench"},{"@type":"ListItem","position":2,"name":"Chunking Ablation Suite","url":"https://lucioduran.com/projects/chunking-ablation-suite"},{"@type":"ListItem","position":3,"name":"Bilingual Retrieval Evals","url":"https://lucioduran.com/projects/bilingual-retrieval-evals"},{"@type":"ListItem","position":4,"name":"Reranker Budget Router","url":"https://lucioduran.com/projects/reranker-budget-router"},{"@type":"ListItem","position":5,"name":"Vector Search Portability","url":"https://lucioduran.com/projects/vector-search-portability"},{"@type":"ListItem","position":6,"name":"Incremental RAG Index","url":"https://lucioduran.com/projects/incremental-rag-index"}]}}]}],"contentHash":"edcc0f51af99038abbd71ef62c3a7d7a378d23606b081ac9d8ace9851c2ce9c1","provenance":{"method":"Deterministic serialization of the server-rendered main element","source":"https://lucioduran.com/topics/rag","hashAlgorithm":"sha256","hashScope":"JSON document fields before contentHash and provenance","sourceHTMLBytes":40964,"contentBytes":4398}}
