<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Alexei Korol: AI engineering notes</title><link>https://alexkorol.github.io/lab-notes/</link><description>Measured notes on RAG, agents, evaluation, and production LLM systems.</description><language>en-us</language><item><title>Hybrid retrieval made my top result worse</title><link>https://alexkorol.github.io/lab-notes/hybrid-retrieval-wrong-turn/</link><guid>https://alexkorol.github.io/lab-notes/hybrid-retrieval-wrong-turn/</guid><pubDate>Fri, 10 Jul 2026 12:00:00 GMT</pubDate><description>I added BM25 to a dense RAG retriever, watched recall@1 regress, and used a cross-encoder to turn a wider candidate pool into a measurable win.</description></item><item><title>I stopped treating one LLM score as a measurement</title><link>https://alexkorol.github.io/lab-notes/judge-uncertainty/</link><guid>https://alexkorol.github.io/lab-notes/judge-uncertainty/</guid><pubDate>Thu, 09 Jul 2026 12:00:00 GMT</pubDate><description>A single judge call hid variance. Three runs per rubric cost more, but exposed disagreement and created a concrete human-review gate.</description></item><item><title>I built this portfolio RAG to fail usefully</title><link>https://alexkorol.github.io/lab-notes/portfolio-rag-budget/</link><guid>https://alexkorol.github.io/lab-notes/portfolio-rag-budget/</guid><pubDate>Wed, 08 Jul 2026 12:00:00 GMT</pubDate><description>The model call is optional; retrieval, citations, refusal checks, and a useful degraded answer continue when quota or configuration fails.</description></item></channel></rss>