目录

1. 引言

大模型 API 的普及让「调用模型」这件事变得极其简单:传入一段 prompt,几秒钟后拿到一段文本。但很快开发者就发现,单纯依赖模型生成文本的能力,远远无法满足真实业务场景中的自动化需求。于是,AI Agent(智能体)成为大模型应用层最核心的演进方向之一。

本文将从概念、架构、工作流程、代码实现、框架选型到落地实践,系统讲解 AI Agent 到底是什么,以及它与「直接调用大模型 API」这一基础用法之间的本质区别。

2. 什么是 AI Agent

2.1 概念定义

AI Agent 是一种以大语言模型(LLM)为核心决策引擎,能够自主规划任务、调用外部工具、观察执行结果并持续迭代,直到完成目标的智能系统。

简而言之,如果大模型是「大脑」,那么 Agent 就是「大脑 + 手脚 + 计划表」。一个完整的 Agent 不仅会「想」和「说」,还会「做」。

2.2 一个直观的例子

假设用户的诉求是:

查一下今天 A 股新能源板块的涨跌情况,生成一份 300 字以内的分析简报,并发送到我的邮箱。

直接调用 API 的做法:将这段需求原样作为 prompt 传给模型,模型输出一段看起来合理的文本。但这段文本中所谓「涨跌情况」很可能是模型基于训练数据编造的,它并不会真的去查数据,也没有能力发邮件。

AI Agent 的做法:Agent 收到任务后,会先拆解目标,然后依次执行以下动作:

  1. 调用行情数据工具,拉取新能源板块今日实时数据;
  2. 将数据交给 LLM 分析,生成简报文本;
  3. 调用邮件发送工具,将简报发送到指定邮箱;
  4. 检查每一步的返回结果,如果某一步失败,则调整策略重试。

整个过程无需人工干预,Agent 自主完成闭环。

3. 与直接调用大模型 API 的本质区别

维度直接调用 APIAI Agent
角色定位文本生成器任务执行者
能力边界只会输出文本能调用工具、操作环境
任务复杂度单轮或简单多轮问答多步骤、多工具的复合任务
外部交互无,纯文本输入输出可访问搜索、代码、API、数据库、文件系统等
状态管理依赖开发者自己维护Agent 自主记忆、更新状态
错误处理用户发现错误后重新提问Agent 观察结果后自行纠错重试
自主性被动响应主动规划与执行

3.1 本质一:从「生成答案」到「完成目标」

直接调用 API 时,模型的目标是生成一段高质量的文本。而 Agent 的目标是完成一个任务。文本生成只是 Agent 完成目标过程中的一个中间手段,而不是最终目的。

3.2 本质二:从「无状态」到「有记忆」

API 调用本身是无状态的——每次请求都是全新的。开发者需要自行在外部维护对话历史、上下文和任务进度。Agent 则天然需要一个记忆系统,用来记录任务目标、已完成步骤、中间结果和失败经验。

3.3 本质三:从「封闭系统」到「开放系统」

直接调用 API,模型的输入只有一个:prompt。它的输出也只有一个:文本。Agent 则是一个开放系统,LLM 通过「工具调用」这个桥梁与外部世界连接,可以读写数据库、调用 HTTP 接口、执行代码、操作浏览器,真正融入现有的技术栈。

4. AI Agent 的核心架构

一个典型的 AI Agent 系统由以下核心模块构成:

用户任务输入

Agent 核心控制器

规划模块 Planning

记忆模块 Memory

工具执行模块 Tools

大语言模型 LLM

外部环境

最终结果输出

4.1 规划模块

负责将复杂的用户目标拆解为可执行的子任务序列。主流做法有两种:

  • ReAct 模式:交替进行「思考 + 行动」,模型在每一步输出一个 reasoning 和一个 action,边做边想。
  • Plan-and-Execute 模式:先由模型生成一个完整的执行计划,再逐步执行计划中的每一步,适合步骤相对固定的任务。

4.2 记忆模块

记忆分为两类:

  • 短期记忆:当前任务中的对话上下文、中间结果、已执行步骤,通常存储在 session 中。
  • 长期记忆:跨任务的用户偏好、历史经验、知识积累,通常写入向量数据库或关系数据库,供后续任务检索。

4.3 工具模块

工具是 Agent 与外界交互的接口。每个工具本质上是一个函数,附带了名称、参数说明(JSON Schema)、功能描述。LLM 根据 prompt 中的工具描述,决策「此刻该调用哪个工具、传什么参数」。

4.4 大语言模型

LLM 是 Agent 的决策引擎。Agent 的智能上限很大程度上取决于底层模型的理解能力、推理能力和指令遵循能力。同一套 Agent 框架,接入不同水平的模型,表现可能差异巨大。

5. 工作流程:Agent 是如何「做事情」的

以 ReAct 模式为例,Agent 处理一个任务的典型循环如下:

否

是

收到用户任务

LLM 输出 Thought

LLM 决策 Action

是最终答案?

调用对应工具

获取工具返回结果 Observation

返回最终结果

循环的三个关键元素:

  • Thought:模型的思考过程,用于分析当前状态、决定下一步。
  • Action:模型决定要调用的工具及传入的参数。
  • Observation:工具执行后的返回结果,被重新注入上下文,供模型继续推理。

整个循环一直持续到模型认为任务已经完成,或者达到最大执行步数限制。

6. 代码示例:从 API 调用到 Agent

下面通过一个最小可运行的 Python 示例,展示「直接调用 API」和「基于 ReAct 模式实现 Agent」的区别。示例基于 OpenAI 兼容接口,便于替换为任意大模型。

6.1 直接调用 API 的写法

from openai import OpenAI

client = OpenAI(
    api_key="your-api-key",
    base_url="https://api.openai.com/v1",
)

response = client.chat.completions.create(
    model="gpt-4o",
    messages=[
        {"role": "user", "content": "今天杭州天气怎么样?"}
    ],
)

print(response.choices[0].message.content)

这段代码的输出模型只会「猜」一个答案,因为它没有任何天气数据来源。

6.2 最简单 Agent 示例:让模型自己选择工具

第一步,定义工具函数,并用 JSON Schema 描述其能力:

import json

def get_weather(city: str) -> str:
    """模拟天气查询工具,实际场景中接入真实天气 API。"""
    weather_data = {"杭州": "晴,26°C", "北京": "多云,22°C"}
    return weather_data.get(city, "暂无数据")

# 工具描述,供模型理解该工具的作用与参数
weather_tool = {
    "type": "function",
    "function": {
        "name": "get_weather",
        "description": "查询指定城市的实时天气",
        "parameters": {
            "type": "object",
            "properties": {
                "city": {"type": "string", "description": "城市名称"}
            },
            "required": ["city"],
        },
    },
}

第二步,发起带工具定义和结果回传的多轮对话:

from openai import OpenAI

client = OpenAI(api_key="your-api-key", base_url="https://api.openai.com/v1")

messages = [{"role": "user", "content": "今天杭州天气怎么样?"}]

# 第一轮:模型决定调用工具
response = client.chat.completions.create(
    model="gpt-4o",
    messages=messages,
    tools=[weather_tool],
    tool_choice="auto",
)

msg = response.choices[0].message

# 解析工具调用参数
tool_call = msg.tool_calls[0]
args = json.loads(tool_call.function.arguments)

# 执行工具
result = get_weather(args["city"])

# 将工具结果回传给模型,进行第二轮推理
messages.append(msg)  # 模型带工具调用的消息
messages.append({
    "role": "tool",
    "tool_call_id": tool_call.id,
    "content": result,
})

final_response = client.chat.completions.create(
    model="gpt-4o",
    messages=messages,
)

print(final_response.choices[0].message.content)

输出结果是基于真实工具返回数据的答案,例如:

杭州今天的天气是晴,温度 26°C。

这段代码已经完成了 Agent 最核心的「工具调用闭环」。当工具数量增多、任务步骤增多时,只需把上述循环抽象为通用执行器即可。

6.3 一个极简的 ReAct 执行循环

class SimpleAgent:
    def __init__(self, client, model, tools: dict):
        self.client = client
        self.model = model
        self.tools = tools  # 工具名 -> 可调用函数
        self.messages = []

    def run(self, task: str, max_steps: int = 8) -> str:
        self.messages.append({"role": "user", "content": task})

        for _ in range(max_steps):
            response = self.client.chat.completions.create(
                model=self.model,
                messages=self.messages,
                tools=self._tools_schema(),
                tool_choice="auto",
            )
            msg = response.choices[0].message

            if not msg.tool_calls:
                return msg.content  # 模型认为任务已完成

            self.messages.append(msg)
            for tool_call in msg.tool_calls:
                name = tool_call.function.name
                args = json.loads(tool_call.function.arguments)
                result = self.tools[name](**args)
                self.messages.append({
                    "role": "tool",
                    "tool_call_id": tool_call.id,
                    "content": str(result),
                })

        return "已达到最大执行步数,任务可能未完成。"

    def _tools_schema(self):
        return [
            {
                "type": "function",
                "function": {
                    "name": name,
                    "description": fn.__doc__ or "",
                    "parameters": {
                        "type": "object",
                        "properties": {},
                    },
                },
            }
            for name, fn in self.tools.items()
        ]

这个极简实现已经具备了 Agent 的核心特征:自主决策 + 工具调用 + 结果回传 + 循环迭代。生产级的框架(如 LangChain 的 AgentExecutor、LlamaIndex Agent)本质上就是在上述逻辑之上增加了更完善的解析、重试、并发、安全策略。

7. 主流 Agent 开发框架对比

在动手开发之前,选择合适的框架能显著提升效率。以下是当前主流的几个框架:

框架定位适合场景
LangChain最成熟的 LLM 应用框架需要丰富工具生态和社区资源的场景
LlamaIndex侧重 RAG 与数据检索知识问答、文档分析、数据智能体
AutoGen多 Agent 协作框架多角色对话、代码生成、复杂协作任务
CrewAI面向团队的轻量多 Agent业务团队快速构建角色化 Agent 系统
OpenAI Swarm / Agents SDK官方轻量编排简单多 Agent 场景、快速原型
Dify / Coze可视化平台低代码搭建,无需深入代码开发

对于刚入门的开发者,建议先从 LangChain 或 LlamaIndex 开始,它们的文档完善、社区活跃、示例丰富;当需要做多 Agent 协同时,再引入 AutoGen 或 CrewAI。

8. AI Agent 的典型应用场景

  • 智能客服与助手:不只是回答 FAQ,而是能查询订单、处理退款、创建工单。
  • 数据分析 Agent:自然语言提问,Agent 生成并执行 SQL、生成图表、输出洞察报告。
  • 代码开发 Agent:读取代码仓库、定位问题、生成补丁、运行测试,形成完整开发闭环。
  • 内容生产流水线:拆解选题 → 搜索资料 → 撰写初稿 → 自动配图 → 排版发布。
  • 业务流程自动化:定时拉取报表、检查异常、发送通知、更新 CRM 记录。
  • 个人效率 Agent:管理日程、总结邮件、预订会议、整理笔记等。

9. 常见挑战与局限性

9.1 可靠性问题

LLM 生成内容具有随机性,Agent 多步执行时,任何一步出错都可能让整个任务失败。步骤越多,整体成功率越低。生产环境中需要引入重试机制、步骤校验、人工确认节点来保障可靠性。

9.2 成本与延迟

一次 Agent 任务往往需要多轮 LLM 调用,token 消耗和响应延迟都远高于单次 API 调用。需要根据任务复杂度动态选择模型,简单步骤用轻量模型,关键步骤用强模型。

9.3 安全风险

Agent 具有操作外部环境的能力,一旦被恶意 prompt 注入,可能执行危险操作(如删除数据、泄露信息)。生产系统必须做好工具权限隔离、操作审计和输入过滤。

9.4 可观测性

多步执行过程中的每一步决策、工具调用、中间结果都需要完整记录,否则出现问题时难以排查。应引入日志追踪和可视化工具(如 LangSmith、Langfuse)来监控 Agent 的运行轨迹。

10. 总结

AI Agent 和直接调用大模型 API 的关系,并非互斥,而是递进。

  • 直接调用 API 是所有 LLM 应用的基础,适合单轮问答、文案生成、摘要总结等确定性输入输出的场景。
  • AI Agent 构建在 LLM 之上,通过「规划 + 记忆 + 工具调用 + 循环迭代」赋予了模型自主完成任务的能力,适合多步骤、需要外部数据或操作环境的复杂场景。

理解两者的本质区别,是构建真正有价值的大模型应用的起点。单次 API 调用拼的是 prompt 质量,而 Agent 系统拼的是工程架构、工具设计和可靠性的综合能力。在实际开发中,建议从具体业务痛点出发,先用直接调用 API 验证场景可行性,再逐步引入 Agent 能力完成流程自动化。

11. 延伸阅读与学习资源

  • OpenAI Function Calling 官方文档:理解工具调用的底层规范。
  • LangChain 官方教程:系统学习 Agent、Chain、Memory、Tools 的完整体系。
  • ReAct 原论文:《ReAct: Synergizing Reasoning and Acting in Language Models》。
  • AutoGen 官方文档:深入多 Agent 协作与对话编程。
  • LangSmith / Langfuse:Agent 调试与可观测性工具。
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐