初识Agent
一、什么是Agent?
在LangChain生态中,Agent是连接大语言模型与外部工具的核心组件。
不同于传统LLM只能生成文本,Agent通过“感知-决策-执行”的闭环架构,让模型具备调用外部工具的能力。
用人话说就是:
以前你问AI一个问题,它只能动嘴(生成文字)。
现在你问AI一个问题,它可以自己决定“我该用什么工具”,然后自己动手去查/去算/去执行,最后把结果告诉你。
整个过程,你只需要提一个问题,剩下的AI自己搞定。
二、Agent是怎么工作的?
Agent的运行机制可以拆成三个核心模块:
| 模块 | 作用 |
|---|---|
| 观察器(Observer) | 接收用户输入和当前状态 |
| 决策器(Planner) | 基于LLM思考:该用什么工具? |
| 执行器(Actor) | 实际调用工具,执行操作 |
整个过程是一个循环:观察 → 思考 → 行动 → 观察结果 → 再思考 → 再行动……直到任务完成。
这种设计让Agent能够处理多步骤的复杂任务。比如“查询北京今日天气并建议穿搭”,Agent会先调用天气API,再根据温度选择穿搭建议——两步自动完成。
三、Agent的核心组件
要构建一个Agent,需要三大件:
1. 工具链(Tools)
工具是Agent与外部世界交互的桥梁。Agent能调用什么工具,完全由你定义。
常见工具类型包括:
-
Web搜索:查实时信息
-
计算器:做数学运算
-
API调用:连接数据库或业务系统
-
自定义工具:你想让它做的任何事
2. 推理引擎(LLM)
这是Agent的“大脑”——负责思考、规划、决定下一步做什么。
3. 执行控制器
负责实际执行工具调用,并管理整个流程。
四、代码实战
我们用LangChain 1.0推荐的方式——create_agent来构建。
1.定义工具
这里定义两个工具:一个查天气(模拟),一个做计算。
from langchain.tools import tool
# 工具1:查询天气(模拟)
@tool
def get_weather(city: str) -> str:
"""
查询指定城市的天气。
输入城市名称,返回天气信息。
"""
# 模拟天气数据(实际使用时可替换为真实API)
weather_data = {
"北京": "晴天,25°C,适合出门",
"上海": "多云,28°C,有点闷热",
"杭州": "小雨,22°C,记得带伞"
}
return weather_data.get(city, f"暂时没有{city}的天气数据")
# 工具2:计算器
@tool
def calculator(expression: str) -> str:
"""
计算数学表达式的值。
输入数学表达式,返回计算结果。
"""
try:
result = eval(expression)
return f"计算结果:{result}"
except Exception as e:
return f"计算出错:{str(e)}"
这里用了@tool装饰器——LangChain提供的最简单的方式,把任意函数变成Agent可以调用的工具。
2.创建Agent
from langchain_community.llms import tongyi
from langchain.agents import create_agent
# ==================== 配置 ====================
key = "your key" # 替换为个人申请的api_key
llm = tongyi.Tongyi(api_key=key)
# 创建Agent
agent = create_agent(
model=llm,
tools=[get_weather, calculator],
system_prompt="你是一个智能助手,可以帮助用户查询天气和做数学计算。"
)
3.调用Agent
# 测试1:查询天气
result1 = agent.invoke({
"messages": [{"role": "user", "content": "北京今天天气怎么样?"}]
})
print(result1)
# 测试2:做计算
result2 = agent.invoke({
"messages": [{"role": "user", "content": "帮我算一下 3.14 * 2.86 等于多少"}]
})
print(result2)
# 测试3:组合任务
result3 = agent.invoke({
"messages": [{"role": "user", "content": "杭州今天下雨吗?另外帮我算一下 15 * 8 等于多少"}]
})
print(result3)
Agent会自动判断:
-
第一个问题 → 调用
get_weather工具 -
第二个问题 → 调用
calculator工具 -
第三个问题 → 先调用
get_weather,再调用calculator,两个工具都用
整个过程,你只需要问一句话,Agent自己决定用什么工具、按什么顺序用。
五、Agent的工作原理
当你调用agent.invoke()时,背后发生了什么:
用户提问 → LLM思考 → 需要调用工具?→ 是 → 执行工具 → 回到LLM思考
→ 否 → 直接回答
这个循环会一直持续,直到LLM认为任务完成。
比如“杭州今天下雨吗?另外帮我算一下15*8”这个任务:
-
第1轮:LLM思考 → “需要先查天气” → 调用get_weather("杭州")→ 得到“小雨,22°C”
-
第2轮:LLM思考 → “还需要做计算” → 调用calculator("15*8")→ 得到“120”
-
第3轮:LLM思考 → “两个任务都完成了” → 组织语言回答用户
整个过程自动完成,你看到的只是一个最终的答案。
六、工具设计小贴士
想让Agent工作得好,工具设计很关键:
-
原子性:每个工具只做一件事。get_weather只查天气,不要同时做穿搭建议
-
描述清晰:工具的函数注释(docstring)很重要——Agent靠这个判断什么时候用这个工具
-
错误处理:工具要能处理异常,返回友好的错误信息
小结
| 概念 | 作用 |
|---|---|
| Agent(智能体) | 自主决定用什么工具、执行什么操作 |
| 工具(Tools) | Agent能调用的外部能力 |
@tool装饰器 |
把函数变成工具 |
create_agent |
创建Agent的标准方式 |
| 推理-行动循环 | Agent反复思考→执行→再思考 |
有了Agent,AI不再只是“聊天机器人”——它变成了“能自己动手做事的智能体”。

浙公网安备 33010602011771号