What we built

A retrieval-augmented assistant that answers from course material and cites its sources.

Architecture

  1. Ingest slides, notebooks and transcripts
  2. Chunk and embed into a vector store
  3. Retrieve top-k chunks and generate with citations
  4. Evaluate faithfulness with Opik
import yaml
import xml.etree.ElementTree as xml_tree

# 1. Read YAML data
with open('feed.yaml', 'r') as file:
    yaml_data = yaml.safe_load(file)

# 2. Create the root RSS element
rss_element = xml_tree.Element('rss', {
    'version': '2.0',
    'xmlns:itunes': 'http://www.itunes.com/dtds/podcast-1.0.dtd',
    'xmlns:content': 'http://purl.org/rss/1.0/modules/content/'
})

# 3. Create the channel element
channel_element = xml_tree.SubElement(rss_element, 'channel')

# 4. Add the title from YAML data
xml_tree.SubElement(channel_element, 'title').text = yaml_data['title']

# 5. Create an ElementTree object and write to XML file
output_tree = xml_tree.ElementTree(rss_element)
output_tree.write('podcast.xml', encoding='UTF-8', xml_declaration=True)
Python

Key decisions

DecisionWhy
Small chunks (400 tokens)Better citation precision
Eval set of 120 questionsCatch regressions early

Limitations

  • Transcripts with poor audio reduce answer quality
  • No multi-turn memory yet