<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Rijul Rajesh</title>
    <description>The latest articles on DEV Community by Rijul Rajesh (@rijultp).</description>
    <link>https://dev.to/rijultp</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1207862%2F60f14114-548d-4857-87c3-87cd2e09375d.png</url>
      <title>DEV Community: Rijul Rajesh</title>
      <link>https://dev.to/rijultp</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rijultp"/>
    <language>en</language>
    <item>
      <title>Your RAG Searches by Meaning. But What About Exact Words? Meet BM25</title>
      <dc:creator>Rijul Rajesh</dc:creator>
      <pubDate>Sat, 26 Sep 2026 20:44:55 +0000</pubDate>
      <link>https://dev.to/rijultp/your-rag-searches-by-meaning-but-what-about-exact-words-meet-bm25-50m5</link>
      <guid>https://dev.to/rijultp/your-rag-searches-by-meaning-but-what-about-exact-words-meet-bm25-50m5</guid>
      <description>&lt;p&gt;&lt;em&gt;Hello, I'm Rijul, and I'm building LiveReview — a blast-radius aware AI code review built for your business-critical systems. &lt;a href="https://github.com/HexmosTech/LiveReview/" rel="noopener noreferrer"&gt;Star us&lt;/a&gt; to help devs discover the project, give it a try, and share your feedback to help improve the product.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;When you work with RAG systems and come across scenarios where &lt;strong&gt;keyword matching is relevant&lt;/strong&gt;, you might come across a term called &lt;strong&gt;BM25&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It sounds like some technical code word, but it is actually quite straightforward.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;BM25 = Best Matching 25&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It's essentially the name researchers landed on for this particular ranking function. The "25" doesn't have a deeper meaning.&lt;/p&gt;

&lt;p&gt;So what exactly is BM25?&lt;/p&gt;

&lt;p&gt;BM25 is a ranking formula used to score how relevant a document is to a search query.&lt;/p&gt;

&lt;p&gt;Instead of simply asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Does this word appear: yes/no?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;BM25 calculates a &lt;strong&gt;relevance score&lt;/strong&gt; based on three main ideas.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Three Ingredients of BM25
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Term Frequency
&lt;/h3&gt;

&lt;p&gt;This basically means: &lt;strong&gt;how many times does the word show up?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you search for:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"dog training"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A document that mentions "dog" 5 times is probably more relevant to dogs than one that mentions it once.&lt;/p&gt;

&lt;p&gt;More mentions can mean more relevance.&lt;/p&gt;

&lt;p&gt;But there is an important nuance.&lt;/p&gt;

&lt;p&gt;The benefit of additional mentions decreases as the word appears more often.&lt;/p&gt;

&lt;p&gt;Going from 1 mention to 2 matters more than going from 20 mentions to 21.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv6a31gjiuiw0jevkl9qq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv6a31gjiuiw0jevkl9qq.png" alt=" " width="800" height="431"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;BM25 has a built-in &lt;strong&gt;diminishing returns&lt;/strong&gt; effect, so a document can't simply win by repeating the same word hundreds of times.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. Inverse Document Frequency (IDF)
&lt;/h3&gt;

&lt;p&gt;This basically means:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How rare or special is this word?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Common words like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"the", "is", "and"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;appear in almost every document.&lt;/p&gt;

&lt;p&gt;So matching on them tells you very little.&lt;/p&gt;

&lt;p&gt;Rare words like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"gnocchi" or "arrhythmia"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;appear in far fewer documents.&lt;/p&gt;

&lt;p&gt;If both the query and a document contain a rare word, that can be a much stronger signal of relevance.&lt;/p&gt;

&lt;p&gt;BM25 therefore gives &lt;strong&gt;more weight to rare terms and less weight to common terms&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F03ylqso7uq7ntg44cijd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F03ylqso7uq7ntg44cijd.png" alt=" " width="800" height="424"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  3. Document Length Normalization
&lt;/h3&gt;

&lt;p&gt;This basically asks:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is this document relevant, or is it just really long?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A 5,000-word document will naturally contain more words and potentially more repetitions than a 50-word document.&lt;/p&gt;

&lt;p&gt;That doesn't necessarily mean it is more relevant.&lt;/p&gt;

&lt;p&gt;BM25 adjusts the score based on document length so that long documents don't get an unfair advantage simply because they contain more words.&lt;/p&gt;

&lt;p&gt;It compares each document's length with the &lt;strong&gt;average document length&lt;/strong&gt; in the collection and uses that information when calculating the score.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frrbpwmif8hl4r9tb1bd7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frrbpwmif8hl4r9tb1bd7.png" alt=" " width="799" height="431"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  An Example
&lt;/h2&gt;

&lt;p&gt;Let's say the query is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"laptop battery life"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We have two documents.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Document A&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A 200-word product review that says:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"battery" 4 times&lt;/li&gt;
&lt;li&gt;"laptop" 3 times&lt;/li&gt;
&lt;li&gt;"life" 2 times&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Document B&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A 3,000-word laptop manual that says:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"battery" 4 times&lt;/li&gt;
&lt;li&gt;"laptop" several times&lt;/li&gt;
&lt;li&gt;"life" isn't used in the relevant context&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;BM25 can rank &lt;strong&gt;Document A higher&lt;/strong&gt; because it matches more of the query terms, while its shorter length also means those occurrences carry more weight relative to the document as a whole.&lt;/p&gt;

&lt;p&gt;Document B's greater length can work against it through the length-normalization component.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftf3690udalf3pqup60ox.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftf3690udalf3pqup60ox.png" alt=" " width="799" height="301"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Is BM25 Still Used Today?
&lt;/h2&gt;

&lt;p&gt;Despite embeddings being the newer approach, BM25 is decades old and is still widely used.&lt;/p&gt;

&lt;p&gt;It doesn't require model training or a GPU. It can run efficiently on CPUs and is particularly useful when &lt;strong&gt;exact terms matter&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Product IDs&lt;/li&gt;
&lt;li&gt;Error codes&lt;/li&gt;
&lt;li&gt;Names&lt;/li&gt;
&lt;li&gt;Technical terms&lt;/li&gt;
&lt;li&gt;Exact phrases&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is why BM25 remains an important part of search systems and is often combined with dense retrieval in &lt;strong&gt;hybrid search&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;BM25 is a way of ranking documents based on how well their terms match a query.&lt;/p&gt;

&lt;p&gt;It considers three main things:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Term frequency&lt;/strong&gt; → How often does the term appear?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Inverse document frequency&lt;/strong&gt; → How rare is the term?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Document length&lt;/strong&gt; → Is the document unusually long?&lt;/p&gt;

&lt;p&gt;Together, these produce a relevance score that helps the search system decide which documents should appear first.&lt;/p&gt;

&lt;p&gt;Even with modern embedding-based retrieval, BM25 remains useful because semantic similarity and exact keyword matching solve different problems.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;&lt;br&gt;
Your team's attention is limited, and the deluge of AI-generated code is making it harder to keep production reliable and secure without slowing you down.&lt;/em&gt;&lt;/p&gt;
&lt;em&gt;

&lt;p&gt;I'm building &lt;strong&gt;LiveReview&lt;/strong&gt;, a blast-radius aware AI code review built for your business-critical systems.&lt;/p&gt;

&lt;p&gt;Instead of presenting every diff with equal emphasis, &lt;strong&gt;LiveReview scores each change by blast radius — how far its impact reaches through your call graph — so you can focus attention where it actually matters.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Spend code review effort where business risk is highest — not spread evenly across every diff.&lt;/p&gt;

&lt;p&gt;⭐ Star it on GitHub: &lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/HexmosTech" rel="noopener noreferrer"&gt;
        HexmosTech
      &lt;/a&gt; / &lt;a href="https://github.com/HexmosTech/LiveReview" rel="noopener noreferrer"&gt;
        LiveReview
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Blast-Radius Aware AI Code Review for Business-Critical Systems
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/gfx/png/logo-with-text.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fgfx%2Fpng%2Flogo-with-text.png" alt="LiveReview" height="80"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/gitleaks.yml" rel="noopener noreferrer"&gt;&lt;img alt="gitleaks.yml" title="gitleaks.yml: Secret scanning workflow" src="https://github.com/HexmosTech/LiveReview/actions/workflows/gitleaks.yml/badge.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/osv-scanner.yml" rel="noopener noreferrer"&gt;&lt;img alt="osv-scanner.yml" title="osv-scanner.yml: Dependency vulnerability scan" src="https://github.com/HexmosTech/LiveReview/actions/workflows/osv-scanner.yml/badge.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/govulncheck.yml" rel="noopener noreferrer"&gt;&lt;img alt="govulncheck.yml" title="govulncheck.yml: Go vulnerability check" src="https://github.com/HexmosTech/LiveReview/actions/workflows/govulncheck.yml/badge.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/semgrep.yml" rel="noopener noreferrer"&gt;&lt;img alt="semgrep.yml" title="semgrep.yml: Static analysis security scan" src="https://github.com/HexmosTech/LiveReview/actions/workflows/semgrep.yml/badge.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/gfx/dependabot-enabled.svg"&gt;&lt;img alt="dependabot-enabled" title="dependabot-enabled: Automated dependency updates are enabled" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fgfx%2Fdependabot-enabled.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/mcp-testcases.yml" rel="noopener noreferrer"&gt;&lt;img alt="mcp-testcases.yml" title="mcp-testcases.yml: MCP integration test suite" src="https://github.com/HexmosTech/LiveReview/actions/workflows/mcp-testcases.yml/badge.svg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;LiveReview: Blast-Radius Aware AI Code Review for Business-Critical Systems&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;LiveReview is an AI code reviewer that scores every hunk of a diff by &lt;strong&gt;blast radius&lt;/strong&gt;: how far a change reaches through your call graph, how much persistent state it touches, and how well-tested it is. A 3-line change to a shared auth check can outrank a 300-line UI tweak. Your team's attention goes to the highest-risk code first, not spread evenly across every diff.&lt;/p&gt;

  
    
    &lt;span class="m-1"&gt;blast-radius-demo.mp4&lt;/span&gt;
  

  

  


&lt;p&gt;&lt;i&gt;LiveReview's Blast Radius &amp;amp; Review Priority scoring, live in the diff viewer.&lt;/i&gt;&lt;/p&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;The exact math, not a black box&lt;/th&gt;
&lt;th&gt;Visualize blast radius at a glance&lt;/th&gt;
&lt;th&gt;Every factor that feeds the score&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/screenshots/blast-radius/new-risk-score-3.webp"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fscreenshots%2Fblast-radius%2Fnew-risk-score-3.webp" width="280"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/screenshots/blast-radius/new-risk-score-4.webp"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fscreenshots%2Fblast-radius%2Fnew-risk-score-4.webp" width="280"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/screenshots/blast-radius/new-risk-score-2.webp"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fscreenshots%2Fblast-radius%2Fnew-risk-score-2.webp" width="280"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

How does Blast Radius scoring work? (a more technical explanation)
&lt;p&gt;&lt;strong&gt;Here's the goal:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A 3-line fix in a function used by 40 other files, that also writes to a database, should score high.&lt;/li&gt;
&lt;li&gt;A 300-line UI change in one file, fully covered by…&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/HexmosTech/LiveReview" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;b&gt;Click below to try LiveReview with your codebase:&lt;/b&gt;&lt;/p&gt;

&lt;/em&gt;&lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://hexmos.com/livereview" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvls0pq7nymbrll98je6s.png" alt="LiveReview Banner" width="800" height="240"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>algorithms</category>
      <category>llm</category>
      <category>rag</category>
      <category>search</category>
    </item>
    <item>
      <title>Embeddings Turn Text Into Numbers. But There’s More Than One Way to Do It</title>
      <dc:creator>Rijul Rajesh</dc:creator>
      <pubDate>Fri, 25 Sep 2026 18:58:09 +0000</pubDate>
      <link>https://dev.to/rijultp/embeddings-turn-text-into-numbers-but-theres-more-than-one-way-to-do-it-2jc4</link>
      <guid>https://dev.to/rijultp/embeddings-turn-text-into-numbers-but-theres-more-than-one-way-to-do-it-2jc4</guid>
      <description>&lt;p&gt;&lt;em&gt;Hello, I'm Rijul, and I'm building LiveReview — a blast-radius aware AI code review built for your business-critical systems. &lt;a href="https://github.com/HexmosTech/LiveReview/" rel="noopener noreferrer"&gt;Star us&lt;/a&gt; to help devs discover the project, give it a try, and share your feedback to help improve the product.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;If you have read about RAG, you will probably be familiar with the concept of &lt;strong&gt;embeddings&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjhxuttt67yyfbczkkj15.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjhxuttt67yyfbczkkj15.png" alt=" " width="800" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We take a bunch of text and turn it into numbers.&lt;/p&gt;

&lt;p&gt;That's it.&lt;/p&gt;

&lt;p&gt;But there is one more layer here.&lt;/p&gt;

&lt;p&gt;There are different ways to represent text for retrieval.&lt;/p&gt;

&lt;p&gt;Two important approaches are &lt;strong&gt;sparse representations&lt;/strong&gt; and &lt;strong&gt;dense embeddings&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Let's understand how they work and when each one is useful.&lt;/p&gt;




&lt;h2&gt;
  
  
  Sparse Representations
&lt;/h2&gt;

&lt;p&gt;Imagine you have a giant dictionary containing every word in your language. Let's say it has 50,000 words.&lt;/p&gt;

&lt;p&gt;A sparse representation for a sentence can assign a value to each of those 50,000 words based on how relevant that word is to the sentence.&lt;/p&gt;

&lt;p&gt;Most sentences only contain a small number of those words.&lt;/p&gt;

&lt;p&gt;So, out of 50,000 possible positions, only a small number will have meaningful values. The rest will be zero.&lt;/p&gt;

&lt;p&gt;That's why it's called &lt;strong&gt;sparse&lt;/strong&gt;: most of the vector is empty, with only a few non-zero values.&lt;/p&gt;

&lt;p&gt;Here is a simpler example.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm0j5aflfo8bpadol8chw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm0j5aflfo8bpadol8chw.png" alt=" " width="799" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's say our vocabulary contains just these 10 words, in this order:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[cat, dog, run, fast, food, eat, blue, sky, car, drive]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Now take the sentence:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"The dog can run fast"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The sparse vector could represent it like this:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cat  dog  run  fast  food  eat  blue  sky  car  drive
0    1    1    1     0     0    0     0    0    0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;It's essentially a representation of which words are present and how important they are.&lt;/p&gt;

&lt;p&gt;Now take a second sentence:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"I like to eat food fast"&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cat  dog  run  fast  food  eat  blue  sky  car  drive
0    0    0    1     1    1    0     0    0    0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;You can see that both vectors are mostly zeros.&lt;/p&gt;

&lt;p&gt;This kind of representation works well when the &lt;strong&gt;exact words in the text matter&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;But that also creates some limitations.&lt;/p&gt;
&lt;h3&gt;
  
  
  Where Sparse Representations Can Struggle
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Synonyms&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;"buy" and "purchase" have similar meanings, but a traditional word-based representation can treat them as completely different terms.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Paraphrasing&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Two people can ask the same question using completely different words, making it harder to connect them based on literal word overlap.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conversational queries&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Consider:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Why is my package taking so long?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Shipping delays explained"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;There is very little literal word overlap, even though the second document could contain exactly the information the user needs.&lt;/p&gt;

&lt;p&gt;This is where dense embeddings become useful.&lt;/p&gt;


&lt;h2&gt;
  
  
  Dense Embeddings
&lt;/h2&gt;

&lt;p&gt;With sparse representations, we are largely looking at &lt;strong&gt;which words appear&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;With dense embeddings, we are more interested in the &lt;strong&gt;semantic meaning&lt;/strong&gt; of the text.&lt;/p&gt;

&lt;p&gt;A dense embedding represents a piece of text as a relatively small vector containing many numerical values.&lt;/p&gt;

&lt;p&gt;Instead of having thousands of mostly-zero positions corresponding to vocabulary terms, a dense vector might contain hundreds or thousands of values, with most of them being non-zero.&lt;/p&gt;

&lt;p&gt;A simple example:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8e2otnqbl6m33fjj0im0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8e2otnqbl6m33fjj0im0.png" alt=" " width="800" height="304"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sentence 1:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"The dog ran quickly"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sentence 2:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"The puppy sprinted"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Look closely. These two sentences don't share a single word.&lt;/p&gt;

&lt;p&gt;"Dog" ≠ "puppy."&lt;/p&gt;

&lt;p&gt;"Ran" ≠ "sprinted."&lt;/p&gt;

&lt;p&gt;If we only looked for matching words, these sentences could appear completely different.&lt;/p&gt;

&lt;p&gt;Dense embedding models are trained to capture semantic relationships between text.&lt;/p&gt;

&lt;p&gt;So these two sentences can end up with embeddings that are relatively close to each other because they express a similar idea.&lt;/p&gt;

&lt;p&gt;This is one of the reasons dense embeddings are useful for semantic search.&lt;/p&gt;

&lt;p&gt;But dense embeddings have their own limitations.&lt;/p&gt;
&lt;h3&gt;
  
  
  Where Dense Embeddings Can Struggle
&lt;/h3&gt;

&lt;p&gt;Dense embeddings are designed to capture broader semantic relationships, but they may not be as effective when &lt;strong&gt;exact terms are important&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Product codes such as &lt;code&gt;SKU-4471B&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Exact names&lt;/li&gt;
&lt;li&gt;Error codes&lt;/li&gt;
&lt;li&gt;Rare technical terms&lt;/li&gt;
&lt;li&gt;Specific identifiers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A search for an exact product code may be better handled by a method that focuses on literal term matching rather than only semantic similarity.&lt;/p&gt;


&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;Embeddings turn text into numbers, but there isn't just one way to do that.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3bdjlqjofokwg2kgz3w1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3bdjlqjofokwg2kgz3w1.png" alt=" " width="799" height="439"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sparse representations&lt;/strong&gt; preserve explicit lexical signals and are useful when exact terms matter.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dense embeddings&lt;/strong&gt; capture broader semantic relationships and are useful when the same idea can be expressed using different words.&lt;/p&gt;

&lt;p&gt;Understanding this difference helps explain why RAG systems sometimes use more than one retrieval method instead of relying on dense embeddings alone.&lt;/p&gt;



&lt;p&gt;&lt;em&gt;&lt;br&gt;
Your team's attention is limited, and the deluge of AI-generated code is making it harder to keep production reliable and secure without slowing you down.&lt;/em&gt;&lt;/p&gt;
&lt;em&gt;

&lt;p&gt;I'm building &lt;strong&gt;LiveReview&lt;/strong&gt;, a blast-radius aware AI code review built for your business-critical systems.&lt;/p&gt;

&lt;p&gt;Instead of presenting every diff with equal emphasis, &lt;strong&gt;LiveReview scores each change by blast radius — how far its impact reaches through your call graph — so you can focus attention where it actually matters.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Spend code review effort where business risk is highest — not spread evenly across every diff.&lt;/p&gt;

&lt;p&gt;⭐ Star it on GitHub: &lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/HexmosTech" rel="noopener noreferrer"&gt;
        HexmosTech
      &lt;/a&gt; / &lt;a href="https://github.com/HexmosTech/LiveReview" rel="noopener noreferrer"&gt;
        LiveReview
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Blast-Radius Aware AI Code Review for Business-Critical Systems
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/gfx/png/logo-with-text.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fgfx%2Fpng%2Flogo-with-text.png" alt="LiveReview" height="80"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/gitleaks.yml" rel="noopener noreferrer"&gt;&lt;img alt="gitleaks.yml" title="gitleaks.yml: Secret scanning workflow" src="https://github.com/HexmosTech/LiveReview/actions/workflows/gitleaks.yml/badge.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/osv-scanner.yml" rel="noopener noreferrer"&gt;&lt;img alt="osv-scanner.yml" title="osv-scanner.yml: Dependency vulnerability scan" src="https://github.com/HexmosTech/LiveReview/actions/workflows/osv-scanner.yml/badge.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/govulncheck.yml" rel="noopener noreferrer"&gt;&lt;img alt="govulncheck.yml" title="govulncheck.yml: Go vulnerability check" src="https://github.com/HexmosTech/LiveReview/actions/workflows/govulncheck.yml/badge.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/semgrep.yml" rel="noopener noreferrer"&gt;&lt;img alt="semgrep.yml" title="semgrep.yml: Static analysis security scan" src="https://github.com/HexmosTech/LiveReview/actions/workflows/semgrep.yml/badge.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/gfx/dependabot-enabled.svg"&gt;&lt;img alt="dependabot-enabled" title="dependabot-enabled: Automated dependency updates are enabled" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fgfx%2Fdependabot-enabled.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/mcp-testcases.yml" rel="noopener noreferrer"&gt;&lt;img alt="mcp-testcases.yml" title="mcp-testcases.yml: MCP integration test suite" src="https://github.com/HexmosTech/LiveReview/actions/workflows/mcp-testcases.yml/badge.svg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;LiveReview: Blast-Radius Aware AI Code Review for Business-Critical Systems&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;LiveReview is an AI code reviewer that scores every hunk of a diff by &lt;strong&gt;blast radius&lt;/strong&gt;: how far a change reaches through your call graph, how much persistent state it touches, and how well-tested it is. A 3-line change to a shared auth check can outrank a 300-line UI tweak. Your team's attention goes to the highest-risk code first, not spread evenly across every diff.&lt;/p&gt;


  
    
    &lt;span class="m-1"&gt;blast-radius-demo.mp4&lt;/span&gt;
  

  

  


&lt;p&gt;&lt;i&gt;LiveReview's Blast Radius &amp;amp; Review Priority scoring, live in the diff viewer.&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;div class="table-wrapper-paragraph"&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;table&gt;

&lt;thead&gt;

&lt;tr&gt;

&lt;th&gt;The exact math, not a black box&lt;/th&gt;

&lt;th&gt;Visualize blast radius at a glance&lt;/th&gt;

&lt;th&gt;Every factor that feeds the score&lt;/th&gt;

&lt;/tr&gt;

&lt;/thead&gt;

&lt;tbody&gt;

&lt;tr&gt;

&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/screenshots/blast-radius/new-risk-score-3.webp"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fscreenshots%2Fblast-radius%2Fnew-risk-score-3.webp" width="280"&gt;&lt;/a&gt;&lt;/td&gt;

&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/screenshots/blast-radius/new-risk-score-4.webp"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fscreenshots%2Fblast-radius%2Fnew-risk-score-4.webp" width="280"&gt;&lt;/a&gt;&lt;/td&gt;

&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/screenshots/blast-radius/new-risk-score-2.webp"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fscreenshots%2Fblast-radius%2Fnew-risk-score-2.webp" width="280"&gt;&lt;/a&gt;&lt;/td&gt;

&lt;/tr&gt;

&lt;/tbody&gt;

&lt;/table&gt;&lt;/div&gt;&lt;br&gt;
&lt;p&gt;&lt;/p&gt;

How does Blast Radius scoring work? (a more technical explanation)

&lt;p&gt;&lt;strong&gt;Here's the goal:&lt;/strong&gt;&lt;/p&gt;


&lt;ul&gt;

&lt;li&gt;A 3-line fix in a function used by 40 other files, that also writes to a database, should score high.&lt;/li&gt;

&lt;li&gt;A 300-line UI change in one file, fully covered by…&lt;/li&gt;

&lt;/ul&gt;&lt;/div&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/HexmosTech/LiveReview" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;&lt;b&gt;Click below to try LiveReview with your codebase:&lt;/b&gt;&lt;/p&gt;

&lt;/em&gt;&lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://hexmos.com/livereview" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvls0pq7nymbrll98je6s.png" alt="LiveReview Banner" width="800" height="240"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>learning</category>
    </item>
    <item>
      <title>Your RAG Finds the Documents. But Which Ones Should Reach the LLM?</title>
      <dc:creator>Rijul Rajesh</dc:creator>
      <pubDate>Tue, 22 Sep 2026 19:12:31 +0000</pubDate>
      <link>https://dev.to/rijultp/your-rag-finds-the-documents-but-which-ones-should-reach-the-llm-2cn9</link>
      <guid>https://dev.to/rijultp/your-rag-finds-the-documents-but-which-ones-should-reach-the-llm-2cn9</guid>
      <description>&lt;p&gt;&lt;em&gt;Hello, I'm Rijul, and I'm building LiveReview — a blast-radius aware AI code review built for your business-critical systems. &lt;a href="https://github.com/HexmosTech/LiveReview/" rel="noopener noreferrer"&gt;Star us&lt;/a&gt; to help devs discover the project, give it a try, and share your feedback to help improve the product.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;You know that RAG fetches relevant chunks and gives them to the LLM.&lt;/p&gt;

&lt;p&gt;So there is a retrieval step involved.&lt;/p&gt;

&lt;p&gt;But there may be many chunks that are retrieved.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which ones should actually be sent to the LLM?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And more importantly, &lt;strong&gt;which chunks should get priority?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is where ranking comes in.&lt;/p&gt;

&lt;p&gt;Let's see how it works.&lt;/p&gt;




&lt;h2&gt;
  
  
  Let's Start With the Core Mechanism
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd4jzsc4vowqd2og7te5k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd4jzsc4vowqd2og7te5k.png" alt=" " width="800" height="392"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Suppose we have a set of chunks retrieved from our document collection.&lt;/p&gt;

&lt;p&gt;At this point, we can use a &lt;strong&gt;reranker model&lt;/strong&gt; to determine which of these chunks are most relevant to the query.&lt;/p&gt;

&lt;p&gt;A common approach is to use a &lt;strong&gt;cross-encoder&lt;/strong&gt; reranker.&lt;/p&gt;

&lt;p&gt;A cross-encoder is an architecture, not one specific model. Models such as &lt;strong&gt;BGE Reranker&lt;/strong&gt;, &lt;strong&gt;MS MARCO cross-encoders&lt;/strong&gt;, and &lt;strong&gt;Cohere Rerank&lt;/strong&gt; are examples of models that can be used for this job.&lt;/p&gt;

&lt;p&gt;The reranker takes the &lt;strong&gt;query and one chunk at a time&lt;/strong&gt;, pairs them together, and evaluates how relevant that chunk is to the query.&lt;/p&gt;

&lt;p&gt;It produces a single number called a &lt;strong&gt;relevance score&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The same process is repeated for every retrieved chunk.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsdm3iddi8furd27ubxyw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsdm3iddi8furd27ubxyw.png" alt=" " width="800" height="421"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Query:
"How do I reset my router?"

Chunk 1:
"To restart your device, hold the power button..."

Score: 0.92

Chunk 2:
"Routers usually have several indicator lights..."

Score: 0.61

Chunk 3:
"The router supports both 2.4 GHz and 5 GHz..."

Score: 0.34
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The chunks can then be sorted based on these scores, with the most relevant ones getting higher priority.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6xfmdh9telokvrnh13ej.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6xfmdh9telokvrnh13ej.png" alt=" " width="800" height="371"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  So, What Is the Difference Between Fetching and Ranking?
&lt;/h2&gt;

&lt;p&gt;Both steps are looking for relevant information, but they work differently.&lt;/p&gt;
&lt;h3&gt;
  
  
  Fetching
&lt;/h3&gt;

&lt;p&gt;During the initial retrieval step, the &lt;strong&gt;retriever&lt;/strong&gt; converts the query into an &lt;strong&gt;embedding&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The chunks in the database have already been converted into embeddings.&lt;/p&gt;

&lt;p&gt;The system then compares the query embedding with the chunk embeddings and measures their similarity.&lt;/p&gt;

&lt;p&gt;This allows the &lt;strong&gt;retriever&lt;/strong&gt; to quickly find potentially relevant chunks from a large collection.&lt;/p&gt;

&lt;p&gt;These retrieved chunks are then passed to the reranker.&lt;/p&gt;
&lt;h3&gt;
  
  
  Ranking
&lt;/h3&gt;

&lt;p&gt;Ranking happens after that initial retrieval.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;reranker model&lt;/strong&gt; takes the query and each retrieved chunk together.&lt;/p&gt;

&lt;p&gt;Something like:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[Query: "How do I reset my router?"]

[Chunk: "To restart your device, hold the power button..."]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The reranker looks at the query and the chunk together and produces a relevance score.&lt;/p&gt;

&lt;p&gt;This allows it to make a more detailed judgment about how well that particular chunk matches the query.&lt;/p&gt;

&lt;p&gt;So the basic flow is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Query → Retriever finds candidate chunks → Reranker scores them → Sort by relevance → Send the top ones to the LLM&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9b7346aetvo44hewsp0c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9b7346aetvo44hewsp0c.png" alt=" " width="800" height="256"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;retriever&lt;/strong&gt; helps us find candidates quickly.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;reranker&lt;/strong&gt; then helps us decide &lt;strong&gt;which candidates are actually the most relevant&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;&lt;em&gt;&lt;br&gt;
Your team's attention is limited, and the deluge of AI-generated code is making it harder to keep production reliable and secure without slowing you down.&lt;/em&gt;&lt;/p&gt;
&lt;em&gt;

&lt;p&gt;I'm building &lt;strong&gt;LiveReview&lt;/strong&gt;, a blast-radius aware AI code review built for your business-critical systems.&lt;/p&gt;

&lt;p&gt;Instead of presenting every diff with equal emphasis, &lt;strong&gt;LiveReview scores each change by blast radius — how far its impact reaches through your call graph — so you can focus attention where it actually matters.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Spend code review effort where business risk is highest — not spread evenly across every diff.&lt;/p&gt;

&lt;p&gt;⭐ Star it on GitHub: &lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/HexmosTech" rel="noopener noreferrer"&gt;
        HexmosTech
      &lt;/a&gt; / &lt;a href="https://github.com/HexmosTech/LiveReview" rel="noopener noreferrer"&gt;
        LiveReview
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Blast-Radius Aware AI Code Review for Business-Critical Systems
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/gfx/png/logo-with-text.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fgfx%2Fpng%2Flogo-with-text.png" alt="LiveReview" height="80"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/gitleaks.yml" rel="noopener noreferrer"&gt;&lt;img alt="gitleaks.yml" title="gitleaks.yml: Secret scanning workflow" src="https://github.com/HexmosTech/LiveReview/actions/workflows/gitleaks.yml/badge.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/osv-scanner.yml" rel="noopener noreferrer"&gt;&lt;img alt="osv-scanner.yml" title="osv-scanner.yml: Dependency vulnerability scan" src="https://github.com/HexmosTech/LiveReview/actions/workflows/osv-scanner.yml/badge.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/govulncheck.yml" rel="noopener noreferrer"&gt;&lt;img alt="govulncheck.yml" title="govulncheck.yml: Go vulnerability check" src="https://github.com/HexmosTech/LiveReview/actions/workflows/govulncheck.yml/badge.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/semgrep.yml" rel="noopener noreferrer"&gt;&lt;img alt="semgrep.yml" title="semgrep.yml: Static analysis security scan" src="https://github.com/HexmosTech/LiveReview/actions/workflows/semgrep.yml/badge.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/gfx/dependabot-enabled.svg"&gt;&lt;img alt="dependabot-enabled" title="dependabot-enabled: Automated dependency updates are enabled" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fgfx%2Fdependabot-enabled.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/mcp-testcases.yml" rel="noopener noreferrer"&gt;&lt;img alt="mcp-testcases.yml" title="mcp-testcases.yml: MCP integration test suite" src="https://github.com/HexmosTech/LiveReview/actions/workflows/mcp-testcases.yml/badge.svg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;LiveReview: Blast-Radius Aware AI Code Review for Business-Critical Systems&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;LiveReview is an AI code reviewer that scores every hunk of a diff by &lt;strong&gt;blast radius&lt;/strong&gt;: how far a change reaches through your call graph, how much persistent state it touches, and how well-tested it is. A 3-line change to a shared auth check can outrank a 300-line UI tweak. Your team's attention goes to the highest-risk code first, not spread evenly across every diff.&lt;/p&gt;


  
    
    &lt;span class="m-1"&gt;blast-radius-demo.mp4&lt;/span&gt;
  

  

  


&lt;p&gt;&lt;i&gt;LiveReview's Blast Radius &amp;amp; Review Priority scoring, live in the diff viewer.&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;div class="table-wrapper-paragraph"&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;table&gt;

&lt;thead&gt;

&lt;tr&gt;

&lt;th&gt;The exact math, not a black box&lt;/th&gt;

&lt;th&gt;Visualize blast radius at a glance&lt;/th&gt;

&lt;th&gt;Every factor that feeds the score&lt;/th&gt;

&lt;/tr&gt;

&lt;/thead&gt;

&lt;tbody&gt;

&lt;tr&gt;

&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/screenshots/blast-radius/new-risk-score-3.webp"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fscreenshots%2Fblast-radius%2Fnew-risk-score-3.webp" width="280"&gt;&lt;/a&gt;&lt;/td&gt;

&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/screenshots/blast-radius/new-risk-score-4.webp"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fscreenshots%2Fblast-radius%2Fnew-risk-score-4.webp" width="280"&gt;&lt;/a&gt;&lt;/td&gt;

&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/screenshots/blast-radius/new-risk-score-2.webp"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fscreenshots%2Fblast-radius%2Fnew-risk-score-2.webp" width="280"&gt;&lt;/a&gt;&lt;/td&gt;

&lt;/tr&gt;

&lt;/tbody&gt;

&lt;/table&gt;&lt;/div&gt;&lt;br&gt;
&lt;p&gt;&lt;/p&gt;

How does Blast Radius scoring work? (a more technical explanation)

&lt;p&gt;&lt;strong&gt;Here's the goal:&lt;/strong&gt;&lt;/p&gt;


&lt;ul&gt;

&lt;li&gt;A 3-line fix in a function used by 40 other files, that also writes to a database, should score high.&lt;/li&gt;

&lt;li&gt;A 300-line UI change in one file, fully covered by…&lt;/li&gt;

&lt;/ul&gt;&lt;/div&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/HexmosTech/LiveReview" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;&lt;b&gt;Click below to try LiveReview with your codebase:&lt;/b&gt;&lt;/p&gt;

&lt;/em&gt;&lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://hexmos.com/livereview" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvls0pq7nymbrll98je6s.png" alt="LiveReview Banner" width="800" height="240"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>learning</category>
      <category>rag</category>
    </item>
    <item>
      <title>Why Does RAG Miss Information That's Clearly in the Document?</title>
      <dc:creator>Rijul Rajesh</dc:creator>
      <pubDate>Mon, 21 Sep 2026 18:04:28 +0000</pubDate>
      <link>https://dev.to/rijultp/why-does-rag-miss-information-thats-clearly-in-the-document-2plk</link>
      <guid>https://dev.to/rijultp/why-does-rag-miss-information-thats-clearly-in-the-document-2plk</guid>
      <description>&lt;p&gt;&lt;em&gt;Hello, I'm Rijul, and I'm building LiveReview — a blast-radius aware AI code review built for your business-critical systems. &lt;a href="https://github.com/HexmosTech/LiveReview/" rel="noopener noreferrer"&gt;Star us&lt;/a&gt; to help devs discover the project, give it a try, and share your feedback to help improve the product.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;You have the information in your document. You know it's there.&lt;/p&gt;

&lt;p&gt;But when you ask your RAG system about it, the model gives an answer that misses it completely.&lt;/p&gt;

&lt;p&gt;Why?&lt;/p&gt;

&lt;p&gt;In RAG, the model can only answer using the pieces of text that are retrieved.&lt;/p&gt;

&lt;p&gt;And those pieces of text depend heavily on how the document was split into chunks.&lt;/p&gt;

&lt;p&gt;If the information is split badly, it might never reach the model in the right form, even though it is clearly present in the original document.&lt;/p&gt;

&lt;p&gt;Let's first go through a quick overview of how RAG works.&lt;/p&gt;

&lt;h3&gt;
  
  
  How RAG works
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcpargi0co3p9u0bc7ez2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcpargi0co3p9u0bc7ez2.png" alt=" " width="800" height="266"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You split your documents into small pieces called &lt;strong&gt;chunks&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Each chunk is turned into a number vector called an &lt;strong&gt;embedding&lt;/strong&gt; and stored.&lt;/li&gt;
&lt;li&gt;When someone asks a question, the system finds chunks that are relevant to the question.&lt;/li&gt;
&lt;li&gt;Those chunks are passed to the LLM, which uses them to generate an answer.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The LLM does not necessarily see your whole document. It usually sees only the chunks that are retrieved.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Chunking determines what information can be retrieved and shown to the model.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why chunking matters
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Retrieval sets the ceiling
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4lzmcoaae3rfuvs93db2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4lzmcoaae3rfuvs93db2.png" alt=" " width="799" height="288"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If the information you need is not present in the retrieved chunks, the model cannot use it.&lt;/p&gt;

&lt;p&gt;This means retrieval puts a ceiling on how accurate the answer can be. Even if the LLM is capable of answering the question, it cannot recover information that was never provided to it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Chunks that are too big become less focused
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2gpt2xqj46v7yfq11kbh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2gpt2xqj46v7yfq11kbh.png" alt=" " width="800" height="250"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Suppose you have a large chunk that covers five different topics.&lt;/p&gt;

&lt;p&gt;When this chunk is converted into an embedding, its representation captures information about all of those topics.&lt;/p&gt;

&lt;p&gt;Now imagine someone asks about just one specific topic.&lt;/p&gt;

&lt;p&gt;The chunk may still be retrieved, but its representation is not focused only on that topic. The other topics can make the match less precise.&lt;/p&gt;

&lt;p&gt;So, very large chunks can make retrieval less focused.&lt;/p&gt;

&lt;h3&gt;
  
  
  Chunks that are too small lose context
&lt;/h3&gt;

&lt;p&gt;Now imagine that a chunk contains only a single sentence.&lt;/p&gt;

&lt;p&gt;That sentence might depend on the sentences before it to make sense.&lt;/p&gt;

&lt;p&gt;Without that surrounding context, the chunk may not contain enough information to understand what it is talking about.&lt;/p&gt;

&lt;p&gt;So, making chunks too small can also hurt retrieval.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bad cuts can break ideas apart
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpnc2uxkr16z0wojz10wf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpnc2uxkr16z0wojz10wf.png" alt=" " width="799" height="252"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Suppose a paragraph contains one complete idea, but you split it right in the middle.&lt;/p&gt;

&lt;p&gt;Now the two chunks contain only parts of that idea.&lt;/p&gt;

&lt;p&gt;If the relevant information is split across chunks, retrieving only one of them may not give the LLM enough context to understand the full idea.&lt;/p&gt;

&lt;p&gt;This is why simply cutting text into arbitrary pieces can cause problems.&lt;/p&gt;

&lt;p&gt;Because of these issues, there are different ways to decide where one chunk should end and another should begin.&lt;/p&gt;

&lt;p&gt;Let's look at some common strategies.&lt;/p&gt;




&lt;h2&gt;
  
  
  Common chunking strategies
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Fixed-size chunking
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh99id150bk28lwwwaszf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh99id150bk28lwwwaszf.png" alt=" " width="800" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This splits the document into chunks containing a fixed number of tokens.&lt;/p&gt;

&lt;p&gt;For example, you might create a new chunk every 500 tokens.&lt;/p&gt;

&lt;p&gt;It is simple, but it does not care about the meaning of the text. It can cut a sentence, paragraph, or idea in the middle.&lt;/p&gt;

&lt;h3&gt;
  
  
  Fixed-size chunking with overlap
&lt;/h3&gt;

&lt;p&gt;This is similar to fixed-size chunking, but consecutive chunks share some text.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Chunk 1: A B C D E F
Chunk 2:       E F G H I J
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The overlap helps preserve some context when an idea happens to cross a chunk boundary.&lt;/p&gt;
&lt;h3&gt;
  
  
  Recursive or structure-aware chunking
&lt;/h3&gt;

&lt;p&gt;Instead of immediately cutting at an arbitrary token count, the system tries to preserve the document's structure.&lt;/p&gt;

&lt;p&gt;It might first split by headings, then paragraphs, then sentences, using smaller units only when necessary.&lt;/p&gt;

&lt;p&gt;This helps keep related content together.&lt;/p&gt;
&lt;h3&gt;
  
  
  Semantic chunking
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuzp7yxzmndgltkmjtco8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuzp7yxzmndgltkmjtco8.png" alt=" " width="800" height="292"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Semantic chunking tries to identify where the topic or meaning changes.&lt;/p&gt;

&lt;p&gt;Instead of asking only:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Have we reached 500 tokens?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;it asks something closer to:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Has the topic changed enough that this should become a new chunk?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This can produce more meaningful chunks, but it generally requires additional processing.&lt;/p&gt;
&lt;h3&gt;
  
  
  Parent-child chunking
&lt;/h3&gt;

&lt;p&gt;Here, retrieval happens using smaller &lt;strong&gt;child chunks&lt;/strong&gt;, but when a relevant child is found, the system can provide the larger &lt;strong&gt;parent section&lt;/strong&gt; to the LLM.&lt;/p&gt;

&lt;p&gt;This gives retrieval a focused unit to search while still providing more surrounding context to the model.&lt;/p&gt;
&lt;h3&gt;
  
  
  Contextual chunking
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fybj3xqtvei48fyuh3uav.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fybj3xqtvei48fyuh3uav.png" alt=" " width="800" height="303"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here, additional context is added to each chunk to explain where it came from or what it represents.&lt;/p&gt;

&lt;p&gt;For example, a chunk might be accompanied by information about its document, section, or surrounding context.&lt;/p&gt;

&lt;p&gt;This can help the retrieval system and the LLM interpret the chunk more accurately.&lt;/p&gt;


&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;There is no single way to split a document into chunks.&lt;/p&gt;

&lt;p&gt;The goal is to create chunks that are &lt;strong&gt;focused enough to retrieve accurately, while containing enough context to preserve their meaning&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If the chunks are too large, retrieval can become less focused.&lt;/p&gt;

&lt;p&gt;If they are too small, important context can be lost.&lt;/p&gt;

&lt;p&gt;And if the boundaries break apart ideas, the LLM may never receive the information it needs in a usable form.&lt;/p&gt;

&lt;p&gt;So before blaming the LLM for a bad RAG answer, it is worth looking at something much earlier in the pipeline:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How did you split the document in the first place?&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;&lt;em&gt;&lt;br&gt;
Your team's attention is limited, and the deluge of AI-generated code is making it harder to keep production reliable and secure without slowing you down.&lt;/em&gt;&lt;/p&gt;
&lt;em&gt;

&lt;p&gt;I'm building &lt;strong&gt;LiveReview&lt;/strong&gt;, a blast-radius aware AI code review built for your business-critical systems.&lt;/p&gt;

&lt;p&gt;Instead of presenting every diff with equal emphasis, &lt;strong&gt;LiveReview scores each change by blast radius — how far its impact reaches through your call graph — so you can focus attention where it actually matters.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Spend code review effort where business risk is highest — not spread evenly across every diff.&lt;/p&gt;

&lt;p&gt;⭐ Star it on GitHub: &lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/HexmosTech" rel="noopener noreferrer"&gt;
        HexmosTech
      &lt;/a&gt; / &lt;a href="https://github.com/HexmosTech/LiveReview" rel="noopener noreferrer"&gt;
        LiveReview
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Blast-Radius Aware AI Code Review for Business-Critical Systems
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/gfx/png/logo-with-text.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fgfx%2Fpng%2Flogo-with-text.png" alt="LiveReview" height="80"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/gitleaks.yml" rel="noopener noreferrer"&gt;&lt;img alt="gitleaks.yml" title="gitleaks.yml: Secret scanning workflow" src="https://github.com/HexmosTech/LiveReview/actions/workflows/gitleaks.yml/badge.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/osv-scanner.yml" rel="noopener noreferrer"&gt;&lt;img alt="osv-scanner.yml" title="osv-scanner.yml: Dependency vulnerability scan" src="https://github.com/HexmosTech/LiveReview/actions/workflows/osv-scanner.yml/badge.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/govulncheck.yml" rel="noopener noreferrer"&gt;&lt;img alt="govulncheck.yml" title="govulncheck.yml: Go vulnerability check" src="https://github.com/HexmosTech/LiveReview/actions/workflows/govulncheck.yml/badge.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/semgrep.yml" rel="noopener noreferrer"&gt;&lt;img alt="semgrep.yml" title="semgrep.yml: Static analysis security scan" src="https://github.com/HexmosTech/LiveReview/actions/workflows/semgrep.yml/badge.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/gfx/dependabot-enabled.svg"&gt;&lt;img alt="dependabot-enabled" title="dependabot-enabled: Automated dependency updates are enabled" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fgfx%2Fdependabot-enabled.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/mcp-testcases.yml" rel="noopener noreferrer"&gt;&lt;img alt="mcp-testcases.yml" title="mcp-testcases.yml: MCP integration test suite" src="https://github.com/HexmosTech/LiveReview/actions/workflows/mcp-testcases.yml/badge.svg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;LiveReview: Blast-Radius Aware AI Code Review for Business-Critical Systems&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;LiveReview is an AI code reviewer that scores every hunk of a diff by &lt;strong&gt;blast radius&lt;/strong&gt;: how far a change reaches through your call graph, how much persistent state it touches, and how well-tested it is. A 3-line change to a shared auth check can outrank a 300-line UI tweak. Your team's attention goes to the highest-risk code first, not spread evenly across every diff.&lt;/p&gt;


  
    
    &lt;span class="m-1"&gt;blast-radius-demo.mp4&lt;/span&gt;
  

  

  


&lt;p&gt;&lt;i&gt;LiveReview's Blast Radius &amp;amp; Review Priority scoring, live in the diff viewer.&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;div class="table-wrapper-paragraph"&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;table&gt;

&lt;thead&gt;

&lt;tr&gt;

&lt;th&gt;The exact math, not a black box&lt;/th&gt;

&lt;th&gt;Visualize blast radius at a glance&lt;/th&gt;

&lt;th&gt;Every factor that feeds the score&lt;/th&gt;

&lt;/tr&gt;

&lt;/thead&gt;

&lt;tbody&gt;

&lt;tr&gt;

&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/screenshots/blast-radius/new-risk-score-3.webp"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fscreenshots%2Fblast-radius%2Fnew-risk-score-3.webp" width="280"&gt;&lt;/a&gt;&lt;/td&gt;

&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/screenshots/blast-radius/new-risk-score-4.webp"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fscreenshots%2Fblast-radius%2Fnew-risk-score-4.webp" width="280"&gt;&lt;/a&gt;&lt;/td&gt;

&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/screenshots/blast-radius/new-risk-score-2.webp"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fscreenshots%2Fblast-radius%2Fnew-risk-score-2.webp" width="280"&gt;&lt;/a&gt;&lt;/td&gt;

&lt;/tr&gt;

&lt;/tbody&gt;

&lt;/table&gt;&lt;/div&gt;&lt;br&gt;
&lt;p&gt;&lt;/p&gt;

How does Blast Radius scoring work? (a more technical explanation)

&lt;p&gt;&lt;strong&gt;Here's the goal:&lt;/strong&gt;&lt;/p&gt;


&lt;ul&gt;

&lt;li&gt;A 3-line fix in a function used by 40 other files, that also writes to a database, should score high.&lt;/li&gt;

&lt;li&gt;A 300-line UI change in one file, fully covered by…&lt;/li&gt;

&lt;/ul&gt;&lt;/div&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/HexmosTech/LiveReview" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;&lt;b&gt;Click below to try LiveReview with your codebase:&lt;/b&gt;&lt;/p&gt;

&lt;/em&gt;&lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://hexmos.com/livereview" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvls0pq7nymbrll98je6s.png" alt="LiveReview Banner" width="800" height="240"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>beginners</category>
      <category>llm</category>
      <category>learning</category>
    </item>
    <item>
      <title>Your AI Knows How to Answer. But Who Teaches It What a Good Answer Is?</title>
      <dc:creator>Rijul Rajesh</dc:creator>
      <pubDate>Sun, 20 Sep 2026 18:53:16 +0000</pubDate>
      <link>https://dev.to/rijultp/your-ai-knows-how-to-answer-but-who-teaches-it-what-a-good-answer-is-1fc7</link>
      <guid>https://dev.to/rijultp/your-ai-knows-how-to-answer-but-who-teaches-it-what-a-good-answer-is-1fc7</guid>
      <description>&lt;p&gt;&lt;em&gt;Hello, I'm Rijul, and I'm building LiveReview — a blast-radius aware AI code review built for your business-critical systems. &lt;a href="https://github.com/HexmosTech/LiveReview/" rel="noopener noreferrer"&gt;Star us&lt;/a&gt; to help devs discover the project, give it a try, and share your feedback to help improve the product.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;You use ChatGPT, Gemini, and all these AI bots.&lt;/p&gt;

&lt;p&gt;Whatever you ask, they usually give you a good answer, often something we like to hear.&lt;/p&gt;

&lt;p&gt;Ever wondered how they are tuned to our tastes?&lt;/p&gt;

&lt;p&gt;We humans have a hand in that too. We teach these models to produce responses that people prefer.&lt;/p&gt;

&lt;p&gt;There are different ways to teach a language model to produce responses that people prefer.&lt;/p&gt;

&lt;p&gt;Two important approaches are &lt;strong&gt;DPO&lt;/strong&gt; and &lt;strong&gt;RLHF&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Both use human preferences to guide a model, but they do it differently.&lt;/p&gt;

&lt;p&gt;Let's understand how each one works.&lt;/p&gt;

&lt;h2&gt;
  
  
  DPO
&lt;/h2&gt;

&lt;p&gt;DPO stands for &lt;strong&gt;Direct Preference Optimization&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It is a way to teach a language model which kinds of answers people prefer.&lt;/p&gt;

&lt;p&gt;When a model learns to generate text, you usually want it to produce responses that are helpful, follow instructions, and avoid undesirable behavior.&lt;/p&gt;

&lt;p&gt;But describing exactly what makes an answer "good" can be difficult.&lt;/p&gt;

&lt;p&gt;Instead, we can ask humans to compare answers.&lt;/p&gt;

&lt;p&gt;For example, given the same question, the model might produce two responses:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F71pp8xrm7k0po38x1yyk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F71pp8xrm7k0po38x1yyk.png" alt=" " width="800" height="195"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Answer A:&lt;/strong&gt; Clear, helpful, and directly answers the question.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Answer B:&lt;/strong&gt; Long and confusing, and doesn't really answer the question.&lt;/p&gt;

&lt;p&gt;A human can simply say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A is better than B.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;DPO uses many of these preferences to adjust the model so that it becomes more likely to produce responses similar to the preferred answers.&lt;/p&gt;

&lt;h3&gt;
  
  
  How DPO works
&lt;/h3&gt;

&lt;p&gt;You provide training examples containing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A prompt&lt;/li&gt;
&lt;li&gt;A chosen answer&lt;/li&gt;
&lt;li&gt;A rejected answer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Prompt:
How do I reset my password?

Chosen:
Go to Settings → Security → Reset Password and follow the instructions.

Rejected:
Passwords can be changed in many different ways depending on the situation.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The model learns from many such comparisons.&lt;/p&gt;

&lt;p&gt;A simple way to think about it is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"When you see situations like this, produce something more like A and less like B."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;After seeing enough comparisons, the model learns patterns in the preferences.&lt;/p&gt;
&lt;h3&gt;
  
  
  The problem with DPO
&lt;/h3&gt;

&lt;p&gt;The model learns from the preference data it receives.&lt;/p&gt;

&lt;p&gt;If the human judgments are noisy, inconsistent, or biased, those problems can make their way into the model.&lt;/p&gt;

&lt;p&gt;For example, if humans consistently prefer overly long answers, the model may learn that longer answers are better even when they are not.&lt;/p&gt;

&lt;p&gt;So DPO is only as good as the preference data used to train it.&lt;/p&gt;

&lt;p&gt;Now let's look at another approach.&lt;/p&gt;
&lt;h2&gt;
  
  
  RLHF
&lt;/h2&gt;

&lt;p&gt;RLHF stands for &lt;strong&gt;Reinforcement Learning from Human Feedback&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Like DPO, RLHF uses human preferences to teach a model which responses people prefer.&lt;/p&gt;

&lt;p&gt;But the training process is different.&lt;/p&gt;

&lt;p&gt;A classic RLHF pipeline has three major stages.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh8n9pxpyvzdgikeg4cnj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh8n9pxpyvzdgikeg4cnj.png" alt=" " width="800" height="396"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  1. Start with a base model
&lt;/h3&gt;

&lt;p&gt;First, you start with a pretrained language model.&lt;/p&gt;

&lt;p&gt;It already knows how to generate text, but it may not reliably follow instructions.&lt;/p&gt;

&lt;p&gt;So it is usually fine-tuned on examples of good conversations and instructions.&lt;/p&gt;

&lt;p&gt;This gives you a model that can follow instructions reasonably well.&lt;/p&gt;
&lt;h3&gt;
  
  
  2. Train a reward model
&lt;/h3&gt;

&lt;p&gt;Now humans compare different answers from the model.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Question:
Explain photosynthesis.

Answer A:
Photosynthesis is the process plants use to convert light energy into chemical energy.

Answer B:
Plants use sunlight, water, and carbon dioxide in a biological process.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Humans indicate which answer they prefer.&lt;/p&gt;

&lt;p&gt;A separate model, called a &lt;strong&gt;reward model&lt;/strong&gt;, is then trained on many of these preferences.&lt;/p&gt;

&lt;p&gt;Its job is to predict how much a human would prefer a particular response.&lt;/p&gt;

&lt;p&gt;Instead of simply saying:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A is better than B&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;the reward model can assign scores to responses.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Answer A → 0.82
Answer B → 0.54
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The reward model has learned to act as a rough approximation of the human preferences represented in its training data.&lt;/p&gt;
&lt;h3&gt;
  
  
  3. Practice against the reward model
&lt;/h3&gt;

&lt;p&gt;Now the language model generates new responses.&lt;/p&gt;

&lt;p&gt;The reward model scores those responses.&lt;/p&gt;

&lt;p&gt;The language model is then updated using reinforcement learning to produce responses that receive higher rewards.&lt;/p&gt;

&lt;p&gt;You can think of the process like this:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Language model
      ↓
Generates an answer
      ↓
Reward model
      ↓
Gives a score
      ↓
Reinforcement learning
      ↓
Updates the language model
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;There is also a constraint that keeps the updated model from moving too far away from its original behavior. In classic RLHF, this is commonly implemented using a KL-divergence penalty.&lt;/p&gt;

&lt;p&gt;Without such constraints, the model could find strange ways to increase its reward without actually producing better responses.&lt;/p&gt;
&lt;h3&gt;
  
  
  A simple analogy
&lt;/h3&gt;

&lt;p&gt;Imagine a student learning to write essays.&lt;/p&gt;

&lt;p&gt;First, a group of teachers evaluates a collection of essays and decides which ones are better.&lt;/p&gt;

&lt;p&gt;Then, a grading assistant is trained to imitate those teachers' judgments.&lt;/p&gt;

&lt;p&gt;Now the student can write a new essay, receive a score from the grading assistant, and use that feedback to improve.&lt;/p&gt;

&lt;p&gt;The teachers don't need to grade every essay themselves.&lt;/p&gt;

&lt;p&gt;The grading assistant provides feedback repeatedly while the student practices.&lt;/p&gt;

&lt;p&gt;That is roughly the idea behind the reward-model stage of RLHF.&lt;/p&gt;
&lt;h2&gt;
  
  
  DPO vs RLHF
&lt;/h2&gt;

&lt;p&gt;The biggest difference is what happens after humans provide their preferences.&lt;/p&gt;

&lt;p&gt;With &lt;strong&gt;RLHF&lt;/strong&gt;, those preferences are first used to train a separate reward model. The language model then uses reinforcement learning to optimize against that reward model.&lt;/p&gt;

&lt;p&gt;With &lt;strong&gt;DPO&lt;/strong&gt;, there is no separate reward-model-and-RL loop in the standard DPO procedure. The preference pairs are used directly to optimize the language model.&lt;/p&gt;

&lt;p&gt;You can think of the difference like this:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;RLHF

Human preferences
       ↓
Reward model
       ↓
Reinforcement learning
       ↓
Language model
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DPO

Human preferences
       ↓
Direct preference optimization
       ↓
Language model
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This makes DPO's training pipeline simpler than the classic RLHF setup.&lt;/p&gt;
&lt;h2&gt;
  
  
  The trade-off
&lt;/h2&gt;

&lt;p&gt;RLHF gives you an explicit reward model and an RL optimization process, but that also makes the training pipeline more complicated.&lt;/p&gt;

&lt;p&gt;There are more moving parts, and reinforcement learning introduces its own training challenges.&lt;/p&gt;

&lt;p&gt;DPO removes the separate reward-model training and RL optimization loop, making the preference-training process simpler.&lt;/p&gt;

&lt;p&gt;But DPO still depends heavily on the quality of the preference data.&lt;/p&gt;

&lt;p&gt;In both approaches, there is a fundamental limitation:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The model can only learn the preferences that are represented in the feedback it receives.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If the human preferences are inconsistent, biased, or poorly defined, the resulting model can inherit those problems.&lt;/p&gt;
&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;DPO and RLHF are two different ways of using human preferences to shape the behavior of a language model.&lt;/p&gt;

&lt;p&gt;RLHF uses a &lt;strong&gt;reward model and reinforcement learning&lt;/strong&gt; to turn human preferences into a training signal.&lt;/p&gt;

&lt;p&gt;DPO uses &lt;strong&gt;preference comparisons directly&lt;/strong&gt; to optimize the model.&lt;/p&gt;

&lt;p&gt;The important difference is not that one uses human preferences and the other doesn't.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Both do.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The difference is &lt;strong&gt;how those preferences are turned into updates to the language model.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;&lt;em&gt;&lt;br&gt;
Your team's attention is limited, and the deluge of AI-generated code is making it harder to keep production reliable and secure without slowing you down.&lt;/em&gt;&lt;/p&gt;
&lt;em&gt;

&lt;p&gt;I'm building &lt;strong&gt;LiveReview&lt;/strong&gt;, a blast-radius aware AI code review built for your business-critical systems.&lt;/p&gt;

&lt;p&gt;Instead of presenting every diff with equal emphasis, &lt;strong&gt;LiveReview scores each change by blast radius — how far its impact reaches through your call graph — so you can focus attention where it actually matters.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Spend code review effort where business risk is highest — not spread evenly across every diff.&lt;/p&gt;

&lt;p&gt;⭐ Star it on GitHub: &lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/HexmosTech" rel="noopener noreferrer"&gt;
        HexmosTech
      &lt;/a&gt; / &lt;a href="https://github.com/HexmosTech/LiveReview" rel="noopener noreferrer"&gt;
        LiveReview
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Blast-Radius Aware AI Code Review for Business-Critical Systems
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/gfx/png/logo-with-text.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fgfx%2Fpng%2Flogo-with-text.png" alt="LiveReview" height="80"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/gitleaks.yml" rel="noopener noreferrer"&gt;&lt;img alt="gitleaks.yml" title="gitleaks.yml: Secret scanning workflow" src="https://github.com/HexmosTech/LiveReview/actions/workflows/gitleaks.yml/badge.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/osv-scanner.yml" rel="noopener noreferrer"&gt;&lt;img alt="osv-scanner.yml" title="osv-scanner.yml: Dependency vulnerability scan" src="https://github.com/HexmosTech/LiveReview/actions/workflows/osv-scanner.yml/badge.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/govulncheck.yml" rel="noopener noreferrer"&gt;&lt;img alt="govulncheck.yml" title="govulncheck.yml: Go vulnerability check" src="https://github.com/HexmosTech/LiveReview/actions/workflows/govulncheck.yml/badge.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/semgrep.yml" rel="noopener noreferrer"&gt;&lt;img alt="semgrep.yml" title="semgrep.yml: Static analysis security scan" src="https://github.com/HexmosTech/LiveReview/actions/workflows/semgrep.yml/badge.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/gfx/dependabot-enabled.svg"&gt;&lt;img alt="dependabot-enabled" title="dependabot-enabled: Automated dependency updates are enabled" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fgfx%2Fdependabot-enabled.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/mcp-testcases.yml" rel="noopener noreferrer"&gt;&lt;img alt="mcp-testcases.yml" title="mcp-testcases.yml: MCP integration test suite" src="https://github.com/HexmosTech/LiveReview/actions/workflows/mcp-testcases.yml/badge.svg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;LiveReview: Blast-Radius Aware AI Code Review for Business-Critical Systems&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;LiveReview is an AI code reviewer that scores every hunk of a diff by &lt;strong&gt;blast radius&lt;/strong&gt;: how far a change reaches through your call graph, how much persistent state it touches, and how well-tested it is. A 3-line change to a shared auth check can outrank a 300-line UI tweak. Your team's attention goes to the highest-risk code first, not spread evenly across every diff.&lt;/p&gt;


  
    
    &lt;span class="m-1"&gt;blast-radius-demo.mp4&lt;/span&gt;
  

  

  


&lt;p&gt;&lt;i&gt;LiveReview's Blast Radius &amp;amp; Review Priority scoring, live in the diff viewer.&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;div class="table-wrapper-paragraph"&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;table&gt;

&lt;thead&gt;

&lt;tr&gt;

&lt;th&gt;The exact math, not a black box&lt;/th&gt;

&lt;th&gt;Visualize blast radius at a glance&lt;/th&gt;

&lt;th&gt;Every factor that feeds the score&lt;/th&gt;

&lt;/tr&gt;

&lt;/thead&gt;

&lt;tbody&gt;

&lt;tr&gt;

&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/screenshots/blast-radius/new-risk-score-3.webp"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fscreenshots%2Fblast-radius%2Fnew-risk-score-3.webp" width="280"&gt;&lt;/a&gt;&lt;/td&gt;

&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/screenshots/blast-radius/new-risk-score-4.webp"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fscreenshots%2Fblast-radius%2Fnew-risk-score-4.webp" width="280"&gt;&lt;/a&gt;&lt;/td&gt;

&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/screenshots/blast-radius/new-risk-score-2.webp"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fscreenshots%2Fblast-radius%2Fnew-risk-score-2.webp" width="280"&gt;&lt;/a&gt;&lt;/td&gt;

&lt;/tr&gt;

&lt;/tbody&gt;

&lt;/table&gt;&lt;/div&gt;&lt;br&gt;
&lt;p&gt;&lt;/p&gt;

How does Blast Radius scoring work? (a more technical explanation)

&lt;p&gt;&lt;strong&gt;Here's the goal:&lt;/strong&gt;&lt;/p&gt;


&lt;ul&gt;

&lt;li&gt;A 3-line fix in a function used by 40 other files, that also writes to a database, should score high.&lt;/li&gt;

&lt;li&gt;A 300-line UI change in one file, fully covered by…&lt;/li&gt;

&lt;/ul&gt;&lt;/div&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/HexmosTech/LiveReview" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;&lt;b&gt;Click below to try LiveReview with your codebase:&lt;/b&gt;&lt;/p&gt;

&lt;/em&gt;&lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://hexmos.com/livereview" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvls0pq7nymbrll98je6s.png" alt="LiveReview Banner" width="800" height="240"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>dpo</category>
      <category>rlhf</category>
      <category>ai</category>
      <category>llm</category>
    </item>
    <item>
      <title>Vector Search Isn't Enough for Everything. Meet Hybrid Retrieval</title>
      <dc:creator>Rijul Rajesh</dc:creator>
      <pubDate>Fri, 18 Sep 2026 18:51:23 +0000</pubDate>
      <link>https://dev.to/rijultp/vector-search-isnt-enough-for-everything-meet-hybrid-retrieval-5942</link>
      <guid>https://dev.to/rijultp/vector-search-isnt-enough-for-everything-meet-hybrid-retrieval-5942</guid>
      <description>&lt;p&gt;&lt;em&gt;Hello, I'm Rijul, and I'm building LiveReview — a blast-radius aware AI code review built for your business-critical systems. &lt;a href="https://github.com/HexmosTech/LiveReview/" rel="noopener noreferrer"&gt;Star us&lt;/a&gt; to help devs discover the project, give it a try, and share your feedback to help improve the product.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;When building a RAG system, one of the most common ways to retrieve information is through &lt;strong&gt;embeddings&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The documents are converted into vectors, and when a user asks a question, the question is also converted into a vector.&lt;/p&gt;

&lt;p&gt;The system then looks for documents whose vectors are most similar to the question.&lt;/p&gt;

&lt;p&gt;This works well when the user and the document are talking about the same idea in different words.&lt;/p&gt;

&lt;p&gt;But vector search has some limitations.&lt;/p&gt;

&lt;p&gt;For example, imagine a user asks:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;What is the error code ERR-1042?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;A vector search system is looking for &lt;strong&gt;semantic similarity&lt;/strong&gt;. It may find documents that talk about errors, failures, or troubleshooting, but an exact match for &lt;code&gt;ERR-1042&lt;/code&gt; is not necessarily what semantic similarity is best at.&lt;/p&gt;

&lt;p&gt;This becomes even more important for things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Product IDs&lt;/li&gt;
&lt;li&gt;Error codes&lt;/li&gt;
&lt;li&gt;Part numbers&lt;/li&gt;
&lt;li&gt;Names&lt;/li&gt;
&lt;li&gt;File names&lt;/li&gt;
&lt;li&gt;Exact technical terms&lt;/li&gt;
&lt;li&gt;Code snippets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is also another problem.&lt;/p&gt;

&lt;p&gt;Some questions are too complicated to answer with a single search.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Why did our payment service start failing after the latest deployment?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Finding the answer may require looking at deployment documentation, error logs, configuration changes, and troubleshooting guides.&lt;/p&gt;

&lt;p&gt;A single similarity search may not be enough.&lt;/p&gt;

&lt;p&gt;This brings us to &lt;strong&gt;hybrid retrieval&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Hybrid retrieval brings different ways of finding information together.&lt;/p&gt;

&lt;p&gt;It can combine exact matching, semantic similarity, and, in some systems, reasoning-based retrieval.&lt;/p&gt;
&lt;h3&gt;
  
  
  What is Hybrid Retrieval?
&lt;/h3&gt;

&lt;p&gt;Hybrid retrieval means &lt;strong&gt;searching in more than one way and then combining the results&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Think about a librarian.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxc163ttugl8tbng4ouf0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxc163ttugl8tbng4ouf0.png" alt=" " width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You could describe what a book is about:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I'm looking for a book about the history of computers."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The librarian can use that description to find something relevant.&lt;/p&gt;

&lt;p&gt;But you could also give the librarian the exact title:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I'm looking for &lt;em&gt;The Innovators&lt;/em&gt;."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Or perhaps you give them the exact book ID.&lt;/p&gt;

&lt;p&gt;The librarian can use different pieces of information to find the book.&lt;/p&gt;

&lt;p&gt;Hybrid retrieval works in a similar way.&lt;/p&gt;

&lt;p&gt;Instead of relying on just one retrieval method, it can use multiple methods to find relevant information.&lt;/p&gt;

&lt;p&gt;There are three useful retrieval approaches to understand.&lt;/p&gt;
&lt;h3&gt;
  
  
  1. Keyword Search
&lt;/h3&gt;

&lt;p&gt;Keyword search looks for specific words or terms in the documents.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ERR-1042
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;If a document contains &lt;code&gt;ERR-1042&lt;/code&gt;, keyword search can find it directly.&lt;/p&gt;

&lt;p&gt;This is particularly useful for things where the &lt;strong&gt;exact text matters&lt;/strong&gt;, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Error codes&lt;/li&gt;
&lt;li&gt;Product numbers&lt;/li&gt;
&lt;li&gt;IDs&lt;/li&gt;
&lt;li&gt;Names&lt;/li&gt;
&lt;li&gt;Technical terms&lt;/li&gt;
&lt;li&gt;Code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Keyword search doesn't need to understand the meaning of the query. It looks for matching terms.&lt;/p&gt;
&lt;h3&gt;
  
  
  2. Meaning Search
&lt;/h3&gt;

&lt;p&gt;This is the vector-based search that is commonly used in RAG.&lt;/p&gt;

&lt;p&gt;The system converts the query and documents into embeddings and looks for vectors that are semantically similar.&lt;/p&gt;

&lt;p&gt;For example, the user might ask:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;How do I fix a service that keeps crashing?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;A document might say:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Troubleshooting repeated application failures
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The words are different, but the meaning is similar.&lt;/p&gt;

&lt;p&gt;A semantic search can identify this relationship.&lt;/p&gt;

&lt;p&gt;This makes vector search useful when the user doesn't use the exact words that appear in the documents.&lt;/p&gt;
&lt;h3&gt;
  
  
  3. Reasoning-Based Retrieval
&lt;/h3&gt;

&lt;p&gt;Some questions are more complicated and may require more than one search.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Why did our payment service start failing after the latest deployment?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;An AI system could break this into smaller questions:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. What changed in the latest deployment?
2. What errors are associated with the payment service?
3. Do the deployment changes relate to those errors?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;It can then search for information related to each step.&lt;/p&gt;

&lt;p&gt;This is sometimes called &lt;strong&gt;agentic or multi-step retrieval&lt;/strong&gt;, where the system decides what to search for next based on what it has already found.&lt;/p&gt;

&lt;p&gt;This approach is more useful for complicated questions than for simple lookups.&lt;/p&gt;
&lt;h3&gt;
  
  
  Bringing Them Together
&lt;/h3&gt;

&lt;p&gt;The interesting part is that these approaches don't have to compete with each other.&lt;/p&gt;

&lt;p&gt;A hybrid retrieval system can use them together.&lt;/p&gt;

&lt;p&gt;For example, it could:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User question
      ↓
Keyword search + Meaning search
      ↓
Combine the results
      ↓
Rank the results
      ↓
Smarter model re-ranks the best candidates
      ↓
Relevant context
      ↓
LLM
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The keyword search can catch exact terms.&lt;/p&gt;

&lt;p&gt;The vector search can catch related meanings.&lt;/p&gt;

&lt;p&gt;The results from both searches can then be merged and ranked.&lt;/p&gt;

&lt;p&gt;If a document appears highly relevant in both searches, the system can give it more importance.&lt;/p&gt;

&lt;p&gt;For more complicated questions, the system can also perform additional searches based on what it has learned from the earlier results.&lt;/p&gt;

&lt;p&gt;This gives the RAG system more than one way to find the information it needs.&lt;/p&gt;
&lt;h3&gt;
  
  
  Why Does This Matter?
&lt;/h3&gt;

&lt;p&gt;The main idea is simple.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Different search methods are good at finding different kinds of information.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Keyword search is good when the exact words matter.&lt;/p&gt;

&lt;p&gt;Vector search is good when the meaning matters.&lt;/p&gt;

&lt;p&gt;Reasoning-based retrieval can help when the question itself requires multiple searches.&lt;/p&gt;

&lt;p&gt;By combining them, a RAG system doesn't have to depend entirely on one retrieval method.&lt;/p&gt;

&lt;p&gt;This is why hybrid retrieval can be useful when building RAG systems that need to handle a wide variety of questions.&lt;/p&gt;
&lt;h3&gt;
  
  
  Wrapping Up
&lt;/h3&gt;

&lt;p&gt;Vector search is powerful, but it isn't perfect for every type of query.&lt;/p&gt;

&lt;p&gt;Sometimes you need an exact match.&lt;/p&gt;

&lt;p&gt;Sometimes you need to find something based on meaning.&lt;/p&gt;

&lt;p&gt;And sometimes the question is complicated enough that you need to search multiple times.&lt;/p&gt;

&lt;p&gt;Hybrid retrieval brings these different approaches together.&lt;/p&gt;

&lt;p&gt;The goal isn't necessarily to replace vector search.&lt;/p&gt;

&lt;p&gt;It is to give the retrieval system &lt;strong&gt;more than one way to find the right information&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;&lt;em&gt;&lt;br&gt;
Your team's attention is limited, and the deluge of AI-generated code is making it harder to keep production reliable and secure without slowing you down.&lt;/em&gt;&lt;/p&gt;
&lt;em&gt;

&lt;p&gt;I'm building &lt;strong&gt;LiveReview&lt;/strong&gt;, a blast-radius aware AI code review built for your business-critical systems.&lt;/p&gt;

&lt;p&gt;Instead of presenting every diff with equal emphasis, &lt;strong&gt;LiveReview scores each change by blast radius — how far its impact reaches through your call graph — so you can focus attention where it actually matters.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Spend code review effort where business risk is highest — not spread evenly across every diff.&lt;/p&gt;

&lt;p&gt;⭐ Star it on GitHub: &lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/HexmosTech" rel="noopener noreferrer"&gt;
        HexmosTech
      &lt;/a&gt; / &lt;a href="https://github.com/HexmosTech/LiveReview" rel="noopener noreferrer"&gt;
        LiveReview
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Blast-Radius Aware AI Code Review for Business-Critical Systems
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/gfx/png/logo-with-text.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fgfx%2Fpng%2Flogo-with-text.png" alt="LiveReview" height="80"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/gitleaks.yml" rel="noopener noreferrer"&gt;&lt;img alt="gitleaks.yml" title="gitleaks.yml: Secret scanning workflow" src="https://github.com/HexmosTech/LiveReview/actions/workflows/gitleaks.yml/badge.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/osv-scanner.yml" rel="noopener noreferrer"&gt;&lt;img alt="osv-scanner.yml" title="osv-scanner.yml: Dependency vulnerability scan" src="https://github.com/HexmosTech/LiveReview/actions/workflows/osv-scanner.yml/badge.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/govulncheck.yml" rel="noopener noreferrer"&gt;&lt;img alt="govulncheck.yml" title="govulncheck.yml: Go vulnerability check" src="https://github.com/HexmosTech/LiveReview/actions/workflows/govulncheck.yml/badge.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/semgrep.yml" rel="noopener noreferrer"&gt;&lt;img alt="semgrep.yml" title="semgrep.yml: Static analysis security scan" src="https://github.com/HexmosTech/LiveReview/actions/workflows/semgrep.yml/badge.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/gfx/dependabot-enabled.svg"&gt;&lt;img alt="dependabot-enabled" title="dependabot-enabled: Automated dependency updates are enabled" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fgfx%2Fdependabot-enabled.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/mcp-testcases.yml" rel="noopener noreferrer"&gt;&lt;img alt="mcp-testcases.yml" title="mcp-testcases.yml: MCP integration test suite" src="https://github.com/HexmosTech/LiveReview/actions/workflows/mcp-testcases.yml/badge.svg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;LiveReview: Blast-Radius Aware AI Code Review for Business-Critical Systems&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;LiveReview is an AI code reviewer that scores every hunk of a diff by &lt;strong&gt;blast radius&lt;/strong&gt;: how far a change reaches through your call graph, how much persistent state it touches, and how well-tested it is. A 3-line change to a shared auth check can outrank a 300-line UI tweak. Your team's attention goes to the highest-risk code first, not spread evenly across every diff.&lt;/p&gt;


  
    
    &lt;span class="m-1"&gt;blast-radius-demo.mp4&lt;/span&gt;
  

  

  


&lt;p&gt;&lt;i&gt;LiveReview's Blast Radius &amp;amp; Review Priority scoring, live in the diff viewer.&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;div class="table-wrapper-paragraph"&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;table&gt;

&lt;thead&gt;

&lt;tr&gt;

&lt;th&gt;The exact math, not a black box&lt;/th&gt;

&lt;th&gt;Visualize blast radius at a glance&lt;/th&gt;

&lt;th&gt;Every factor that feeds the score&lt;/th&gt;

&lt;/tr&gt;

&lt;/thead&gt;

&lt;tbody&gt;

&lt;tr&gt;

&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/screenshots/blast-radius/new-risk-score-3.webp"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fscreenshots%2Fblast-radius%2Fnew-risk-score-3.webp" width="280"&gt;&lt;/a&gt;&lt;/td&gt;

&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/screenshots/blast-radius/new-risk-score-4.webp"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fscreenshots%2Fblast-radius%2Fnew-risk-score-4.webp" width="280"&gt;&lt;/a&gt;&lt;/td&gt;

&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/screenshots/blast-radius/new-risk-score-2.webp"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fscreenshots%2Fblast-radius%2Fnew-risk-score-2.webp" width="280"&gt;&lt;/a&gt;&lt;/td&gt;

&lt;/tr&gt;

&lt;/tbody&gt;

&lt;/table&gt;&lt;/div&gt;&lt;br&gt;
&lt;p&gt;&lt;/p&gt;

How does Blast Radius scoring work? (a more technical explanation)

&lt;p&gt;&lt;strong&gt;Here's the goal:&lt;/strong&gt;&lt;/p&gt;


&lt;ul&gt;

&lt;li&gt;A 3-line fix in a function used by 40 other files, that also writes to a database, should score high.&lt;/li&gt;

&lt;li&gt;A 300-line UI change in one file, fully covered by…&lt;/li&gt;

&lt;/ul&gt;&lt;/div&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/HexmosTech/LiveReview" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;&lt;b&gt;Click below to try LiveReview with your codebase:&lt;/b&gt;&lt;/p&gt;

&lt;/em&gt;&lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://hexmos.com/livereview" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvls0pq7nymbrll98je6s.png" alt="LiveReview Banner" width="800" height="240"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>rag</category>
    </item>
    <item>
      <title>Knowledge Poisoning in RAG: Attacking AI Through Its Knowledge Base</title>
      <dc:creator>Rijul Rajesh</dc:creator>
      <pubDate>Thu, 17 Sep 2026 19:14:43 +0000</pubDate>
      <link>https://dev.to/rijultp/knowledge-poisoning-in-rag-attacking-ai-through-its-knowledge-base-3gp1</link>
      <guid>https://dev.to/rijultp/knowledge-poisoning-in-rag-attacking-ai-through-its-knowledge-base-3gp1</guid>
      <description>&lt;p&gt;&lt;em&gt;Hello, I'm Rijul, and I'm building LiveReview — a blast-radius aware AI code review built for your business-critical systems. &lt;a href="https://github.com/HexmosTech/LiveReview/" rel="noopener noreferrer"&gt;Star us&lt;/a&gt; to help devs discover the project, give it a try, and share your feedback to help improve the product.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;If you are familiar with RAG (Retrieval-Augmented Generation), you know that it allows an LLM to answer questions using information from your documents.&lt;/p&gt;

&lt;p&gt;If you are new to RAG, you can check out &lt;a href="https://dev.to/rijultp/youve-heard-of-rag-but-what-does-it-actually-do-5e57"&gt;this article first&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwd8zr1qh4ib1kejvv3bi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwd8zr1qh4ib1kejvv3bi.png" alt=" " width="642" height="201"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At a high level, RAG embeds your documents, retrieves the most relevant pieces for a question, and then passes them to the model as context.&lt;/p&gt;

&lt;p&gt;Now, with any emerging technology, there will always be a security angle.&lt;/p&gt;

&lt;p&gt;RAG is no exception.&lt;/p&gt;

&lt;p&gt;The model relies on the information that gets retrieved.&lt;/p&gt;

&lt;p&gt;So one potential weak point is the &lt;strong&gt;knowledge base itself&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If the documents contain bad or malicious information, the model may use that information when generating its answer.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh599c7s1axiw5utqnzt3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh599c7s1axiw5utqnzt3.png" alt=" " width="482" height="242"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This means an attacker may be able to influence the model's output simply by modifying the documents it retrieves, without directly attacking the model through techniques like jailbreaking.&lt;/p&gt;

&lt;p&gt;This is known as &lt;strong&gt;knowledge poisoning&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;There are different types of attacks.&lt;/p&gt;

&lt;p&gt;Let's look at some of them.&lt;/p&gt;

&lt;h3&gt;
  
  
  Different Types of Attacks
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fch52zdfq7bnnkz00ajln.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fch52zdfq7bnnkz00ajln.png" alt=" " width="541" height="366"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  1. Direct Injection
&lt;/h4&gt;

&lt;p&gt;Here, we plant a false document that looks like a legitimate document.&lt;/p&gt;

&lt;p&gt;When the document is retrieved, the model may treat the false information as real and use it in its answer.&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Prompt Injection
&lt;/h4&gt;

&lt;p&gt;Here, we hide an instruction for the model inside the data.&lt;/p&gt;

&lt;p&gt;When that data is retrieved and included as context, the model may interpret the hidden instruction as something it should follow.&lt;/p&gt;

&lt;p&gt;Depending on the instruction, this could cause the model to produce unintended or potentially harmful output.&lt;/p&gt;

&lt;h4&gt;
  
  
  3. Embedding Hijacking
&lt;/h4&gt;

&lt;p&gt;Here, we add irrelevant text that is designed to be similar to the target query.&lt;/p&gt;

&lt;p&gt;Because the retrieval system looks for similar content, the malicious text may be retrieved instead of the information that actually answers the question.&lt;/p&gt;

&lt;p&gt;The model then receives the wrong context and may produce the wrong answer.&lt;/p&gt;

&lt;h4&gt;
  
  
  4. Gradual Drift
&lt;/h4&gt;

&lt;p&gt;This one is more subtle.&lt;/p&gt;

&lt;p&gt;Instead of making one obvious malicious change, an attacker makes small changes over time.&lt;/p&gt;

&lt;p&gt;Each individual change may look harmless, but together they can gradually push the knowledge base toward incorrect information.&lt;/p&gt;

&lt;p&gt;The problem is that there may be no single edit that clearly explains where things went wrong.&lt;/p&gt;

&lt;p&gt;The incorrect information has accumulated gradually.&lt;/p&gt;




&lt;h3&gt;
  
  
  Understanding It With a Demo
&lt;/h3&gt;

&lt;p&gt;Let's see one of these attacks in action.&lt;/p&gt;

&lt;p&gt;I built a small project that demonstrates knowledge poisoning in a RAG system.&lt;/p&gt;

&lt;p&gt;There are a few different attacks in the project, but I'll demonstrate one of them here.&lt;/p&gt;

&lt;p&gt;You can clone the project here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/RijulTP/rag-demo" rel="noopener noreferrer"&gt;https://github.com/RijulTP/rag-demo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can set your Gemini API key in the environment and try commands such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;make demo-attack1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;When you run it, you first see the original state before poisoning, where it correctly answers the questions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1o7w2dch0b6bhfgodln4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1o7w2dch0b6bhfgodln4.png" alt=" " width="800" height="258"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This shows the state before the knowledge base is poisoned.&lt;/p&gt;

&lt;p&gt;Now let's demonstrate the attack.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzh9e6d7lohcumx29cmg6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzh9e6d7lohcumx29cmg6.png" alt=" " width="800" height="413"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A file called &lt;code&gt;poison_pricing.md&lt;/code&gt; is added to the knowledge base.&lt;/p&gt;

&lt;p&gt;The file contains modified pricing information.&lt;/p&gt;

&lt;p&gt;As a result, when the poisoned document is retrieved, the model uses the incorrect information and gives faulty pricing data.&lt;/p&gt;

&lt;p&gt;Now let's look at the defense.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu6lhd6rormq2pmxpjtox.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu6lhd6rormq2pmxpjtox.png" alt=" " width="800" height="503"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Two defenses are put in place.&lt;/p&gt;

&lt;p&gt;The first is &lt;strong&gt;trusted sources&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The second is a &lt;strong&gt;pattern-based check&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;As you can see, &lt;code&gt;poison_pricing.md&lt;/code&gt; is not included in the trusted sources.&lt;/p&gt;

&lt;p&gt;So the poisoned chunk is dropped before it reaches the model.&lt;/p&gt;

&lt;p&gt;As a result, the poisoned information no longer alters the model's answer.&lt;/p&gt;

&lt;p&gt;So this is one demo, there are few more in the repository, you can try it out.&lt;/p&gt;


&lt;h3&gt;
  
  
  Wrapping Up
&lt;/h3&gt;

&lt;p&gt;RAG doesn't just introduce a retrieval problem. It also introduces a new place where an attacker can try to influence the model: &lt;strong&gt;the knowledge base&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Understanding these attack possibilities is important when building RAG systems.&lt;/p&gt;

&lt;p&gt;Some attacks are easy to spot, while others can be much harder to detect.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gradual drift is especially difficult to catch because there may be no single obvious change responsible for the final incorrect answer.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;&lt;em&gt;&lt;br&gt;
Your team's attention is limited, and the deluge of AI-generated code is making it harder to keep production reliable and secure without slowing you down.&lt;/em&gt;&lt;/p&gt;
&lt;em&gt;

&lt;p&gt;I'm building &lt;strong&gt;LiveReview&lt;/strong&gt;, a blast-radius aware AI code review built for your business-critical systems.&lt;/p&gt;

&lt;p&gt;Instead of presenting every diff with equal emphasis, &lt;strong&gt;LiveReview scores each change by blast radius — how far its impact reaches through your call graph — so you can focus attention where it actually matters.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Spend code review effort where business risk is highest — not spread evenly across every diff.&lt;/p&gt;

&lt;p&gt;⭐ Star it on GitHub: &lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/HexmosTech" rel="noopener noreferrer"&gt;
        HexmosTech
      &lt;/a&gt; / &lt;a href="https://github.com/HexmosTech/LiveReview" rel="noopener noreferrer"&gt;
        LiveReview
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Blast-Radius Aware AI Code Review for Business-Critical Systems
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/gfx/png/logo-with-text.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fgfx%2Fpng%2Flogo-with-text.png" alt="LiveReview" height="80"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/gitleaks.yml" rel="noopener noreferrer"&gt;&lt;img alt="gitleaks.yml" title="gitleaks.yml: Secret scanning workflow" src="https://github.com/HexmosTech/LiveReview/actions/workflows/gitleaks.yml/badge.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/osv-scanner.yml" rel="noopener noreferrer"&gt;&lt;img alt="osv-scanner.yml" title="osv-scanner.yml: Dependency vulnerability scan" src="https://github.com/HexmosTech/LiveReview/actions/workflows/osv-scanner.yml/badge.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/govulncheck.yml" rel="noopener noreferrer"&gt;&lt;img alt="govulncheck.yml" title="govulncheck.yml: Go vulnerability check" src="https://github.com/HexmosTech/LiveReview/actions/workflows/govulncheck.yml/badge.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/semgrep.yml" rel="noopener noreferrer"&gt;&lt;img alt="semgrep.yml" title="semgrep.yml: Static analysis security scan" src="https://github.com/HexmosTech/LiveReview/actions/workflows/semgrep.yml/badge.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/gfx/dependabot-enabled.svg"&gt;&lt;img alt="dependabot-enabled" title="dependabot-enabled: Automated dependency updates are enabled" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fgfx%2Fdependabot-enabled.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/mcp-testcases.yml" rel="noopener noreferrer"&gt;&lt;img alt="mcp-testcases.yml" title="mcp-testcases.yml: MCP integration test suite" src="https://github.com/HexmosTech/LiveReview/actions/workflows/mcp-testcases.yml/badge.svg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;LiveReview: Blast-Radius Aware AI Code Review for Business-Critical Systems&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;LiveReview is an AI code reviewer that scores every hunk of a diff by &lt;strong&gt;blast radius&lt;/strong&gt;: how far a change reaches through your call graph, how much persistent state it touches, and how well-tested it is. A 3-line change to a shared auth check can outrank a 300-line UI tweak. Your team's attention goes to the highest-risk code first, not spread evenly across every diff.&lt;/p&gt;


  
    
    &lt;span class="m-1"&gt;blast-radius-demo.mp4&lt;/span&gt;
  

  

  


&lt;p&gt;&lt;i&gt;LiveReview's Blast Radius &amp;amp; Review Priority scoring, live in the diff viewer.&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;div class="table-wrapper-paragraph"&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;table&gt;

&lt;thead&gt;

&lt;tr&gt;

&lt;th&gt;The exact math, not a black box&lt;/th&gt;

&lt;th&gt;Visualize blast radius at a glance&lt;/th&gt;

&lt;th&gt;Every factor that feeds the score&lt;/th&gt;

&lt;/tr&gt;

&lt;/thead&gt;

&lt;tbody&gt;

&lt;tr&gt;

&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/screenshots/blast-radius/new-risk-score-3.webp"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fscreenshots%2Fblast-radius%2Fnew-risk-score-3.webp" width="280"&gt;&lt;/a&gt;&lt;/td&gt;

&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/screenshots/blast-radius/new-risk-score-4.webp"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fscreenshots%2Fblast-radius%2Fnew-risk-score-4.webp" width="280"&gt;&lt;/a&gt;&lt;/td&gt;

&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/screenshots/blast-radius/new-risk-score-2.webp"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fscreenshots%2Fblast-radius%2Fnew-risk-score-2.webp" width="280"&gt;&lt;/a&gt;&lt;/td&gt;

&lt;/tr&gt;

&lt;/tbody&gt;

&lt;/table&gt;&lt;/div&gt;&lt;br&gt;
&lt;p&gt;&lt;/p&gt;

How does Blast Radius scoring work? (a more technical explanation)

&lt;p&gt;&lt;strong&gt;Here's the goal:&lt;/strong&gt;&lt;/p&gt;


&lt;ul&gt;

&lt;li&gt;A 3-line fix in a function used by 40 other files, that also writes to a database, should score high.&lt;/li&gt;

&lt;li&gt;A 300-line UI change in one file, fully covered by…&lt;/li&gt;

&lt;/ul&gt;&lt;/div&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/HexmosTech/LiveReview" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;&lt;b&gt;Click below to try LiveReview with your codebase:&lt;/b&gt;&lt;/p&gt;

&lt;/em&gt;&lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://hexmos.com/livereview" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvls0pq7nymbrll98je6s.png" alt="LiveReview Banner" width="800" height="240"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>rag</category>
      <category>security</category>
    </item>
    <item>
      <title>Autoregressive vs Diffusion: A Different Way AI Could Generate Text</title>
      <dc:creator>Rijul Rajesh</dc:creator>
      <pubDate>Wed, 16 Sep 2026 18:13:26 +0000</pubDate>
      <link>https://dev.to/rijultp/autoregressive-vs-diffusion-a-different-way-ai-could-generate-text-4c9m</link>
      <guid>https://dev.to/rijultp/autoregressive-vs-diffusion-a-different-way-ai-could-generate-text-4c9m</guid>
      <description>&lt;p&gt;&lt;em&gt;Hello, I'm Rijul, and I'm building LiveReview — a blast-radius aware AI code review built for your business-critical systems. &lt;a href="https://github.com/HexmosTech/LiveReview/" rel="noopener noreferrer"&gt;Star us&lt;/a&gt; to help devs discover the project, give it a try, and share your feedback to help improve the product.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;When you are using AI tools, it is useful to know that there are different ways an AI model can generate text.&lt;/p&gt;

&lt;p&gt;Today, most deployed language models use one main approach, but other approaches are emerging as well.&lt;/p&gt;

&lt;p&gt;Here, I'll introduce you to two different approaches to generating text.&lt;/p&gt;

&lt;p&gt;The first is &lt;strong&gt;autoregressive generation&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Autoregressive
&lt;/h3&gt;

&lt;p&gt;The way autoregressive generation works is quite simple.&lt;/p&gt;

&lt;p&gt;The model generates &lt;strong&gt;one token at a time&lt;/strong&gt;, moving from &lt;strong&gt;left to right&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For example, if we ask the model:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;The cat is sitting on the ___
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The model might first predict:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mat
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Then it uses everything generated so far to predict what comes next.&lt;/p&gt;

&lt;p&gt;So the process looks something like:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;The
   ↓
The cat
   ↓
The cat is
   ↓
The cat is sitting
   ↓
The cat is sitting on
   ↓
The cat is sitting on the mat
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This is the approach used by most deployed language models today.&lt;/p&gt;

&lt;p&gt;The important thing to notice is that the process is &lt;strong&gt;sequential&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The model needs to generate one part before it can move on to the next.&lt;/p&gt;

&lt;p&gt;Once a token has been generated, the model doesn't normally go back and revise it as part of that same generation process.&lt;/p&gt;

&lt;p&gt;This also limits parallelism because the next token depends on the tokens that came before it.&lt;/p&gt;

&lt;p&gt;Now, let's look at an emerging approach that works quite differently.&lt;/p&gt;
&lt;h3&gt;
  
  
  Diffusion
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgjbn9cqabcvx4uchqp42.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgjbn9cqabcvx4uchqp42.png" alt=" " width="800" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Diffusion is more like &lt;strong&gt;sculpting&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Imagine you are making a statue. You start with a rough shape and then keep refining different parts until you get the final result.&lt;/p&gt;

&lt;p&gt;Diffusion-based text generation follows a somewhat similar idea.&lt;/p&gt;

&lt;p&gt;Instead of starting from the first token and generating one token after another, some diffusion language models can start with a sequence containing multiple masked or uncertain positions.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;The [MASK] is [MASK] on the [MASK].
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The model can work on multiple positions rather than being forced to complete them strictly from left to right.&lt;/p&gt;

&lt;p&gt;For example, multiple positions could be refined in the same step:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;The [MASK] is [MASK] on the [MASK].
      ↓           ↓           ↓
The cat is sleeping on the mat.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;But the process doesn't necessarily stop there.&lt;/p&gt;

&lt;p&gt;The model can revisit and refine parts of the sequence based on the surrounding context.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;The cat is sleeping on the mat.
             ↓
          revisit
             ↓
The cat is sitting on the mat.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Here, the model could change an earlier prediction:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sleeping → sitting
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The exact way this refinement works depends on the diffusion model, but the key idea is that the model can iteratively refine the sequence rather than only moving forward from left to right.&lt;/p&gt;

&lt;p&gt;So the process is less like:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Token 1 → Token 2 → Token 3 → Token 4 → ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;and more like:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Multiple uncertain positions
          ↓
   Fill / refine them
          ↓
 Revisit uncertain parts
          ↓
      Refine again
          ↓
     Final sentence
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This also creates opportunities for more parallel processing, since multiple positions can potentially be worked on at the same time.&lt;/p&gt;

&lt;p&gt;Some models exploring this approach include &lt;strong&gt;LLaDA, Dream-7B, and Mercury&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Since this is still an emerging approach, performance varies across models and tasks, while autoregressive generation remains the dominant approach today.&lt;/p&gt;
&lt;h3&gt;
  
  
  The Potential Edge of Diffusion
&lt;/h3&gt;

&lt;p&gt;So why are people interested in this approach?&lt;/p&gt;

&lt;p&gt;One potential advantage is &lt;strong&gt;parallelism&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If multiple parts of the sequence can be processed at the same time, diffusion-based generation could potentially produce responses faster.&lt;/p&gt;

&lt;p&gt;It could also potentially reduce the cost of generation if that parallelism can be used effectively.&lt;/p&gt;

&lt;p&gt;Of course, this doesn't mean diffusion is automatically faster or cheaper in every situation. The actual performance depends on how the model and inference system are designed.&lt;/p&gt;
&lt;h3&gt;
  
  
  A Simple Way to Remember It
&lt;/h3&gt;

&lt;p&gt;You can think of the two approaches like this:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Autoregressive:&lt;/strong&gt; Write the sentence one word at a time, from left to right.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Diffusion:&lt;/strong&gt; Rough out different parts of the sentence and keep refining them until the final version emerges.&lt;/p&gt;

&lt;p&gt;That's the fundamental difference in how they approach text generation.&lt;/p&gt;
&lt;h3&gt;
  
  
  Wrapping Up
&lt;/h3&gt;

&lt;p&gt;There are still many new developments happening in how AI generates text.&lt;/p&gt;

&lt;p&gt;Autoregressive generation is the dominant approach today, but diffusion-based language models are exploring a different way of generating text.&lt;/p&gt;

&lt;p&gt;And the interesting part is that this area is still evolving.&lt;/p&gt;

&lt;p&gt;We are already seeing newer ideas emerge, such as &lt;strong&gt;soft masking&lt;/strong&gt;, which takes the idea of masking and makes it more flexible.&lt;/p&gt;

&lt;p&gt;So, even something as fundamental as &lt;strong&gt;how an AI writes a sentence&lt;/strong&gt; is still being explored.&lt;/p&gt;



&lt;p&gt;&lt;em&gt;&lt;br&gt;
Your team's attention is limited, and the deluge of AI-generated code is making it harder to keep production reliable and secure without slowing you down.&lt;/em&gt;&lt;/p&gt;
&lt;em&gt;

&lt;p&gt;I'm building &lt;strong&gt;LiveReview&lt;/strong&gt;, a blast-radius aware AI code review built for your business-critical systems.&lt;/p&gt;

&lt;p&gt;Instead of presenting every diff with equal emphasis, &lt;strong&gt;LiveReview scores each change by blast radius — how far its impact reaches through your call graph — so you can focus attention where it actually matters.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Spend code review effort where business risk is highest — not spread evenly across every diff.&lt;/p&gt;

&lt;p&gt;⭐ Star it on GitHub: &lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/HexmosTech" rel="noopener noreferrer"&gt;
        HexmosTech
      &lt;/a&gt; / &lt;a href="https://github.com/HexmosTech/LiveReview" rel="noopener noreferrer"&gt;
        LiveReview
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Blast-Radius Aware AI Code Review for Business-Critical Systems
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/gfx/png/logo-with-text.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fgfx%2Fpng%2Flogo-with-text.png" alt="LiveReview" height="80"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/gitleaks.yml" rel="noopener noreferrer"&gt;&lt;img alt="gitleaks.yml" title="gitleaks.yml: Secret scanning workflow" src="https://github.com/HexmosTech/LiveReview/actions/workflows/gitleaks.yml/badge.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/osv-scanner.yml" rel="noopener noreferrer"&gt;&lt;img alt="osv-scanner.yml" title="osv-scanner.yml: Dependency vulnerability scan" src="https://github.com/HexmosTech/LiveReview/actions/workflows/osv-scanner.yml/badge.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/govulncheck.yml" rel="noopener noreferrer"&gt;&lt;img alt="govulncheck.yml" title="govulncheck.yml: Go vulnerability check" src="https://github.com/HexmosTech/LiveReview/actions/workflows/govulncheck.yml/badge.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/semgrep.yml" rel="noopener noreferrer"&gt;&lt;img alt="semgrep.yml" title="semgrep.yml: Static analysis security scan" src="https://github.com/HexmosTech/LiveReview/actions/workflows/semgrep.yml/badge.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/gfx/dependabot-enabled.svg"&gt;&lt;img alt="dependabot-enabled" title="dependabot-enabled: Automated dependency updates are enabled" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fgfx%2Fdependabot-enabled.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/mcp-testcases.yml" rel="noopener noreferrer"&gt;&lt;img alt="mcp-testcases.yml" title="mcp-testcases.yml: MCP integration test suite" src="https://github.com/HexmosTech/LiveReview/actions/workflows/mcp-testcases.yml/badge.svg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;LiveReview: Blast-Radius Aware AI Code Review for Business-Critical Systems&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;LiveReview is an AI code reviewer that scores every hunk of a diff by &lt;strong&gt;blast radius&lt;/strong&gt;: how far a change reaches through your call graph, how much persistent state it touches, and how well-tested it is. A 3-line change to a shared auth check can outrank a 300-line UI tweak. Your team's attention goes to the highest-risk code first, not spread evenly across every diff.&lt;/p&gt;


  
    
    &lt;span class="m-1"&gt;blast-radius-demo.mp4&lt;/span&gt;
  

  

  


&lt;p&gt;&lt;i&gt;LiveReview's Blast Radius &amp;amp; Review Priority scoring, live in the diff viewer.&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;div class="table-wrapper-paragraph"&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;table&gt;

&lt;thead&gt;

&lt;tr&gt;

&lt;th&gt;The exact math, not a black box&lt;/th&gt;

&lt;th&gt;Visualize blast radius at a glance&lt;/th&gt;

&lt;th&gt;Every factor that feeds the score&lt;/th&gt;

&lt;/tr&gt;

&lt;/thead&gt;

&lt;tbody&gt;

&lt;tr&gt;

&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/screenshots/blast-radius/new-risk-score-3.webp"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fscreenshots%2Fblast-radius%2Fnew-risk-score-3.webp" width="280"&gt;&lt;/a&gt;&lt;/td&gt;

&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/screenshots/blast-radius/new-risk-score-4.webp"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fscreenshots%2Fblast-radius%2Fnew-risk-score-4.webp" width="280"&gt;&lt;/a&gt;&lt;/td&gt;

&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/screenshots/blast-radius/new-risk-score-2.webp"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fscreenshots%2Fblast-radius%2Fnew-risk-score-2.webp" width="280"&gt;&lt;/a&gt;&lt;/td&gt;

&lt;/tr&gt;

&lt;/tbody&gt;

&lt;/table&gt;&lt;/div&gt;&lt;br&gt;
&lt;p&gt;&lt;/p&gt;

How does Blast Radius scoring work? (a more technical explanation)

&lt;p&gt;&lt;strong&gt;Here's the goal:&lt;/strong&gt;&lt;/p&gt;


&lt;ul&gt;

&lt;li&gt;A 3-line fix in a function used by 40 other files, that also writes to a database, should score high.&lt;/li&gt;

&lt;li&gt;A 300-line UI change in one file, fully covered by…&lt;/li&gt;

&lt;/ul&gt;&lt;/div&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/HexmosTech/LiveReview" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;&lt;b&gt;Click below to try LiveReview with your codebase:&lt;/b&gt;&lt;/p&gt;

&lt;/em&gt;&lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://hexmos.com/livereview" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvls0pq7nymbrll98je6s.png" alt="LiveReview Banner" width="800" height="240"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
    </item>
    <item>
      <title>Learning to Build with LLMs the Framework-Free Way</title>
      <dc:creator>Rijul Rajesh</dc:creator>
      <pubDate>Mon, 14 Sep 2026 19:01:31 +0000</pubDate>
      <link>https://dev.to/rijultp/learning-to-build-with-llms-the-framework-free-way-336p</link>
      <guid>https://dev.to/rijultp/learning-to-build-with-llms-the-framework-free-way-336p</guid>
      <description>&lt;p&gt;&lt;em&gt;Hello, I'm Rijul, and I'm building LiveReview — a blast-radius aware AI code review built for your business-critical systems. &lt;a href="https://github.com/HexmosTech/LiveReview/" rel="noopener noreferrer"&gt;Star us&lt;/a&gt; to help devs discover the project, give it a try, and share your feedback to help improve the product.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;Usually, when learning to build with LLMs, we start with a framework, follow a quickstart guide, and build a demo.&lt;/p&gt;

&lt;p&gt;The problem is that once everything is set up, you may end up not fully understanding what is actually happening under the hood.&lt;/p&gt;

&lt;p&gt;This can become a problem down the line when you eventually need to tune or modify things.&lt;/p&gt;

&lt;p&gt;Because of this, I found a repository that is quite handy for learning:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI Engineer Notebooks&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can find it here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/calmrocks/ai-engineer-notebooks" rel="noopener noreferrer"&gt;https://github.com/calmrocks/ai-engineer-notebooks&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These are a set of clean, self-contained notebooks that promote more framework-free learning and let you focus on the actual concepts.&lt;/p&gt;

&lt;h3&gt;
  
  
  Checking the First Notebook
&lt;/h3&gt;

&lt;p&gt;Frameworks may change from time to time, but the underlying concepts stay mostly the same.&lt;/p&gt;

&lt;p&gt;So, if you want to try it out, you can go through each Colab notebook one by one, as mentioned in the README.&lt;/p&gt;

&lt;p&gt;Here, I'll be going through one of the notebooks mentioned in the beginning.&lt;/p&gt;

&lt;p&gt;It covers the fundamentals.&lt;/p&gt;

&lt;p&gt;You can find the notebook here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://colab.research.google.com/github/calmrocks/ai-engineer-notebooks/blob/main/01-model-apis/00-prompting-basics.ipynb" rel="noopener noreferrer"&gt;https://colab.research.google.com/github/calmrocks/ai-engineer-notebooks/blob/main/01-model-apis/00-prompting-basics.ipynb&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can first go through the setup.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyr4bpj7zy4ncrsea8s1m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyr4bpj7zy4ncrsea8s1m.png" alt=" " width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can create a free API key at Groq and add it using the key icon on the right.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbm8lptf683k1zancb60i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbm8lptf683k1zancb60i.png" alt=" " width="800" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnbd707yut1gx5vn4du12.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnbd707yut1gx5vn4du12.png" alt=" " width="800" height="487"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The notebook then shows some of the basics, such as prompts and the difference they can make.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7vbd0o37ctrzwi6kxfuf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7vbd0o37ctrzwi6kxfuf.png" alt=" " width="800" height="281"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It also shows how specifying the output format can affect the response.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwuuenzl2ujjinw9kliqx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwuuenzl2ujjinw9kliqx.png" alt=" " width="800" height="334"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Going a Little Further
&lt;/h3&gt;

&lt;p&gt;Now, let's look at another notebook that goes a bit further:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://colab.research.google.com/github/calmrocks/ai-engineer-notebooks/blob/main/02-evals-basics/01-measuring-outputs.ipynb#scrollTo=K6anGbvMJwxm" rel="noopener noreferrer"&gt;https://colab.research.google.com/github/calmrocks/ai-engineer-notebooks/blob/main/02-evals-basics/01-measuring-outputs.ipynb#scrollTo=K6anGbvMJwxm&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This one is more about measurements.&lt;/p&gt;

&lt;p&gt;Imagine you built a little tool.&lt;/p&gt;

&lt;p&gt;Someone emails support, and your tool reads that email and outputs three things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What the problem is&lt;/li&gt;
&lt;li&gt;How urgent it is&lt;/li&gt;
&lt;li&gt;What category it falls into, such as billing or a bug&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsquzlrsie6wfj1qc0uom.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsquzlrsie6wfj1qc0uom.png" alt=" " width="799" height="82"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's it. That's the whole system we're testing.&lt;/p&gt;

&lt;p&gt;Now, how do you know if it's actually good?&lt;/p&gt;

&lt;p&gt;Most people just try a few emails, look at the output, think "Yeah, that looks right," and move on.&lt;/p&gt;

&lt;p&gt;That's what we tend to do by default.&lt;/p&gt;

&lt;p&gt;It feels fine until it isn't.&lt;/p&gt;

&lt;p&gt;The notebook teaches you to do something slightly annoying but much more honest:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Write down the right answers first, before you even start improving anything.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Golden Set
&lt;/h3&gt;

&lt;p&gt;First, they create 6 fake emails and, next to each one, write down what the correct priority and category should be.&lt;/p&gt;

&lt;p&gt;Think of it as an answer key.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Someone got double-charged" → "urgent" and "billing"&lt;/p&gt;

&lt;p&gt;"Someone is asking how to change their email" → "low" priority and "account" category&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;These are simple examples, but now the correct answers are written down instead of just living in your head.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fepg24oaqee8ozwl7g9rs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fepg24oaqee8ozwl7g9rs.png" alt=" " width="800" height="440"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Run the Tests
&lt;/h3&gt;

&lt;p&gt;Now you feed those same 6 emails into your AI tool and check each answer against what you wrote down.&lt;/p&gt;

&lt;p&gt;Did it match?&lt;/p&gt;

&lt;p&gt;Did it not match?&lt;/p&gt;

&lt;p&gt;You add everything up and get a real number, rather than relying on a feeling.&lt;/p&gt;

&lt;p&gt;In this case, the result is &lt;strong&gt;83%&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That's your starting point.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa4s4rbafh80sxrebm0ir.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa4s4rbafh80sxrebm0ir.png" alt=" " width="800" height="206"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Change One Thing
&lt;/h3&gt;

&lt;p&gt;Now, you change the prompt a little.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Run the Same Test Again
&lt;/h3&gt;

&lt;p&gt;Then you run the exact same test again.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fah3os4yxx09nhj6q54ub.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fah3os4yxx09nhj6q54ub.png" alt=" " width="800" height="484"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Initially, the score was &lt;strong&gt;83%&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Now, it has improved to &lt;strong&gt;100%&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That's how you can systematically improve things.&lt;/p&gt;

&lt;h3&gt;
  
  
  Wrapping Up
&lt;/h3&gt;

&lt;p&gt;These are some simple and practical ways of learning what goes into building with LLMs.&lt;/p&gt;

&lt;p&gt;Following this kind of framework-free learning can give you a base-level understanding of the concepts, which can make it easier to handle more complex systems later.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;&lt;br&gt;
Your team's attention is limited, and the deluge of AI-generated code is making it harder to keep production reliable and secure without slowing you down.&lt;/em&gt;&lt;/p&gt;
&lt;em&gt;

&lt;p&gt;I'm building &lt;strong&gt;LiveReview&lt;/strong&gt;, a blast-radius aware AI code review built for your business-critical systems.&lt;/p&gt;

&lt;p&gt;Instead of presenting every diff with equal emphasis, &lt;strong&gt;LiveReview scores each change by blast radius — how far its impact reaches through your call graph — so you can focus attention where it actually matters.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Spend code review effort where business risk is highest — not spread evenly across every diff.&lt;/p&gt;

&lt;p&gt;⭐ Star it on GitHub: &lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/HexmosTech" rel="noopener noreferrer"&gt;
        HexmosTech
      &lt;/a&gt; / &lt;a href="https://github.com/HexmosTech/LiveReview" rel="noopener noreferrer"&gt;
        LiveReview
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Blast-Radius Aware AI Code Review for Business-Critical Systems
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/gfx/png/logo-with-text.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fgfx%2Fpng%2Flogo-with-text.png" alt="LiveReview" height="80"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/gitleaks.yml" rel="noopener noreferrer"&gt;&lt;img alt="gitleaks.yml" title="gitleaks.yml: Secret scanning workflow" src="https://github.com/HexmosTech/LiveReview/actions/workflows/gitleaks.yml/badge.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/osv-scanner.yml" rel="noopener noreferrer"&gt;&lt;img alt="osv-scanner.yml" title="osv-scanner.yml: Dependency vulnerability scan" src="https://github.com/HexmosTech/LiveReview/actions/workflows/osv-scanner.yml/badge.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/govulncheck.yml" rel="noopener noreferrer"&gt;&lt;img alt="govulncheck.yml" title="govulncheck.yml: Go vulnerability check" src="https://github.com/HexmosTech/LiveReview/actions/workflows/govulncheck.yml/badge.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/semgrep.yml" rel="noopener noreferrer"&gt;&lt;img alt="semgrep.yml" title="semgrep.yml: Static analysis security scan" src="https://github.com/HexmosTech/LiveReview/actions/workflows/semgrep.yml/badge.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/gfx/dependabot-enabled.svg"&gt;&lt;img alt="dependabot-enabled" title="dependabot-enabled: Automated dependency updates are enabled" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fgfx%2Fdependabot-enabled.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/mcp-testcases.yml" rel="noopener noreferrer"&gt;&lt;img alt="mcp-testcases.yml" title="mcp-testcases.yml: MCP integration test suite" src="https://github.com/HexmosTech/LiveReview/actions/workflows/mcp-testcases.yml/badge.svg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;LiveReview: Blast-Radius Aware AI Code Review for Business-Critical Systems&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;LiveReview is an AI code reviewer that scores every hunk of a diff by &lt;strong&gt;blast radius&lt;/strong&gt;: how far a change reaches through your call graph, how much persistent state it touches, and how well-tested it is. A 3-line change to a shared auth check can outrank a 300-line UI tweak. Your team's attention goes to the highest-risk code first, not spread evenly across every diff.&lt;/p&gt;

  
    
    &lt;span class="m-1"&gt;blast-radius-demo.mp4&lt;/span&gt;
  

  

  


&lt;p&gt;&lt;i&gt;LiveReview's Blast Radius &amp;amp; Review Priority scoring, live in the diff viewer.&lt;/i&gt;&lt;/p&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;The exact math, not a black box&lt;/th&gt;
&lt;th&gt;Visualize blast radius at a glance&lt;/th&gt;
&lt;th&gt;Every factor that feeds the score&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/screenshots/blast-radius/new-risk-score-3.webp"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fscreenshots%2Fblast-radius%2Fnew-risk-score-3.webp" width="280"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/screenshots/blast-radius/new-risk-score-4.webp"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fscreenshots%2Fblast-radius%2Fnew-risk-score-4.webp" width="280"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/screenshots/blast-radius/new-risk-score-2.webp"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fscreenshots%2Fblast-radius%2Fnew-risk-score-2.webp" width="280"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

How does Blast Radius scoring work? (a more technical explanation)
&lt;p&gt;&lt;strong&gt;Here's the goal:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A 3-line fix in a function used by 40 other files, that also writes to a database, should score high.&lt;/li&gt;
&lt;li&gt;A 300-line UI change in one file, fully covered by…&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/HexmosTech/LiveReview" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;b&gt;Click below to try LiveReview with your codebase:&lt;/b&gt;&lt;/p&gt;

&lt;/em&gt;&lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://hexmos.com/livereview" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvls0pq7nymbrll98je6s.png" alt="LiveReview Banner" width="800" height="240"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
    </item>
    <item>
      <title>The 3 Scaling Laws of AI: From Training More to Thinking More</title>
      <dc:creator>Rijul Rajesh</dc:creator>
      <pubDate>Sun, 13 Sep 2026 19:43:24 +0000</pubDate>
      <link>https://dev.to/rijultp/the-3-scaling-laws-of-ai-from-training-more-to-thinking-more-13hk</link>
      <guid>https://dev.to/rijultp/the-3-scaling-laws-of-ai-from-training-more-to-thinking-more-13hk</guid>
      <description>&lt;p&gt;&lt;em&gt;Hello, I'm Rijul, and I'm building LiveReview — a blast-radius aware AI code review built for your business-critical systems. &lt;a href="https://github.com/HexmosTech/LiveReview/" rel="noopener noreferrer"&gt;Star us&lt;/a&gt; to help devs discover the project, give it a try, and share your feedback to help improve the product.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;We see the pace of AI development speeding up. One way to view this is through the &lt;strong&gt;3 scaling laws of AI&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It originally started with one scaling law, but as AI has advanced, it has grown into 3 different ways of scaling AI capabilities.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pre-training Scaling
&lt;/h3&gt;

&lt;p&gt;This is the scaling involved in the pre-training of a model.&lt;/p&gt;

&lt;p&gt;To help understand it better, imagine a student preparing for a huge general knowledge exam.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4cemwxgit2ovheei93xe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4cemwxgit2ovheei93xe.png" alt=" " width="799" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If they read 10 books, they might do okay.&lt;/p&gt;

&lt;p&gt;But if we scale that to 100 books, they will do much better.&lt;/p&gt;

&lt;p&gt;So, the more they study, the more their score climbs.&lt;/p&gt;

&lt;p&gt;Now, coming to a real example, GPT-2, which was released in 2019, had &lt;strong&gt;1.5 billion parameters&lt;/strong&gt; and was trained on a modest slice of internet text.&lt;/p&gt;

&lt;p&gt;GPT-4-class models were trained on trillions of tokens.&lt;/p&gt;

&lt;p&gt;The difference in knowledge between them is a direct result of pre-training scaling.&lt;/p&gt;

&lt;h3&gt;
  
  
  Post-training Scaling
&lt;/h3&gt;

&lt;p&gt;Now imagine that same well-read student takes practice tests, and a tutor gives them feedback:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbwnyoaln8o6nbrdobb4b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbwnyoaln8o6nbrdobb4b.png" alt=" " width="604" height="393"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;"That answer was too long."&lt;/p&gt;

&lt;p&gt;"You should have shown your reasoning."&lt;/p&gt;

&lt;p&gt;"That tone was rude."&lt;/p&gt;

&lt;p&gt;The student's &lt;em&gt;knowledge&lt;/em&gt; doesn't grow, but their ability to give the answer the grader actually wants improves enormously.&lt;/p&gt;

&lt;p&gt;Coming to a real example, the raw pretrained GPT-3 model had issues with going off-topic.&lt;/p&gt;

&lt;p&gt;But after &lt;strong&gt;reinforcement learning with human feedback&lt;/strong&gt;, it became what we know as ChatGPT.&lt;/p&gt;

&lt;p&gt;The underlying knowledge is largely the same, but its ability to follow instructions and present answers in an ideal way has improved.&lt;/p&gt;

&lt;h3&gt;
  
  
  Inference Time Scaling
&lt;/h3&gt;

&lt;p&gt;Picture 2 students solving a tricky math problem.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5hjzptg4vio6mpnf7d6q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5hjzptg4vio6mpnf7d6q.png" alt=" " width="533" height="271"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One student instantly blurts out the first answer that comes to mind.&lt;/p&gt;

&lt;p&gt;But the second student works it out on scratch paper, checks their steps, tries different approaches, notices their previous mistakes, corrects them, and eventually reaches a solution.&lt;/p&gt;

&lt;p&gt;So, the second student gets the correct answer because they spent more time thinking, not because they studied more beforehand.&lt;/p&gt;

&lt;p&gt;Now, this is what we see with Agentic AI. We can see different effort levels, and the system can determine how much thinking goes into generating a response.&lt;/p&gt;

&lt;p&gt;So, a simple analogy to understand this is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pre-training makes the student smarter, post-training makes the student better at giving good answers, and inference-time scaling makes the student take their time on hard questions.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Wrapping Up
&lt;/h3&gt;

&lt;p&gt;It's interesting to see how AI is evolving and how fast-paced this evolution is.&lt;/p&gt;

&lt;p&gt;When these 3 scaling laws come together, it's even more impressive to see how AI capabilities are continuing to improve, with GPT-6 Astra coming up and the capabilities it is offering.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;&lt;br&gt;
Your team's attention is limited, and the deluge of AI-generated code is making it harder to keep production reliable and secure without slowing you down.&lt;/em&gt;&lt;/p&gt;
&lt;em&gt;

&lt;p&gt;I'm building &lt;strong&gt;LiveReview&lt;/strong&gt;, a blast-radius aware AI code review built for your business-critical systems.&lt;/p&gt;

&lt;p&gt;Instead of presenting every diff with equal emphasis, &lt;strong&gt;LiveReview scores each change by blast radius — how far its impact reaches through your call graph — so you can focus attention where it actually matters.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Spend code review effort where business risk is highest — not spread evenly across every diff.&lt;/p&gt;

&lt;p&gt;⭐ Star it on GitHub: &lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/HexmosTech" rel="noopener noreferrer"&gt;
        HexmosTech
      &lt;/a&gt; / &lt;a href="https://github.com/HexmosTech/LiveReview" rel="noopener noreferrer"&gt;
        LiveReview
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Blast-Radius Aware AI Code Review for Business-Critical Systems
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/gfx/png/logo-with-text.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fgfx%2Fpng%2Flogo-with-text.png" alt="LiveReview" height="80"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/gitleaks.yml" rel="noopener noreferrer"&gt;&lt;img alt="gitleaks.yml" title="gitleaks.yml: Secret scanning workflow" src="https://github.com/HexmosTech/LiveReview/actions/workflows/gitleaks.yml/badge.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/osv-scanner.yml" rel="noopener noreferrer"&gt;&lt;img alt="osv-scanner.yml" title="osv-scanner.yml: Dependency vulnerability scan" src="https://github.com/HexmosTech/LiveReview/actions/workflows/osv-scanner.yml/badge.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/govulncheck.yml" rel="noopener noreferrer"&gt;&lt;img alt="govulncheck.yml" title="govulncheck.yml: Go vulnerability check" src="https://github.com/HexmosTech/LiveReview/actions/workflows/govulncheck.yml/badge.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/semgrep.yml" rel="noopener noreferrer"&gt;&lt;img alt="semgrep.yml" title="semgrep.yml: Static analysis security scan" src="https://github.com/HexmosTech/LiveReview/actions/workflows/semgrep.yml/badge.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/gfx/dependabot-enabled.svg"&gt;&lt;img alt="dependabot-enabled" title="dependabot-enabled: Automated dependency updates are enabled" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fgfx%2Fdependabot-enabled.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/mcp-testcases.yml" rel="noopener noreferrer"&gt;&lt;img alt="mcp-testcases.yml" title="mcp-testcases.yml: MCP integration test suite" src="https://github.com/HexmosTech/LiveReview/actions/workflows/mcp-testcases.yml/badge.svg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;LiveReview: Blast-Radius Aware AI Code Review for Business-Critical Systems&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;LiveReview is an AI code reviewer that scores every hunk of a diff by &lt;strong&gt;blast radius&lt;/strong&gt;: how far a change reaches through your call graph, how much persistent state it touches, and how well-tested it is. A 3-line change to a shared auth check can outrank a 300-line UI tweak. Your team's attention goes to the highest-risk code first, not spread evenly across every diff.&lt;/p&gt;

  
    
    &lt;span class="m-1"&gt;blast-radius-demo.mp4&lt;/span&gt;
  

  

  


&lt;p&gt;&lt;i&gt;LiveReview's Blast Radius &amp;amp; Review Priority scoring, live in the diff viewer.&lt;/i&gt;&lt;/p&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;The exact math, not a black box&lt;/th&gt;
&lt;th&gt;Visualize blast radius at a glance&lt;/th&gt;
&lt;th&gt;Every factor that feeds the score&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/screenshots/blast-radius/new-risk-score-3.webp"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fscreenshots%2Fblast-radius%2Fnew-risk-score-3.webp" width="280"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/screenshots/blast-radius/new-risk-score-4.webp"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fscreenshots%2Fblast-radius%2Fnew-risk-score-4.webp" width="280"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/screenshots/blast-radius/new-risk-score-2.webp"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fscreenshots%2Fblast-radius%2Fnew-risk-score-2.webp" width="280"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

How does Blast Radius scoring work? (a more technical explanation)
&lt;p&gt;&lt;strong&gt;Here's the goal:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A 3-line fix in a function used by 40 other files, that also writes to a database, should score high.&lt;/li&gt;
&lt;li&gt;A 300-line UI change in one file, fully covered by…&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/HexmosTech/LiveReview" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;b&gt;Click below to try LiveReview with your codebase:&lt;/b&gt;&lt;/p&gt;

&lt;/em&gt;&lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://hexmos.com/livereview" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvls0pq7nymbrll98je6s.png" alt="LiveReview Banner" width="800" height="240"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
    </item>
    <item>
      <title>RAG Without Vectors? Meet Vectorless RAG</title>
      <dc:creator>Rijul Rajesh</dc:creator>
      <pubDate>Sat, 12 Sep 2026 20:45:01 +0000</pubDate>
      <link>https://dev.to/rijultp/rag-without-vectors-meet-vectorless-rag-4ikb</link>
      <guid>https://dev.to/rijultp/rag-without-vectors-meet-vectorless-rag-4ikb</guid>
      <description>&lt;p&gt;&lt;em&gt;Hello, I'm Rijul, and I'm building LiveReview — a blast-radius aware AI code review built for your business-critical systems. &lt;a href="https://github.com/HexmosTech/LiveReview/" rel="noopener noreferrer"&gt;Star us&lt;/a&gt; to help devs discover the project, give it a try, and share your feedback to help improve the product.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;If you are familiar with RAGs, you know its usual flow.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjvbbj9l4l3nuuzfoharm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjvbbj9l4l3nuuzfoharm.png" alt=" " width="800" height="240"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Split the document into chunks, convert each chunk into a vector embedding, store them in a vector database, and retrieve the chunk most similar to the query.&lt;/p&gt;

&lt;p&gt;But this approach has some blind spots.&lt;/p&gt;

&lt;p&gt;So, to address some of these issues, there is a concept called Vectorless RAG.&lt;/p&gt;

&lt;h3&gt;
  
  
  Problem with Traditional RAG
&lt;/h3&gt;

&lt;p&gt;The RAG we see works well for many use cases.&lt;/p&gt;

&lt;p&gt;But basic chunk-based RAG can break down on long, structured, or reasoning-heavy documents.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcddjxj19intzid7fbqv7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcddjxj19intzid7fbqv7.png" alt=" " width="799" height="320"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A few pain points are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Fragmented context&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sometimes during chunking, related information can be sliced across different chunks.&lt;/li&gt;
&lt;li&gt;This can separate a number from the sentence that explains it.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Similarity isn't relevance&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Vector search finds text that is semantically close to a query but not necessarily the text that actually answers it.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Opaque retrieval&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The similarity score doesn't tell you why a chunk was chosen. This can be a problem in fields like finance, where traceability matters.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What Does Vectorless RAG Do Differently?
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff99fdh2q7u82qkvqlzq5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff99fdh2q7u82qkvqlzq5.png" alt=" " width="708" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Vectorless RAG can replace similarity-based retrieval with &lt;strong&gt;structure and reasoning&lt;/strong&gt;. Rather than flattening a document into chunks and vectors, some approaches treat the document as a hierarchy, closer to a textbook with a table of contents than a bag of disconnected paragraphs.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Building Blocks: What Makes It Up
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Document Tree.&lt;/strong&gt; Instead of chopping a document into random chunks, it's mapped out like a table of contents, with chapters, sections, and subsections, the same way you'd flip through a book.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Section Summaries.&lt;/strong&gt; Every branch of that tree gets a short summary describing what's inside it, so the system knows what each section is "about" without reading the whole thing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Navigator (LLM Reasoning).&lt;/strong&gt; Instead of a math formula comparing vectors, an LLM reads the tree and reasons through it step by step: "Is the answer likely in Section 2 or Section 5?" Then it drills into the right branch.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Page/Section Pointers.&lt;/strong&gt; Once the right section is found, the system knows exactly which page or part of the document it came from, so answers can be traced back to their exact source.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Issues with Vectorless RAG
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;The cost of infrastructure can shift toward the cost of inference.&lt;/li&gt;
&lt;li&gt;Structure-dependent approaches can have difficulty with unstructured data.&lt;/li&gt;
&lt;li&gt;It's best understood as a complementary strategy.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Wrapping Up
&lt;/h3&gt;

&lt;p&gt;Traditional RAG works well for many use cases, but it can have limitations when dealing with long and structured documents.&lt;/p&gt;

&lt;p&gt;Vectorless RAG takes a different approach by using the structure of the document to navigate and retrieve relevant information.&lt;/p&gt;

&lt;p&gt;It doesn't necessarily mean that vector search needs to be completely replaced. Depending on the use case, both approaches can work together, with each being useful for different types of data and retrieval needs.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;&lt;br&gt;
Your team's attention is limited, and the deluge of AI-generated code is making it harder to keep production reliable and secure without slowing you down.&lt;/em&gt;&lt;/p&gt;
&lt;em&gt;

&lt;p&gt;I'm building &lt;strong&gt;LiveReview&lt;/strong&gt;, a blast-radius aware AI code review built for your business-critical systems.&lt;/p&gt;

&lt;p&gt;Instead of presenting every diff with equal emphasis, &lt;strong&gt;LiveReview scores each change by blast radius — how far its impact reaches through your call graph — so you can focus attention where it actually matters.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Spend code review effort where business risk is highest — not spread evenly across every diff.&lt;/p&gt;

&lt;p&gt;⭐ Star it on GitHub: &lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/HexmosTech" rel="noopener noreferrer"&gt;
        HexmosTech
      &lt;/a&gt; / &lt;a href="https://github.com/HexmosTech/LiveReview" rel="noopener noreferrer"&gt;
        LiveReview
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Blast-Radius Aware AI Code Review for Business-Critical Systems
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/gfx/png/logo-with-text.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fgfx%2Fpng%2Flogo-with-text.png" alt="LiveReview" height="80"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/gitleaks.yml" rel="noopener noreferrer"&gt;&lt;img alt="gitleaks.yml" title="gitleaks.yml: Secret scanning workflow" src="https://github.com/HexmosTech/LiveReview/actions/workflows/gitleaks.yml/badge.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/osv-scanner.yml" rel="noopener noreferrer"&gt;&lt;img alt="osv-scanner.yml" title="osv-scanner.yml: Dependency vulnerability scan" src="https://github.com/HexmosTech/LiveReview/actions/workflows/osv-scanner.yml/badge.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/govulncheck.yml" rel="noopener noreferrer"&gt;&lt;img alt="govulncheck.yml" title="govulncheck.yml: Go vulnerability check" src="https://github.com/HexmosTech/LiveReview/actions/workflows/govulncheck.yml/badge.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/semgrep.yml" rel="noopener noreferrer"&gt;&lt;img alt="semgrep.yml" title="semgrep.yml: Static analysis security scan" src="https://github.com/HexmosTech/LiveReview/actions/workflows/semgrep.yml/badge.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/gfx/dependabot-enabled.svg"&gt;&lt;img alt="dependabot-enabled" title="dependabot-enabled: Automated dependency updates are enabled" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fgfx%2Fdependabot-enabled.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/mcp-testcases.yml" rel="noopener noreferrer"&gt;&lt;img alt="mcp-testcases.yml" title="mcp-testcases.yml: MCP integration test suite" src="https://github.com/HexmosTech/LiveReview/actions/workflows/mcp-testcases.yml/badge.svg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;LiveReview: Blast-Radius Aware AI Code Review for Business-Critical Systems&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;LiveReview is an AI code reviewer that scores every hunk of a diff by &lt;strong&gt;blast radius&lt;/strong&gt;: how far a change reaches through your call graph, how much persistent state it touches, and how well-tested it is. A 3-line change to a shared auth check can outrank a 300-line UI tweak. Your team's attention goes to the highest-risk code first, not spread evenly across every diff.&lt;/p&gt;

  
    
    &lt;span class="m-1"&gt;blast-radius-demo.mp4&lt;/span&gt;
  

  

  


&lt;p&gt;&lt;i&gt;LiveReview's Blast Radius &amp;amp; Review Priority scoring, live in the diff viewer.&lt;/i&gt;&lt;/p&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;The exact math, not a black box&lt;/th&gt;
&lt;th&gt;Visualize blast radius at a glance&lt;/th&gt;
&lt;th&gt;Every factor that feeds the score&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/screenshots/blast-radius/new-risk-score-3.webp"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fscreenshots%2Fblast-radius%2Fnew-risk-score-3.webp" width="280"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/screenshots/blast-radius/new-risk-score-4.webp"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fscreenshots%2Fblast-radius%2Fnew-risk-score-4.webp" width="280"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/screenshots/blast-radius/new-risk-score-2.webp"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fscreenshots%2Fblast-radius%2Fnew-risk-score-2.webp" width="280"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

How does Blast Radius scoring work? (a more technical explanation)
&lt;p&gt;&lt;strong&gt;Here's the goal:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A 3-line fix in a function used by 40 other files, that also writes to a database, should score high.&lt;/li&gt;
&lt;li&gt;A 300-line UI change in one file, fully covered by…&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/HexmosTech/LiveReview" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;b&gt;Click below to try LiveReview with your codebase:&lt;/b&gt;&lt;/p&gt;

&lt;/em&gt;&lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://hexmos.com/livereview" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvls0pq7nymbrll98je6s.png" alt="LiveReview Banner" width="800" height="240"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>rag</category>
    </item>
    <item>
      <title>You Thought Training an AI Model Was Enough. Then There's Post-Training</title>
      <dc:creator>Rijul Rajesh</dc:creator>
      <pubDate>Thu, 10 Sep 2026 20:07:43 +0000</pubDate>
      <link>https://dev.to/rijultp/you-thought-training-an-ai-model-was-enough-then-theres-post-training-e13</link>
      <guid>https://dev.to/rijultp/you-thought-training-an-ai-model-was-enough-then-theres-post-training-e13</guid>
      <description>&lt;p&gt;&lt;em&gt;Hello, I'm Rijul, and I'm building LiveReview — a blast-radius aware AI code review built for your business-critical systems. &lt;a href="https://github.com/HexmosTech/LiveReview/" rel="noopener noreferrer"&gt;Star us&lt;/a&gt; to help devs discover the project, give it a try, and share your feedback to help improve the product.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;When you think of AI models being trained, it's not merely about having a large set of data and training the model on it.&lt;/p&gt;

&lt;p&gt;When you are putting the model as the brain for a chatbot, there is additional training required so that it can respond appropriately to questions.&lt;/p&gt;

&lt;p&gt;This process is called &lt;strong&gt;post-training&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Let me walk you through it and give you a basic idea of how this works.&lt;/p&gt;

&lt;h3&gt;
  
  
  You Have a Raw Pretrained Model: What Next?
&lt;/h3&gt;

&lt;p&gt;You have successfully pre-trained an AI model, and the model is good at predicting the next token based on the internet data it has learned from.&lt;/p&gt;

&lt;p&gt;Now, this is a knowledgeable model.&lt;/p&gt;

&lt;p&gt;But it's not necessarily helpful.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbcz3rzb41gi9iv17sgbj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbcz3rzb41gi9iv17sgbj.png" alt=" " width="800" height="361"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When asked a question, it could refuse to answer, continue the text in an unexpected way, or not follow the instruction properly.&lt;/p&gt;

&lt;p&gt;So what we have here is essentially a &lt;strong&gt;text predictor&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;But we need to turn it into an &lt;strong&gt;assistant&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;First, let's understand &lt;strong&gt;Supervised Fine-Tuning&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Supervised Fine-Tuning
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4120v4tt7idt95diavt6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4120v4tt7idt95diavt6.png" alt=" " width="800" height="387"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Think of SFT as showing the model thousands of worked examples:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Here's a question, and here's exactly how a helpful assistant should answer it."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Humans, or sometimes strong existing models, create these example responses, and the model is trained on them using a process similar to pretraining.&lt;/p&gt;

&lt;p&gt;This is a relatively direct way of teaching the model how we want it to behave.&lt;/p&gt;

&lt;p&gt;It teaches things like following instructions, producing the expected format, and responding in a helpful way.&lt;/p&gt;

&lt;p&gt;The main limitation is that the model is limited by the quality of the responses it is given.&lt;/p&gt;

&lt;p&gt;And when you are thinking at a large scale, creating perfect answers for every possible question doesn't always scale.&lt;/p&gt;

&lt;p&gt;Now, in this technique, we are giving the model examples of the responses we want.&lt;/p&gt;

&lt;p&gt;There is another technique where, instead of giving just one ideal answer, we give the model &lt;strong&gt;preferences between different responses&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Question
   ↓
Response A: Better
Response B: Worse
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The model can then learn which type of response is preferred.&lt;/p&gt;

&lt;p&gt;For this, we will explore &lt;strong&gt;DPO&lt;/strong&gt; and &lt;strong&gt;PPO&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  Proximal Policy Optimization (PPO)
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffx15it29qhstziddzolu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffx15it29qhstziddzolu.png" alt=" " width="627" height="193"&gt;&lt;/a&gt;&lt;br&gt;
PPO is a reinforcement learning technique that can be used for post-training language models.&lt;/p&gt;

&lt;p&gt;A simplified view looks like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Train a separate &lt;strong&gt;reward model&lt;/strong&gt; using examples of human preferences, so that it can predict how good a response is.&lt;/li&gt;
&lt;li&gt;Use the reward model to provide a reward signal while training the language model.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The language model is then optimized to produce responses that receive higher rewards.&lt;/p&gt;
&lt;h3&gt;
  
  
  Direct Preference Optimization
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fl1ki39ghp1uwvnkzhvpp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fl1ki39ghp1uwvnkzhvpp.png" alt=" " width="336" height="179"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DPO was designed as a simpler alternative to the traditional reward-model-based approach.&lt;/li&gt;
&lt;li&gt;There is no separate reward model in the DPO training process.&lt;/li&gt;
&lt;li&gt;Instead, we directly tune the language model using preference data, teaching it to prefer one response over another.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;DPO is generally easier to implement and can be cheaper than a PPO-based approach because it avoids training and maintaining a separate reward model during the preference optimization process.&lt;/p&gt;
&lt;h3&gt;
  
  
  Wrapping Up
&lt;/h3&gt;

&lt;p&gt;It's important to understand that simply training a model on a large amount of data won't necessarily make it ready for the real world.&lt;/p&gt;

&lt;p&gt;We need to perform the appropriate &lt;strong&gt;post-training steps&lt;/strong&gt; so that the model becomes more useful, follows instructions, and responds in the way we expect from an assistant.&lt;/p&gt;



&lt;p&gt;&lt;em&gt;&lt;br&gt;
Your team's attention is limited, and the deluge of AI-generated code is making it harder to keep production reliable and secure without slowing you down.&lt;/em&gt;&lt;/p&gt;
&lt;em&gt;

&lt;p&gt;I'm building &lt;strong&gt;LiveReview&lt;/strong&gt;, a blast-radius aware AI code review built for your business-critical systems.&lt;/p&gt;

&lt;p&gt;Instead of presenting every diff with equal emphasis, &lt;strong&gt;LiveReview scores each change by blast radius — how far its impact reaches through your call graph — so you can focus attention where it actually matters.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Spend code review effort where business risk is highest — not spread evenly across every diff.&lt;/p&gt;

&lt;p&gt;⭐ Star it on GitHub: &lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/HexmosTech" rel="noopener noreferrer"&gt;
        HexmosTech
      &lt;/a&gt; / &lt;a href="https://github.com/HexmosTech/LiveReview" rel="noopener noreferrer"&gt;
        LiveReview
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Blast-Radius Aware AI Code Review for Business-Critical Systems
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/gfx/png/logo-with-text.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fgfx%2Fpng%2Flogo-with-text.png" alt="LiveReview" height="80"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/gitleaks.yml" rel="noopener noreferrer"&gt;&lt;img alt="gitleaks.yml" title="gitleaks.yml: Secret scanning workflow" src="https://github.com/HexmosTech/LiveReview/actions/workflows/gitleaks.yml/badge.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/osv-scanner.yml" rel="noopener noreferrer"&gt;&lt;img alt="osv-scanner.yml" title="osv-scanner.yml: Dependency vulnerability scan" src="https://github.com/HexmosTech/LiveReview/actions/workflows/osv-scanner.yml/badge.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/govulncheck.yml" rel="noopener noreferrer"&gt;&lt;img alt="govulncheck.yml" title="govulncheck.yml: Go vulnerability check" src="https://github.com/HexmosTech/LiveReview/actions/workflows/govulncheck.yml/badge.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/semgrep.yml" rel="noopener noreferrer"&gt;&lt;img alt="semgrep.yml" title="semgrep.yml: Static analysis security scan" src="https://github.com/HexmosTech/LiveReview/actions/workflows/semgrep.yml/badge.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/gfx/dependabot-enabled.svg"&gt;&lt;img alt="dependabot-enabled" title="dependabot-enabled: Automated dependency updates are enabled" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fgfx%2Fdependabot-enabled.svg"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="https://github.com/HexmosTech/LiveReview/actions/workflows/mcp-testcases.yml" rel="noopener noreferrer"&gt;&lt;img alt="mcp-testcases.yml" title="mcp-testcases.yml: MCP integration test suite" src="https://github.com/HexmosTech/LiveReview/actions/workflows/mcp-testcases.yml/badge.svg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;LiveReview: Blast-Radius Aware AI Code Review for Business-Critical Systems&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;LiveReview is an AI code reviewer that scores every hunk of a diff by &lt;strong&gt;blast radius&lt;/strong&gt;: how far a change reaches through your call graph, how much persistent state it touches, and how well-tested it is. A 3-line change to a shared auth check can outrank a 300-line UI tweak. Your team's attention goes to the highest-risk code first, not spread evenly across every diff.&lt;/p&gt;


  
    
    &lt;span class="m-1"&gt;blast-radius-demo.mp4&lt;/span&gt;
  

  

  


&lt;p&gt;&lt;i&gt;LiveReview's Blast Radius &amp;amp; Review Priority scoring, live in the diff viewer.&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;div class="table-wrapper-paragraph"&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;table&gt;

&lt;thead&gt;

&lt;tr&gt;

&lt;th&gt;The exact math, not a black box&lt;/th&gt;

&lt;th&gt;Visualize blast radius at a glance&lt;/th&gt;

&lt;th&gt;Every factor that feeds the score&lt;/th&gt;

&lt;/tr&gt;

&lt;/thead&gt;

&lt;tbody&gt;

&lt;tr&gt;

&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/screenshots/blast-radius/new-risk-score-3.webp"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fscreenshots%2Fblast-radius%2Fnew-risk-score-3.webp" width="280"&gt;&lt;/a&gt;&lt;/td&gt;

&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/screenshots/blast-radius/new-risk-score-4.webp"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fscreenshots%2Fblast-radius%2Fnew-risk-score-4.webp" width="280"&gt;&lt;/a&gt;&lt;/td&gt;

&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/HexmosTech/LiveReview/./assets/screenshots/blast-radius/new-risk-score-2.webp"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHexmosTech%2FLiveReview%2FHEAD%2F.%2Fassets%2Fscreenshots%2Fblast-radius%2Fnew-risk-score-2.webp" width="280"&gt;&lt;/a&gt;&lt;/td&gt;

&lt;/tr&gt;

&lt;/tbody&gt;

&lt;/table&gt;&lt;/div&gt;&lt;br&gt;
&lt;p&gt;&lt;/p&gt;

How does Blast Radius scoring work? (a more technical explanation)

&lt;p&gt;&lt;strong&gt;Here's the goal:&lt;/strong&gt;&lt;/p&gt;


&lt;ul&gt;

&lt;li&gt;A 3-line fix in a function used by 40 other files, that also writes to a database, should score high.&lt;/li&gt;

&lt;li&gt;A 300-line UI change in one file, fully covered by…&lt;/li&gt;

&lt;/ul&gt;&lt;/div&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/HexmosTech/LiveReview" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;&lt;b&gt;Click below to try LiveReview with your codebase:&lt;/b&gt;&lt;/p&gt;

&lt;/em&gt;&lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://hexmos.com/livereview" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvls0pq7nymbrll98je6s.png" alt="LiveReview Banner" width="800" height="240"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
    </item>
  </channel>
</rss>
