M27: Part D capstone, ship a complete agent (Part D: Agentic Systems)
You have built the pieces: orchestration and tools, agentic RAG, memory, observability, cost control, reliability, security, and an eval gate. A real system is not those pieces in nine separate folders, it is all of them working together in ONE agent you can deploy and trust. Today you assemble them: a support agent that researches with citations, remembers the user, traces and prices every step, survives failure, refuses risky actions without approval, and passes an eval gate, behind an API. This is the portfolio project that proves you can build agentic systems.
Today's win: one deployable support agent that uses every Part D pattern at once, demonstrated end to end offline, with a green eval gate over it.
Today you will
- Assemble M18-M26 into a single
SupportAgent: tools, agentic RAG (M24), memory (M21) - Wrap it with the cross-cutting concerns: tracing + cost (M20/M25), reliability (M22), security (M23)
- Serve it behind a FastAPI
/chatendpoint (M11/M18) - Gate it with an eval suite that exits non-zero on a regression (M20/M26)
- Read one trace and see every pattern fire on a single request
Run of show (about 70 minutes)
| Time | What we do |
|---|---|
| 0:00 | Hook: the pieces become a system |
| 0:05 | Tour the integrated agent and the map of which line is which module (read notes.md) |
| 0:15 | Lab Part A: run the agent end to end and read its trace, sources, and cost |
| 0:35 | Lab Part B: watch the guards block a risky action; run the eval gate; serve it over the API |
| 0:58 | Show: post a trace where every pattern fired |
| 1:10 | Wrap and Part D retrospective |
If you get stuck
- This module touches M18-M26. You do not need to re-read them, but each block in
parts.pynames the module it came from if you want to. - The whole capstone runs offline, free, no key (a deterministic mock model). The only new install is
fastapiplusuvicornfor the API step (from M11). Nothing here can harm your computer; the email tool sends nothing. - If something is confusing, read one block at a time in
parts.py, then see whereagent.pycalls it.
Optional challenge
Open starters/extend.py and turn the capstone into a portfolio piece: add a
tool, a third research hop, per-user memory, or a second risky action with its own guard. Follow the
M26 rule, add the eval case first, then make it pass, and keep python solution/evals.py green.