导语

你是否想过,让大语言模型(LLM)不仅仅是一个聊天机器人,而是一个能独立思考、调用工具、完成复杂任务的“智能助理”?这就是 AI Agent 的魅力所在。本文将带你从 0 到 1,理解 AI Agent 的核心原理,并亲手构建一个能查询实时天气的智能代理。


正文

自 ChatGPT 横空出世以来,我们都被大语言模型(LLM)的能力所震撼。但我们与 LLM 的交互大多还停留在“你问我答”的模式。我们能否让 LLM 变得更主动、更强大,成为一个能帮我们处理实际问题的智能体(Agent)呢?

答案是肯定的。今天,就让我们一起揭开 AI Agent 的神秘面纱,并动手打造属于我们自己的第一个 Agent。

一、 什么是 AI Agent?(是什么)

简单来说,AI Agent 是一个以 LLM 为“大脑”,能够自主感知、思考、决策并执行行动的程序。

它与普通 LLM 应用的核心区别在于:

特性 普通 LLM 应用 (如问答 bot) AI Agent
模式 请求-响应 (Request-Response) 感知-思考-行动 (Perceive-Reason-Act)
能力 基于已有知识生成内容 调用外部工具、执行代码、访问数据库
目标 完成单次、封闭的任务 完成复杂的、多步骤的、开放的目标
自主性 被动执行 具有一定程度的自主性主动性

一个典型的 AI Agent 包含以下几个核心组件:

  1. 大脑 (Brain):通常由一个强大的 LLM(如 GPT-4、Llama 2)担任,负责理解任务、进行逻辑推理和规划。

  2. 工具 (Tools):Agent 可以调用的外部函数或 API。例如,搜索引擎、计算器、数据库查询接口等。这是 Agent 超越 LLM 知识局限性的关键。

  3. 规划 (Planning):Agent 将一个复杂目标分解成一系列可执行的子任务的能力。

  4. 记忆 (Memory):Agent 存储和回溯历史对话、行动结果和世界知识的能力,分为短期记忆和长期记忆。

二、 为什么我们需要 AI Agent?(为什么)

你可能会问,既然 LLM 已经很强大了,为什么还需要 Agent?

原因在于 LLM 有两大天然局限:

  1. 知识局限:LLM 的知识被“冻结”在它训练数据的那一刻,无法获取实时信息(如今天的天气、最新的新闻)。
  2. 行动局限:LLM 只能输出文本,无法与外部世界互动(如发邮件、订机票、操作数据库)。

AI Agent 正是解决这些问题的钥匙。 通过赋予 LLM 使用工具的能力,我们可以让它:

  • 查询实时股票价格并进行分析。
  • 连接到公司数据库,生成销售报告。
  • 自动完成一系列 API 调用来预订一次旅行。
三、 实战:构建一个天气查询 Agent(怎么做)

理论说得再多,不如动手一试。下面,我们将使用 Python 和强大的 LangChain 框架来构建一个能查询指定城市天气的 Agent。

步骤 1: 环境准备

首先,安装必要的库。

bash

pip install langchain langchain-openai openai python-dotenv

接着,在你的项目根目录创建一个 .env 文件,并填入你的 OpenAI API Key。

1OPENAI_API_KEY="sk-..."
步骤 2: 定义我们的“工具”

Agent 需要工具来与世界互动。这里,我们创建一个模拟的天气查询工具。在实际项目中,你可以替换成调用真实天气 API(如高德、和风天气)的函数。

python

1# tools.py
2from langchain.tools import tool
3
4@tool
5def get_weather(city: str) -> str:
6    """
7    获取指定城市的当前天气。
8    这是一个模拟工具,实际应用中应调用真实的天气API。
9    """
10    print(f"--- 正在调用天气工具,查询城市: {city} ---")
11    if "北京" in city:
12        return "北京今天晴,25°C ~ 15°C。"
13    elif "上海" in city:
14        return "上海今天多云,28°C ~ 22°C。"
15    elif "深圳" in city:
16        return "深圳今天有雷阵雨,30°C ~ 26°C。"
17    else:
18        return f"抱歉,暂不支持查询城市 '{city}' 的天气。"
19
20# 将工具集合起来
21tools = [get_weather]

@tool 装饰器是 LangChain 的一个便捷功能,它能自动将函数的 docstring 作为工具的描述,这对于 LLM 理解何时使用该工具至关重要。

步骤 3: 创建 Agent 的“大脑”

现在,我们来配置 LLM 作为 Agent 的大脑。我们将使用 OpenAI 的模型,并启用“函数调用”(Function Calling)功能,这是让 LLM 决定使用哪个工具的关键机制。

python

1# agent.py
2import os
3from dotenv import load_dotenv
4from langchain_openai import ChatOpenAI
5from langchain.agents import AgentExecutor, create_tool_calling_agent
6from langchain_core.prompts import ChatPromptTemplate
7
8# 加载环境变量
9load_dotenv()
10
11# 1. 初始化 LLM
12# temperature=0 表示模型输出更确定性和可预测
13llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)
14
15# 2. 加载工具
16from tools import tools # 从我们刚才的文件中导入工具
17
18# 3. 创建 Prompt 模板
19# 这个模板是 Agent 的“指令”,告诉它如何思考和行动
20prompt = ChatPromptTemplate.from_messages([
21    ("system", "你是一个 helpful 的助理,可以使用提供的工具来回答问题。"),
22    ("human", "输入: {input}"),
23    # "agent_scratchpad" 是一个特殊的占位符,
24    # LangChain 会在这里填入 Agent 的思考过程和工具调用记录
25    ("placeholder", "{agent_scratchpad}"),
26])
27
28# 4. 创建 Agent
29# 将 LLM、工具和 Prompt 组合在一起
30agent = create_tool_calling_agent(llm, tools, prompt)
31
32# 5. 创建 Agent Executor
33# Agent Executor 是 Agent 的“执行引擎”,负责运行整个循环
34agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

代码解读

  • create_tool_calling_agent: 这是 LangChain 的一个高级函数,它能自动将我们的工具列表转换成 LLM 能理解的格式(JSON Schema),并构建好 Agent。
  • AgentExecutor: 这是真正的“驾驶员”。它接收用户输入,传递给 Agent(大脑),然后根据大脑的决策(是直接回答还是调用工具)来执行相应操作,并将结果反馈给大脑,直到任务完成。
  • verbose=True: 这个参数非常有用!它会打印出 Agent 内部的每一步思考过程,让我们能清晰地看到 Agent 是如何工作的。
步骤 4: 运行并与 Agent 交互

激动人心的时刻到了!让我们向 Agent 提问吧。

python

1# main.py
2from agent import agent_executor
3
4# 提问
5question = "帮我查一下北京今天的天气怎么样?"
6result = agent_executor.invoke({"input": question})
7
8# 打印最终结果
9print("\n--- 最终结果 ---")
10print(result["output"])

当你运行 main.py 时,你会在控制台看到类似下面的输出(verbose=True 的效果):

1> Entering new AgentExecutor chain...
2
3I need to find out the weather in Beijing. I will use the get_weather tool.
4Action: get_weather
5Action Input: 北京
6--- 正在调用天气工具,查询城市: 北京 ---
7Observation: 北京今天晴,25°C ~ 15°C。
8I now know the weather in Beijing.
9
10> Finished chain.
11
12--- 最终结果 ---
13北京今天晴,25°C ~ 15°C。

看到了吗?Agent 不仅仅是简单地回答。它经历了以下过程:

  1. 思考 (Thought): "我需要查北京天气,我应该用 get_weather 工具。"
  2. 行动 (Action): 调用 get_weather 工具,输入为 "北京"。
  3. 观察 (Observation): 工具返回了 "北京今天晴..."。
  4. 总结: Agent 根据观察结果,总结出最终答案并返回给用户。

这就是一个完整的 ReAct (Reason + Act) 循环!

四、 进阶之路:记忆与更强大的工具

我们刚刚构建的是一个无状态的 Agent。要让它变得更智能,还需要考虑:

  • 记忆 (Memory): 如何让 Agent 记住我们刚才的对话?比如你接着问:“那上海呢?”。LangChain 提供了多种记忆模块,可以将对话历史注入到 Prompt 中,让 Agent 具备上下文理解能力。
  • 更强大的工具: 我们可以给 Agent 接入更复杂的工具,比如:
    • SerpAPI: 一个真实的谷歌搜索 API 工具。
    • Python REPL: 一个可以执行 Python 代码的工具,用于计算和数据分析。
    • 自定义数据库查询工具: 让 Agent 能直接查询你的业务数据库。

通过组合这些工具,Agent 的能力将得到指数级提升。

五、总结

今天,我们一起探索了 AI Agent 的基本概念,并亲手使用 LangChain 构建了一个能够使用外部工具的智能代理。

核心 takeaway

  • AI Agent = LLM (大脑) + Tools (手脚) + Planning (思考流程)。
  • LangChain 等框架极大地简化了 Agent 的构建过程。
  • ReAct 框架(思考 -> 行动 -> 观察)是现代 Agent 实现的核心模式。

AI Agent 是通往通用人工智能(AGI)的重要一步,也是当前软件开发的新范式。现在,你已经掌握了构建它的基础知识,还等什么?快去尝试构建你自己的 Agent,去解决更多有趣和实际的问题吧!

别忘了点赞、收藏、关注三连,我们下期再见!

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐