Back to projects

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.