Lab: RAG Pipeline

Build an end-to-end RAG system with chunking, retrieval, and generation.

Objectives

  • Implement document chunking
  • Build retrieval pipeline
  • Generate contextual answers

Demo Code

See demos/course4/week4/rag-pipeline/

Lab Exercise

See labs/course4/week4/lab_4_7_rag.py

Key Implementation

#![allow(unused)]
fn main() {
pub struct RagPipeline {
    chunker: TextChunker,
    vector_store: VectorStore,
    generator: Generator,
}

impl RagPipeline {
    pub fn query(&self, question: &str) -> RagResponse {
        // 1. Embed query
        let query_embedding = self.embed(question);

        // 2. Retrieve relevant chunks
        let results = self.vector_store.search(&query_embedding, 3);

        // 3. Build context
        let context = results.iter()
            .map(|r| r.chunk.text.as_str())
            .collect::<Vec<_>>()
            .join("\n\n");

        // 4. Generate answer
        let prompt = format!(
            "Context:\n{}\n\nQuestion: {}\n\nAnswer:",
            context, question
        );
        let answer = self.generator.generate(&prompt);

        RagResponse { answer, sources: results }
    }
}
}