{
  "slug": "rag-failure-modes-runbook",
  "title": "Common RAG Failure Modes and How to Fix Them",
  "description": "An operator runbook for the four RAG failure classes with no dedicated deep-dive elsewhere: retrieval miss, context overload, injection via content at ingestion time, and silent quality degradation — symptom, first diagnostic, and fix for each.",
  "kind": "sub",
  "order": 11,
  "target_query": "common RAG failure modes and how to fix them",
  "secondary_queries": [
    "RAG retrieval miss diagnosis",
    "RAG context overload lost in the middle",
    "prompt injection through indexed content",
    "why does RAG quality degrade over time"
  ],
  "tags": [
    "rag",
    "reliability",
    "failure-modes",
    "observability",
    "agents",
    "production"
  ],
  "published": "2026-08-24",
  "updated": "2026-08-24",
  "words": 1362,
  "estimated_tokens": 1811,
  "premium": false,
  "rights": {
    "access": "free",
    "note": "Editorial guides are always free and never part of the licensed corpus.",
    "license": "https://changegamer.ai/license.xml",
    "pricing": "https://changegamer.ai/api/pricing.json",
    "payment": "https://changegamer.ai/api/payment.json"
  },
  "license": "https://changegamer.ai/license.xml",
  "citation": "ChangeGamer (2026-08-24). Common RAG Failure Modes and How to Fix Them. ChangeGamer. https://changegamer.ai/articles/rag-failure-modes-runbook (updated 2026-08-24).",
  "bibtex": "@misc{changegamer_rag_failure_modes_runbook, title = {Common RAG Failure Modes and How to Fix Them}, publisher = {ChangeGamer}, year = {2026}, url = {https://changegamer.ai/articles/rag-failure-modes-runbook}, note = {Updated 2026-08-24}}",
  "canonical": "https://changegamer.ai/articles/rag-failure-modes-runbook",
  "markdown": "https://changegamer.ai/articles/rag-failure-modes-runbook.md",
  "takeaways": [
    "A retrieval miss has three distinct root causes — a chunk that never entered the index, an embedding-domain mismatch pushing a real chunk below the cutoff, or a vector-only search structurally missing an exact identifier — and each needs a different fix, not a single retrieval tweak.",
    "Context overload happens after retrieval already succeeded: the correct passage sits inside the assembled prompt but gets diluted by chunk count, buried by the lost-in-the-middle effect, or contradicted by a duplicate source version, so the fix lives in prompt assembly, not in retrieval.",
    "Prompt injection through retrieved content starts at ingestion, not at answer time — untrusted documents enter a RAG index through crawls, connectors and user uploads long before any agent reads them, so sanitization and chunk-level source attribution belong in the ingestion pipeline itself.",
    "Silent degradation in a RAG system comes from three unannounced changes — an embedding model or provider updating its behavior, a growing corpus skewing which chunks make top-k, or a connector quietly failing — and none of them raise an error, so only scheduled evaluation catches them.",
    "Stale answers and permission leaks are correctness failures with their own dedicated runbooks — freshness contracts and pre-filter tenant isolation, respectively — and have different root causes from the four failure classes this runbook covers in depth."
  ],
  "outline": [
    {
      "depth": 2,
      "text": "Why does a retriever return \"no information found\" when the answer exists?",
      "anchor": "why-does-a-retriever-return-no-information-found-when-the-answer-exists",
      "url": "https://changegamer.ai/articles/rag-failure-modes-runbook#why-does-a-retriever-return-no-information-found-when-the-answer-exists"
    },
    {
      "depth": 2,
      "text": "Context overload: when the right passage is retrieved but the answer is still wrong",
      "anchor": "context-overload-when-the-right-passage-is-retrieved-but-the-answer-is-still-wrong",
      "url": "https://changegamer.ai/articles/rag-failure-modes-runbook#context-overload-when-the-right-passage-is-retrieved-but-the-answer-is-still-wrong"
    },
    {
      "depth": 2,
      "text": "How does untrusted content end up in a RAG index in the first place?",
      "anchor": "how-does-untrusted-content-end-up-in-a-rag-index-in-the-first-place",
      "url": "https://changegamer.ai/articles/rag-failure-modes-runbook#how-does-untrusted-content-end-up-in-a-rag-index-in-the-first-place"
    },
    {
      "depth": 2,
      "text": "Silent degradation: why RAG quality drifts without an obvious break",
      "anchor": "silent-degradation-why-rag-quality-drifts-without-an-obvious-break",
      "url": "https://changegamer.ai/articles/rag-failure-modes-runbook#silent-degradation-why-rag-quality-drifts-without-an-obvious-break"
    },
    {
      "depth": 2,
      "text": "What about stale answers and permission leaks?",
      "anchor": "what-about-stale-answers-and-permission-leaks",
      "url": "https://changegamer.ai/articles/rag-failure-modes-runbook#what-about-stale-answers-and-permission-leaks"
    },
    {
      "depth": 2,
      "text": "Turning this into an operator runbook",
      "anchor": "turning-this-into-an-operator-runbook",
      "url": "https://changegamer.ai/articles/rag-failure-modes-runbook#turning-this-into-an-operator-runbook"
    }
  ],
  "faq": [
    {
      "question": "What's the difference between a retrieval miss and context overload in RAG?",
      "answer": "A retrieval miss means the correct passage never made it into the candidate set the model saw, so the failure is upstream in indexing or ranking; context overload means the correct passage was retrieved successfully but the assembled prompt still produced a wrong or hedged answer because of chunk count, position, or contradiction. Fixing a retrieval miss touches the index or the retriever; fixing context overload touches prompt assembly."
    },
    {
      "question": "How do I tell if a RAG failure is an ingestion gap or a ranking problem?",
      "answer": "Query the index directly for the expected passage, bypassing the ranker entirely — a keyword filter or exact-ID lookup against the raw store answers whether the chunk exists at all. If it is absent, the fault is ingestion or chunking; if it is present but never surfaces near the top of retrieval results, the fault is ranking, and the fix is a wider candidate set, a better-fitted embedding model, or hybrid lexical search."
    },
    {
      "question": "Where should content sanitization happen in a RAG pipeline?",
      "answer": "At ingestion, before a document is chunked and embedded, not only at generation time when an agent reads the retrieved text. Stripping instruction-like patterns and recording each chunk's source at ingest time catches untrusted content before it becomes part of the searchable index, and it gives incident response a way to trace a bad answer back to the specific connector or document that introduced it."
    },
    {
      "question": "How often does RAG quality degrade without anyone noticing?",
      "answer": "Silent degradation is common enough that it needs a standing, scheduled check rather than a one-time launch review — embedding providers update models, corpora grow and shift what competes for the same top-k slots, and ingestion connectors fail quietly on schema changes or rate limits, none of which raises an application error on its own."
    }
  ],
  "body": "The [pillar guide](/articles/rag-in-production) names six recognizable failure classes in a field-guide table, each with a one-line symptom and diagnostic. Two of those six have a full runbook elsewhere in this cluster: a stale answer is covered by [keeping a RAG index fresh](/articles/rag-index-freshness), and a permission leak by [permission-aware retrieval](/articles/multi-tenant-rag-permissions). This article expands the other four — retrieval miss, context overload, injection via content, and silent degradation — into symptom-diagnostic-fix runbooks with the mechanics the pillar's table cells only gesture at.\n\n## Why does a retriever return \"no information found\" when the answer exists?\n\nA retrieval miss has three distinct root causes, and confusing them wastes an incident chasing the wrong fix. First, the chunk may never have entered the index — a parsing failure dropped a table, a crawl never reached the page, or a chunking boundary split the fact across two pieces so neither states it cleanly. Second, the chunk may be indexed but ranked below the cutoff the retriever applies, typically from an embedding-domain mismatch or a similarity threshold set too tight ([RAG and retrieval for agents](/resources/rag-retrieval-for-agents) names this pairing directly). Third, the query may be an exact-identifier lookup — an error code, a SKU, a citation name — that vector-only search structurally misses, because semantic similarity was never designed to reward literal string matches the way a lexical index does.\n\nThe diagnostic sequence follows the same order:\n\n1. Query the raw store directly for the expected passage, bypassing the ranker — a keyword filter settles whether the chunk is present at all.\n2. If present, check where it ranks relative to the cutoff, and against what candidate-set size.\n3. If the query names a literal identifier, check whether lexical search ran at all.\n\nThe fix maps to which of the three it turns out to be: an ingestion or chunking fix for a missing chunk, a swapped embedding model or a reranker for a threshold problem, and [hybrid retrieval](/articles/hybrid-retrieval-fusion) — lexical plus vector, fused — for the identifier case, since no embedding-quality tuning closes that gap alone.\n\n## Context overload: when the right passage is retrieved but the answer is still wrong\n\nContext overload is a prompt-assembly failure, not a retrieval failure — the correct passage already made the candidate set, and the model still produced a wrong, hedged, or overly cautious answer because of how those candidates were packaged into the prompt. Three mechanics produce it:\n\n- **Lost-in-the-middle placement.** A model reading a long assembled context under-weights content sitting between the start and end of the prompt (Liu et al., arXiv:2307.03172, TACL 2024, cited in [RAG and retrieval for agents](/resources/rag-retrieval-for-agents)). Fix: sort the assembled context so the highest-scored chunks sit at the start or end.\n- **Chunk-count dilution.** Feeding twenty marginally relevant chunks alongside the one correct chunk buries the signal in noise. Fix: a tighter candidate count after reranking, not a wider one.\n- **Contradictory chunks.** Multiple versions of the same source disagree in the index, so the model hedges or blends a wrong average. Fix: deduplication at ingest and metadata-filtering by source recency.\n\nThe diagnostic step for all three is the same: pull the actual assembled prompt for a failing case, not just the retrieval log, and inspect chunk count, the position of the correct chunk, and whether any two chunks conflict. Retrieval logs alone hide this class entirely, because retrieval itself succeeded.\n\n## How does untrusted content end up in a RAG index in the first place?\n\nContent injection reaches a RAG system at ingestion, before any agent or generation step touches a chunk. A document enters through a web crawl, a third-party connector (ticketing system, shared drive, partner feed), or a direct user upload, and none of those channels can be assumed free of instruction-like text — a support ticket can contain \"ignore prior instructions,\" a scraped page can carry hidden text invisible to a human but plain to a parser. Once chunked and embedded, that text is indistinguishable from any other passage in the index unless something marked it untrusted on the way in.\n\nTwo ingestion-time controls address this, distinct from runtime guardrails applied when an agent later reads the content:\n\n- **Strip or escape instruction-like patterns before embedding.** The same defense recommended for content entering a model's context applies earlier: \"strip or escape instruction-like patterns (`Ignore previous instructions`, `<system>`, `ASSISTANT:`) from retrieved content before inserting into context\" ([agentic security checklist](/resources/agentic-security-checklist)) — applied at chunk-creation time, a pattern is neutralized once for every future query that might retrieve it, instead of re-filtered on each read.\n- **Attribute every chunk to its source at ingest.** Tag each chunk with the connector, document ID, and trust tier it came from, so a later incident becomes \"connector X, document Y\" to quarantine, rather than a corpus-wide search.\n\nSanitization at ingest is necessary but not sufficient alone: architectural patterns like Dual LLM and LLM Map-Reduce isolate untrusted content from tool-calling surfaces even after it clears ingestion, because \"architecture reduces what an injection can reach; guardrails and checklists reduce how often one succeeds in the first place\" ([prompt injection design patterns](/resources/prompt-injection-design-patterns)). This runbook covers the ingestion layer; for what happens when retrieved content drives tool calls and downstream actions, see [agentic RAG patterns](/articles/agentic-retrieval-patterns).\n\n## Silent degradation: why RAG quality drifts without an obvious break\n\nRAG quality degrades silently when one of three things changes without anyone watching, and none throws an application error — the system keeps answering, just with a slowly worsening hit rate. First, the embedding model or its provider changes behavior: a provider ships an update behind the same API identifier, and every query now scores against vectors produced by a slightly different function than the ones already indexed. Second, the corpus grows in ways that skew competition for top-k slots — a chunk once third out of five hundred candidates now ranks thirtieth out of fifty thousand, with nothing about the chunk itself having changed. Third, an ingestion connector breaks quietly — a schema change, an expired credential, a quota limit — and stops feeding new content while old content keeps answering fine, so the system looks healthy except for the growing gap of what it never learned.\n\nThe diagnostic for all three is a scheduled evaluation pass against a fixed golden set, run on a recurring cadence rather than only when a change ships, tracking recall@k and precision@k over time so a slow decline shows as a trend line instead of a complaint. This runbook does not re-derive how to build that harness — see [evaluating a RAG system](/articles/evaluating-rag-systems) for golden-set and CI mechanics. Routing systems carry a narrower version of this same problem: a difficulty classifier can go stale after an upstream chunking or model change and misroute traffic between tiers unnoticed — see [RAG cost and latency](/articles/rag-cost-and-latency) for that specific case.\n\n## What about stale answers and permission leaks?\n\nStale answers and permission leaks belong to this field guide but have their own dedicated runbooks, because their causes and fixes are architecturally distinct from the four above. A stale answer is a freshness problem, addressed by [keeping a RAG index fresh](/articles/rag-index-freshness) with per-source staleness contracts and sync-lag monitoring. A permission leak is an authorization problem, addressed by [permission-aware retrieval](/articles/multi-tenant-rag-permissions) with pre-filters derived from the authenticated principal, applied before ranking. Treating either as a retrieval-quality or content-trust issue, as the four classes above are, misdirects the fix.\n\n## Turning this into an operator runbook\n\nTwo habits keep every failure class here fast to diagnose rather than slow to reconstruct after the fact. Log retrieval traces — the query, matched chunks with scores, and filters applied — with the same discipline as application logs, since every diagnostic step above depends on reconstructing what a query actually retrieved, not what it should have. And keep a standing incident table mapping each failure class to its owning team, diagnostic query, and typical fix, so the first responder to a wrong-answer page is not starting from a blank page. As of August 2026 that table is the cheapest artifact in this cluster to build — write it once, next to the pillar's [production readiness checklist](/articles/rag-in-production), and add a row whenever a new failure class earns one.",
  "cluster": {
    "id": "rag-in-production",
    "title": "RAG in production",
    "description": "How to run retrieval-augmented generation as a real system — ingestion and chunking, embedding choice and reindexing, hybrid search, reranking, evaluation, freshness, access control, cost, latency, and when RAG is the wrong answer.",
    "status": "complete",
    "pillar": {
      "slug": "rag-in-production",
      "title": "Agentic RAG in Production: The Complete Operator Guide",
      "description": "The operator playbook for agentic RAG in production: ingestion, chunking, hybrid retrieval, reranking, evaluation, freshness and cost.",
      "kind": "pillar",
      "order": 0,
      "html": "https://changegamer.ai/articles/rag-in-production",
      "markdown": "https://changegamer.ai/articles/rag-in-production.md",
      "json": "https://changegamer.ai/api/articles/rag-in-production.json"
    },
    "articles": [
      {
        "slug": "rag-ingestion-pipeline",
        "title": "How to Build a RAG Ingestion Pipeline That Survives Production",
        "description": "The six properties that separate a production RAG ingestion pipeline from a demo script: tested extraction, idempotent writes, incremental updates, deletion propagation, durable execution, and metadata captured at ingest time.",
        "kind": "sub",
        "order": 1,
        "html": "https://changegamer.ai/articles/rag-ingestion-pipeline",
        "markdown": "https://changegamer.ai/articles/rag-ingestion-pipeline.md",
        "json": "https://changegamer.ai/api/articles/rag-ingestion-pipeline.json"
      },
      {
        "slug": "chunking-documents-for-rag",
        "title": "How to Chunk Documents for RAG (Strategy Beats Size)",
        "description": "Chunking decisions that actually move retrieval quality: structural boundaries before fixed windows, parent-document expansion, special handling for tables and code, overlap trade-offs, and tuning against recall@k instead of blog defaults.",
        "kind": "sub",
        "order": 2,
        "html": "https://changegamer.ai/articles/chunking-documents-for-rag",
        "markdown": "https://changegamer.ai/articles/chunking-documents-for-rag.md",
        "json": "https://changegamer.ai/api/articles/chunking-documents-for-rag.json"
      },
      {
        "slug": "choosing-embedding-models",
        "title": "How to Choose an Embedding Model for RAG (and Version It Like a Schema)",
        "description": "Embedding selection as an operations problem: the criteria that dominate total cost of ownership, the never-mix-spaces invariant, reindex migrations with dual indexes, and where quantization fits once cost shows up.",
        "kind": "sub",
        "order": 3,
        "html": "https://changegamer.ai/articles/choosing-embedding-models",
        "markdown": "https://changegamer.ai/articles/choosing-embedding-models.md",
        "json": "https://changegamer.ai/api/articles/choosing-embedding-models.json"
      },
      {
        "slug": "hybrid-retrieval-fusion",
        "title": "How to Combine Keyword and Vector Search in RAG",
        "description": "Why hybrid retrieval is the production default rather than an upgrade: complementary failure modes of lexical and dense search, reciprocal rank fusion versus weighted scoring, parameter choices, and how filtering interacts with fusion.",
        "kind": "sub",
        "order": 4,
        "html": "https://changegamer.ai/articles/hybrid-retrieval-fusion",
        "markdown": "https://changegamer.ai/articles/hybrid-retrieval-fusion.md",
        "json": "https://changegamer.ai/api/articles/hybrid-retrieval-fusion.json"
      },
      {
        "slug": "reranking-retrieved-results",
        "title": "When and How to Rerank Retrieved Documents in RAG",
        "description": "Reranking as a budget decision: why first-stage ranking misorders good evidence, when cross-encoder reranking pays for itself, how to pick candidate depth at the knee, gating by query difficulty, and deduplicating after fusion.",
        "kind": "sub",
        "order": 5,
        "html": "https://changegamer.ai/articles/reranking-retrieved-results",
        "markdown": "https://changegamer.ai/articles/reranking-retrieved-results.md",
        "json": "https://changegamer.ai/api/articles/reranking-retrieved-results.json"
      },
      {
        "slug": "evaluating-rag-systems",
        "title": "How to Evaluate a RAG System (Retrieval Metrics, Generation Metrics, CI Gates)",
        "description": "The evaluation harness that keeps RAG changeable: golden-set construction, retrieval metrics separated from generation metrics, LLM-as-judge screening with human acceptance, CI regression gates, and the logged-query flywheel.",
        "kind": "sub",
        "order": 6,
        "html": "https://changegamer.ai/articles/evaluating-rag-systems",
        "markdown": "https://changegamer.ai/articles/evaluating-rag-systems.md",
        "json": "https://changegamer.ai/api/articles/evaluating-rag-systems.json"
      },
      {
        "slug": "rag-index-freshness",
        "title": "How to Keep a RAG Index Fresh (Staleness Bounds, Not Vibes)",
        "description": "Freshness as an engineered property: per-source staleness contracts, document versioning and tombstones, effective-date filtering, deletion propagation with reconciliation backstops, and the sync-lag metrics that predict stale answers before users report them.",
        "kind": "sub",
        "order": 7,
        "html": "https://changegamer.ai/articles/rag-index-freshness",
        "markdown": "https://changegamer.ai/articles/rag-index-freshness.md",
        "json": "https://changegamer.ai/api/articles/rag-index-freshness.json"
      },
      {
        "slug": "multi-tenant-rag-permissions",
        "title": "Permission-Aware Retrieval: Multi-Tenant RAG Without Leaks",
        "description": "How to enforce access control inside retrieval for multi-tenant RAG: authorization as mandatory pre-filters derived from the authenticated principal, tenant isolation mechanics, permission-negative testing, and the post-filter trap that produces empty answers.",
        "kind": "sub",
        "order": 8,
        "html": "https://changegamer.ai/articles/multi-tenant-rag-permissions",
        "markdown": "https://changegamer.ai/articles/multi-tenant-rag-permissions.md",
        "json": "https://changegamer.ai/api/articles/multi-tenant-rag-permissions.json"
      },
      {
        "slug": "agentic-retrieval-patterns",
        "title": "Retrieval as a Tool: Agentic RAG Patterns That Survive Production",
        "description": "When AI agents consume retrieval as a tool rather than a pipeline stage: narrow tool contracts, hard budgets on iterative retrieval, query decomposition, provenance-carrying results, and keeping trust boundaries inside the retrieval path.",
        "kind": "sub",
        "order": 9,
        "html": "https://changegamer.ai/articles/agentic-retrieval-patterns",
        "markdown": "https://changegamer.ai/articles/agentic-retrieval-patterns.md",
        "json": "https://changegamer.ai/api/articles/agentic-retrieval-patterns.json"
      },
      {
        "slug": "rag-cost-and-latency",
        "title": "How to Cut RAG Cost and Latency Without Cutting Quality",
        "description": "RAG cost and latency as engineered budgets: where the money actually goes, caching layers and their hit-rate economics, routing queries to right-sized models, bounding retrieval fan-out, the hidden lines (reindex migrations, eval compute), and p95 discipline.",
        "kind": "sub",
        "order": 10,
        "html": "https://changegamer.ai/articles/rag-cost-and-latency",
        "markdown": "https://changegamer.ai/articles/rag-cost-and-latency.md",
        "json": "https://changegamer.ai/api/articles/rag-cost-and-latency.json"
      },
      {
        "slug": "rag-failure-modes-runbook",
        "title": "Common RAG Failure Modes and How to Fix Them",
        "description": "An operator runbook for the four RAG failure classes with no dedicated deep-dive elsewhere: retrieval miss, context overload, injection via content at ingestion time, and silent quality degradation — symptom, first diagnostic, and fix for each.",
        "kind": "sub",
        "order": 11,
        "html": "https://changegamer.ai/articles/rag-failure-modes-runbook",
        "markdown": "https://changegamer.ai/articles/rag-failure-modes-runbook.md",
        "json": "https://changegamer.ai/api/articles/rag-failure-modes-runbook.json"
      },
      {
        "slug": "graphrag-vs-vector-rag",
        "title": "GraphRAG vs Vector RAG: When to Use a Knowledge Graph Instead",
        "description": "A decision framework for choosing graph-structured retrieval over standard vector RAG: which query types GraphRAG actually wins, what building a knowledge graph costs, named implementations, and hybrid vector-plus-graph patterns.",
        "kind": "sub",
        "order": 12,
        "html": "https://changegamer.ai/articles/graphrag-vs-vector-rag",
        "markdown": "https://changegamer.ai/articles/graphrag-vs-vector-rag.md",
        "json": "https://changegamer.ai/api/articles/graphrag-vs-vector-rag.json"
      },
      {
        "slug": "when-rag-is-the-wrong-answer",
        "title": "When Is RAG the Wrong Answer? A Decision Guide",
        "description": "A worked decision guide for the four real alternatives to retrieval-augmented generation: including knowledge directly, querying structured data with text-to-SQL, fine-tuning for behavior change, and graph-based retrieval for entity relationships.",
        "kind": "sub",
        "order": 13,
        "html": "https://changegamer.ai/articles/when-rag-is-the-wrong-answer",
        "markdown": "https://changegamer.ai/articles/when-rag-is-the-wrong-answer.md",
        "json": "https://changegamer.ai/api/articles/when-rag-is-the-wrong-answer.json"
      }
    ]
  },
  "navigation": {
    "pillar": {
      "slug": "rag-in-production",
      "title": "Agentic RAG in Production: The Complete Operator Guide",
      "description": "The operator playbook for agentic RAG in production: ingestion, chunking, hybrid retrieval, reranking, evaluation, freshness and cost.",
      "kind": "pillar",
      "order": 0,
      "html": "https://changegamer.ai/articles/rag-in-production",
      "markdown": "https://changegamer.ai/articles/rag-in-production.md",
      "json": "https://changegamer.ai/api/articles/rag-in-production.json"
    },
    "previous": {
      "slug": "rag-cost-and-latency",
      "title": "How to Cut RAG Cost and Latency Without Cutting Quality",
      "description": "RAG cost and latency as engineered budgets: where the money actually goes, caching layers and their hit-rate economics, routing queries to right-sized models, bounding retrieval fan-out, the hidden lines (reindex migrations, eval compute), and p95 discipline.",
      "kind": "sub",
      "order": 10,
      "html": "https://changegamer.ai/articles/rag-cost-and-latency",
      "markdown": "https://changegamer.ai/articles/rag-cost-and-latency.md",
      "json": "https://changegamer.ai/api/articles/rag-cost-and-latency.json"
    },
    "next": {
      "slug": "graphrag-vs-vector-rag",
      "title": "GraphRAG vs Vector RAG: When to Use a Knowledge Graph Instead",
      "description": "A decision framework for choosing graph-structured retrieval over standard vector RAG: which query types GraphRAG actually wins, what building a knowledge graph costs, named implementations, and hybrid vector-plus-graph patterns.",
      "kind": "sub",
      "order": 12,
      "html": "https://changegamer.ai/articles/graphrag-vs-vector-rag",
      "markdown": "https://changegamer.ai/articles/graphrag-vs-vector-rag.md",
      "json": "https://changegamer.ai/api/articles/graphrag-vs-vector-rag.json"
    }
  },
  "resources": [
    {
      "slug": "rag-retrieval-for-agents",
      "html": "https://changegamer.ai/resources/rag-retrieval-for-agents",
      "markdown": "https://changegamer.ai/resources/rag-retrieval-for-agents.md",
      "json": "https://changegamer.ai/api/resources/rag-retrieval-for-agents.json"
    },
    {
      "slug": "prompt-injection-design-patterns",
      "html": "https://changegamer.ai/resources/prompt-injection-design-patterns",
      "markdown": "https://changegamer.ai/resources/prompt-injection-design-patterns.md",
      "json": "https://changegamer.ai/api/resources/prompt-injection-design-patterns.json"
    },
    {
      "slug": "agentic-security-checklist",
      "html": "https://changegamer.ai/resources/agentic-security-checklist",
      "markdown": "https://changegamer.ai/resources/agentic-security-checklist.md",
      "json": "https://changegamer.ai/api/resources/agentic-security-checklist.json"
    }
  ]
}