不止于聊天:深入浅出,手把手带你构建第一个 AI Agent
本文介绍了如何构建一个基于大语言模型的智能代理(AIAgent),使其能够自主调用工具完成复杂任务。文章首先对比了普通LLM应用与AIAgent的区别,指出Agent具备感知-思考-行动的能力。通过Python和LangChain框架,作者演示了如何创建一个天气查询Agent,详细说明了工具定义、LLM配置和执行流程。最后提出了Agent的进阶方向,包括记忆功能和更强大的工具集成。该文为开发者提供
导语
你是否想过,让大语言模型(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 包含以下几个核心组件:
-
大脑 (Brain):通常由一个强大的 LLM(如 GPT-4、Llama 2)担任,负责理解任务、进行逻辑推理和规划。
-
工具 (Tools):Agent 可以调用的外部函数或 API。例如,搜索引擎、计算器、数据库查询接口等。这是 Agent 超越 LLM 知识局限性的关键。
-
规划 (Planning):Agent 将一个复杂目标分解成一系列可执行的子任务的能力。
-
记忆 (Memory):Agent 存储和回溯历史对话、行动结果和世界知识的能力,分为短期记忆和长期记忆。
二、 为什么我们需要 AI Agent?(为什么)
你可能会问,既然 LLM 已经很强大了,为什么还需要 Agent?
原因在于 LLM 有两大天然局限:
- 知识局限:LLM 的知识被“冻结”在它训练数据的那一刻,无法获取实时信息(如今天的天气、最新的新闻)。
- 行动局限: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 不仅仅是简单地回答。它经历了以下过程:
- 思考 (Thought): "我需要查北京天气,我应该用
get_weather工具。" - 行动 (Action): 调用
get_weather工具,输入为 "北京"。 - 观察 (Observation): 工具返回了 "北京今天晴..."。
- 总结: 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,去解决更多有趣和实际的问题吧!
别忘了点赞、收藏、关注三连,我们下期再见!
更多推荐

所有评论(0)