第1讲:什么是AI Agent?—— 从被动问答到自主决策的跨越
欢迎来到《Python + AI Agent 实战开发完全指南》专栏!在2026年的今天,AI行业的核心赛道已经从单纯的“大模型对话”全面转向了“AI Agent(智能体)”的开发。很多初学者容易混淆普通大模型和Agent的概念,今天我们就从底层原理出发,彻底搞懂什么是AI Agent,并亲手用Python写出你的第一个具备“决策能力”的智能体程序。
一、 核心概念:AI Agent 到底是什么?
1. 官方工程定义
AI Agent(人工智能智能体)是一种能够感知外部环境信息、基于大模型进行逻辑推理、自主拆解任务步骤、主动调用外部工具、存储对话记忆,并最终自主完成用户目标的闭环智能系统。
在当前的工业界,有一个公认的黄金公式:
Agent = LLM (大模型) + Memory (记忆) + Planning (规划) + Tool Use (工具调用) + Action (行动执行)
2. 普通大模型 VS AI Agent
很多人误以为“大模型就是Agent”,其实不然。普通的LLM本质上是一个文本概率生成器,只能被动应答;而Agent则是主动执行的数字员工。它们的核心区别如下:
- 任务能力:普通大模型只能单次问答,无法分步拆解复杂任务;Agent能够长任务拆解、多轮步骤执行、目标闭环。
- 外部交互:普通大模型无工具调用能力,仅输出文本;Agent可以调用代码、搜索、计算器、API、数据库等外部工具。
- 决策逻辑:普通大模型直接生成回答;Agent遵循“思考 → 规划 → 调用工具 → 验证 → 修正 → 输出结果”的闭环。
二、 核心运行机制:ReAct 范式
LangChain等主流框架中所有Agent的底层核心都是 ReAct 范式。ReAct = Reason(推理思考) + Act(行动执行)。它的标准工作流是:
- 观察(Observe):接收用户指令或历史对话。
- 推理(Reason):大模型判断当前任务是否完成,是否需要调用工具。
- 行动(Act):执行工具调用(如联网、计算、读写数据)。
- 循环迭代:重复上述流程,直到任务完全完成,输出最终答案。
三、 极简实战:用原生 Python 手搓一个决策 Agent
为了让你直观理解“意图识别”与“工具分发”的逻辑,我们不依赖任何复杂的第三方框架,纯手写一个最小化Agent。这个版本通过字典注册的方式管理工具,避免了冗长的 if/else 链,为后续接入大模型打下良好基础。
完整代码示例 (day1_basic_agent.py)
from datetime import datetime
# ========== 1. 工具集定义 ==========
def check_weather(city: str = "北京") -> str:
"""模拟查天气工具"""
return f"{city}:晴,25°C,空气质量良好"
def check_time() -> str:
"""模拟查时间工具"""
return f"现在是 {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}"
def search_news() -> str:
"""模拟搜新闻工具"""
return "今日热点:AI Agent 成为 2026 年最热门技术方向"
def chat(response: str) -> str:
"""普通闲聊兜底"""
return f"你说的是:{response}"
# ========== 2. 工具注册表(核心解耦设计)==========
# 将工具名称、描述和函数绑定在一起,未来扩展只需在这里添加
TOOLS_REGISTRY = {
"check_weather": {"func": check_weather, "desc": "查询指定城市的天气"},
"check_time": {"func": check_time, "desc": "获取当前系统时间"},
"search_news": {"func": search_news, "desc": "搜索今日热点新闻"},
}
# ========== 3. Agent 大脑:思考与调度 ==========
def think(user_input: str) -> tuple[str, dict]:
"""
意图识别:根据用户输入决定调用哪个工具
(注:这里使用关键词匹配演示逻辑,实际生产中由大模型 LLM 替代此函数)
"""
user_input = user_input.lower().strip()
# 简单的规则引擎(占位符)
if any(keyword in user_input for keyword in ["天气", "气温"]):
return "check_weather", {}
elif any(keyword in user_input for keyword in ["时间", "几点"]):
return "check_time", {}
elif any(keyword in user_input for keyword in ["新闻", "热点"]):
return "search_news", {}
else:
return "chat", {"response": user_input}
def run_agent(user_input: str) -> str:
"""Agent 主执行循环"""
# Step 1: 思考(决定动作)
action_name, params = think(user_input)
# Step 2: 行动(执行工具)
if action_name in TOOLS_REGISTRY:
tool_func = TOOLS_REGISTRY[action_name]["func"]
result = tool_func(**params)
else:
result = "抱歉,我暂时不知道如何执行该操作。"
return result
# ========== 4. 交互式入口 ==========
if __name__ == "__main__":
print("=" * 40)
print(" 我的第一个 Python Agent v1.0")
print(" 试试问我:天气、时间、新闻")
print(" 输入 '退出' 结束程序")
print("=" * 40)
while True:
question = input("\n你:").strip()
if not question: continue
if question == "退出":
print("Agent:再见!"); break
answer = run_agent(question)
print(f"Agent:{answer}")
代码深度解析与学习建议
- 思考与行动分离:我们将
think()和具体的工具函数分开。在实际开发中,随着功能增多,我们只需要升级think()的内部逻辑(比如替换为 OpenAI 的 Function Calling),而不需要修改底层的工具代码。 - 字典注册机制:采用
TOOLS_REGISTRY代替传统的if/elif分支,极大提升了代码的可维护性和扩展性。 - 下一步进阶:目前的
think()是基于硬编码规则的。下一讲,我们将引入真正的大语言模型 API,让大模型充当think()的大脑,实现真正的自然语言意图识别与自主决策!
动手跑一下这段代码,感受Agent“接收指令 -> 思考路由 -> 执行工具 -> 返回结果”的完整闭环吧!
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)