本文价值提示:
💡 你将获得什么?
- 底层祛魅:跳过 LangChain 等框架的黑盒,从原生 API 层面理解 Agent 是如何“动”起来的。
- 思维升级:从大数据工程师熟悉的 ETL 线性思维,转型为 AI 架构师必备的“循环(Loop)思维”。
- 实战代码:掌握 Function Calling 和 ReAct 模式的核心实现逻辑。
⏳ 阅读时间:约 8 分钟 | 难度:进阶
👋 大家好,我是你们的老朋友。
在上一期的《RAG架构与数据工程》中,我们成功地给大模型装上了“海马体”,利用向量数据库让它拥有了长期记忆。现在,它已经是一个博学多才的“图书馆管理员”了。
但是,你有没有发现,它依然只能坐着说话?
它不能帮你查实时的天气,不能帮你去数据库跑 SQL,更不能帮你发邮件。它就像一个被困在瓶子里的天才大脑,有智商,没行动力。
今天,我们正式开启第四个专题:AI Agent 的开发与编排。作为本专题的第一篇,我们将深入 Agent 的微观世界,不依赖任何复杂的框架,亲手给这个“大脑”装上“手脚”(Tools)和“逻辑回路”(Reasoning)。
01 思维大爆炸:从 ETL 到 Agent Loop 🤯
作为大数据工程师,你一定对 DAG(有向无环图) 烂熟于心。在 Airflow 或 Spark 中,任务流是线性的、确定的:
提取(E) -> 转换(T) -> 加载(L)。
如果中间报错了,任务就挂了,或者重试。
但在 Agent 的世界里,逻辑是非确定性的,而且是一个循环(Cyclic)。
🔄 Agent 的核心循环
Agent 不是一条直线,而是一个 While True 的循环:
- 感知 (Observation):看看现在发生了什么?
- 思考 (Thought):我该做什么?需要用工具吗?
- 行动 (Action):调用工具(API/函数)。
- 观察 (Observation):工具返回了什么结果?
- 回到第 2 步... 直到任务完成。

架构师视点:
以前我们写代码是编写“规则”,现在我们写 Agent 是编写“目标”和“边界”。你无法预知 LLM 会先迈左脚还是右脚,但你要确保它别掉进坑里。
02 给大脑装上“手脚”:Function Calling (Tool Use) 🛠️
LLM 本质上是一个概率模型,它只会吐出文本(Text)。那它怎么调用 Python 函数或者 API 呢?
这就需要用到 OpenAI 等模型提供的核心能力:Function Calling(函数调用),现在更通用的叫法是 Tool Use。
这里的“魔法”是什么?
其实没有魔法,只有 Schema(结构定义)。
想象你在餐厅点菜。
- 普通对话:“我要吃那个红色的、辣的、有豆腐的菜。”(厨师可能听不懂)
- Function Calling:你递给厨师一张标准点菜卡(JSON Schema):
{ "dish_name": "Mapo Tofu", "spiciness_level": "high", "ingredients": ["tofu", "minced meat"] }
实战:原生 SDK 实现天气查询
别急着引入 LangChain,我们先看原生 OpenAI SDK 怎么做。这能让你理解底层原理。
第一步:定义工具(告诉 LLM 你有哪些手脚) 我们需要用 JSON Schema 描述函数。
tools = [
{
"type": "function",
"function": {
"name": "get_current_weather",
"description": "获取指定城市的当前天气",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "城市名称,如 Beijing, San Francisco"
},
"unit": {"type": "string", "enum": ["celsius", "fahrenheit"]}
},
"required": ["location"]
}
}
}
]
第二步:对话与解析 当用户问:“今天北京天气怎么样?” LLM 不会直接回答“晴天”,而是会返回一个特殊的结构,告诉我们要调用函数。
# 伪代码演示
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "北京今天天气如何?"}],
tools=tools, # 关键点:把工具箱传给它
tool_choice="auto"
)
tool_call = response.choices[0].message.tool_calls[0]
print(tool_call.function.name)
# 输出: get_current_weather
print(tool_call.function.arguments)
# 输出: {"location": "Beijing"}
第三步:执行与回传
作为开发者,你需要捕获这个 tool_call,在本地执行 Python 代码,然后把结果伪装成一条消息,塞回给 LLM。
⚠️ 注意:LLM 并没有真正执行代码,它只是生成了“要执行代码的指令”。执行代码的是你的 Python 脚本!
03 升级大脑的操作系统:Prompt 策略与 ReAct 🧠
有了手脚,如果大脑不够聪明,Agent 就会变成“无头苍蝇”。我们需要通过 Prompt Engineering 来升级它的思维模式。
1. CoT (Chain of Thought):让它慢点想
在大数据处理中,复杂的 SQL 我们会拆成多个 CTE (Common Table Expression)。同理,对 LLM,我们要强迫它 Let's think step by step。
System Prompt 示例:
你是一个数据分析助手。在回答用户问题前,请先列出你的思考步骤,明确你需要什么数据,然后再行动。
2. ReAct 模式:Agent 的黄金法则
ReAct 是 Reasoning + Acting 的缩写。这是目前最经典的 Agent 运作模式。
它的核心咒语是:
- Thought (想法):用户想查天气,我需要调用天气工具。
- Action (行动):
get_weather("Beijing") - Observation (观察):API 返回了 "25度,晴"。
- Thought (想法):我已经有了天气信息,可以回答用户了。
- Final Answer (最终回答):北京今天天气不错,25度,晴天。
为什么这很重要? 如果没有 ReAct,模型可能会产生幻觉。比如它直接编造一个天气,而不是去调用工具。ReAct 强制模型“知行合一”。
04 架构师的“防呆”设计:Pydantic 与结构化输出 🛡️
作为工程化转型的你,肯定受不了 JSON 解析报错。 LLM 输出的 JSON 经常少个括号,或者字段名写错。怎么办?
Pydantic 登场! Pydantic 是 Python 中最强的数据验证库。我们可以用它来强制 LLM 输出符合 Python 类定义的数据。
from pydantic import BaseModel, Field
class UserIntent(BaseModel):
intent: str = Field(description="用户的意图,如 query, command, chat")
confidence: float = Field(description="置信度 0-1")
keywords: list[str] = Field(description="提取的关键实体")
# 在 OpenAI 新版 SDK 中,可以直接结合 Pydantic
completion = client.beta.chat.completions.parse(
model="gpt-4o-2024-08-06",
messages=[...],
response_format=UserIntent, # 强类型约束!
)
intent_obj = completion.choices[0].message.parsed
print(intent_obj.confidence) # 直接获取 float 类型,无需 json.loads
架构师思考: 这不仅仅是语法糖,这是系统稳定性的保障。在 Agent 编排中,节点之间的通信必须是结构化的(Schema),而不是随意的自然语言。
05 总结与预告 📝
今天我们剥开了 Agent 的外衣,看到了它最原始的“血肉”:
- 理念:从线性 Pipeline 转向 循环 Loop。
- 手脚:利用
Function Calling定义工具 Schema。 - 大脑:利用
ReAct模式进行“思考-行动-观察”的循环。 - 骨架:利用
Pydantic保证数据流转的鲁棒性。
🗺️ 本文核心知识图谱

🎣 互动话题
你在尝试让 LLM 调用工具时,遇到过最离谱的“幻觉”是什么?(比如:明明没查数据库,却一本正经地编造了查询结果?) 欢迎在评论区分享你的“翻车”现场!
🚀 下期预告
学会了单点技能,如何构建复杂的、生产级的 Agent 流程? 下一期,我们将进入第二篇:单体 Agent 架构。我们将深度实战 LangGraph,学习如何用“图”的思维来编排一个真正的数据分析师 Agent。
关注我,带你从大数据工程师硬核转型 AI 架构师!
这是“AI Agent开发与编排”专题的第 1 篇,前序专题《Python高级工程化》、《大模型基础理论》、《RAG架构与数据工程》已完结,欢迎翻阅历史文章补课。