Learning Companion
The modern learning stack
Course model
The Learning Companion uses a flexible model with feature flags. It supports- A timeline-based view on course slots with concrete dates, and allows for associating directly with the slot (like recordings or boards), or indirectly via course sections.
- A topic-based view on all the provided materials and course slots.
- A structural view putting the whole course into a more traditional table of contents
- Conversational view using a state-of-the-art LLM-based chatbot
Content management
- Easy to use admin backend
- Extensive use of convention over configuration to reduce the
- Flexible and extensible use of scalable object storage as a native store
Chatbot features
- Based on GPT-4.1 as a standard model, the model to be used can be configured on a course and prompt level (OpenAI, Google, Anthropic, DeepSeek), including reasoning models like o1, o3 or Gemini 2.5-Pro
- Querying indexed documents (with metadata), implementing a RAG approach with per-course configuration of major parameters (like number of chunks)
- Token streaming to the UI for low-latency answers
- Configurable history management
- Generate topic suggestions
- Generate follow-up question suggestions
- Inline citations of the used materials for better traceability (with direct quotes)
- Multiple and configurable agents (in CMS) with their prompts chosen at runtime (previously dynamic prompt selection) (either via LLM or direct similarity search), including a customized set of tools for each agent
- Sidebar with suggested course materials relevant to the question
- Thumbs voting to improve the quality
- Extensive chatbot interaction logging and self-evaluation via LLM-as-a-judge
- Generate clarifying info prompts to the user
- Specialized tools (or functions) using an agentic workflow to make the LLM automatically choose what to include - especially useful for API-based integration of content such as timetables, staff directories, meal plans, etc.
- Low-barrier improvement via directly supported Q&A
- Upload of images as multimodal input
Flexible document indexing
- Wide range of documents such as pdf, md, docx, pptx, but also video transcripts (both vtt and YouTube)
- Periodic indexing of web sites and other content
- Observability of workflow execution
- Multiple indexing methods, including multimodal indexing
- Configurable indexing parameters, such as chunking strategy
- Easy reindexing and chunk inspection from the CMS
Evaluation and quality monitoring
- Anonymous logging
- Self evaluation using LLM-as-a-judge approaches
- Manual quality tagging and annotation for improvement
- Auto-expiring information (e.g., semester-related)
Extensible and customizable
- Many feature flags, supporting, e.g., synchronous courses (with timeline), asynchronous courses, or course-indepenten bots
- Themeable, supporting automatic and manual switching between light and dark mode
- Easy addition of new material types
- Supports multiple languages (or a course level)
- Models, prompts, and chatbot parameters directly configurable in CMS
- Extensive API and views designed to be embedded into other sites (fragments and OEmbed)
- Planned: compose chatbots from multiple courses or more specialized bots
Specialized features for supporting modelling courses
- Generate UML class diagrams, use case diagrams, sequence diagrams, state charts, component and deployment diagrams via PlantUML and inline display
- Generate ARIS EPC and Goal Diagrams via Mermaid, including inline display
- Generate BPMN Process and Conversation Diagrams using BPMN-XML (for bpmn.io) and drawio syntax, including inline display
- Generate ER-Diagrams (Chen notation) using yEd syntax
- Feedback on UML, BPMN, and ARIS diagrams, based on course-specific good practices
- Feedback on User Stories and Personas
Modern technologies
- FastAPI with Jinja2 (with JinjaX components) and extensive use of Pydantic
- Request handling and service invocation completely asynchronous, maximizing throughput
- Hypermedia-first approach using HTMX
- Responsive web design
- Built ontop of langchain
- Prefect as orchestrator for indexing tasks
- Weaviate as a vector database
- MongoDB Atlas for history management
- Log observability with Pydantic's LogFire, GenAI observability with LangFuse
Team
- Ghita Kristiansen (concept for a learning companion providing consultancy on UX methods)
- Ralitsa Atanasova (POC for a new approach to proving course materials)
- Marcelo Günther Farah (POC for generating diagrams for a modelling course)
- Luka von Ahn (analysis of user-centered techniques for bot quality assurance, implementation and evaluation of a bot for the economics department)
- Athanasia Skaroglou-Chasioti (context disambiguation, implementation and evaluation of a bot for the computer science and business information systems department)
- Hai-Mi Nguyen (feedback on modelling diagrams, multimodal input)
- Andreas P. Schmidt (main developer, project coordinator)