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

相关推荐
前端一小卒7 小时前
我用 TypeScript 从零手写了一个 Claude Code,然后发现它的核心只有 30 行
前端·agent
云烟成雨TD9 小时前
LangFlow 1.x 系列【5】可视化编辑页面功能说明
人工智能·python·agent
阿拉斯攀登10 小时前
Agent 核心架构:思考-行动-观察循环(ReAct)
人工智能·ai·agent·react
8Qi812 小时前
HelloAgents:RAG——让 Agent 学会检索知识
人工智能·llm·agent·ai编程·vibecoding
Grapes12 小时前
没有魔法,只有循环:从 LLM API 到第一个 Agent
llm·agent
凡泰AI14 小时前
从个人用AI到企业用AI,如何为企业部署一套私有化Agent智能体运行时,将AI变成企业的基础设施
人工智能·ai·架构·agent·cio
江华森15 小时前
CubeSandbox 实战:从零部署到快照/克隆/回滚全体验
agent
组合缺一15 小时前
ReActAgent 实战指南:构建会思考、能行动的 AI Agent
java·人工智能·ai·agent·solon·skills
阿拉斯攀登16 小时前
AI Agent 入门:从 ChatGPT 到自主智能体
人工智能·chatgpt·agent·ai编程·loop
8Qi817 小时前
hello-agents学习笔记--Memory让Agent拥有记忆
人工智能·python·llm·agent·ai编程·vibecoding