Project-based AI engineering lab

Learn one AI skill by building one real project.

Choose LLMs, RAG, MCP, tool calling, evaluation, agents, or production reliability. Get the project idea, implementation steps, deliverables, and checks for that skill only.

Choose a skill project
Choose your learning mode

Build one AI capability through its own focused project.

Build one skill at a time

Choose a skill. Build its project.

This view contains only the selected skill project. Each step tells you what to implement, what to produce, and how to verify it before moving on.

SELECTED SKILL / LLM application fundamentalsPROJECT 01

Support-ticket triage and reply drafter

Build one dependable feature around a hosted or local language model, with a strict output contract and a human review before any reply is sent.

Project scenario

A support team receives short tickets and needs a suggested category, urgency, and draft reply. The tool assists the agent; it never sends messages or changes customer records.

Build only this

One request/response endpoint, a fixed ticket schema, a model adapter, validated structured output, and a small test set.

Keep out of scope

No autonomous sending, customer database integration, RAG, agent loop, or fine-tuning. Keep this project about the LLM call and its contract.

Tools for this project
Python or TypeScriptone model APIJSON Schema or typed validationunit testsenvironment variables
Basics

Build the foundation

Learn the core workflow without extra complexity.

B1

Define the contract before the prompt

Implement

Create 20 synthetic tickets. Define an output schema with category enum, urgency enum, short rationale, and reply draft. Decide which fields may be uncertain and what invalid/unsafe requests should return. Write a deterministic keyword baseline for category first.

Produce

Ticket fixtures, versioned output schema, baseline classifier, and a short product boundary document.

Verify before moving on

The baseline runs locally; schema rejects unknown categories, missing required fields, and oversized output; no real customer data or secrets are committed.

Intermediate

Connect the system

Turn the working idea into a reliable, testable flow.

I1

Add one provider behind an adapter

Implement

Create a `generateTicketSuggestion(input, config)` boundary. Put the API key in an environment variable, set request timeout and output-token limits, and keep provider-specific request/response mapping inside the adapter. Do not leak the key or raw ticket into logs.

Produce

A small model adapter with typed input/output and a mock implementation for tests.

Verify before moving on

Tests run with the mock and no key; missing credentials and provider timeouts produce a safe, actionable error rather than crashing the application.

Advanced

Hardening and proof

Improve reliability, evidence, and production judgment.

A1

Constrain generation and validate twice

Implement

Send only the ticket fields the feature needs. Ask for the defined structured response, parse it, validate against the schema, and reject or repair only through a bounded retry. Keep the original ticket and generated draft separate; never treat model text as a command.

Produce

Prompt/template version, structured model response path, validation errors, and human-review UI or CLI output.

Verify before moving on

Malformed JSON, invalid enum values, empty replies, and prompt-injection text in the ticket cannot bypass output validation or trigger an external action.

A2

Measure usefulness, latency, and cost

Implement

Run the same held-out fixtures through the keyword baseline and model. Record category accuracy, urgency errors, schema-valid rate, latency, and estimated cost per ticket. Review false urgent labels and inappropriate reply drafts manually.

Produce

A reproducible evaluation script, comparison table, error examples, and a release note with limitations.

Verify before moving on

You can explain where the model beats the baseline, where it fails, and why a support agent must approve every draft.