{
    "schema_version": "1.0",
    "exported_at": "2026-08-16T10:10:37+00:00",
    "source": "https://invitationbuddy.com/workflows/support-knowledge-base-rag-assistant",
    "workflow": {
        "name": "Support Knowledge Base RAG Assistant",
        "slug": "support-knowledge-base-rag-assistant",
        "version": "1.0.0",
        "tagline": "Answer support questions from your own documentation, with citations",
        "summary": "Indexes your help centre and internal runbooks, retrieves the relevant passages per question, and answers with links back to the source — refusing when the answer is not in the corpus.",
        "description": "A support assistant that only answers from your documentation. Questions are embedded, the relevant passages retrieved and re-ranked, and the answer composed strictly from what was retrieved — with citations the user can click.\n\nThe important behaviour is the refusal: when the corpus does not contain the answer, it says so and escalates rather than inventing one.",
        "category": "Customer Support",
        "type": "Agentic Workflow",
        "difficulty": "advanced",
        "automation_level": "mostly_automated",
        "pricing": "paid",
        "language": "en",
        "trigger": {
            "type": "chat",
            "detail": null
        },
        "input_types": [
            "text",
            "document",
            "pdf",
            "api"
        ],
        "output_types": [
            "summary",
            "email",
            "dashboard"
        ],
        "author": null,
        "company": null,
        "last_updated": "2026-07-11"
    },
    "overview": {
        "purpose": "A support assistant that only answers from your documentation. Questions are embedded, the relevant passages retrieved and re-ranked, and the answer composed strictly from what was retrieved — with citations the user can click.\n\nThe important behaviour is the refusal: when the corpus does not contain the answer, it says so and escalates rather than inventing one.",
        "business_value": "Deflects routine questions with answers staff can audit, instead of a chatbot that guesses.",
        "expected_outcome": "Cited answers drawn only from your corpus, with unanswerable questions escalated rather than guessed.",
        "problems_solved": [
            "Documentation exists but nobody can find the right page",
            "Generic chatbots answer from training data, not your docs",
            "No audit trail for what the assistant told a customer",
            "Documentation drift goes unnoticed until someone complains"
        ],
        "ideal_users": [
            "Support teams with substantial documentation",
            "Internal helpdesks",
            "Regulated organisations that need auditable answers"
        ],
        "benefits": [
            "Every answer cites the document it came from",
            "Refuses rather than inventing when the corpus is silent",
            "Re-indexes as documentation changes — no retraining",
            "Retrieval respects the asking user's permissions"
        ],
        "limitations": [
            "Answer quality is capped by retrieval quality — bad chunks, bad answers",
            "Chunking strategy needs tuning per corpus",
            "Multi-hop questions spanning several documents remain hard",
            "Keeping the index in sync with the source of truth is ongoing work"
        ],
        "success_metrics": [
            "Deflection rate",
            "Groundedness (answers fully supported by citations)",
            "Escalation rate and its accuracy",
            "Documentation gaps surfaced per week"
        ]
    },
    "metrics": {
        "estimated_minutes": 15,
        "estimated_cost": 0.35,
        "cost_currency": "USD",
        "estimated_tokens": 18000,
        "success_rate": 86,
        "automation_percent": 82,
        "human_review_percent": 18
    },
    "industries": [
        "SaaS",
        "Finance",
        "Healthcare",
        "Government"
    ],
    "tags": [
        "RAG",
        "Enterprise Ready",
        "Self Hosted",
        "GDPR Aware"
    ],
    "ai_skills": [
        "RAG",
        "Summarization",
        "Text Generation"
    ],
    "tools": [
        {
            "name": "ChatGPT",
            "role": "primary",
            "required": true,
            "url": "https://invitationbuddy.com/ai-directory/chatgpt"
        },
        {
            "name": "Claude",
            "role": "supporting",
            "required": true,
            "url": "https://invitationbuddy.com/ai-directory/claude"
        }
    ],
    "models": [],
    "integrations": [
        {
            "name": "OpenAI",
            "kind": "ai_provider",
            "auth_type": "api_key",
            "required": true
        },
        {
            "name": "Anthropic",
            "kind": "ai_provider",
            "auth_type": "api_key",
            "required": true
        },
        {
            "name": "Notion",
            "kind": "productivity",
            "auth_type": "oauth",
            "required": false
        },
        {
            "name": "REST API",
            "kind": "protocol",
            "auth_type": "api_key",
            "required": false
        },
        {
            "name": "MCP",
            "kind": "protocol",
            "auth_type": "token",
            "required": false
        }
    ],
    "prerequisites": [
        {
            "kind": "api_key",
            "label": "LLM API key",
            "detail": "For embeddings and generation.",
            "required": true
        },
        {
            "kind": "account",
            "label": "Vector database",
            "detail": "Pinecone, Weaviate, Qdrant or pgvector.",
            "required": true
        },
        {
            "kind": "software",
            "label": "Document corpus",
            "detail": "Help centre, runbooks or policy documents in a machine-readable form.",
            "required": true
        },
        {
            "kind": "permission",
            "label": "Access-control mapping",
            "detail": "Which documents each user role may retrieve from.",
            "required": true
        }
    ],
    "steps": [
        {
            "number": 1,
            "title": "Ingest and chunk the corpus",
            "description": "Split documents into passages that each stand alone, preserving headings and document identity.",
            "input": "Help centre export",
            "output": "Chunked passages",
            "estimated_minutes": 4,
            "difficulty": "advanced",
            "automation": "auto",
            "manual_review": false,
            "tips": [
                "Chunk on semantic boundaries, not fixed character counts — a passage cut mid-procedure retrieves badly"
            ]
        },
        {
            "number": 2,
            "title": "Embed and index",
            "description": "Generate embeddings and write them to the vector store with permission metadata attached.",
            "tool": "Pinecone",
            "input": "Chunked passages",
            "output": "Vector index",
            "estimated_minutes": 3,
            "difficulty": "advanced",
            "automation": "auto",
            "manual_review": false
        },
        {
            "number": 3,
            "title": "Retrieve for the question",
            "description": "Embed the incoming question and fetch the nearest passages, filtered by what this user is allowed to see.",
            "input": "User question",
            "output": "Candidate passages",
            "estimated_minutes": 1,
            "difficulty": "advanced",
            "automation": "auto",
            "manual_review": false,
            "warnings": [
                "Filter by permission at retrieval time — never retrieve everything and rely on the model to decline"
            ]
        },
        {
            "number": 4,
            "title": "Re-rank",
            "description": "Re-score candidates for actual relevance to the question, not just embedding proximity.",
            "input": "Candidates",
            "output": "Top passages",
            "estimated_minutes": 1,
            "difficulty": "advanced",
            "automation": "auto",
            "manual_review": false,
            "tips": [
                "Re-ranking is the single highest-leverage upgrade to a mediocre RAG setup"
            ]
        },
        {
            "number": 5,
            "title": "Compose a grounded answer",
            "description": "Answer strictly from the retrieved passages, citing each claim — or state that the answer is not in the documentation.",
            "model": "Claude Sonnet",
            "prompt": "Answer the question using ONLY the passages provided.\n\nQuestion: {{question}}\n\nPassages:\n{{passages}}\n\nRules:\n- Every factual claim must cite the passage it came from, as [1], [2]…\n- If the passages do not contain the answer, reply exactly: NOT_IN_DOCS\n- Do not use knowledge from outside these passages, even if you are confident\n- Be direct. No preamble.",
            "input": "Question + top passages",
            "output": "Cited answer",
            "estimated_minutes": 2,
            "difficulty": "advanced",
            "automation": "auto",
            "manual_review": false,
            "warnings": [
                "The NOT_IN_DOCS path must be wired to escalation — a question that silently dead-ends is worse than no assistant"
            ]
        },
        {
            "number": 6,
            "title": "Escalate or resolve",
            "description": "Cited answers go to the user; NOT_IN_DOCS routes to a human and logs a documentation gap.",
            "input": "Answer or refusal",
            "output": "Resolution or escalation",
            "expected_result": "Every question either answered with citations or escalated with context.",
            "estimated_minutes": 2,
            "difficulty": "advanced",
            "automation": "semi",
            "manual_review": false
        },
        {
            "number": 7,
            "title": "Review gaps weekly",
            "description": "The logged NOT_IN_DOCS questions become the documentation backlog.",
            "input": "Gap log",
            "output": "Documentation tasks",
            "expected_result": "Documentation improves from real questions rather than guesses.",
            "estimated_minutes": 2,
            "difficulty": "advanced",
            "automation": "manual",
            "manual_review": true
        }
    ],
    "prompts": [
        {
            "title": "Compose a grounded answer",
            "kind": "user",
            "body": "Answer the question using ONLY the passages provided.\n\nQuestion: {{question}}\n\nPassages:\n{{passages}}\n\nRules:\n- Every factual claim must cite the passage it came from, as [1], [2]…\n- If the passages do not contain the answer, reply exactly: NOT_IN_DOCS\n- Do not use knowledge from outside these passages, even if you are confident\n- Be direct. No preamble.",
            "variables": [
                "question",
                "passages"
            ],
            "model_hint": "Claude Sonnet"
        }
    ],
    "use_cases": [
        {
            "title": "Customer-facing docs search",
            "description": "Let users ask questions of the documentation and get cited answers.",
            "industry": "SaaS",
            "outcome": "Reduced routine ticket volume"
        },
        {
            "title": "Internal helpdesk",
            "description": "Answer staff questions from policies and runbooks with links to the source.",
            "industry": "Government",
            "outcome": "Faster internal answers"
        },
        {
            "title": "Regulated advice lookup",
            "description": "Search policy sets and quote the governing clause rather than paraphrasing.",
            "industry": "Finance",
            "outcome": "Auditable answers"
        }
    ],
    "faq": [
        {
            "question": "Does RAG eliminate hallucination?",
            "answer": "It reduces it substantially but does not eliminate it — the model can still misread a retrieved passage. Clickable citations are what let a user verify, which is why they are not optional here."
        },
        {
            "question": "Why is re-ranking a separate step?",
            "answer": "Nearest-neighbour search returns passages that are semantically close, which is not the same as passages that answer the question. Re-ranking is usually the biggest single quality jump available."
        },
        {
            "question": "How do we keep the index current?",
            "answer": "Re-index on document change rather than on a schedule. A weekly cron leaves up to a week of wrong answers after a policy update."
        }
    ]
}