Raahaao Code: Building with AI
Build apps on top of large language models: prompts, tools, search and safety.
9+ hours of lessons · 2 projects · €35
Helps you prepare for: AWS Certified AI Practitioner, AIF-C01 (AWS) · Azure AI Fundamentals, AI-901 (Microsoft)
Or get it in a monthly plan from €3.46 a week (billed €15 monthly) →
You need an account to open any lessons. Without one you can browse the towers and prices.
What you'll learn, floor by floor
- 1
How LLMs work (Beginner)
- What a language model is
- Messages, roles and tokens
- Prompting basics
- 2
Reliable output (Beginner)
- Structured output
- Temperature and determinism
- Evaluating answers
- 3
Tools and agents (Intermediate)
- Tool calling
- Building a small agent loop
- Memory and conversation state
- 4
Search and RAG (Intermediate)
- Embeddings and similarity
- Chunking and retrieval
- Retrieval-augmented generation
- 5
Shipping safely (Job-ready)
- Prompt injection and safety
- Hallucinations and guardrails
- Cost, latency and caching
- From prototype to product
The two rooftop projects
Bookshop assistant
Build a bookshop assistant that answers questions from a small catalogue instead of from the model’s memory. You will retrieve the most relevant catalogue entry with embeddings, check stock and price with real tools, and return a validated JSON reply that cites the books it used.
- load_catalogue(path) reads catalogue.csv into a list of dicts with keys id, title, author, isbn and description; retrieve(question, catalogue) returns the single catalogue entry most similar to the question.
- answer(question, catalogue) returns a dict with an "answer" string and a "sources" list of book ids.
- A question about a catalogue book is answered from the retrieved entry and cites that book’s id in sources.
- When the best entry shares no searchable term with the question, answer returns exactly "I don't know." with an empty sources list.
- A stock question runs check_stock through the chat loop: the model asks for the tool, the result is sent back as a tool message, and the stock figure appears in the answer.
- A price question runs price through the chat loop the same way, and the price appears in the answer.
- check_stock(isbn) returns "<n> copies in stock" or "not in stock" for an unknown ISBN; price(isbn) returns "<p> pounds" or "price unknown".
- parse_reply(text) parses the model reply as JSON and returns it only when it is an object with a string "answer"; any other reply raises ValueError, and answer handles that without crashing.
Safe support agent
Build a support agent that answers order questions by running an allow-listed tool loop, refuses injected instructions hidden in customer messages, and never refunds above a limit without escalating. Each step is logged without emails or card numbers, and an evaluation function scores the agent on a fixed test set.
- lookup_order(order_id) reads orders.csv and returns a one-line order summary, or "Order not found." for an unknown id.
- refund_request(order_id, amount) returns "Refunded <amount> pounds for order <order_id>." for an amount up to REFUND_LIMIT, and raises RefundError for anything above the limit.
- escalate(order_id, reason) returns "Escalated order <order_id> to a human: <reason>".
- run_tool(name, arguments) runs only the tools in the allow-list, returns "Blocked: <name> is not an allowed tool." for any other name, and turns a refund over the limit into an escalation instead of a refund.
- run_agent(message, max_steps=5) runs the tool loop until the model returns text or the step cap is reached, and returns a dict with "answer", "steps" and "log"; a tool result must reach the answer.
- run_agent marks the customer message as untrusted data so an "ignore previous instructions" line inside it is never obeyed.
- Every log line is redacted: emails become "[email]" and card numbers become "[card]" before they are written.
- evaluate(cases) runs the agent on each (message, expected) pair and returns the fraction of cases whose expected text is in the answer.
Questions
Do I need to install anything?
No. Everything runs in your browser. For the projects you can also work on your own computer and upload your files.
Can I skip what I already know?
Yes. Once you own a tower, each floor has a skip test: score 8 out of 10 and that floor opens.
What is the refund policy?
Refunds within 5 days of purchase. After 5 days, no refunds or returns.
Do I keep access?
Yes. A tower you buy is yours, with no subscription.
The towers
HTML & CSS · JavaScript · Python · SQL · C++ · Node.js · Python for Data · Flask · Logic & Problem Solving · Algorithms & Data Structures · Java · Machine Learning