<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="atom.xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://g-despot.github.io</id>
    <title>Ivan Despot — Blog</title>
    <updated>2026-06-18T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://g-despot.github.io"/>
    <subtitle>Notes on vector search &amp; RAG, AI application engineering, developer relations, and data infrastructure.</subtitle>
    <icon>https://g-despot.github.io/img/favicon.svg</icon>
    <rights>Copyright © 2026 Ivan Despot.</rights>
    <entry>
        <title type="html"><![CDATA[Documentation-driven development: write the docs before you ship]]></title>
        <id>https://g-despot.github.io/documentation-driven-development</id>
        <link href="https://g-despot.github.io/documentation-driven-development"/>
        <updated>2026-06-18T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Writing the documentation before the feature ships turns docs from an afterthought into a design tool — and keeps your examples honest.]]></summary>
        <content type="html"><![CDATA[<p>Most teams treat documentation as the last mile: the feature ships, and then someone writes it up. By the time the docs get written, the API surface is frozen, the rough edges are baked in, and the person writing the docs is the least equipped to change any of it.</p>
<p>I've come to prefer the opposite order. Write the documentation <em>first</em> — or at least alongside the implementation — and let the act of explaining the feature shape the feature itself.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="docs-as-a-design-tool">Docs as a design tool<a href="https://g-despot.github.io/documentation-driven-development#docs-as-a-design-tool" class="hash-link" aria-label="Direct link to Docs as a design tool" title="Direct link to Docs as a design tool" translate="no">​</a></h2>
<p>The fastest way to find out that an API is awkward is to try to document it. If the "getting started" example needs three paragraphs of caveats before the first line of code runs, that's not a docs problem — it's a design problem the docs just surfaced.</p>
<p>When you write the docs early, you're forced to answer the questions a real user will ask on day one:</p>
<ul>
<li class="">What's the smallest example that does something useful?</li>
<li class="">What does the user need to know <em>before</em> this line makes sense?</li>
<li class="">What breaks if they do the obvious thing instead of the intended thing?</li>
</ul>
<p>Answering those questions before the code is frozen means you can still act on the answers. That's the whole point.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-example-is-the-contract">The example is the contract<a href="https://g-despot.github.io/documentation-driven-development#the-example-is-the-contract" class="hash-link" aria-label="Direct link to The example is the contract" title="Direct link to The example is the contract" translate="no">​</a></h2>
<p>A code sample in your docs is a promise: <em>run this and it works.</em> The problem is that promises rot. A parameter gets renamed, a default changes, a method moves — and the example that was correct at launch quietly becomes a trap for the next person who copies it.</p>
<p>The fix is to stop treating documentation examples as prose and start treating them as tests. Every runnable snippet should be executed against the current release in CI. If the snippet breaks, the build breaks, and you find out before your users do. The same goes for the factual claims around the code: parameter names, defaults, and types can be checked against the source instead of trusted to stay in sync by hand.</p>
<p>Once your examples are validated automatically, documentation stops being the thing that's always slightly out of date and becomes the most trustworthy description of how the product actually behaves.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="documentation-driven-development-in-practice">Documentation-driven development in practice<a href="https://g-despot.github.io/documentation-driven-development#documentation-driven-development-in-practice" class="hash-link" aria-label="Direct link to Documentation-driven development in practice" title="Direct link to Documentation-driven development in practice" translate="no">​</a></h2>
<p>You don't need to flip your whole process overnight. A lightweight version:</p>
<ol>
<li class=""><strong>Draft the "day one" doc before the API is final.</strong> A page, a couple of examples, the mental model. Nothing fancy.</li>
<li class=""><strong>Feed the friction back.</strong> If the doc is hard to write, the API is hard to use. Fix it while you still can.</li>
<li class=""><strong>Make examples executable.</strong> Wire every snippet into CI so a release can't ship with a broken sample.</li>
<li class=""><strong>Check the prose against the code.</strong> Names, defaults, and signatures should be verified, not remembered.</li>
</ol>
<p>The payoff isn't just better docs. It's a tighter feedback loop between the people building the product and the people using it — which, in the end, is what developer experience is really about.</p>]]></content>
        <author>
            <name>Ivan Despot</name>
            <uri>https://g-despot.github.io</uri>
        </author>
        <category label="Technical Writing" term="Technical Writing"/>
        <category label="DevRel" term="DevRel"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Import & vectorize data with Weaviate at scale]]></title>
        <id>https://g-despot.github.io/import-vectorize-data-at-scale</id>
        <link href="https://g-despot.github.io/import-vectorize-data-at-scale"/>
        <updated>2026-06-18T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Server-side batching, deterministic UUIDs, and multimodal ingestion — the patterns that keep large-scale data import into a vector database from falling over. Originally published on Weaviate.]]></summary>
        <content type="html"><![CDATA[<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>Originally published on the Weaviate blog</div><div class="admonitionContent_BuS1"><p><a href="https://weaviate.io/blog/data-import-best-practices" target="_blank" rel="noopener noreferrer" class="">Read the original on Weaviate →</a></p></div></div>
<p>Getting a handful of objects into a vector database is easy. Getting millions in — reliably, without silently dropping data or melting your throughput — is where most ingestion pipelines start to hurt.</p>
<!-- -->
<p>This guide walks through the patterns that hold up at scale:</p>
<ul>
<li class=""><strong>Server-side batching</strong> to move objects efficiently instead of one request at a time.</li>
<li class=""><strong>Deterministic UUIDs</strong> so retries are idempotent and you don't end up with duplicates after a failure.</li>
<li class=""><strong>Proper error handling</strong> that surfaces what failed instead of swallowing it.</li>
<li class=""><strong>Multimodal ingestion</strong> across text, images, audio, and video — including the <code>blobHash</code> type for storing media efficiently, without standing up OCR pipelines or extra infrastructure.</li>
</ul>
<p><a href="https://weaviate.io/blog/data-import-best-practices" target="_blank" rel="noopener noreferrer" class="">Read the full article on Weaviate →</a></p>]]></content>
        <author>
            <name>Ivan Despot</name>
            <uri>https://g-despot.github.io</uri>
        </author>
        <author>
            <name>Tommy Smith</name>
            <uri>https://github.com/tsmith023</uri>
        </author>
        <category label="Vector Search & RAG" term="Vector Search & RAG"/>
        <category label="Graph & Data Engineering" term="Graph & Data Engineering"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Build a coding assistant with Weaviate MCP: RAG over code & docs]]></title>
        <id>https://g-despot.github.io/coding-assistant-weaviate-mcp</id>
        <link href="https://g-despot.github.io/coding-assistant-weaviate-mcp"/>
        <updated>2026-05-21T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Using Weaviate's built-in MCP server to do retrieval-augmented generation over your codebase and docs, wired into Claude Code, Cursor, and VS Code. Originally published on Weaviate.]]></summary>
        <content type="html"><![CDATA[<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>Originally published on the Weaviate blog</div><div class="admonitionContent_BuS1"><p><a href="https://weaviate.io/blog/coding-assistant-weaviate-mcp" target="_blank" rel="noopener noreferrer" class="">Read the original on Weaviate →</a></p></div></div>
<p>A coding assistant is only as good as the context you can feed it. This walkthrough builds one that retrieves over your own code and documentation using Weaviate's built-in MCP server.</p>
<!-- -->
<p>It covers the pieces that make retrieval over a codebase actually work:</p>
<ul>
<li class=""><strong>Schema design</strong> for code and docs living side by side.</li>
<li class=""><strong>AST-based chunking</strong> so code is split along meaningful boundaries instead of arbitrary line counts.</li>
<li class=""><strong>Markdown ingestion</strong> for pulling documentation into the same searchable store.</li>
<li class=""><strong>Hybrid search</strong> to combine semantic and keyword matching.</li>
<li class=""><strong>Editor integration</strong> with Claude Code, Cursor, and VS Code through MCP.</li>
</ul>
<p><a href="https://weaviate.io/blog/coding-assistant-weaviate-mcp" target="_blank" rel="noopener noreferrer" class="">Read the full article on Weaviate →</a></p>]]></content>
        <author>
            <name>Ivan Despot</name>
            <uri>https://g-despot.github.io</uri>
        </author>
        <category label="AI Engineering" term="AI Engineering"/>
        <category label="Vector Search & RAG" term="Vector Search & RAG"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[How to visualize a social network in Python with a graph database]]></title>
        <id>https://g-despot.github.io/visualizing-a-social-network</id>
        <link href="https://g-despot.github.io/visualizing-a-social-network"/>
        <updated>2026-05-20T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[A walkthrough of building a social-network visualization with a graph database, Flask, Docker, and D3.js. Originally published on Towards Data Science.]]></summary>
        <content type="html"><![CDATA[<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>Originally published on Towards Data Science</div><div class="admonitionContent_BuS1"><p>This is a repost. <a href="https://towardsdatascience.com/how-to-visualize-a-social-network-in-python-with-a-graph-database-flask-docker-d3-js-af451db57330" target="_blank" rel="noopener noreferrer" class="">Read the original article →</a></p></div></div>
<p>Social networks are a natural fit for graph data: people are nodes, relationships are edges, and the questions you actually care about — who's central, which communities form, how information spreads — are questions about <em>structure</em>.</p>
<!-- -->
<p>This walkthrough builds an end-to-end app for exploring one:</p>
<ul>
<li class=""><strong>A graph database</strong> to store the network and answer traversal queries directly, instead of forcing relationships into rows and joins.</li>
<li class=""><strong>Flask</strong> as a thin Python backend exposing the graph to the frontend over a small API.</li>
<li class=""><strong>Docker</strong> to wire the pieces together so the whole thing runs with a single command.</li>
<li class=""><strong>D3.js</strong> to render the network in the browser as an interactive, force-directed graph you can actually pan, zoom, and inspect.</li>
</ul>
<p>The result is a live, explorable picture of a social graph — the kind of visualization that makes structure obvious in a way a table never will.</p>
<p><a href="https://towardsdatascience.com/how-to-visualize-a-social-network-in-python-with-a-graph-database-flask-docker-d3-js-af451db57330" target="_blank" rel="noopener noreferrer" class="">Read the full article on Towards Data Science →</a></p>]]></content>
        <author>
            <name>Ivan Despot</name>
            <uri>https://g-despot.github.io</uri>
        </author>
        <category label="Graph & Data Engineering" term="Graph & Data Engineering"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Text analysis for hybrid search: tokenization, stopwords & accent folding]]></title>
        <id>https://g-despot.github.io/tokenization-text-analysis</id>
        <link href="https://g-despot.github.io/tokenization-text-analysis"/>
        <updated>2026-05-14T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Why tokenization quietly decides how well BM25 keyword scoring works in hybrid search — and how to test analyzer settings without reindexing. Originally published on Weaviate.]]></summary>
        <content type="html"><![CDATA[<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>Originally published on the Weaviate blog</div><div class="admonitionContent_BuS1"><p><a href="https://weaviate.io/blog/tokenization-text-analysis-weaviate" target="_blank" rel="noopener noreferrer" class="">Read the original on Weaviate →</a></p></div></div>
<p>Hybrid search combines vector similarity with exact keyword matching — and the keyword half lives or dies by tokenization: how text gets broken into the discrete units that BM25 scores against.</p>
<!-- -->
<p>The article gets concrete about the choices that matter:</p>
<ul>
<li class=""><strong>Four tokenization methods</strong> and when each is the right call.</li>
<li class=""><strong>Accent folding</strong> for multilingual content, so "café" and "cafe" match.</li>
<li class=""><strong>Per-property stopwords</strong> to tune what counts as signal vs. noise.</li>
<li class=""><strong>The <code>/v1/tokenize</code> endpoint</strong> — test how an analyzer configuration behaves <em>before</em> committing to it, without reindexing your data.</li>
</ul>
<p><a href="https://weaviate.io/blog/tokenization-text-analysis-weaviate" target="_blank" rel="noopener noreferrer" class="">Read the full article on Weaviate →</a></p>]]></content>
        <author>
            <name>Ivan Despot</name>
            <uri>https://g-despot.github.io</uri>
        </author>
        <author>
            <name>André Mourão</name>
            <uri>https://github.com/amourao</uri>
        </author>
        <category label="Vector Search & RAG" term="Vector Search & RAG"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Securing enterprise AI with Weaviate]]></title>
        <id>https://g-despot.github.io/securing-enterprise-ai</id>
        <link href="https://g-despot.github.io/securing-enterprise-ai"/>
        <updated>2026-03-19T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Taking a vector database from a bare API key to compliance-ready security — OIDC, RBAC, multi-tenant isolation, and audit logging. Originally published on Weaviate.]]></summary>
        <content type="html"><![CDATA[<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>Originally published on the Weaviate blog</div><div class="admonitionContent_BuS1"><p><a href="https://weaviate.io/blog/weaviate-security-enterprise" target="_blank" rel="noopener noreferrer" class="">Read the original on Weaviate →</a></p></div></div>
<p>"Add security later" is how most AI prototypes ship — and how they get stuck before production. This piece follows a fictional health-tech company from a single API key all the way to a compliance-ready setup.</p>
<!-- -->
<p>Along the way it covers the building blocks of enterprise-grade security in Weaviate:</p>
<ul>
<li class=""><strong>OIDC integration</strong> for real identity instead of shared keys.</li>
<li class=""><strong>Role-based access control</strong> to enforce least privilege across collections and resources.</li>
<li class=""><strong>Multi-tenant isolation</strong> so tenants can't see each other's data.</li>
<li class=""><strong>Audit logging</strong> to satisfy HIPAA-style and other regulatory requirements.</li>
</ul>
<p><a href="https://weaviate.io/blog/weaviate-security-enterprise" target="_blank" rel="noopener noreferrer" class="">Read the full article on Weaviate →</a></p>]]></content>
        <author>
            <name>Ivan Despot</name>
            <uri>https://g-despot.github.io</uri>
        </author>
        <author>
            <name>Dirk Kulawiak</name>
            <uri>https://github.com/dirkkul</uri>
        </author>
        <category label="AI Engineering" term="AI Engineering"/>
        <category label="Vector Search & RAG" term="Vector Search & RAG"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Weaviate authentication & authorization: a complete security guide]]></title>
        <id>https://g-despot.github.io/weaviate-authn-authz</id>
        <link href="https://g-despot.github.io/weaviate-authn-authz"/>
        <updated>2026-02-18T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The difference between proving who you are and controlling what you can do — API keys, OIDC, and role-based access control in Weaviate. Originally published on Weaviate.]]></summary>
        <content type="html"><![CDATA[<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>Originally published on the Weaviate blog</div><div class="admonitionContent_BuS1"><p><a href="https://weaviate.io/blog/weaviate-security-authn-authz" target="_blank" rel="noopener noreferrer" class="">Read the original on Weaviate →</a></p></div></div>
<p>Authentication and authorization get lumped together, but they answer different questions: <em>who are you?</em> and <em>what are you allowed to do?</em> Getting the second one right is what keeps a shared database from becoming a liability.</p>
<!-- -->
<p>The guide walks through both sides in Weaviate:</p>
<ul>
<li class=""><strong>Authentication methods</strong> — API keys, OIDC integration, and anonymous access, and when each fits.</li>
<li class=""><strong>Authorization with RBAC</strong> — enforcing the principle of least privilege across collections and resources.</li>
<li class=""><strong>Putting them together</strong> into a coherent security model instead of a pile of ad-hoc rules.</li>
</ul>
<p><a href="https://weaviate.io/blog/weaviate-security-authn-authz" target="_blank" rel="noopener noreferrer" class="">Read the full article on Weaviate →</a></p>]]></content>
        <author>
            <name>Ivan Despot</name>
            <uri>https://g-despot.github.io</uri>
        </author>
        <author>
            <name>Dirk Kulawiak</name>
            <uri>https://github.com/dirkkul</uri>
        </author>
        <category label="Vector Search & RAG" term="Vector Search & RAG"/>
    </entry>
</feed>