<?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: Yann Gilliot</title>
    <description>The latest articles on DEV Community by Yann Gilliot (@yann_gilliot).</description>
    <link>https://dev.to/yann_gilliot</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%2F4152262%2Ff9666947-96d7-405f-a711-279a93b41388.png</url>
      <title>DEV Community: Yann Gilliot</title>
      <link>https://dev.to/yann_gilliot</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yann_gilliot"/>
    <language>en</language>
    <item>
      <title>AI proposes, deterministic logic disposes: the pattern that keeps AI production-ready</title>
      <dc:creator>Yann Gilliot</dc:creator>
      <pubDate>Fri, 02 Oct 2026 10:30:00 +0000</pubDate>
      <link>https://dev.to/yann_gilliot/ai-proposes-deterministic-logic-disposes-the-pattern-that-keeps-ai-production-ready-a96</link>
      <guid>https://dev.to/yann_gilliot/ai-proposes-deterministic-logic-disposes-the-pattern-that-keeps-ai-production-ready-a96</guid>
      <description>&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Three layers: AI proposes with a confidence score, deterministic business rules validate, a human settles what is left.&lt;/li&gt;
&lt;li&gt;AI never writes to the database directly. A hallucination becomes a rejected proposal, not wrong data in production.&lt;/li&gt;
&lt;li&gt;The useful question is not which model is used, it is what happens when that model gets it wrong.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI in production does not decide. It proposes, to a system that has the right to say no. Every AI system I have put into production shares this same three-layer pattern.&lt;/p&gt;

&lt;h2&gt;
  
  
  The three layers of the pattern
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;AI proposes.&lt;/strong&gt; OCR, a language model, extraction: it reads the document or the input data, detects, extracts, and attaches a confidence score to every proposal it makes. It never writes directly to the database.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Business rules validate.&lt;/strong&gt; A deterministic layer, made of ordinary code, testable and auditable, checks every proposal the AI makes: expected formats, consistency against existing reference data, business thresholds. What passes these checks gets accepted. What fails is blocked before it reaches the system.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A human decides.&lt;/strong&gt; A confidence score that is too low, a business rule that gets violated, a case never seen before: the proposal goes into a validation queue, and a person decides. Every human decision is stored and fed back into the system, which improves with use this way, without heavy model retraining.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this pattern actually changes
&lt;/h2&gt;

&lt;p&gt;In this architecture, a model's hallucination is no longer a diffuse, uncontrollable risk. It is an explicitly handled case. An AI that gets something wrong becomes a proposal rejected by the validation layer, never wrong data reaching a production database directly.&lt;/p&gt;

&lt;p&gt;This is exactly how &lt;a href="https://gilabs.fr/en/blog/pipeline-idp-production/" rel="noopener noreferrer"&gt;the document pipeline&lt;/a&gt; I delivered in a demanding industrial context runs day to day. It holds up over time not because the AI never makes a mistake, but because its mistakes structurally have nowhere to go without passing through a check.&lt;/p&gt;

&lt;h2&gt;
  
  
  A detail that is not really a detail
&lt;/h2&gt;

&lt;p&gt;In a system like this, the part actually occupied by artificial intelligence is small. Everything that makes the system trustworthy comes down to ordinary software engineering: tested .NET code, a structured SQL database, explicit business rules, automated tests. That is what I build in a &lt;a href="https://gilabs.fr/en/services/dotnet-ai-integration/" rel="noopener noreferrer"&gt;.NET AI integration&lt;/a&gt;: AI inside the existing code, under its rules.&lt;/p&gt;

&lt;h2&gt;
  
  
  The question worth asking
&lt;/h2&gt;

&lt;p&gt;I am often asked which model I use for a given project. That is almost never the most useful question. The question that actually matters is: what happens when this AI gets it wrong? Sometimes the answer allows full automation, as on &lt;a href="https://gilabs.fr/en/blog/convention-online-ia-autonome/" rel="noopener noreferrer"&gt;the Convention Online AI chain&lt;/a&gt;, where a mistake is fixed on the next pass. If the answer is not clear before the first deployment, the system is not yet ready for production.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://gilabs.fr/en/blog/ia-propose-deterministe-dispose/" rel="noopener noreferrer"&gt;gilabs.fr&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I'm Yann Gilliot, founder of &lt;a href="https://gilabs.fr/en/" rel="noopener noreferrer"&gt;GiLabs&lt;/a&gt;. GiLabs helps SMEs, mid-caps and professional firms succeed in their AI transformation: process mapping, a costed roadmap, then building the agents and applications that run in production, wired into what you already have.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>ai</category>
      <category>architecture</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>RAG on an existing .NET estate: three decisions that change everything</title>
      <dc:creator>Yann Gilliot</dc:creator>
      <pubDate>Wed, 30 Sep 2026 12:34:53 +0000</pubDate>
      <link>https://dev.to/yann_gilliot/rag-on-an-existing-net-estate-three-decisions-that-change-everything-90e</link>
      <guid>https://dev.to/yann_gilliot/rag-on-an-existing-net-estate-three-decisions-that-change-everything-90e</guid>
      <description>&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The source of truth for permissions already lives in the estate: a vector index inside SQL Server, or an Azure AI Search next to the database, avoids recreating a diverging copy.&lt;/li&gt;
&lt;li&gt;Chunking should follow business structure, clauses, sections, paragraphs, not a token window. A fragment cut in half produces an answer off target.&lt;/li&gt;
&lt;li&gt;Orchestration stays in the .NET service layer that is already audited, otherwise a second authorization system quietly appears.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most RAG tutorials start from an empty notebook and a fresh database: a brand new Postgres instance, clean documents already chunked, no access constraints to respect. A client running a Microsoft IT estate starts from somewhere else entirely: a fifteen year old SQL Server, an application in production, permissions already in place, and a security audit that does not forgive shortcuts. In that context, the real question is not which large language model to pick. It is where and how to wire retrieval in without breaking what already holds up.&lt;/p&gt;

&lt;p&gt;Three decisions change everything when integrating a RAG pipeline into a .NET / SQL Server context.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vector storage does not need to live outside the existing estate
&lt;/h2&gt;

&lt;p&gt;The most common reflex is to provision a dedicated vector database, usually outside the existing application boundary. That choice duplicates a problem already solved elsewhere in the estate: who is allowed to see which document. A vector index directly inside SQL Server, or a service like Azure AI Search sitting next to the existing database, lets you reuse the access rules already in place instead of recreating a diverging copy of them. The first question is not the performance of the similarity engine, it is where the source of truth for permissions already lives.&lt;/p&gt;

&lt;h2&gt;
  
  
  Chunking follows business structure, not a token window
&lt;/h2&gt;

&lt;p&gt;Most RAG guides split documents into fixed size chunks, sized to whatever token window the model accepts. That generic chunking ignores the structure of the document. A contract clause cut in half, a report section truncated mid table: the model receives an incomplete fragment and answers off target, even with the best LLM on the market. Chunking should follow the business structure that is already known: the clauses of a contract, the sections of a report, the paragraphs of a procedure. This is often the least visible part of the work, and the one that most determines answer quality.&lt;/p&gt;

&lt;h2&gt;
  
  
  Orchestration stays in the .NET service layer
&lt;/h2&gt;

&lt;p&gt;The third reflex to avoid: pulling the retrieval logic into a separate Python microservice, bolted on next to the existing application. That architecture looks technically neutral, but it quietly recreates a second authorization system, with its own rules, usually less audited than the ones already governing the main application. With &lt;a href="https://gilabs.fr/en/blog/certification-az2005-semantic-kernel/" rel="noopener noreferrer"&gt;Semantic Kernel&lt;/a&gt;, orchestration stays in the .NET service layer that is already in place: the same access checks, the same logging, the same deployment cycle as the rest of the application. RAG becomes one more capability inside a system that is already governed, not a parallel project with its own rules.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I would not do again
&lt;/h2&gt;

&lt;p&gt;Treat RAG as a project on its own: its own database, its own access rules, decoupled from the rest of the IT estate. That setup works well in a demo. It becomes a security and maintenance problem the moment it touches production, right when nobody remembers exactly who has access to what anymore. It is the usual gap between &lt;a href="https://gilabs.fr/en/blog/ce-qui-tient-en-production/" rel="noopener noreferrer"&gt;what works in a demo and what holds up in production&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;RAG does not require rebuilding the existing estate. It requires respecting it: reuse the permissions already in place, respect the business structure of the documents, keep orchestration in the layer that is already audited. It is an architecture question before it is a model question, and that is how I set it up in a &lt;a href="https://gilabs.fr/en/services/dotnet-ai-integration/" rel="noopener noreferrer"&gt;.NET AI integration&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://gilabs.fr/en/guides/rag-sql-server-2025/" rel="noopener noreferrer"&gt;gilabs.fr&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I'm Yann Gilliot, founder of &lt;a href="https://gilabs.fr/en/" rel="noopener noreferrer"&gt;GiLabs&lt;/a&gt;. GiLabs helps SMEs, mid-caps and professional firms succeed in their AI transformation: process mapping, a costed roadmap, then building the agents and applications that run in production, wired into what you already have.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>rag</category>
      <category>ai</category>
      <category>architecture</category>
    </item>
  </channel>
</rss>
