Agent 自学指南1 - 别只会"Hi"了:给大模型装上手脚,5分钟变身 Agent

项目总介绍: Agent自学指南

前言

在开始写代码之前,先回答一个问题:Agent 到底是什么?

这个词被用滥了,各家有各家的说法。Anthropic 在 Building Effective Agents 里给出了一个相对清晰的定义,他们先区分了两个容易混淆的概念:

Workflows are systems where LLMs and tools are orchestrated through predefined code paths. Agents, on the other hand, are systems where LLMs dynamically direct their own processes and tool usage, maintaining control over how they accomplish tasks.

翻译过来就是:Workflow 是按剧本走的,每一步都是提前写死的;Agent 是自己决定怎么走的,根据当前情况动态选择下一步该做什么。

Anthropic 进一步描述了 Agent 的运作方式:

Agents begin their work with either a command from, or interactive discussion with, the human user. Once the task is clear, agents plan and operate independently, potentially returning to the human for further information or judgement. During execution, it's crucial for the agents to gain "ground truth" from the environment at each step (such as tool call results or code execution) to assess its progress.

简单说:Agent 接到任务 → 自主规划 → 调用工具获取环境反馈 → 根据反馈决定下一步 → 直到任务完成。

其中最关键的一个能力是工具调用(Tool Use)。没有工具,LLM 只能说;有了工具,LLM 才能做。这篇就从这里开始。

那我们就从这里开始,写一个最简单的 Agent。本处使用langchain的执行环境。


用 LangChain 写一个会查天气的 Agent

我们来实现一个最小的 Agent:给它一个查天气的工具,然后让它自己决定什么时候调用。

安装依赖

bash 复制代码
pip install langchain langchain-openai

定义工具

python 复制代码
@tool
def get_weather(city: str) -> str:
    """查询指定城市的当前天气。"""
    mock_data = {
        "北京": "晴,气温 12°C,微风",
        "上海": "多云,气温 18°C,东南风 3 级",
        "广州": "小雨,气温 22°C,湿度 85%",
    }
    return mock_data.get(city, f"暂无 {city} 的天气数据")

@tool 是 LangChain 提供的装饰器,它会把函数的名称和 docstring 自动转成模型可以理解的工具描述。docstring 写得越清晰,模型调用得越准确,这点不能省。

初始化模型和 Agent

python 复制代码
from langchain_openai import ChatOpenAI
from langchain_core.tools import tool
from langchain.agents import create_agent
import os

# 设置 OpenAI API Key
os.environ["OPENAI_API_KEY"] = "xxx" #改成自己的API_KEY

tools = [get_weather]
llm = ChatOpenAI(model="gpt-4", temperature=0)

# 使用新版 LangChain 的 create_agent
agent = create_agent(llm, tools)

{agent_scratchpad} 是 Agent 的"草稿纸",用来记录中间的思考过程和工具调用结果,不能删。verbose=True 会把每一步的推理过程打印出来,调试阶段建议开着。

运行

python 复制代码
result = agent_executor.invoke({"input": "北京今天天气怎么样?"})
print(result["output"])

输出大概长这样:

csharp 复制代码
> Entering new AgentExecutor chain...

Invoking: `get_weather` with `{'city': '北京'}`
晴,气温 12°C,微风

北京今天天气晴朗,气温 12°C,有微风,适合外出。

> Finished chain.

模型自己判断需要调用 get_weather,传入正确的参数,拿到结果之后再组织成自然语言回答。这就是最基本的 Agent 闭环。


小结

这篇做了两件事:

  1. 借 Anthropic 的定义说清楚了 Agent 和 Workflow 的区别------关键在于谁来决定下一步
  2. 用 LangChain 写了一个最小的工具调用 Agent,把"说"和"做"的闭环跑通了

下一篇会深入工具这个话题,看看在tool调用上Agent内部实际做了什么,以及除了自定义函数,还能给 Agent 装上哪些更强的手脚。


参考资料Building Effective Agents --- Anthropic

相关推荐
GoAI1 分钟前
《深入浅出Agent》:项目深度解析Autoresearch
人工智能·深度学习·大模型·llm·agent
高台树色18 分钟前
知识库与检索 - 向量数据库
agent
hrhcode25 分钟前
【LangChain】一.LangChain v1.0-快速上手(核心组件、工具、中间件)
python·ai·langchain·agent
DO_Community1 小时前
DigitalOcean 打造 AI 原生云,帮助 AI 应用大幅降低成本与运维复杂度
运维·人工智能·agent·claude
陈蒙_1 小时前
三板斧解决 Trae 卡顿
安卓·agent·ai编程·trae·trae 卡顿
Chef_Chen2 小时前
Agent-memory-召回设计里分段过滤的重要性
agent·memory
xiaoxue..2 小时前
浅聊ReAct:Agent 的执行框架
ai·面试·agent
Old Uncle Tom11 小时前
OpenClaw 记忆系统 -- 记忆预加载
java·数据结构·算法·agent
深海鱼在掘金11 小时前
深入浅出 LangChain —— 第三章:模型抽象层
人工智能·langchain·agent
KaneLogger11 小时前
三省六部 Agent 这条路不通
agent·ai编程