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

相关推荐
组合缺一4 小时前
赋予 AI Agent “无限续航”:语义保护型上下文压缩技术解析
人工智能·ai·llm·agent·solon·solon-ai
belldeep8 小时前
AI agent:介绍 ZeroClaw 安装,使用
人工智能·ai·agent·zeroclaw
XLYcmy8 小时前
智能体大赛 实现逻辑 “检索先行”的闭环工作流
数据库·ai·llm·prompt·agent·rag·万方
香芋Yu10 小时前
【从零构建AI Code终端系统】02 -- Bash 工具:一切能力的基础
开发语言·bash·agent·claude
@atweiwei10 小时前
Rust 实现 LangChain
开发语言·算法·rust·langchain·llm·agent·rag
javaTodo11 小时前
OpenClaw 完全指南:从周末项目到 GitHub 史上最快破 20 万 Star 的 AI Agent
agent·claude
ZaneAI11 小时前
🚀 Claude Agent SDK 使用指南:深度掌握 Hooks 机制
langchain·agent·claude
ZaneAI11 小时前
🚀 Claude Agent SDK 使用指南:如何优雅地处理用户审批与提问 (User Input)
langchain·agent·claude