大家好,欢迎来到第二期 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)
如果你觉得这一期有帮助,可以点个赞 👍
我们下期见。