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

相关推荐
roamingcode6 分钟前
前端 AI Agent 多智能体协作架构:从对抗式排查到工作流解耦
前端·人工智能·架构·agent·team
小哈里2 小时前
【Agent】MCP协议介绍、MCP Server服务端开发与 Skills技能编写
ai·agent·mcp·mcp server·skills
组合缺一5 小时前
Solon AI Harness 首次发版
java·人工智能·ai·llm·agent·solon
sun_tao19 小时前
● ReAct vs Plan-and-Execute 详细对比 核心思想
agent·react·plan_execute
一只小阿乐10 小时前
js流式模式输出 函数模式使用
开发语言·javascript·ai·vue·agent·流式数据·node 服务
x-cmd10 小时前
[x-cmd] 专为 AI Agent 设计的无头浏览器,比 Chrome 速度快 9 倍且少用 16 倍内存 | Lightpanda
前端·chrome·ai·自动化·agent·浏览器·x-cmd
墨102412 小时前
待办清单驱动执行:为什么 Agent 做复杂任务时需要持续更新计划
ai·agent·智能体·harness
LucaJu1 天前
一文吃透 Spring AI Alibaba + MCP:服务端搭建 + 客户端调用全流程
agent·智能体·skill·mcp·spring ai alibaba
阿荻在肝了1 天前
Agent学习四:RAG 技术应用
python·学习·agent
人工智能培训1 天前
大模型Prompt实战:精准生成专业技术文档
人工智能·深度学习·机器学习·prompt·agent·智能体