{"schemaVersion":1,"locale":"en","query":"recall","version":"ff4b83d74da008f36b454ababf8b335c3cbc21d5a09f56beae7f62b86253b756","total":453,"matched":9,"method":"BM25 passage retrieval with title weighting; lexical relevance, not a confidence or authority score","offset":0,"items":[{"url":"https://lucioduran.com/blog/vector-databases-pgvector-qdrant-pinecone","citationUrl":"https://lucioduran.com/blog/vector-databases-pgvector-qdrant-pinecone#question-3","title":"Vector Databases Compared: Running the Same RAG Pipeline on pgvector, Qdrant, Pinecone, and Weaviate","heading":"How much does vector search quality degrade with quantization?","kind":"blog","contentLanguage":"en","excerpt":"With scalar quantization (float32 to int8), recall drops 1-3%. With binary quantization plus rescoring, recall drops only 2-5% while reducing memory by 32x. Product quantization can lose 5-10% recall but saves the most space.","contentHash":"6e6555f0a3d4bc518f053b668cfbaea120f2e0bcf36891482074439120337468","datePublished":"2025-12-02","dateModified":null,"readUrl":"https://lucioduran.com/api/content?path=%2Fblog%2Fvector-databases-pgvector-qdrant-pinecone&section=question-3&format=json","score":8.05873,"representations":{"markdown":"https://lucioduran.com/blog/vector-databases-pgvector-qdrant-pinecone.md","json":"https://lucioduran.com/blog/vector-databases-pgvector-qdrant-pinecone.json"}},{"url":"https://lucioduran.com/projects/rag-evaluation-workbench","citationUrl":"https://lucioduran.com/projects/rag-evaluation-workbench#results-retrieval","title":"RAG Evaluation Workbench","heading":"Retrieval: 24 answerable queries","kind":"project","contentLanguage":"en","excerpt":"Recall@3 and NDCG@3 over 24 answerable questions in 12 source groups. Unanswerable questions are excluded from these metrics. The 95% intervals use grouped bootstrap.\n\n| Method | Recall@3 | 95% interval | NDCG@3 | 95% interval |\n| --- | --- | --- | --- | --- |\n| BM25 | 1.000 | \\[1.000, 1.000\\] | 0.969 | \\[0.923, 1.000\\] |\n| Dense | 1.000 | \\[1.000, 1.000\\] | 1.000 | \\[1.000, 1.000\\] |\n| Hybrid | 1.000 | \\[1.000, 1.000\\] | 1.000 | \\[1.000, 1.000\\] |","contentHash":"0168e2f856ec06088c1c5fb241abebfd4f490b793dcf8b4290da3b9f1f115013","datePublished":"2026-10-21","dateModified":"2026-10-21","readUrl":"https://lucioduran.com/api/content?path=%2Fprojects%2Frag-evaluation-workbench&section=results-retrieval&format=json","score":7.15118,"representations":{"markdown":"https://lucioduran.com/projects/rag-evaluation-workbench.md","json":"https://lucioduran.com/projects/rag-evaluation-workbench.json"}},{"url":"https://lucioduran.com/projects/vector-search-portability","citationUrl":"https://lucioduran.com/projects/vector-search-portability#results-filters","title":"Vector Search Portability","heading":"Filters after updates, both engines","kind":"project","contentLanguage":"en","excerpt":"| Mode | Recall@10 | Result loss |\n| --- | --- | --- |\n| Native, nonempty groups | 1.0000 | 0.0000 |\n| Tenant postfilter | 0.4725 | 0.5275 |\n| Selective postfilter | 0.0275 | 0.9725 |\n\nBoth engines reached native recall 1.0 on this fixture. Selective postfiltering lost 97.25% of available results despite 14 eligible candidates. Four clients degraded the HNSW adapter with its Python predicate; the experiment does not isolate callback, GIL and O(N) mask contributions.\n\nThe original run retains 9,600 searches. A further run adds 9,600 after a CPU accounting fix, with the same native recall and selective loss. Table values remain the original obs…","contentHash":"f4b5b1fe04eb94ae4204a26f38ea18b0f16b23601c6265b633920f0ccd1dc8b6","datePublished":"2026-10-21","dateModified":"2026-10-21","readUrl":"https://lucioduran.com/api/content?path=%2Fprojects%2Fvector-search-portability&section=results-filters&format=json","score":7.06598,"representations":{"markdown":"https://lucioduran.com/projects/vector-search-portability.md","json":"https://lucioduran.com/projects/vector-search-portability.json"}},{"url":"https://lucioduran.com/blog/rag-pipeline-architecture-chunking-reranking-evaluation","citationUrl":"https://lucioduran.com/blog/rag-pipeline-architecture-chunking-reranking-evaluation#level-2-generation-quality-with-ragas","title":"RAG Pipeline Architecture: Chunking Strategies, Hybrid Search, Reranking, and Evaluation Frameworks","heading":"Level 2: Generation Quality with RAGAS","kind":"blog","contentLanguage":"en","excerpt":"…m ragas.metrics import (\n    faithfulness,\n    answer_relevancy,\n    context_precision,\n    context_recall,\n)\n\nresults = evaluate(\n    dataset=eval_dataset,  # Questions + ground truth answers + contexts\n    metrics=[\n        faithfulness,        # Does the answer stick to retrieved context?\n        answer_relevancy,    # Is the answer relevant to the question?\n        context_precision,   # Are retrieved chunks relevant?\n        context_recall,      # Were all necessary chunks retrieved?\n    ],\n)\n\nprint(results)\n# {'faithfulness': 0.89, 'answer_relevancy': 0.91,\n#  'context_precision': 0.82, 'context_recall': 0.87}\n```\n\n**Faithfulness** is t…","contentHash":"b1c9129f4656c1547108f7a55435bc67ee3fbd28e58bd88da4df95a5e0362bf5","datePublished":"2026-04-16","dateModified":"2026-10-21","readUrl":"https://lucioduran.com/api/content?path=%2Fblog%2Frag-pipeline-architecture-chunking-reranking-evaluation&section=level-2-generation-quality-with-ragas&format=json","score":6.82792,"representations":{"markdown":"https://lucioduran.com/blog/rag-pipeline-architecture-chunking-reranking-evaluation.md","json":"https://lucioduran.com/blog/rag-pipeline-architecture-chunking-reranking-evaluation.json"}},{"url":"https://lucioduran.com/projects","citationUrl":"https://lucioduran.com/projects#project-vector-search-portability","title":"Projects","heading":"Vector Search Portability","kind":"section","contentLanguage":"en","excerpt":"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>)","contentHash":"ca6fcd2becbe7879e8a91707fb0c652133e38b818e3d680b6507a126359f4879","datePublished":null,"dateModified":null,"readUrl":"https://lucioduran.com/api/content?path=%2Fprojects&section=project-vector-search-portability&format=json","score":5.58077,"representations":{"markdown":"https://lucioduran.com/projects.md","json":"https://lucioduran.com/projects.json"}},{"url":"https://lucioduran.com/","citationUrl":"https://lucioduran.com/#project-vector-search-portability","title":"Lucio Durán","heading":"Vector Search Portability","kind":"section","contentLanguage":"en","excerpt":"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>)","contentHash":"200f275fa6dee6f74aefc42bf030c9148e0d786ffd848ec9ea6779ffd98b704c","datePublished":null,"dateModified":null,"readUrl":"https://lucioduran.com/api/content?path=%2F&section=project-vector-search-portability&format=json","score":5.55021,"representations":{"markdown":"https://lucioduran.com/index.md","json":"https://lucioduran.com/index.json"}},{"url":"https://lucioduran.com/access","citationUrl":"https://lucioduran.com/access#discovery","title":"Content access","heading":"Discovery","kind":"section","contentLanguage":"en","excerpt":"…m/api/content-index?locale=en>)\n- [Full-text search](<https://lucioduran.com/api/search?locale=en&q=recall>)\n- [llms.txt](<https://lucioduran.com/llms.txt>)\n- [llms-full.txt](<https://lucioduran.com/llms-full.txt>)\n- [OpenAPI](<https://lucioduran.com/.well-known/openapi.json>)\n- [Sitemap](<https://lucioduran.com/sitemap.xml>)\n- [API catalog (RFC 9727)](<https://lucioduran.com/.well-known/api-catalog>)\n- [JSON Schema](<https://lucioduran.com/.well-known/schemas/publication.json>)\n- [Capability checklist](<https://lucioduran.com/api/capabilities?locale=en>)\n- [Build inventory with hashes](<https://lucioduran.com/api/publication?locale=en>)","contentHash":"a98bd2a6c040f4b283490ba8f1ce84cf49ff197e5d6f79ca199013acc8e78c5f","datePublished":null,"dateModified":null,"readUrl":"https://lucioduran.com/api/content?path=%2Faccess&section=discovery&format=json","score":4.8122,"representations":{"markdown":"https://lucioduran.com/access.md","json":"https://lucioduran.com/access.json"}},{"url":"https://lucioduran.com/projects/chunking-ablation-suite","citationUrl":"https://lucioduran.com/projects/chunking-ablation-suite#results-coverage","title":"Chunking Ablation Suite","heading":"Complete evidence on evaluation queries","kind":"project","contentLanguage":"en","excerpt":"…ir fits; this ablation is uninformative about threshold sensitivity.\n\nThe analysis breaks down span recall, completion, text bytes, vector payload and construction time for code, tables and cross references. Timings are sequential observations on one host. [Results and analysis](<https://github.com/lucioduran/chunking-ablation-suite/blob/12193ba09bb1081a05d3ea7a043748089aa2330b/docs/results.md>).","contentHash":"154aa5838b65878cd23e68083b91f827e62d13a89cf61421d70d20f718883354","datePublished":"2026-10-21","dateModified":"2026-10-21","readUrl":"https://lucioduran.com/api/content?path=%2Fprojects%2Fchunking-ablation-suite&section=results-coverage&format=json","score":3.9189,"representations":{"markdown":"https://lucioduran.com/projects/chunking-ablation-suite.md","json":"https://lucioduran.com/projects/chunking-ablation-suite.json"}},{"url":"https://lucioduran.com/blog/agentic-ai-autonomous-systems-at-scale","citationUrl":"https://lucioduran.com/blog/agentic-ai-autonomous-systems-at-scale#memory-and-context","title":"Agentic AI Architecture Patterns: Building Autonomous Systems That Scale","heading":"Pattern 3: Memory Management and Context Windows","kind":"blog","contentLanguage":"en","excerpt":"…nt. It's simple, predictable, and cheap. Add RAG-based semantic memory only when the agent needs to recall information from sessions that happened days or weeks ago.\n\nThe infrastructure pattern I recommend: Supabase for the vector store (pgvector handles embeddings natively), with a simple summarization step that runs after every 10 agent turns. Store summaries as structured JSON so they're queryable without embedding search.\n\n[Supabase](<https://supabase.com/>): PostgreSQL + pgvector for agent memory and application data in one platform.","contentHash":"1ac3d36ab18ec8a5bda8a1d05b8ec7277133cf493b6b7808789ac5851f80d5f9","datePublished":"2026-03-18","dateModified":null,"readUrl":"https://lucioduran.com/api/content?path=%2Fblog%2Fagentic-ai-autonomous-systems-at-scale&section=memory-and-context&format=json","score":2.58124,"representations":{"markdown":"https://lucioduran.com/blog/agentic-ai-autonomous-systems-at-scale.md","json":"https://lucioduran.com/blog/agentic-ai-autonomous-systems-at-scale.json"}}],"next":null}