超越问答:深入理解并构建自主决策的AI智能体(Agent)
一、从“被动回答”到“主动行动”:AI Agent的崛起
至今为止,我们与大型语言模型(LLM)的交互大多是“一问一答”式的。我们提出问题,它提供答案。但如果问题是“帮我查询今天北京的天气,并根据天气情况预订一家评分最高的中餐厅”,LLM本身就无能为力了,因为它无法执行查询和预订这些“动作”。
AI智能体(Agent) 正是为了打破这层壁垒而设计的。它是一个以LLM为“大脑”的自主系统,能够理解复杂目标,进行规划,并调用外部工具来执行任务,最终达成目标。
Agent的核心:不再是简单的信息生成,而是决策与行动。它将LLM从一个“语言模型”升级为一个能够与数字世界甚至物理世界交互的“行动者”。
二、Agent的解剖学:揭秘“智能”背后的核心组件
一个典型的Agent由以下几个关键部分组成:
大脑 (Brain) - LLM:
这是Agent的核心引擎,负责理解、推理、规划和决策。Agent的所有“思考”过程都由LLM完成。规划 (Planning):
面对一个复杂任务,Agent需要将其分解为一系列可执行的小步骤。- 自我反思 (Self-reflection):Agent会评估自己上一步行动的结果,并根据结果修正下一步的计划。
- 任务分解 (Task Decomposition):将宏大目标(如“组织一次团队旅行”)分解为具体子任务(“查询机票”、“预订酒店”、“规划行程”等)。
工具 (Tools):
这是Agent与外界交互的“手和脚”。工具本质上就是Agent可以调用的函数或API。- 示例:搜索引擎API、计算器、数据库查询接口、发送邮件的函数、天气查询API等。
- 工具选择:LLM根据当前任务和上下文,从其“工具箱”中选择最合适的工具来执行。
记忆 (Memory):
为了执行长期和复杂的任务,Agent需要记忆。- 短期记忆:通常指当前的对话历史和上下文窗口,帮助Agent保持对话连贯。
- 长期记忆:Agent可以将关键信息、过去的经验和学习成果存储在外部数据库(如向量数据库)中,以便在未来执行类似任务时参考,实现“经验积累”。
三、ReAct:Agent思考与行动的韵律
ReAct (Reason + Act) 是驱动许多现代Agent工作的核心框架。它是一种优美的“思考-行动”循环模式。
在一个ReAct循环中,LLM会交替生成:
思考 (Thought):LLM首先对自己当前的任务状态进行分析,明确下一步需要做什么以及为什么。这部分内容通常是内心独白,不会直接展示给用户。
Thought: The user wants to know the current weather in Beijing. I should use the
weather_apitool. The parameter for this tool is the city name. So I should callweather_api(city="Beijing").行动 (Action):根据思考的结果,LLM决定调用哪个工具以及传入什么参数。
Action:
weather_api(city="Beijing")观察 (Observation):Agent执行该行动,并获得一个结果。这个结果就是对下一步思考的“观察输入”。
Observation: "The weather in Beijing is Sunny, 25°C."
再次思考 (Thought):Agent接收到观察结果,并进行新一轮的思考。它可能已经找到了最终答案,也可能需要基于新的观察结果执行下一步行动。
Thought: I have successfully found the weather in Beijing. The user's question is answered. I should now formulate the final answer for the user.
Final Answer: The current weather in Beijing is Sunny, with a temperature of 25°C.
这个“思考-行动-观察”的循环不断进行,直到Agent认为任务已经完成。
四、实战:构建一个能查天气的自定义Agent
让我们使用langchain框架来构建一个简单的天气查询Agent。
# 1. 安装必要的库
# pip install langchain langchain-openai duckduckgo-search
import os
from langchain.agents import tool, AgentExecutor, create_react_agent
from langchain_openai import ChatOpenAI
from langchain import hub
# 设置你的OpenAI API Key
# os.environ["OPENAI_API_KEY"] = "sk-..."
# 2. 定义你的自定义工具
# @tool装饰器能快速将一个Python函数转换为Agent可用的工具
@tool
def get_weather(city: str) -> str:
"""A tool to get the current weather for a given city."""
if city == "Beijing":
return "The weather in Beijing is Sunny, 25°C."
elif city == "Shanghai":
return "The weather in Shanghai is Rainy, 20°C."
else:
return f"Sorry, I don't have weather information for {city}."
# 3. 准备工具列表、LLM和Prompt模板
tools = [get_weather]
llm = ChatOpenAI(model="gpt-4-turbo-preview", temperature=0)
# 从LangChain Hub下载一个预设的ReAct Prompt模板
prompt = hub.pull("hwchase17/react")
# 4. 创建Agent
# `create_react_agent`会根据LLM、工具和Prompt组装出Agent的核心逻辑
agent = create_react_agent(llm, tools, prompt)
# 5. 创建Agent执行器 (AgentExecutor)
# AgentExecutor负责实际运行ReAct循环
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True) # verbose=True可以看到Agent的完整思考过程
# 6. 运行Agent!
question = "What's the weather like in Beijing today?"
agent_executor.invoke({
"input": question})
运行以上代码,你将在控制台看到Agent详细的思考(Thought)、行动(Action)和观察(Observation)过程,最终输出北京的天气情况。你已经成功赋予了LLM一个全新的能力!
五、未来展望:从单一Agent到多Agent协作
Agent技术的发展并未止步于此。多Agent系统(如MetaGPT、ChatDev)是更前沿的探索,它模拟一个人类团队(如一个软件公司),让不同的Agent扮演不同角色(如产品经理、程序员、测试工程师),通过协作来完成更加宏大和复杂的任务。
Agent范式正在开启一个全新的AI应用时代。掌握Agent的设计与构建,意味着你将能够创造出真正具备自主解决问题能力的下一代AI应用。