You will be able to
- Explain overtrust and mistrust and how design pushes users towards calibrated trust
- Show where an answer came from and label AI-generated content clearly
- Communicate uncertainty with signals you can measure instead of invented percentages
- Design control: editing, regenerating, undo and confirmation before actions
- Add feedback, loading and error states that help rather than blame the user
Start from the user, not the model
Before designing any screen, write down who will use the feature and what job they are trying to finish. Study Buddy has at least two kinds of user in mind: a learner who wants explanations and practice, and perhaps a teacher who wants to check what the tool tells students. Their needs overlap but are not the same.
Ask whether AI is the right tool for each part of that job. A fixed list of chapter titles is better as a plain menu; explaining a concept in three different ways is where a model earns its place. Adding AI to a step that was already simple usually makes it slower and less predictable.
Then set expectations at first contact. A short line that says what the assistant can do, what it cannot do and where its answers come from prevents most disappointment later. Keep it specific to your product rather than a generic warning that everyone learns to ignore.
Personalisation can help when it is visible. If the learner tells Study Buddy their level and goal, show those settings somewhere they can see and change them, so a surprising answer can be traced back to a setting rather than feeling random.
Designing for the right amount of trust
Two opposite failures haunt AI products. Overtrust happens when people accept every answer, including the wrong ones, because the text sounds confident. Mistrust happens when people ignore a useful tool because it surprised them once. The goal is calibrated trust, where users rely on the system about as much as it deserves.
Explainability is the main lever. Show the sources behind an answer, such as the notes it was built from, and let the user open them in one click. When the system follows a rule, say so in plain words: for example, that Study Buddy gives hints instead of full solutions during a quiz.
Label generated content as generated. A small, consistent marker on AI answers, summaries and images tells people when to apply extra care, and it matters most where output could be mistaken for a teacher's or an expert's words.
Keep explanations simple. Most users are not AI specialists, so describe behaviour in terms of what they see, such as which notes were used, not in terms of embeddings or tokens.
Showing uncertainty honestly
Language models do not report their own reliability well. Asking a model to rate its confidence from 1 to 10 gives you a number that sounds precise but often has little to do with whether the answer is right. Showing that number to users creates false precision.
Use signals your code can actually measure. Retrieval that found no relevant note, a tool call that failed, two runs of the same question giving different answers, or a question outside the topics you support are all real reasons to show caution.
Turn those signals into clear states rather than vague hedges in every sentence. An empty state that says your notes do not cover this topic, with a button to add a note or ask for a general explanation, is far more useful than an answer padded with maybes.
- Found in your notes: show the answer with its sources
- Not in your notes: say so and offer next steps
- General knowledge: answer, but label it as not from the learner's material
- Something failed: explain briefly and offer a retry
Keeping the user in control
Generated output is a draft until the user accepts it. Let people edit an answer, regenerate it, ask for a simpler or shorter version and copy it out. Every one of these controls says that the human makes the final call.
Anything that changes data or reaches other people needs a confirmation step and, where possible, undo. If Study Buddy proposes five sessions for the study plan, show them first and add them only after the learner agrees, with an obvious way to remove a session added by mistake.
Give users control over their data as well. Make it clear which material the assistant can read, such as their notes or shared course files, let them switch sources on and off, and offer a way to delete stored history.
A little friction is sometimes a feature. Before a learner copies a generated essay outline into graded work, a short reminder that the text came from AI and should be checked and rewritten in their own words is a fair nudge, not an obstacle.
Feedback, loading and error states
Build feedback into the design from day one. A thumbs up or down next to each answer costs one click, and an optional short reason tells you much more. Store the question, answer and rating together so you can review the worst cases and turn them into test cases later in the course. While the app is new, read the low-rated entries every week; they show problems faster than any dashboard.
Waiting is part of the experience. Stream text as it arrives, show a clear message about what is happening, such as searching your notes, and keep the rest of the interface usable. A frozen screen with no explanation makes even a good answer feel broken.
Error messages should never blame the user or leak technical noise. Say what went wrong in plain words, what the person can do next, and keep their typed question so they do not have to start again.
Accessibility runs through all of this. Controls should work by keyboard, status messages should reach screen readers, and contrast and text size should stay readable for everyone who uses the app.
Example
Answers with sources, an honest empty state and feedback
import datetime, json, osfrom openai import OpenAI client = OpenAI(base_url=os.environ["LLM_BASE_URL"], api_key=os.environ["LLM_API_KEY"])notes = open("notes.txt", encoding="utf-8").read().splitlines()[:20]numbered = "\n".join(f"[{i}] {note}" for i, note in enumerate(notes, 1))RULES = ("Answer only from the numbered notes. End with a line starting 'Sources:' that lists " "the note numbers you used. If the notes do not answer the question, reply NOT_IN_NOTES.") question = input("Ask Study Buddy: ")print("Looking through your notes...", flush=True) # a visible loading stateanswer = (client.chat.completions.create(model=os.environ["LLM_MODEL"], messages=[ {"role": "system", "content": RULES}, {"role": "user", "content": f"Notes:\n{numbered}\n\nQuestion: {question}"},]).choices[0].message.content or "").strip() if "NOT_IN_NOTES" in answer: print("Your notes do not cover this yet. Add a note, or ask me for a general explanation.")else: print(answer) print("(AI answer built from your notes. Check the listed sources before you rely on it.)") rating = input("Was this helpful? y/n: ").strip().lower()[:1]with open("feedback.jsonl", "a", encoding="utf-8") as f: f.write(json.dumps({"time": datetime.datetime.now().isoformat(), "question": question, "answer": answer, "helpful": rating == "y"}) + "\n")Run it in your Study Buddy folder next to notes.txt. The rules make the model either cite note numbers or admit the notes do not cover the question, the script turns that into two clear states, and every rating lands in feedback.jsonl with its question and answer.
Practice
Make Study Buddy honest and easy to correct
- Save the example as
answer.pyand ask one question your notes cover and one they clearly do not. - Extend the script so it reads the numbers on the Sources line and prints the full text of each cited note under the answer.
- If a cited number does not exist in your notes, show a warning instead of the note.
- Answer five questions and rate each one, giving at least one thumbs-down on purpose.
- Open
feedback.jsonland find the thumbs-down entry with its question and answer.
Done when: Covered questions show an answer followed by the real text of each cited note, an uncovered question shows the empty-state message, and feedback.jsonl holds five rated lines including your thumbs-down.
Common mistakes
- Showing a model's self-rated confidence as a percentage, which looks precise but is not reliable.
- Letting the assistant change data or contact people without a confirmation step and a way to undo.
- Hiding where an answer came from, so users cannot check it and either overtrust or abandon it.
- Writing error messages that blame the user or show raw technical errors.
Check yourself
Pick an answer to see whether it is right and why.
From the founder
Give your Study Buddy to one friend for ten minutes and stay silent while they use it. Write down every moment they hesitate or trust a wrong answer, then fix the first one on that list.