Convex Agents RAG

Implements Retrieval-Augmented Generation (RAG) patterns to enhance agents with custom knowledge bases. Use this when agents need to search through documents, retrieve context from a knowledge base, or ground responses in specific data.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "Convex Agents RAG" with this command: npx skills add sstobo/convex-skills/sstobo-convex-skills-convex-agents-rag

Purpose

Enables agents to search through custom content and knowledge bases to provide accurate, context-grounded responses. RAG combines LLM capabilities with semantic search.

When to Use This Skill

  • Agents need to reference a knowledge base or document collection
  • Grounding answers in specific data (policies, product docs, etc.)
  • Semantic search across custom content
  • Building a search + generation system (FAQ, documentation, support)
  • Reducing hallucinations by constraining responses to known information
  • Managing user-specific or team-specific knowledge namespaces

Setup

Install and configure RAG in your convex.config.ts:

import { defineApp } from "convex/server";
import agent from "@convex-dev/agent/convex.config";
import rag from "@convex-dev/rag/convex.config";

const app = defineApp();
app.use(agent);
app.use(rag);

export default app;

Add Content

Ingest documents into a namespace:

import { rag } from "@convex-dev/rag";

export const addContent = action({
  args: { userId: v.string(), key: v.string(), text: v.string() },
  handler: async (ctx, { userId, key, text }) => {
    const namespace = `user:${userId}`;
    await rag.addContent(ctx, components.rag, {
      namespace,
      key,
      text,
      filters: { filterNames: [filename] },
    });
  },
});

Search and Generate

Use RAG with agents:

export const answerWithContext = action({
  args: { threadId: v.string(), userId: v.string(), question: v.string() },
  handler: async (ctx, { threadId, userId, question }) => {
    const { thread } = await myAgent.continueThread(ctx, { threadId });

    const context = await rag.search(ctx, components.rag, {
      namespace: `user:${userId}`,
      query: question,
      limit: 10,
    });

    const augmentedPrompt = `# Context:\n\n${context.text}\n\n# Question:\n\n${question}`;
    const result = await thread.generateText({ prompt: augmentedPrompt });

    return result.text;
  },
});

Key Principles

  • Namespaces isolate data: Use user:userId or team:teamId for multi-tenant safety
  • Hybrid search: Combine text and vector search for better results
  • Filtering: Use filterNames to target specific documents

Next Steps

  • See fundamentals for basic agent setup
  • See context for advanced context customization

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

betterauth-tanstack-convex

No summary provided by upstream source.

Repository SourceNeeds Review
General

convex-tanstack

No summary provided by upstream source.

Repository SourceNeeds Review
General

convex-queries

No summary provided by upstream source.

Repository SourceNeeds Review
General

convex-actions-general

No summary provided by upstream source.

Repository SourceNeeds Review