←All towers

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.

Pay in

What you'll learn, floor by floor

  1. 1

    How LLMs work (Beginner)

    • What a language model is
    • Messages, roles and tokens
    • Prompting basics
  2. 2

    Reliable output (Beginner)

    • Structured output
    • Temperature and determinism
    • Evaluating answers
  3. 3

    Tools and agents (Intermediate)

    • Tool calling
    • Building a small agent loop
    • Memory and conversation state
  4. 4

    Search and RAG (Intermediate)

    • Embeddings and similarity
    • Chunking and retrieval
    • Retrieval-augmented generation
  5. 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.

Refund policy