<?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: Yugandhar Surya</title>
    <description>The latest articles on DEV Community by Yugandhar Surya (@yugandharsurya).</description>
    <link>https://dev.to/yugandharsurya</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%2F493038%2F2643b1f9-013c-4266-87f2-65760f8eea39.png</url>
      <title>DEV Community: Yugandhar Surya</title>
      <link>https://dev.to/yugandharsurya</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yugandharsurya"/>
    <language>en</language>
    <item>
      <title>Building an Enterprise GenAI Platform on OCI — Part 1: Designing the Architecture</title>
      <dc:creator>Yugandhar Surya</dc:creator>
      <pubDate>Fri, 17 Jul 2026 16:45:34 +0000</pubDate>
      <link>https://dev.to/yugandharsurya/building-an-enterprise-genai-platform-on-oci-part-1-designing-the-architecture-1ebc</link>
      <guid>https://dev.to/yugandharsurya/building-an-enterprise-genai-platform-on-oci-part-1-designing-the-architecture-1ebc</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Every production system starts with a diagram, not code.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When I started this project, I thought I would spend most of my time choosing and configuring an LLM.&lt;/p&gt;

&lt;p&gt;Instead, I spent days thinking about something else.&lt;/p&gt;

&lt;p&gt;⚠️ New here? This is Part 1 of the series. If you'd like the backstory on why I built this platform, the mistakes I made, and the lessons from my first production RAG system, read &lt;strong&gt;Part 0&lt;/strong&gt; first:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/surya7765/building-an-enterprise-genai-platform-on-oci-lessons-from-my-first-production-rag-system-963"&gt;Building an Enterprise GenAI Platform on OCI – Lessons from My First Production RAG System&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then come back here for the architecture deep dive.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The architecture.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The moment I stopped thinking about the model and started thinking about the system, everything changed. A production GenAI application needs far more than an LLM, it needs reliable data pipelines, efficient retrieval, scalable infrastructure, and secure deployment. So before writing any code, I asked myself: &lt;strong&gt;What exactly am I building?&lt;/strong&gt; A chatbot, a RAG application, or an enterprise GenAI platform?&lt;/p&gt;

&lt;h3&gt;
  
  
  Thinking Beyond a Chatbot
&lt;/h3&gt;

&lt;p&gt;Most RAG tutorials follow roughly the same flow.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Documents -&amp;gt; Embeddings -&amp;gt; Vector Database -&amp;gt; LLM -&amp;gt; Answer&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For learning, that &lt;strong&gt;architecture&lt;/strong&gt; works just fine. But &lt;em&gt;production&lt;/em&gt; isn't just about retrieving documents and calling an LLM, it's about building a system that can ingest data continuously, scale reliably, and evolve over time. That's when I realized I wasn't designing a chatbot; &lt;strong&gt;I was designing a platform.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Architecture
&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%2Fve3683wxyqb9ngshgtvv.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%2Fve3683wxyqb9ngshgtvv.png" alt="Figure 1 – High-level architecture of the Enterprise GenAI Platform on OCI." width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The architecture naturally separated into two independent pipelines.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Offline Pipeline&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This pipeline prepares knowledge before any user sends a query.&lt;/p&gt;

&lt;p&gt;Its responsibility is to transform raw information into something an LLM can retrieve efficiently.&lt;/p&gt;

&lt;p&gt;The flow looks like this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;External Sources -&amp;gt; OCI Compute -&amp;gt; Object Storage -&amp;gt; Cleaning &amp;amp; Chunking -&amp;gt; Embedding Generation -&amp;gt; FAISS Index -&amp;gt; Artifacts&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;These jobs are compute intensive but don't need to run for every request.&lt;/p&gt;

&lt;p&gt;Keeping them separate allows the knowledge base to evolve independently of the inference service.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Online Pipeline&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once the data is prepared, the online pipeline takes over.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;User -&amp;gt; Oracle APEX -&amp;gt; FastAPI -&amp;gt; Query Embedding -&amp;gt; FAISS Retrieval -&amp;gt; Prompt Construction -&amp;gt; LLM -&amp;gt; Streaming Response&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Unlike the offline pipeline, every millisecond matters here.&lt;/p&gt;

&lt;p&gt;The goal isn't just to generate an answer.&lt;/p&gt;

&lt;p&gt;The goal is to generate the right answer quickly.&lt;/p&gt;

&lt;p&gt;That changes how every component is designed.&lt;/p&gt;




&lt;h3&gt;
  
  
  Why Split the Platform?
&lt;/h3&gt;

&lt;p&gt;One question I kept asking myself was:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Why not put everything inside a single application?&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Because different workloads have different requirements.&lt;/p&gt;

&lt;p&gt;The ingestion pipeline may process thousands of documents in batches.&lt;/p&gt;

&lt;p&gt;The inference service should respond within seconds.&lt;/p&gt;

&lt;p&gt;Trying to solve both problems inside one application makes scaling harder and deployments riskier.&lt;/p&gt;

&lt;p&gt;Separating the platform into independent services means each layer can evolve without affecting the others.&lt;/p&gt;




&lt;h2&gt;
  
  
  Designing Around Responsibilities
&lt;/h2&gt;

&lt;p&gt;Once I stopped thinking about frameworks and started thinking about responsibilities, the architecture almost designed itself. Every component had one job: ingest data, process it, retrieve knowledge, generate responses, or serve the application. That's how the platform naturally evolved into six layers.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Responsibility&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Data Ingestion&lt;/td&gt;
&lt;td&gt;Collect raw knowledge&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Storage&lt;/td&gt;
&lt;td&gt;Persist datasets, embeddings, indexes, and artifacts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Processing&lt;/td&gt;
&lt;td&gt;Clean, normalize, and chunk documents&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Retrieval&lt;/td&gt;
&lt;td&gt;Search relevant knowledge&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Inference&lt;/td&gt;
&lt;td&gt;Generate grounded responses&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Application&lt;/td&gt;
&lt;td&gt;Provide the enterprise user interface&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Notice that none of these layers are tied to a specific technology and that's intentional. Good architecture should outlive the tools used to implement it. FastAPI can be replaced by another framework, FAISS by a managed vector database, or TinyLlama by a different LLM. The technologies may evolve, but the responsibilities of each layer remain the same.&lt;/p&gt;




&lt;h2&gt;
  
  
  Architecture Principles
&lt;/h2&gt;

&lt;p&gt;While designing the platform, I kept returning to a small set of principles.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Modular – Every layer should have a single responsibility.&lt;/li&gt;
&lt;li&gt;Cloud-native – Managed services where they make sense.&lt;/li&gt;
&lt;li&gt;Scalable – Independent scaling for ingestion and inference.&lt;/li&gt;
&lt;li&gt;Observable – Health, metrics, and logging built in.&lt;/li&gt;
&lt;li&gt;Secure – Least-privilege access between services.&lt;/li&gt;
&lt;li&gt;Cost aware – Optimize for learning without unnecessary infrastructure.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These principles influenced every decision that followed.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why OCI?
&lt;/h2&gt;

&lt;p&gt;One of the goals of this project was to explore how far a production-oriented GenAI platform could be built using Oracle Cloud Infrastructure.&lt;/p&gt;

&lt;p&gt;OCI offered everything I needed for this stage of the project:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Compute for data collection&lt;/li&gt;
&lt;li&gt;Object Storage for the data lake&lt;/li&gt;
&lt;li&gt;Data Science for experimentation&lt;/li&gt;
&lt;li&gt;Container Registry for deployment&lt;/li&gt;
&lt;li&gt;IAM for secure access&lt;/li&gt;
&lt;li&gt;Oracle APEX for the enterprise application layer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Rather than introducing every service at once, each will appear naturally as the project evolves throughout this series.&lt;/p&gt;

&lt;h2&gt;
  
  
  One Lesson I Learned Early
&lt;/h2&gt;

&lt;p&gt;I started this project thinking the hardest part would be choosing the right LLM and refining prompts. Instead, I found myself spending far more time designing how data moved through the system. That was the moment I realized a great GenAI application isn't defined by its model, it's defined by its architecture.&lt;/p&gt;




&lt;h3&gt;
  
  
  What's Next?
&lt;/h3&gt;

&lt;p&gt;Now that the blueprint is complete, it's time to start building.&lt;/p&gt;

&lt;p&gt;In &lt;strong&gt;Part 2&lt;/strong&gt;, we'll implement the first stage of the platform:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Collecting data with OCI Compute&lt;/li&gt;
&lt;li&gt;Streaming it directly into Object Storage&lt;/li&gt;
&lt;li&gt;Designing the data lake&lt;/li&gt;
&lt;li&gt;Preparing thousands of documents for downstream processing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because before we can build a great retrieval system, we first need great data.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>oci</category>
      <category>oracle</category>
      <category>systemdesign</category>
    </item>
    <item>
      <title>Building an Enterprise GenAI Platform on OCI — Lessons from My First Production RAG System</title>
      <dc:creator>Yugandhar Surya</dc:creator>
      <pubDate>Wed, 08 Jul 2026 13:28:51 +0000</pubDate>
      <link>https://dev.to/yugandharsurya/building-an-enterprise-genai-platform-on-oci-lessons-from-my-first-production-rag-system-963</link>
      <guid>https://dev.to/yugandharsurya/building-an-enterprise-genai-platform-on-oci-lessons-from-my-first-production-rag-system-963</guid>
      <description>&lt;p&gt;&lt;strong&gt;I thought building a RAG application would be straightforward.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Scrape the data. Generate embeddings. Build a FAISS index. Connect an LLM. Expose an API.&lt;/p&gt;

&lt;p&gt;That's what most tutorials make it look like.&lt;/p&gt;

&lt;p&gt;Reality was very different.&lt;br&gt;
Every optimization solved one problem and uncovered another.&lt;/p&gt;

&lt;p&gt;Even after switching to a lightweight language model, every response still took several seconds.&lt;br&gt;
That's when I realized the bottleneck wasn't the LLM. It was the architecture itself.&lt;/p&gt;

&lt;p&gt;That realization completely changed the direction of this project. Instead of building just another chatbot, I decided to design a production-oriented GenAI platform on Oracle Cloud Infrastructure (OCI), focusing on data engineering, retrieval quality, inference optimization, deployment, observability, and LLMOps.&lt;/p&gt;

&lt;p&gt;Over the past few weeks, I built this platform while exploring Oracle Cloud Infrastructure, documenting every architectural decision, optimization, and failure along the way.&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%2Fxoazoemiq5rh1avxi9h0.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%2Fxoazoemiq5rh1avxi9h0.png" alt="Architectural diagram of the GenAI platform on OCI showing data ingestion and inference layers" width="800" height="350"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Some Problems I Didn't Expect
&lt;/h2&gt;

&lt;p&gt;What started as a simple RAG prototype quickly turned into an engineering exercise.&lt;/p&gt;

&lt;p&gt;Along the way, I encountered challenges I hadn't anticipated:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Large Docker images and slow deployments&lt;/li&gt;
&lt;li&gt;Infrastructure limitations on OCI Free Tier&lt;/li&gt;
&lt;li&gt;Container architecture mismatches (ARM vs. AMD)&lt;/li&gt;
&lt;li&gt;Retrieval and inference latency bottlenecks&lt;/li&gt;
&lt;li&gt;IAM and networking complexities during deployment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every challenge forced a new architectural decision and those decisions shaped this entire series.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why Another RAG Series?
&lt;/h2&gt;

&lt;p&gt;If you've searched for RAG tutorials, you've probably noticed a common pattern.&lt;/p&gt;

&lt;p&gt;Most articles demonstrate how to connect an LLM to a vector database and answer questions from a PDF. While that's a great way to understand the basics, it leaves out many of the challenges you'll encounter when building a real-world system.&lt;/p&gt;

&lt;p&gt;Along the way, I found myself asking questions like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Where should the &lt;em&gt;data actually live?&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;How do you keep it synchronized?&lt;/li&gt;
&lt;li&gt;Why is retrieval slower than expected?&lt;/li&gt;
&lt;li&gt;Should you use FAISS or a managed vector database?&lt;/li&gt;
&lt;li&gt;How do you deploy and scale inference?&lt;/li&gt;
&lt;li&gt;What happens when &lt;strong&gt;multiple users&lt;/strong&gt; hit the API simultaneously?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those were exactly the questions I started asking while building this project.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Goal
&lt;/h2&gt;

&lt;p&gt;I wanted to understand why production systems look so different from GitHub demos.&lt;/p&gt;

&lt;p&gt;The objective wasn't simply to make an LLM answer questions, it was to understand the complete lifecycle of a production GenAI application.&lt;/p&gt;

&lt;p&gt;That meant learning how to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Build scalable data pipelines&lt;/li&gt;
&lt;li&gt;Design an efficient retrieval layer&lt;/li&gt;
&lt;li&gt;Optimize inference latency&lt;/li&gt;
&lt;li&gt;Containerize and deploy services&lt;/li&gt;
&lt;li&gt;Integrate with enterprise applications&lt;/li&gt;
&lt;li&gt;Apply &lt;strong&gt;MLOps&lt;/strong&gt; and &lt;strong&gt;LLMOps&lt;/strong&gt; principles&lt;/li&gt;
&lt;li&gt;Keep operational costs under control&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Why Oracle Cloud Infrastructure(OCI)?
&lt;/h2&gt;

&lt;p&gt;Most tutorials use AWS or Azure.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I intentionally chose Oracle Cloud Infrastructure (OCI) because I wanted to explore its AI ecosystem and understand how enterprise GenAI applications could be built using Oracle's cloud services.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The platform combines OCI Compute for ingestion, Object Storage as a data lake, Data Science for experimentation, Model Deployment for inference, and Oracle APEX as the application layer.&lt;/p&gt;

&lt;p&gt;Choosing OCI also introduced a unique set of challenges around resource limits, deployment strategies, container architectures, and cloud-native design decisions many of which I'll cover throughout this series.&lt;/p&gt;
&lt;h2&gt;
  
  
  What We'll Build
&lt;/h2&gt;

&lt;p&gt;By the end of this series, we'll have built an enterprise-oriented RAG platform capable of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automated data ingestion&lt;/li&gt;
&lt;li&gt;Cloud-native data lake&lt;/li&gt;
&lt;li&gt;Semantic search using embeddings&lt;/li&gt;
&lt;li&gt;Hybrid Retrieval (FAISS + BM25)&lt;/li&gt;
&lt;li&gt;Cross-Encoder Re-ranking&lt;/li&gt;
&lt;li&gt;Prompt Engineering&lt;/li&gt;
&lt;li&gt;Streaming responses&lt;/li&gt;
&lt;li&gt;Guardrails&lt;/li&gt;
&lt;li&gt;Dockerized deployment&lt;/li&gt;
&lt;li&gt;OCI Model Deployment&lt;/li&gt;
&lt;li&gt;Oracle APEX integration&lt;/li&gt;
&lt;li&gt;CI/CD pipeline&lt;/li&gt;
&lt;li&gt;LLMOps best practices&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;More importantly, we'll discuss &lt;em&gt;why&lt;/em&gt; each architectural decision was made, along with the trade-offs involved.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This isn't another "build a chatbot in 15 minutes" tutorial. It's an engineering journal documenting the architectural decisions, trade-offs, failures, and lessons learned while building an enterprise GenAI platform on OCI.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you're looking for a copy-and-paste RAG tutorial, this series probably isn't for you.&lt;/p&gt;

&lt;p&gt;But if you're interested in understanding how enterprise GenAI systems are designed from data ingestion and retrieval to deployment, observability, and optimization. I hope you'll find this journey worthwhile.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Enterprise AI systems aren't built by choosing the largest model.&lt;br&gt;
They're built through hundreds of engineering decisions.&lt;br&gt;
This series is about those decisions.&lt;br&gt;
See you in Part 1.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  Series Roadmap
&lt;/h2&gt;

&lt;p&gt;&lt;/p&gt;
  📚 This Series (10 Parts)
  &lt;ol&gt;
&lt;li&gt;Architecture &amp;amp; Planning&lt;/li&gt;
&lt;li&gt;Data Engineering Pipeline on OCI&lt;/li&gt;
&lt;li&gt;Embeddings &amp;amp; Vector Search&lt;/li&gt;
&lt;li&gt;Hybrid Retrieval and Re-ranking&lt;/li&gt;
&lt;li&gt;FastAPI Inference Pipeline&lt;/li&gt;
&lt;li&gt;Docker &amp;amp; OCI Model Deployment&lt;/li&gt;
&lt;li&gt;Oracle APEX Integration&lt;/li&gt;
&lt;li&gt;LLMOps &amp;amp; CI/CD&lt;/li&gt;
&lt;li&gt;Performance Optimization&lt;/li&gt;
&lt;li&gt;Lessons Learned &amp;amp; Production Considerations&lt;/li&gt;
&lt;/ol&gt;



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




&lt;p&gt;Before we dive into the next article, I'd love to hear from you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Have you built a RAG application beyond a simple proof of concept?&lt;/li&gt;
&lt;li&gt;What was the biggest challenge you encountered—retrieval quality, latency, deployment, or something else?&lt;/li&gt;
&lt;li&gt;Are you using OCI, AWS, Azure, or another cloud platform for GenAI workloads?&lt;/li&gt;
&lt;li&gt;Is there a specific topic you'd like me to cover in more detail as this series progresses?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Feel free to share your experiences in the comments. I'm always interested in learning how others are approaching these problems.&lt;/p&gt;

&lt;p&gt;If you'd like to follow my work or connect, you can find me here:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/in/yugandharsurya/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/surya7765/" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/YugandharSurya4" rel="noopener noreferrer"&gt;Twitter/X&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

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