QuestionAIr
Ongoing
An active-learning tool that turns uploaded documents into targeted study questions, then grades the answers and explains them. Built solo end to end, from file ingestion to interface, as a counterweight to the cognitive offloading that comes with using AI for everything else.
- Python
- LLMs
- Whisper
- Document parsing
- Turns user-uploaded documents into targeted study questions through an LLM generation pipeline.
- Answer by speaking — Whisper handles speech-to-text — and get automated grading and feedback back.
- Built solo end to end: file ingestion, generation pipeline, grading, interface.
The problem
Testing yourself on material beats re-reading it, but writing the questions is the part nobody does — by the time you have written twenty good questions about a lecture you have effectively already revised it, and the questions you write are biased toward what you already remember.
There is a second problem underneath that one. Using AI heavily makes it easy to offload the thinking entirely: the answer arrives, it looks right, and nothing is retained. I wanted a tool that pushed the other way — one that uses a model to make me produce the answer rather than to hand me one.
How it works
- Upload step accepts a document and extracts its text, keeping enough structure to know where one section ends and the next begins.
- The text is chunked so each request to the model covers a coherent piece of material rather than an arbitrary slice.
- Each chunk is sent with a prompt that asks for questions grounded strictly in the passage, returned in a fixed schema.
- The response is validated against that schema before anything downstream touches it — a malformed generation is retried, not parsed by hand.
- Answers can be spoken rather than typed: Whisper transcribes them, which keeps the loop fast enough to actually do repeatedly.
- An automated grader scores the answer against the source material and returns feedback explaining what was missing.
What I learned
Most of the work was not prompting, it was the contract around the prompt. Asking a model for prose and then regexing it apart is fragile; asking for a declared schema and validating on the way out turns an unreliable component into one that either succeeds or fails loudly.
The other lesson was scope of context. Questions generated from a whole document drift toward the introduction; questions generated per section stay specific, and specificity is the whole value of the tool.
Grading turned out to be harder than generating. A grader that is too lenient makes the whole exercise pointless, and one that is too strict punishes a right answer for using different words than the source — so the feedback has to explain the judgement, not just score it.