What we built
A retrieval-augmented assistant that answers from course material and cites its sources.
Architecture
- Ingest slides, notebooks and transcripts
- Chunk and embed into a vector store
- Retrieve top-k chunks and generate with citations
- 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
| Decision | Why |
|---|---|
| Small chunks (400 tokens) | Better citation precision |
| Eval set of 120 questions | Catch regressions early |
Limitations
- Transcripts with poor audio reduce answer quality
- No multi-turn memory yet