Course Recommendation Agent
Tell it what you want to learn and what you already know; it hands back a roadmap with prerequisite chains, skill gaps, and a week-by-week schedule. Think of it as a friend who has memorized every course on Coursera.
Two kinds of recommendation, blended
The engine pairs content-based filtering, using sentence-transformer embeddings in ChromaDB, with collaborative filtering built from item-item and user-user similarity. One side understands what a course is about; the other understands what people like you tend to take next. Together they cover the cases where either alone would fall flat.
An agent that picks its own tools
A LangChain agent sits on top, backed by Llama 3.1 running locally through Ollama, so there are no API costs. It decides on its own when to call semantic search, skill-gap analysis, prerequisite-chain lookup, or timeline estimation. User profiles persist across sessions, so you do not reintroduce yourself every time. A Streamlit web app and a CLI both front it, and the whole system runs under Docker Compose.
2,759 courses, 1,754 skills, 3,682 prerequisite links.Searched, graphed, and reasoned over by a single agent.
Making three systems feel like one
The hard part was never any single component. It was making vector search, prerequisite graphs, and tool-calling read as one coherent system instead of three separate things bolted together. A recommendation is only useful if the ordering makes sense, and the ordering only makes sense if the graph and the search agree with each other.