<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>AI Apps | The .NET Blog</title><link>https://thedotnetblog.com/hi/tags/ai-apps/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>hi</language><managingEditor>@thedotnetblog (The .NET Blog)</managingEditor><webMaster>@thedotnetblog</webMaster><lastBuildDate>Sun, 26 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://thedotnetblog.com/hi/tags/ai-apps/index.xml" rel="self" type="application/rss+xml"/><item><title>SQL Server 2025 आपकी agent-ready डेटाबेस के रूप में: सुरक्षा, बैकअप और MCP एक ही इंजन में</title><link>https://thedotnetblog.com/hi/news/emiliano-montesdeoca/sql-server-2025-agent-ready-security-mcp/</link><pubDate>Sun, 26 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/hi/news/emiliano-montesdeoca/sql-server-2025-agent-ready-security-mcp/</guid><description>Polyglot Tax सीरीज़ का अंतिम भाग production की कठिन समस्याओं पर बात करता है: relational, JSON, graph और vector डेटा पर unified Row-Level Security, साथ ही cryptographic audit trails और MCP integration जो SQL Server 2025 को सच में agent-ready बनाते हैं।</description><content:encoded>&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित है। मूल संस्करण के लिए, &lt;a href="https://thedotnetblog.com/posts/emiliano-montesdeoca/sql-server-2025-agent-ready-security-mcp/"&gt;यहाँ क्लिक करें&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;मैंने Aditya Badramraju की Polyglot Tax सीरीज़ को बहुत रुचि से फॉलो किया है। भाग 1-3 ने SQL Server 2025 के लिए एक बहुत मजबूत मामला बनाया था — एक ही engine में JSON, graph, vector और relational डेटा, unified query planner के साथ। भाग 4 उस कहानी को उस हिस्से तक ले जाता है जो वाकई तय करता है कि आप इस architecture पर production में भरोसा करेंगे या नहीं।&lt;/p&gt;
&lt;p&gt;संकेत: production कहानी मजबूत है।&lt;/p&gt;
&lt;h2 id="सभ-data-models-क-लए-एक-security-model"&gt;सभी Data Models के लिए एक Security Model&lt;/h2&gt;
&lt;p&gt;Polyglot stacks के साथ यही समस्या है: जब auditor पूछता है, &amp;ldquo;साबित करो कि Tenant A, Tenant B का डेटा नहीं देख सकता&amp;rdquo;, तो आपको यह सवाल हर database के लिए अलग-अलग जवाब देना पड़ता है। पाँच databases, पाँच security models, पाँच proofs.&lt;/p&gt;
&lt;p&gt;SQL Server 2025 के साथ, आप एक ही Row-Level Security policy परिभाषित करते हैं और वह सभी data models पर लागू हो जाती है:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;FUNCTION&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dbo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fn_TenantFilter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;TenantID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;INT&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;RETURNS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;TABLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;WITH&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SCHEMABINDING&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;RETURN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fn_result&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;WHERE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;TenantID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;CAST&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SESSION_CONTEXT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;N&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;TenantID&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;INT&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;SECURITY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;POLICY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TenantIsolation&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ADD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FILTER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PREDICATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dbo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fn_TenantFilter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TenantID&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ON&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dbo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Customers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;-- Relational
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ADD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FILTER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PREDICATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dbo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fn_TenantFilter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TenantID&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ON&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dbo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Events&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;-- JSON data
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ADD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FILTER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PREDICATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dbo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fn_TenantFilter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TenantID&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ON&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dbo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Relationships&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;-- Graph edges
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ADD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FILTER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PREDICATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dbo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fn_TenantFilter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TenantID&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ON&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dbo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Embeddings&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;-- Vector data
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;WITH&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;STATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;ON&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;उस बिंदु से आगे, हर query — relational joins, JSON path queries, graph traversals, vector similarity searches — अपने आप tenant के हिसाब से filter हो जाती है। engine execution plan में predicate inject कर देता है, storage से कोई data बाहर जाने से पहले। आपके calling code को हर जगह &lt;code&gt;WHERE TenantID = @id&lt;/code&gt; लिखने की जरूरत नहीं रहती। आप policy एक बार test करते हैं।&lt;/p&gt;
&lt;p&gt;layers आगे भी compose होती हैं: उन columns के लिए Dynamic Data Masking जिन्हें कुछ roles को पूरा value नहीं दिखाना चाहिए, end-to-end encryption के लिए Always Encrypted (DBAs भी data नहीं पढ़ सकते), और stored procedures को permission boundary की तरह इस्तेमाल करना ताकि agents सिर्फ वही call करें जो आपने explicitly expose किया है।&lt;/p&gt;
&lt;p&gt;यह architecture का वह हिस्सा है जो compliance-heavy SaaS के लिए सबसे ज्यादा मायने रखता है। एक policy, एक proof.&lt;/p&gt;
&lt;h2 id="unified-backup--atomic-recovery"&gt;Unified Backup = Atomic Recovery&lt;/h2&gt;
&lt;p&gt;एक statement, सभी data models, consistent point in time:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;BACKUP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DATABASE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MultiModelApp&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;TO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;URL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;https://storage.blob.core.windows.net/backups/MultiModelApp.bak&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;WITH&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;COMPRESSION&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ENCRYPTION&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ALGORITHM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AES_256&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SERVER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CERTIFICATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;BackupCert&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;RESTORE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DATABASE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MultiModelApp&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;URL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;https://storage.blob.core.windows.net/backups/MultiModelApp.bak&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;WITH&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STOPAT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;2026-02-01 10:30:00&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Polyglot stack में, पाँच databases के लिए point-in-time recovery का मतलब पाँच restore operations को coordinate करना और उम्मीद करना होता है कि timestamps एक-दो सेकंड के भीतर मिल जाएँ। financial data के लिए वह दो सेकंड का फर्क स्वीकार्य नहीं है। एक database, एक transaction log, एक restore — recovery definition से atomic है।&lt;/p&gt;
&lt;h2 id="tamper-evident-audit-trails-क-लए-ledger-tables"&gt;Tamper-Evident Audit Trails के लिए Ledger Tables&lt;/h2&gt;
&lt;p&gt;regulated industries के लिए, &amp;ldquo;हमारे पास logs हैं&amp;rdquo; इतना काफी नहीं है। आपको cryptographic proof चाहिए कि उन logs के साथ छेड़छाड़ नहीं हुई:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;TABLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FinancialTransactions&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TransactionID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;INT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;PRIMARY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AccountID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;INT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Amount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MONEY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TransactionType&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NVARCHAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TransactionDate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DATETIME2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SYSUTCDATETIME&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;WITH&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SYSTEM_VERSIONING&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;ON&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LEDGER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;ON&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;हर insert, update और delete को cryptographically hash करके blockchain-style structure में दर्ज किया जाता है। आप auditor को mathematically साबित कर सकते हैं कि row लिखे जाने के बाद से उसमें छेड़छाड़ नहीं हुई है। polyglot stack में, यह capability आपकी सभी databases में uniformly मौजूद नहीं होती।&lt;/p&gt;
&lt;h2 id="mcp-integration-बन-hand-coded-middleware-क-agents"&gt;MCP Integration: बिना Hand-Coded Middleware के Agents&lt;/h2&gt;
&lt;p&gt;सीरीज़ यहीं तक जा रही थी: SQL Server 2025 सीधे SQL MCP Server support करता है, जिसका मतलब है कि आपके agents natural-language tool calls के जरिए database को call कर सकते हैं, बिना हर operation के लिए middleware लिखे।&lt;/p&gt;
&lt;p&gt;इसे stored procedures as the permission boundary और engine-level Row-Level Security के साथ जोड़ें, और आपके पास ऐसा model है जहाँ:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Agent एक tool call करता है, जैसे &amp;ldquo;account 12345 के लिए customer context प्राप्त करो&amp;rdquo;&lt;/li&gt;
&lt;li&gt;MCP उसे आपके defined stored procedure में translate करता है&lt;/li&gt;
&lt;li&gt;SQL engine tenant isolation और column masking को automatically enforce करता है&lt;/li&gt;
&lt;li&gt;Agent को सिर्फ वही data मिलता है जिसे देखने की अनुमति है&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;कोई middleware layer नहीं। ad-hoc query injection का risk नहीं। authorization agent नहीं, engine संभालता है।&lt;/p&gt;
&lt;h2 id="यह-net-developers-क-लए-कय-मयन-रखत-ह"&gt;यह .NET Developers के लिए क्यों मायने रखता है&lt;/h2&gt;
&lt;p&gt;अगर आप .NET services बना रहे हैं और SQL Server आपका primary store है, तो इस सीरीज़ का संदेश है: आपको caching के लिए Redis, relationships के लिए graph database, या embeddings के लिए vector store जोड़ने की जरूरत नहीं है — SQL Server 2025 यह सब संभालता है, और polyglot stack से बेहतर operational consistency के साथ, plus ऐसी unified security जो सच में auditable है।&lt;/p&gt;
&lt;p&gt;MCP integration का मतलब है कि आपके Semantic Kernel agents या Microsoft Agent Framework workflows उसी SQL MCP Server के जरिए data tier से interact कर सकते हैं, उसी security guarantees के साथ जिन्हें आप human queries पर भी लागू करेंगे।&lt;/p&gt;
&lt;h2 id="समपन"&gt;समापन&lt;/h2&gt;
&lt;p&gt;Polyglot Tax सीरीज़ शुरू से अंत तक पढ़ने लायक है। भाग 1-3 query planner की कहानी साबित करते हैं। भाग 4 production की कहानी साबित करता है। .NET developers के लिए जो Azure SQL पर agent-first या AI-augmented applications बना रहे हैं, यह architecture गंभीर विचार के लायक है।&lt;/p&gt;
&lt;p&gt;Aditya Badramraju का मूल post: &lt;a href="https://devblogs.microsoft.com/azure-sql/the-polyglot-tax-part-4/"&gt;The Polyglot Tax – Part 4&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>क्या Copilot को हर दिन 68 मिनट कोड फिर से समझाने में लग रहे हैं? इसका हल है</title><link>https://thedotnetblog.com/hi/news/emiliano-montesdeoca/auto-memory-stop-re-explaining-code-to-copilot/</link><pubDate>Thu, 23 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/hi/news/emiliano-montesdeoca/auto-memory-stop-re-explaining-code-to-copilot/</guid><description>Context rot असली है — आपका AI agent 30 turns के बाद drift करने लगता है, और आप हर घंटे compaction tax चुकाते हैं। auto-memory GitHub Copilot CLI को हजारों tokens जलाए बिना surgical recall देता है।</description><content:encoded>&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित की गई है। मूल संस्करण के लिए, &lt;a href="https://thedotnetblog.com/hi/news/emiliano-montesdeoca/auto-memory-stop-re-explaining-code-to-copilot/"&gt;यहाँ क्लिक करें&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;क्या आप वह पल जानते हैं जब आपकी Copilot session &lt;code&gt;/compact&lt;/code&gt; पर पहुँचती है और agent पूरी तरह भूल जाता है कि आप क्या कर रहे थे? अगले पाँच मिनट आप file structure, failing test, और वे तीन approaches फिर से समझाते हैं जिन्हें आप पहले ही आज़मा चुके हैं। फिर यह सब दोबारा होता है। और फिर दोबारा।&lt;/p&gt;
&lt;p&gt;Desi Villanueva ने इसे time किया: &lt;strong&gt;68 minutes per day&lt;/strong&gt; — सिर्फ़ re-orientation में। कोड लिखने में नहीं। PRs review करने में नहीं। बस AI को वह याद दिलाने में जो वह पहले से जानता था।&lt;/p&gt;
&lt;p&gt;असल में ऐसा क्यों होता है, और इसका एक ठोस हल भी है।&lt;/p&gt;
&lt;h2 id="कनटकसट-वड-क-झठ-कहन"&gt;कॉन्टेक्स्ट विंडो की झूठी कहानी&lt;/h2&gt;
&lt;p&gt;आपके agent के बॉक्स पर एक बड़ा नंबर लिखा होता है। 200K tokens. बहुत बड़ा लगता है। व्यवहार में यह एक ceiling है, कोई गारंटी नहीं।&lt;/p&gt;
&lt;p&gt;असल गणित यह है:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;200K कुल context&lt;/li&gt;
&lt;li&gt;लगभग 65K MCP tools के लिए जो startup पर लोड होते हैं (~33%)&lt;/li&gt;
&lt;li&gt;लगभग 10K instruction files के लिए, जैसे &lt;code&gt;AGENTS.md&lt;/code&gt; या &lt;code&gt;copilot-instructions.md&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;इससे आपके पास लगभग &lt;strong&gt;125K बचते हैं, उससे पहले कि आप एक शब्द भी लिखें&lt;/strong&gt;। और हालात और खराब हैं — LLMs context भरते जाने पर शालीनता से degrade नहीं होते। वे लगभग 60% capacity पर दीवार से टकरा जाते हैं। मॉडल 30 turns पहले कही गई बातें खोने लगता है, पहले दिए गए जवाबों का विरोध करता है, और 10 मिनट पहले जिन file names को बहुत आत्मविश्वास से बताया था, उन्हें भी hallucinate करने लगता है। उद्योग इसे &amp;ldquo;lost in the middle&amp;rdquo; problem कहता है।&lt;/p&gt;
&lt;p&gt;प्रभावी सीमा: &lt;strong&gt;45K tokens&lt;/strong&gt; उसके बाद quality गिरने लगती है। यानी शायद 20-30 active conversation turns, फिर agent drift करने लगता है। इसी वजह से आप हर 45 मिनट में &lt;code&gt;/compact&lt;/code&gt; कर रहे हैं — इसलिए नहीं कि आपने 200K tokens भर दिए, बल्कि इसलिए कि model पहले ही 120K पर खराब होने लगा है।&lt;/p&gt;
&lt;h2 id="कमपकशन-टकस"&gt;कॉम्पैक्शन टैक्स&lt;/h2&gt;
&lt;p&gt;हर &lt;code&gt;/compact&lt;/code&gt; आपका flow state छीन लेता है। आप एक deep debugging session में हैं। shared context 30 मिनट से बन रहा था। agent को file structure, failing test, और hypothesis पता है। फिर warning आ जाती है।&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;अनदेखा करें → agent धीरे-धीरे बेवकूफ होता जाता है, पुरानी state hallucinate करता है&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/compact&lt;/code&gt; चलाएँ → agent को 30 मिनट की investigation का दो पैराग्राफ़ का सार मिल जाता है&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;दोनों ही हालात में नुकसान होता है। दोनों ही हालात में आप अपने project को किसी नए join किए हुए employee की तरह दोहरा रहे होते हैं।&lt;/p&gt;
&lt;p&gt;कड़वी बात? &lt;strong&gt;Memory पहले से मौजूद है&lt;/strong&gt;। Copilot CLI हर session को &lt;code&gt;~/.copilot/session-store.db&lt;/code&gt; नाम की local SQLite database में लिखता है — हर touched file, हर turn, हर checkpoint. सब disk पर मौजूद है. Agent बस उसे पढ़ नहीं सकता.&lt;/p&gt;
&lt;h2 id="auto-memory-एक-recall-layer-memory-system-नह"&gt;auto-memory: एक recall layer, memory system नहीं&lt;/h2&gt;
&lt;p&gt;auto-memory के पीछे यही मुख्य विचार है: नया memory system मत बनाइए — जो पहले से है, उसके ऊपर एक read-only query layer बनाइए।&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pip install auto-memory
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;करीब 1,900 lines of Python। Zero dependencies. 30 seconds में install.&lt;/p&gt;
&lt;p&gt;Context को grep results से भरने के बजाय, आप agent को उस चीज़ तक surgical access देते हैं जो सच में मायने रखती है:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ऑपरेशन&lt;/th&gt;
&lt;th&gt;Tokens&lt;/th&gt;
&lt;th&gt;आपको क्या मिलता है&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;grep -r &amp;quot;auth&amp;quot; src/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;~5,000–10,000&lt;/td&gt;
&lt;td&gt;500 results, जिनमें से ज़्यादातर irrelevant हैं&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;find . -name &amp;quot;*.py&amp;quot;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;~2,000&lt;/td&gt;
&lt;td&gt;सभी Python files, बिना context के&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agent re-orientation&lt;/td&gt;
&lt;td&gt;~2,000&lt;/td&gt;
&lt;td&gt;आप उसे वह समझा रहे हैं जो उसे पहले से पता होना चाहिए&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;auto-memory files --json --limit 10&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~50&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;कल आपने जिन 10 files पर काम किया था&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;यह 200x improvement है। Agent archaeology dig छोड़ देता है और सीधे उस चीज़ पर पहुँच जाता है जो मायने रखती है।&lt;/p&gt;
&lt;p&gt;Recommended flow: जब आप 50-70% context usage के पास पहुँचें, &lt;code&gt;/clear&lt;/code&gt; चलाएँ और फिर prompt करें: &amp;ldquo;उन पिछली sessions की समीक्षा करो जिनमें हमने विषय X पर बात की थी&amp;rdquo;। Blind searches पर 12K tokens जलाने के बजाय, auto-memory relevant context को 50 में निकाल लेता है।&lt;/p&gt;
&lt;h2 id="यह-net-developers-क-लए-कय-मयन-रखत-ह"&gt;यह .NET developers के लिए क्यों मायने रखता है&lt;/h2&gt;
&lt;p&gt;अगर आप GitHub Copilot CLI का इस्तेमाल .NET work के लिए कर रहे हैं — services scaffold करना, EF Core queries debug करना, Blazor components पर iterate करना — तो context rot की समस्या उतनी ही तेज़ी से आती है। Multiple projects, shared libraries, और deep call chains वाली complex solutions वही codebases हैं जहाँ agent सबसे जल्दी track खो देता है।&lt;/p&gt;
&lt;p&gt;Install guide बताती है कि Copilot CLI को इसकी ओर कैसे point करना है। यह एक one-time setup है।&lt;/p&gt;
&lt;p&gt;सच कहें तो? 68 minutes a day वापस पाना कोई छोटा quality-of-life tweak नहीं है। यह लगभग 6 hours a week है।&lt;/p&gt;
&lt;h2 id="समपन"&gt;समापन&lt;/h2&gt;
&lt;p&gt;Context rot एक वास्तविक architectural constraint है, कोई ऐसा bug नहीं जो बस patch होकर ठीक हो जाएगा। auto-memory आपका agent expensive, noisy re-exploration करने के बजाय cheap और precise recall mechanism देकर इस सीमा को bypass करता है। अगर आप GitHub Copilot CLI के साथ serious AI-assisted development कर रहे हैं, तो 30-second install वाकई क़ीमती है।&lt;/p&gt;
&lt;p&gt;देखिए: &lt;a href="https://github.com/dezgit2025/auto-memory"&gt;GitHub पर auto-memory&lt;/a&gt;. Original post by Desi Villanueva: &lt;a href="https://devblogs.microsoft.com/all-things-azure/i-wasted-68-minutes-a-day-re-explaining-my-code-then-i-built-auto-memory/"&gt;I Wasted 68 Minutes a Day Re-Explaining My Code&lt;/a&gt;.&lt;/p&gt;</content:encoded></item></channel></rss>