<?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: Nilesh Kumar</title>
    <description>The latest articles on DEV Community by Nilesh Kumar (@nilesh_kumar).</description>
    <link>https://dev.to/nilesh_kumar</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%2F3983017%2F0e0d496b-6827-47b2-960b-7ed1136fc20e.png</url>
      <title>DEV Community: Nilesh Kumar</title>
      <link>https://dev.to/nilesh_kumar</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nilesh_kumar"/>
    <language>en</language>
    <item>
      <title>Vanna AI Alternatives: When RAG-Trained Text-to-SQL Needs Governance</title>
      <dc:creator>Nilesh Kumar</dc:creator>
      <pubDate>Wed, 26 Aug 2026 14:09:20 +0000</pubDate>
      <link>https://dev.to/nilesh_kumar/vanna-ai-alternatives-when-rag-trained-text-to-sql-needs-governance-24ck</link>
      <guid>https://dev.to/nilesh_kumar/vanna-ai-alternatives-when-rag-trained-text-to-sql-needs-governance-24ck</guid>
      <description>&lt;p&gt;Vanna proved you can get surprisingly far by retrieving similar queries and letting the model pattern-match.&lt;/p&gt;

&lt;p&gt;Then someone asks a question that resembles nothing in the training set.&lt;/p&gt;

&lt;h2&gt;
  
  
  How RAG-based text-to-SQL works, and where that ends
&lt;/h2&gt;

&lt;p&gt;Find queries like yours, adapt them. When the question is close to something seen before, it's fast and often right. That's a legitimate architecture and it explains the traction.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Limit&lt;/th&gt;
&lt;th&gt;Why it's structural&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Corpus coverage&lt;/td&gt;
&lt;td&gt;Accuracy tracks how well history covers the question space&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Novel joins&lt;/td&gt;
&lt;td&gt;No precedent to retrieve, so the model improvises&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No entitlement concept&lt;/td&gt;
&lt;td&gt;Similarity doesn't know who's asking&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Silent corpus decay&lt;/td&gt;
&lt;td&gt;Schema evolves; old queries stay in the index&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The entitlement row is the one that blocks enterprise deployment. Retrieval has no notion of authorisation — you can filter the result, but the query already ran with whatever credentials the service holds.&lt;/p&gt;

&lt;h2&gt;
  
  
  The alternative isn't a bigger corpus
&lt;/h2&gt;

&lt;p&gt;More examples raise the floor and don't move the ceiling. The ceiling is that pattern-matching has no model of &lt;em&gt;meaning&lt;/em&gt;, so it cannot distinguish "no precedent exists" from "improvise something plausible."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resolve-then-prove&lt;/strong&gt; instead of retrieve-then-guess:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Parse language into a typed intent&lt;/li&gt;
&lt;li&gt;Resolve entities and metrics against a versioned semantic graph&lt;/li&gt;
&lt;li&gt;Prove a join path exists — fail compilation if it doesn't&lt;/li&gt;
&lt;li&gt;Inject policy predicates for the caller&lt;/li&gt;
&lt;li&gt;Emit dialect-perfect SQL&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Step 3 is what a retrieval corpus fundamentally cannot provide.&lt;/p&gt;

&lt;h2&gt;
  
  
  When Vanna is still the right call
&lt;/h2&gt;

&lt;p&gt;Open source, fast to pilot, full visibility, no procurement. For a proof of concept on a bounded schema it's a reasonable starting point — just budget for the fact that production governance is yours to build.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;The full breakdown&lt;/strong&gt; — the scored alternatives comparison, and the architectural difference between retrieval and resolution — is here:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://colrows.com/blogs/vanna-ai-alternatives/" rel="noopener noreferrer"&gt;Vanna AI Alternatives: When RAG-Trained Text-to-SQL Needs Governance&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://colrows.com/blogs/vanna-ai-alternatives/" rel="noopener noreferrer"&gt;colrows.com/blogs/vanna-ai-alternatives&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>dataengineering</category>
      <category>database</category>
      <category>ai</category>
      <category>datascience</category>
    </item>
    <item>
      <title>Why Power BI Copilot Delivers Wrong Answers (and What It Costs You)</title>
      <dc:creator>Nilesh Kumar</dc:creator>
      <pubDate>Wed, 19 Aug 2026 13:24:44 +0000</pubDate>
      <link>https://dev.to/nilesh_kumar/why-power-bi-copilot-delivers-wrong-answers-and-what-it-costs-you-3gk1</link>
      <guid>https://dev.to/nilesh_kumar/why-power-bi-copilot-delivers-wrong-answers-and-what-it-costs-you-3gk1</guid>
      <description>&lt;p&gt;Power BI Copilot rarely says "I don't know."&lt;/p&gt;

&lt;p&gt;It says a number. The number looks right. That's the expensive part.&lt;/p&gt;

&lt;h2&gt;
  
  
  The failure isn't syntax
&lt;/h2&gt;

&lt;p&gt;The generated DAX or SQL usually runs fine. The failure is semantic — the right query shape over the wrong interpretation.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Failure&lt;/th&gt;
&lt;th&gt;What happens&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Ambiguous column&lt;/td&gt;
&lt;td&gt;Two tables have &lt;code&gt;revenue&lt;/code&gt;; it picks one&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Misread relationship&lt;/td&gt;
&lt;td&gt;Exists in the model, means something else&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lost filter context&lt;/td&gt;
&lt;td&gt;Visual-level filters don't survive into the generated logic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No provenance&lt;/td&gt;
&lt;td&gt;Nobody can tell afterwards which definition produced the number&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;An answer you can't reproduce isn't an answer. It's a suggestion with a decimal point.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why prompting doesn't fix it
&lt;/h2&gt;

&lt;p&gt;Copilot inherits the Power BI semantic model, which means it inherits everything that model leaves ambiguous. If two measures could plausibly answer the question, no amount of prompt engineering tells it which one your CFO means — because that information was never in the model.&lt;/p&gt;

&lt;p&gt;You cannot prompt your way past a missing definition. You can only supply the definition.&lt;/p&gt;

&lt;h2&gt;
  
  
  What closes the gap
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Entities and metrics resolved against a &lt;strong&gt;typed, versioned&lt;/strong&gt; graph before any query exists&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;proven join path&lt;/strong&gt; — no valid path, no query, rather than a plausible guess&lt;/li&gt;
&lt;li&gt;Policy compiled into the query per person, so different entitlements produce different SQL&lt;/li&gt;
&lt;li&gt;An audit trail that reproduces the answer exactly, months later&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On real enterprise schemas that difference is not marginal. Raw schema access scored &lt;strong&gt;14.5%&lt;/strong&gt; in our benchmark; the same model with compiled, governed context scored &lt;strong&gt;98.2%&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The model was never the variable.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;The full breakdown&lt;/strong&gt; — the specific failure modes with examples, what a wrong number costs, and the architectural fix — is here:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://colrows.com/blogs/power-bi-copilot-wrong-answers/" rel="noopener noreferrer"&gt;Why Power BI Copilot Delivers Wrong Answers (and What It Costs You)&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://colrows.com/blogs/power-bi-copilot-wrong-answers/" rel="noopener noreferrer"&gt;colrows.com/blogs/power-bi-copilot-wrong-answers&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>dataengineering</category>
      <category>architecture</category>
      <category>datascience</category>
    </item>
    <item>
      <title>Snowflake vs. Databricks: Why You Need an Autonomous Semantic Layer</title>
      <dc:creator>Nilesh Kumar</dc:creator>
      <pubDate>Wed, 12 Aug 2026 15:40:52 +0000</pubDate>
      <link>https://dev.to/nilesh_kumar/snowflake-vs-databricks-why-you-need-an-autonomous-semantic-layer-4of</link>
      <guid>https://dev.to/nilesh_kumar/snowflake-vs-databricks-why-you-need-an-autonomous-semantic-layer-4of</guid>
      <description>&lt;p&gt;Your warehouse vendor now sells the semantic layer too. Convenient.&lt;/p&gt;

&lt;p&gt;Right up until half the business turns out to live in the other warehouse.&lt;/p&gt;

&lt;h2&gt;
  
  
  Both shipped something real
&lt;/h2&gt;

&lt;p&gt;Snowflake Semantic Views and Databricks Metric Views are genuine improvements. Definitions live next to the data, governed by the platform's own model, queryable by that platform's AI features.&lt;/p&gt;

&lt;p&gt;If your entire estate is on one platform, either will take you a long way.&lt;/p&gt;

&lt;h2&gt;
  
  
  Almost nobody's estate is on one platform
&lt;/h2&gt;

&lt;p&gt;There's a warehouse, a lakehouse someone piloted, an operational Postgres, and a SaaS system that never got migrated. A warehouse-native semantic layer can only see its own warehouse.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Consequence&lt;/th&gt;
&lt;th&gt;What it looks like&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Cross-platform joins&lt;/td&gt;
&lt;td&gt;Fall back to hand-written SQL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Duplicate definitions&lt;/td&gt;
&lt;td&gt;Same metric defined twice, drifting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Per-platform governance&lt;/td&gt;
&lt;td&gt;Coverage is per-platform, so gaps are structural&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Partial answers&lt;/td&gt;
&lt;td&gt;Agent returns a confident number computed over two thirds of the data&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That last one is the dangerous failure. Nothing errors. The number is just wrong in a way nobody can see.&lt;/p&gt;

&lt;h2&gt;
  
  
  The walled garden problem
&lt;/h2&gt;

&lt;p&gt;There is also an incentive question worth naming: a warehouse vendor's semantic layer is, among other things, a reason to move more data into that warehouse. That's not sinister — it's product strategy — but it means "should meaning live inside the warehouse?" is being answered by parties who benefit from one answer.&lt;/p&gt;

&lt;p&gt;Meaning has to sit &lt;strong&gt;above&lt;/strong&gt; the warehouse, not inside one of them: one versioned graph across the estate, join paths proven regardless of which engine holds the tables, compile-time policy applied uniformly, and dialect-perfect SQL emitted per target.&lt;/p&gt;

&lt;p&gt;Adopt the native features. Just don't mistake them for the layer that spans your business.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;The full breakdown&lt;/strong&gt; — what each platform's feature does and where it stops, plus the cross-estate architecture — is here:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://colrows.com/blogs/snowflake-databricks-semantic-layer/" rel="noopener noreferrer"&gt;Snowflake vs. Databricks: Why You Need an Autonomous Semantic Layer&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://colrows.com/blogs/snowflake-databricks-semantic-layer/" rel="noopener noreferrer"&gt;colrows.com/blogs/snowflake-databricks-semantic-layer&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>dataengineering</category>
      <category>database</category>
      <category>ai</category>
      <category>cloud</category>
    </item>
    <item>
      <title>Semantic Layer vs. Knowledge Graph: Choosing Your AI Data Foundation</title>
      <dc:creator>Nilesh Kumar</dc:creator>
      <pubDate>Fri, 07 Aug 2026 17:18:30 +0000</pubDate>
      <link>https://dev.to/nilesh_kumar/semantic-layer-vs-knowledge-graph-choosing-your-ai-data-foundation-5717</link>
      <guid>https://dev.to/nilesh_kumar/semantic-layer-vs-knowledge-graph-choosing-your-ai-data-foundation-5717</guid>
      <description>&lt;p&gt;Knowledge graph people and semantic layer people keep arguing past each other.&lt;/p&gt;

&lt;p&gt;One models how things relate. The other proves what a number means. You probably need both.&lt;/p&gt;

&lt;h2&gt;
  
  
  The honest division of labour
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Knowledge graph&lt;/th&gt;
&lt;th&gt;Semantic layer&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Models&lt;/td&gt;
&lt;td&gt;Entities and relationships&lt;/td&gt;
&lt;td&gt;Metrics, grain, filters, policy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Strong at&lt;/td&gt;
&lt;td&gt;Traversal, inference, causality&lt;/td&gt;
&lt;td&gt;Aggregation, definition, governance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Weak at&lt;/td&gt;
&lt;td&gt;Math and consistent aggregates&lt;/td&gt;
&lt;td&gt;Anything not modelled as a metric&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Typical failure&lt;/td&gt;
&lt;td&gt;Ontology drifts, nobody notices&lt;/td&gt;
&lt;td&gt;Question falls outside the metric set&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Answers&lt;/td&gt;
&lt;td&gt;"How is X connected to Y?"&lt;/td&gt;
&lt;td&gt;"What is X, exactly, for this person?"&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Ask an agent &lt;em&gt;"why did EMEA churn spike after the pricing change"&lt;/em&gt; and you need both: the causal path through the graph, and a metric definition precise enough that the number is defensible.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the argument actually goes wrong
&lt;/h2&gt;

&lt;p&gt;Treating them as competing purchases. They operate on different layers of the same problem — one is topology, the other is semantics plus policy.&lt;/p&gt;

&lt;p&gt;The real question is neither. It's &lt;strong&gt;which layer executes&lt;/strong&gt;. A graph and a definition are both inert until something compiles them into governed SQL and runs it against your warehouse.&lt;/p&gt;

&lt;h2&gt;
  
  
  The execution gap
&lt;/h2&gt;

&lt;p&gt;That's the piece most architectures are missing. You can have an immaculate ontology and a complete metric catalogue and still have no answer to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does a valid join path exist for this specific question?&lt;/li&gt;
&lt;li&gt;Is this caller entitled to these rows?&lt;/li&gt;
&lt;li&gt;Can I reproduce this answer in six months?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Intent → context resolution → constrained planning → governed execution.&lt;/strong&gt; The graph feeds step two. The semantic layer feeds steps two and four. Neither performs step three.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;The full breakdown&lt;/strong&gt; — the division of labour in detail, a worked customer-risk example, and how the two compose — is here:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://colrows.com/blogs/semantic-layer-vs-knowledge-graph/" rel="noopener noreferrer"&gt;Semantic Layer vs. Knowledge Graph: Choosing Your AI Data Foundation&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://colrows.com/blogs/semantic-layer-vs-knowledge-graph/" rel="noopener noreferrer"&gt;colrows.com/blogs/semantic-layer-vs-knowledge-graph&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>dataengineering</category>
      <category>database</category>
      <category>ai</category>
      <category>datascience</category>
    </item>
    <item>
      <title>Governing AI Agents: Why Compile-Time Security is Mandatory</title>
      <dc:creator>Nilesh Kumar</dc:creator>
      <pubDate>Wed, 05 Aug 2026 14:28:24 +0000</pubDate>
      <link>https://dev.to/nilesh_kumar/governing-ai-agents-why-compile-time-security-is-mandatory-13a7</link>
      <guid>https://dev.to/nilesh_kumar/governing-ai-agents-why-compile-time-security-is-mandatory-13a7</guid>
      <description>&lt;p&gt;The moment you hand an agent warehouse credentials, your governance model is already obsolete.&lt;/p&gt;

&lt;p&gt;Prompts aren't policy. Output filters aren't controls. Logs aren't proof.&lt;/p&gt;

&lt;h2&gt;
  
  
  Every runtime guardrail shares one flaw
&lt;/h2&gt;

&lt;p&gt;It fires after the query ran. The rows moved. You are not preventing exposure — you're annotating it.&lt;/p&gt;

&lt;p&gt;That ordering problem is not solvable by making the classifier better. It's solvable by moving the decision earlier.&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually governs an agent
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Step&lt;/th&gt;
&lt;th&gt;What happens&lt;/th&gt;
&lt;th&gt;What it prevents&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Intent parsing&lt;/td&gt;
&lt;td&gt;Language → typed intent&lt;/td&gt;
&lt;td&gt;Prompt injection reaching SQL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Context resolution&lt;/td&gt;
&lt;td&gt;Entities and metrics resolved against a versioned graph&lt;/td&gt;
&lt;td&gt;Guessed column semantics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Join proof&lt;/td&gt;
&lt;td&gt;Path proven, or compilation fails&lt;/td&gt;
&lt;td&gt;Invented relationships&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Policy injection&lt;/td&gt;
&lt;td&gt;RBAC + ABAC + row/column predicates&lt;/td&gt;
&lt;td&gt;Unauthorised rows ever being read&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Audit emission&lt;/td&gt;
&lt;td&gt;Question → SQL → predicates → result&lt;/td&gt;
&lt;td&gt;An unanswerable post-incident review&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The agent never sees a table it wasn't entitled to. Not because it behaved well — because the query was never compiled.&lt;/p&gt;

&lt;h2&gt;
  
  
  The test to run on any vendor
&lt;/h2&gt;

&lt;p&gt;Ask what happens when a user requests something they're not entitled to.&lt;/p&gt;

&lt;p&gt;If the answer involves filtering the result set, the data already left the warehouse and you're being sold a logging feature as a security control.&lt;/p&gt;

&lt;p&gt;If the answer is "compilation fails," you're looking at governance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why compile-time is the only defensible position
&lt;/h2&gt;

&lt;p&gt;Regulators don't accept "the model said so" as a control, and they never have. A number that informed a decision has to be reconstructable months later with the definitions that were in force at the time.&lt;/p&gt;

&lt;p&gt;That means policy has to be part of query construction, not a wrapper around it — and the audit artefact has to be the SQL itself, not a description of intent.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;The full breakdown&lt;/strong&gt; — the governance architecture step by step, policy composition across scopes, and the audit format — is here:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://colrows.com/blogs/how-to-govern-ai-agents-that-query-enterprise-data/" rel="noopener noreferrer"&gt;Governing AI Agents: Why Compile-Time Security is Mandatory&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://colrows.com/blogs/how-to-govern-ai-agents-that-query-enterprise-data/" rel="noopener noreferrer"&gt;colrows.com/blogs/how-to-govern-ai-agents-that-query-enterprise-data&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>dataengineering</category>
      <category>architecture</category>
      <category>datascience</category>
    </item>
  </channel>
</rss>
