<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Series |</title><link>https://leminhnguyen.github.io/tags/series/</link><atom:link href="https://leminhnguyen.github.io/tags/series/index.xml" rel="self" type="application/rss+xml"/><description>Series</description><generator>HugoBlox Kit (https://hugoblox.com)</generator><language>en-us</language><lastBuildDate>Tue, 07 Apr 2026 00:00:00 +0000</lastBuildDate><image><url>https://leminhnguyen.github.io/media/icon_hu_702a800cd775dbac.png</url><title>Series</title><link>https://leminhnguyen.github.io/tags/series/</link></image><item><title>Build Enterprise AI Agent from Scratch: Series Overview</title><link>https://leminhnguyen.github.io/blog/blog-tutorial/enterprise-ai-agent/ch0-series-overview/</link><pubDate>Tue, 07 Apr 2026 00:00:00 +0000</pubDate><guid>https://leminhnguyen.github.io/blog/blog-tutorial/enterprise-ai-agent/ch0-series-overview/</guid><description>&lt;div style="text-align: justify; font-size: 15px; margin-top: 20px"&gt;
&lt;p&gt;There is no shortage of AI agent tutorials on the internet. Most of them show you how to build an agent in 50 lines of code — it calls a search tool, formats an answer, and you&amp;rsquo;re done. That&amp;rsquo;s fine for a weekend demo.&lt;/p&gt;
&lt;p&gt;But production is different.&lt;/p&gt;
&lt;p&gt;In production, your agent needs to handle adversarial inputs without leaking sensitive data. It needs to recover gracefully when a tool fails mid-task. It needs to remember context across sessions, not just within a single conversation window. You need to know exactly what your LLM did when a user reports a bug — and calculate how much it cost. And before you ship any of this, you need a principled way to measure whether it actually works.&lt;/p&gt;
&lt;p&gt;I wrote this series because I spent years building enterprise AI agent systems and found that most resources stop right before the hard parts begin.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="who-this-series-is-for"&gt;Who This Series Is For&lt;/h2&gt;
&lt;p&gt;This series is for software engineers and ML practitioners who:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Have basic Python skills and understand what a Large Language Model (LLM) does&lt;/li&gt;
&lt;li&gt;Have heard of LangChain/LangGraph but haven&amp;rsquo;t gone deep into production usage&lt;/li&gt;
&lt;li&gt;Want to build agents that are deployable, observable, and maintainable — not just impressive in a notebook&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You don&amp;rsquo;t need to have built an agent before. But you should be comfortable reading Python code and understand concepts like API calls and environment variables.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="what-youll-build"&gt;What You&amp;rsquo;ll Build&lt;/h2&gt;
&lt;p&gt;Across eight chapters, we build a fully-featured AI agent incrementally. Each chapter adds a new capability. By the end, you&amp;rsquo;ll have:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;working ReAct agent&lt;/strong&gt; powered by LangGraph with proper state management&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multiple integrated tools&lt;/strong&gt; with safe context injection (no secrets in the message stream)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NeMo Guardrails&lt;/strong&gt; for input/output content safety&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Human-in-the-loop&lt;/strong&gt; interrupts for high-stakes decisions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Four-layer memory&lt;/strong&gt; architecture: in-context, episodic, semantic (RAG), and procedural&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Full Langfuse observability&lt;/strong&gt;: traces, spans, cost tracking, and payload sanitization&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;3-stage evaluation pipeline&lt;/strong&gt;: rule-based checks, LLM-as-judge, and custom rubric scoring&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="real-world-background"&gt;Real-World Background&lt;/h2&gt;
&lt;p&gt;The patterns in this series are not theoretical. They come from working on two different enterprise AI systems:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;An &lt;strong&gt;automated document generation&lt;/strong&gt; agent that uses a multi-step LangGraph workflow to produce structured outputs from unstructured inputs&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;multimodal chatbot&lt;/strong&gt; that creates and edits presentation files through natural language, with sandboxed code execution for chart generation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Both systems run in production with real users. The lessons in this series — especially around memory management, observability, and evaluation — come directly from debugging and improving those systems over time.&lt;/p&gt;
&lt;p&gt;All code in this series is original and generalized. No proprietary details, internal tooling, or credentials from those systems are used.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Required:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Python 3.10+&lt;/li&gt;
&lt;li&gt;An OpenAI API key (sign up at
)&lt;/li&gt;
&lt;li&gt;Basic familiarity with how LLMs / ChatGPT work conceptually&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Helpful but not required:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Experience with FastAPI or any Python web framework&lt;/li&gt;
&lt;li&gt;Basic understanding of async Python (&lt;code&gt;async def&lt;/code&gt;, &lt;code&gt;await&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;💡 &lt;strong&gt;Using a local model instead?&lt;/strong&gt; Every chapter that contains OpenAI code includes a note showing how to swap &lt;code&gt;ChatOpenAI&lt;/code&gt; for &lt;code&gt;ChatOllama&lt;/code&gt; (free, runs locally). You&amp;rsquo;ll need
installed with a model like &lt;code&gt;llama3.2&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="series-outline"&gt;Series Outline&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Chapter&lt;/th&gt;
&lt;th&gt;Title&lt;/th&gt;
&lt;th&gt;Key Topics&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ch 0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Series Overview &lt;em&gt;(this post)&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;Motivation, prerequisites, roadmap&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;
&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Introduction to AI Agents&lt;/td&gt;
&lt;td&gt;Agent loop, chatbot vs. agent, when NOT to use agents&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;
&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Components &amp;amp; Context Engineering&lt;/td&gt;
&lt;td&gt;4 core components, Prompt Eng vs. Context Eng, token budget&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;
&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;LangChain &amp;amp; LangGraph Intro&lt;/td&gt;
&lt;td&gt;Messages, @tool, StateGraph, Hello World agent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ch 4&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Build Your First Agent&lt;/td&gt;
&lt;td&gt;AgentState, tool_node, streaming, SQLite checkpointer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ch 5&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Tools, Guardrails &amp;amp; Safety&lt;/td&gt;
&lt;td&gt;Tool design, AgentContext, NeMo Guardrails, HITL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ch 6&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Memory Management&lt;/td&gt;
&lt;td&gt;4-layer memory, MongoDB checkpointer, FAISS RAG&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ch 7&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Tracing with Langfuse&lt;/td&gt;
&lt;td&gt;trace_agent_execution, @trace_tool, cost callbacks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ch 8&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Evaluation System&lt;/td&gt;
&lt;td&gt;3-stage pipeline, DeepEval GEval, custom rubrics&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="how-to-follow-along"&gt;How to Follow Along&lt;/h2&gt;
&lt;p&gt;Each chapter is self-contained. You can read sequentially or jump to a specific topic. However, Chapter 4 is the foundation — if you&amp;rsquo;re skipping ahead to Ch 5–8, make sure you&amp;rsquo;ve at least read Ch 4 first.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Code conventions used throughout:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;File path is shown as a comment at the top of every snippet: &lt;code&gt;# agent/graph.py&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Secrets always use environment variables: &lt;code&gt;os.environ.get(&amp;quot;OPENAI_API_KEY&amp;quot;)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Every chapter includes a &lt;code&gt;.env.example&lt;/code&gt; showing which variables are needed&lt;/li&gt;
&lt;li&gt;Ollama switch instructions are in a callout box in every chapter with LLM code&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Let&amp;rsquo;s build.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;
&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;</description></item></channel></rss>