欢迎来到《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(行动执行)。它的标准工作流是:

  1. 观察(Observe):接收用户指令或历史对话。
  2. 推理(Reason):大模型判断当前任务是否完成,是否需要调用工具。
  3. 行动(Act):执行工具调用(如联网、计算、读写数据)。
  4. 循环迭代:重复上述流程,直到任务完全完成,输出最终答案。

三、 极简实战:用原生 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}")

代码深度解析与学习建议

  1. 思考与行动分离:我们将 think() 和具体的工具函数分开。在实际开发中,随着功能增多,我们只需要升级 think() 的内部逻辑(比如替换为 OpenAI 的 Function Calling),而不需要修改底层的工具代码。
  2. 字典注册机制:采用 TOOLS_REGISTRY 代替传统的 if/elif 分支,极大提升了代码的可维护性和扩展性。
  3. 下一步进阶:目前的 think() 是基于硬编码规则的。下一讲,我们将引入真正的大语言模型 API,让大模型充当 think() 的大脑,实现真正的自然语言意图识别与自主决策!

动手跑一下这段代码,感受Agent“接收指令 -> 思考路由 -> 执行工具 -> 返回结果”的完整闭环吧!

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐