AI Agent 系列 Vol.2:Middleware 与结构化输出,为什么决定你系统的“可控性”

6 阅读3分钟

大家好,欢迎来到第二期 AI Agent 系列。

上一期我们聊了一个很重要的东西:

👉 LangGraph + Agent 的本质,其实是一个“状态驱动的工作流”。

如果你听完第一期,应该已经知道:

  • Agent 负责“决策”
  • Tool 负责“执行”
  • LangGraph 负责“流程”

但很多人做到这一步,会遇到两个非常现实的问题:

👉 为什么我的 Agent 不受控?
👉 为什么 AI 输出的东西,程序根本没法用?


所以今天这一期,我们就聊两个核心能力:

👉 Middleware(控制层)
👉 Structured Output(结构化输出)

这两个东西,直接决定:

👉 你的 AI 系统是“玩具”还是“工程系统”


🧠 Part 1:什么是 Middleware?

我们先问一个问题:

👉 如果用户骂人,你的 AI 要不要回复?


如果你只靠 prompt:

“请不要回答不文明用户”

👉 听起来合理,但问题是:

  • 模型可能不听
  • 有时候会失效
  • 不稳定

所以工程上,我们不会这样做。


🔥 正确做法是:Middleware

你可以把 Middleware 理解成:

👉 Agent 的“保安 + 审查员”


🧩 它在系统中的位置是这样的:

用户输入
   ↓
Middleware(检查/拦截)
   ↓
Agent(思考 + 调工具)
   ↓
Middleware(处理结果)
   ↓
输出

✨ 举个非常真实的例子

def middleware(state, next):
    user_input = state["messages"][-1]["content"]
    
    if "脏话" in user_input:
        return {"output": "请文明用语"}
    
    return next(state)

👉 这段代码做了什么?

  • 拦截输入
  • 判断风险
  • 直接返回

👉 完全不经过模型


🔑 关键理解

👉
Middleware 是“强控制”

而 Prompt 是“弱约束”


🧠 工程里的分层其实是这样:

用户
 ↓
Middleware(控制)
 ↓
Agent(决策)
 ↓
Tool(执行)

👉 所以:

  • 安全 → Middleware
  • 推理 → Agent
  • 动作 → Tool

🧠 Part 2:为什么需要结构化输出?

我们换个问题:

👉 如果 AI 告诉你:

“订单金额是 100 元,邮箱是 xxx@gmail.com


你要怎么用?


❌ 常见做法(错误)

  • 用字符串解析
  • 写正则
  • 拆文本

👉 非常不稳定


✅ 正确做法:结构化输出

{
  "amount": 100,
  "email": "xxx@gmail.com"
}

🔥 为什么这很重要?

因为:

👉 AI 的输出,要进入你的系统

而系统只认:

👉 结构,不认自然语言


🧠 本质理解

👉
LLM 负责“理解”
程序负责“执行”


✨ 在 LangChain 里怎么做?

你可以用 Pydantic 定义结构:

from pydantic import BaseModel

class OrderInfo(BaseModel):
    amount: int
    email: str

👉 模型会被约束输出这个结构


🔑 核心升级

你要从:

👉 “让 AI 说话”

升级到:

👉 “让 AI 输出数据”


🔥 Part 3:这两个能力为什么这么重要?

我们总结一下👇


🧩 Middleware 解决什么?

👉 可控性

  • 安全
  • 日志
  • 限制行为

🧩 Structured Output 解决什么?

👉 可用性

  • 稳定
  • 可解析
  • 可接系统

🎯 一句话总结

👉
Middleware 决定你能不能“控制 AI”
Structured Output 决定你能不能“用 AI”


🚀 结尾

如果你只会:

  • 写 prompt
  • 调 API

👉 那你只能做 demo


但如果你掌握了:

  • Middleware
  • Structured Output

👉 你就可以开始做:

  • AI 客服
  • 自动审批流
  • 企业级 Agent

下一期我们可以聊一个更实战的内容:

👉 手把手做一个完整 Agent 系统(带 LangGraph)


如果你觉得这一期有帮助,可以点个赞 👍
我们下期见。