初识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工作得好,工具设计很关键:

  1. 原子性:每个工具只做一件事。get_weather只查天气,不要同时做穿搭建议

  2. 描述清晰:工具的函数注释(docstring)很重要——Agent靠这个判断什么时候用这个工具

  3. 错误处理:工具要能处理异常,返回友好的错误信息

小结

 概念作用
 Agent(智能体) 自主决定用什么工具、执行什么操作
 工具(Tools) Agent能调用的外部能力
@tool装饰器 把函数变成工具
create_agent 创建Agent的标准方式
 推理-行动循环 Agent反复思考→执行→再思考

有了Agent,AI不再只是“聊天机器人”——它变成了“能自己动手做事的智能体”。

posted @ 2026-08-10 18:11  测试木可  阅读(11)  评论(0)    收藏  举报