第 1 天:重新认识 Agent—— 从聊天机器人到智能执行者

0 阅读8分钟

一、打破认知:Agent 和普通大模型到底有什么不一样?

image.png 很多人对 Agent 的初印象是 “更聪明的 ChatGPT”,这是典型的认知偏差。二者的核心差异,是被动应答主动执行的本质区别。

1.1 普通大模型:被动的信息输出器

你问一句,它答一句,所有能力都局限在模型自身的训练知识里:

  • 遇到实时信息、私有数据,只能编造幻觉
  • 需要计算、操作外部系统时,只能给出步骤建议,无法实际执行
  • 无法对真实世界产生任何影响,输出的只有文本

1.2 Agent:主动的任务执行者

Agent(智能体)是以大模型为决策大脑,通过调用工具、沉淀记忆,自主完成用户指定目标的系统。简单来说:大模型负责 “想”,Agent 负责 “想 + 做”

举个例子:你说 “帮我安排下周三和产品部的需求评审会”

  • 普通大模型:会告诉你 “组织会议需要确认时间、预定会议室、发送邀请” 等方法论
  • Agent:会自动查询所有人的日程、找空闲时间、预定会议室、发送会议邀请,最后告诉你 “已经安排好了”

1.3 核心差异对比

维度普通大模型对话Agent 智能体
核心目标回答用户问题完成用户任务
能力边界模型自身训练知识可通过工具无限扩展
执行模式一问一答,单次交互多轮自主决策,自动迭代
输出结果文本信息行动操作 + 最终结果
错误来源知识盲区、幻觉工具调用错误、规划偏差

二、Agent 三大核心组件:拆解智能底层逻辑

所有 Agent 无论多复杂,本质都由三大核心模块构成,三者协作形成完整的智能闭环。

2.1 大模型:决策大脑

image.png 这是 Agent 的核心指挥中心,负责四件事:

  1. 理解需求:解析用户的自然语言指令,明确最终目标
  2. 规划拆解:把复杂任务拆成多个步骤,规划执行路径
  3. 工具选型:判断当前步骤需要调用哪个工具,生成对应参数
  4. 整合输出:汇总工具返回的结果,整理成自然语言回答用户

大模型的推理能力决定了 Agent 的智商上限:模型越强,任务规划越合理,复杂场景处理越稳定。

2.2 工具集:执行手脚

image.png 工具是 Agent 连接真实世界的桥梁,让大模型突破自身知识边界,完成实际操作。常见工具分为三类:

  • 信息查询类:搜索引擎、数据库查询、知识库检索、天气查询
  • 操作执行类:发送邮件、创建日程、代码执行、文件读写
  • 计算分析类:计算器、数据统计、图表生成

工具的丰富度和稳定性,决定了 Agent 的能力边界。工具越完善,Agent 能做的事越多。

2.3 记忆系统:经验沉淀

image.png 让 Agent 记住之前的对话、做过的操作、学到的经验,避免重复犯错,支持连续交互。

  • 短期记忆:当前会话的对话上下文,支撑多轮连续对话,会话结束即清空
  • 长期记忆:跨会话的用户偏好、历史操作、知识沉淀,持久化存储

没有记忆的 Agent,每次对话都是从零开始,永远只能处理简单单轮任务。


三、入门必学:ReAct 推理范式

image.png ReAct(Reasoning + Acting,推理 + 行动)是目前最主流、最基础的 Agent 工作范式,也是几乎所有 Agent 框架的底层逻辑。

3.1 核心:三步循环

ReAct 让大模型像人一样解决问题:先思考,再行动,看完结果再思考,循环往复直到任务完成。完整循环包含三个核心步骤:

  1. Thought(思考) :分析当前状态,判断下一步该做什么,为什么这么做
  2. Action(行动) :调用对应的工具,传入参数,执行操作
  3. Observation(观察) :获取工具执行的结果,作为下一轮思考的依据

当大模型判断任务已经完成时,就会输出最终答案,结束循环。

3.2 完整流程示例:计算 1234 × 5678

表格

步骤内容
用户提问帮我算一下 1234 × 5678 等于多少?
Thought(思考)用户需要计算两个大数的乘积,直接口算容易出错,我应该调用计算器工具来得到准确结果。
Action(行动)调用 calculator 工具,传入参数:expression = "1234 * 5678"
Observation(观察)工具返回结果:7006652
Thought(思考)我已经得到了准确的计算结果,任务完成,可以回答用户了。
最终回答1234 × 5678 的计算结果是 7006652。

理解了这个循环,你就理解了 80% 的 Agent 底层逻辑。后续所有复杂的多 Agent、工作流,本质都是这个循环的扩展和组合。


四、实战:10 分钟跑通你的第一个 Agent

我们基于 LangChain 框架,实现一个带计算器工具的极简 Agent,亲手跑通完整的 ReAct 循环。

4.1 环境准备

  1. Python 3.10 及以上版本
  2. 安装核心依赖
pip install langchain langchain-openai python-dotenv
  1. 准备大模型 API 密钥:支持 DeepSeek、通义千问、GPT 等所有 OpenAI 兼容接口

4.2 完整可运行代码

新建 first_agent.py 文件,复制以下代码,填入你的 API 配置即可运行:

from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain_core.tools import tool
from langchain.agents import create_agent

# 加载环境变量
load_dotenv()

# ---------------------- 1. 初始化大模型 ----------------------
llm = ChatOpenAI(
    model="deepseek-chat",  # 替换为你使用的模型名称
    api_key="你的API密钥",
    base_url="https://api.deepseek.com/v1",  # 对应模型的接口地址
    temperature=0  # Agent场景固定设为0,输出更稳定,减少随机发散
)

# ---------------------- 2. 定义工具 ----------------------
# 用 @tool 装饰器快速把普通函数封装成Agent可调用的标准工具
@tool
def calculator(expression: str) -> str:
    """
    专业数学计算器,支持加减乘除、括号运算。
    传入数学表达式字符串,返回计算结果。
    """
    try:
        # 简单演示用eval实现,生产环境请使用安全的计算库
        result = eval(expression)
        return f"计算结果:{result}"
    except Exception as e:
        return f"计算失败:{str(e)}"

# Agent可用的工具列表
tools = [calculator]

# ---------------------- 3. 创建Agent ----------------------
agent = create_agent(
    model=llm,
    tools=tools,
    system_prompt="你是一个严谨的计算助手,所有数学计算必须调用计算器工具,禁止口算回答。"
)

# ---------------------- 4. 运行测试 ----------------------
if __name__ == "__main__":
    user_question = "计算 1234 * 5678 的结果是多少?"

    # 运行配置:限制最大执行步数,防止Agent陷入死循环
    run_config = {
        "recursion_limit": 5
    }

    # ========== 运行方式1:直接获取最终结果 ==========
    result = agent.invoke(
        {"messages": [{"role": "user", "content": user_question}]},
        config=run_config
    )
    print("最终回答:", result["messages"][-1].content)

    # ========== 运行方式2:按节点流式打印执行步骤(推荐) ==========
    # 可以清晰看到「模型决策 → 工具执行 → 结果总结」的完整ReAct流程
    # print(f"用户提问:{user_question}\n")
    # print("===== 执行步骤 =====")
    # for step in agent.stream(
    #     {"messages": [{"role": "user", "content": user_question}]},
    #     config=run_config,
    #     stream_mode="updates"
    # ):
    #     for node_name, node_output in step.items():
    #         print(f"\n执行节点:{node_name}")
    #         messages = node_output.get("messages", [])
    #         for msg in messages:
    #             if hasattr(msg, "tool_calls") and msg.tool_calls:
    #                 for tc in msg.tool_calls:
    #                     print(f"  调用工具:{tc['name']}")
    #                     print(f"  传入参数:{tc['args']}")
    #             if msg.content:
    #                 print(f"  输出内容:{msg.content}")
    # print("\n===== 执行结束 =====")

4.3 执行效果解析

运行代码后,你会看到完整的两阶段执行过程,对应 ReAct 的核心循环:

  1. 模型决策阶段:大模型分析问题后,决定调用计算器工具,生成对应的调用参数
  2. 工具执行阶段:计算器工具接收参数,执行运算,返回计算结果
  3. 结果总结阶段:大模型拿到工具返回的结果,整理成自然语言回答,输出最终答案

✅ 恭喜你跑通了第一个真正意义上的 Agent。仔细观察执行步骤,感受 “思考 - 行动 - 观察” 的循环逻辑,这是所有 Agent 的核心。

4.4 关键细节说明

  1. temperature=0:Agent 场景必须设置为 0,降低模型随机性,保证工具调用和任务规划的稳定性
  2. 工具描述很重要@tool 下方的函数文档字符串会被模型读取,描述越清晰准确,模型调用准确率越高
  3. recursion_limit:生产环境必加参数,限制最大执行轮数,避免 Agent 陷入无限工具调用死循环

5、明日预告

第 2 天我们会给 Agent 装上记忆系统,实现连续多轮对话,让它能记住之前的对话内容,支持上下文关联的提问(比如 “刚才的结果乘以 2 是多少”),彻底解决 “一问一失忆” 的问题。