前言
日常多少都用过或听过一些 Agent:Cursor 的 Agent 模式、Claude code、最近爆火的 Manus 等。很多人下意识地认为构建 Agent 需要深厚的 AI 背景,但其实 Agent 的核心思想非常简单:即为大模型提供工具以感知环境,让它不仅能思考,还能借助工具主动完成任务。
让我们先跳过那些复杂的理论,从最实际的角度出发,讲清楚两件事:Agent 到底是什么,以及如何低成本的定制一个自己的Agent。你会发现,普通人要想创造一个实用 Agent 的关键不在于从零构建一个大脑,而在于精心设计所需场景的指令和为它打造一套称手的工具。
一、Agent 介绍
1. Agent 概念
Agent 的定义有很多种。宽泛地说,只要是 LLM 加上能调用工具来做事的系统,都可以称为 Agent。Anthropic 把这类系统称为「agentic systems」,并根据架构层面的不同,分成 Workflow 和 Agent 两类:
- Workflow:LLM 按照既定流程逐步执行,只是把传统工作流中的节点从硬编码规则换成了 LLM。常见的平台有 Dify、N8N、Coze。
- Agent:LLM 可以动态、自主地决定流程和工具使用方式,始终保持对任务执行方式的控制权。
非必要不建议用 LLM 搭建 Agent,不要为了用 Agent 而用 Agent。LLM 会引入额外的复杂性和不确定性。能用代码工程解决的就用代码工程解决。
下面讲的 Agent,都特指后者(非 Workflow 的自主 Agent)。
Chat 和 Agent 的区别:Chat 是对话,Agent 是行动。Chat(LLM)是一个超级大脑,而 Agent 是为这个大脑配了一副身体,能用眼鼻嘴去感知这个世界、能行走、能动手使用工具。
举个例子:「帮我订一张明天北京到上海最便宜的机票」。
- 传统 Chat:建议你打开 美团App,选择日期、出发地、目的地,按价格排序后购买。
- Agent:拆解任务(查航班 → 比价 → 下单 → 确认),然后逐个调用工具执行。
关键在于 Agent 不只是说,它能做。
如图所示,Agent 不是一次性问答机器,而是一个动态的执行引擎。它思考,行动,观察结果,调整策略,再行动,如此循环直到任务完成。
Agent 的组成
业界普遍接受的 Agent 架构,来自 OpenAI 应用研究主管 Lilian Weng 的总结:Agent = 大模型 + 工具使用 + 记忆 + 规划。
2. Tool(工具)
Tool 是 Agent 与外部世界交互的通道。LLM 本身只知道训练数据里的东西,它没有实时信息,不会操作文件,不能发网络请求。Tool 补上了这个缺口:查询数据库、调用 API、读写文件、搜网页,这些都是通过 Tool 实现的。
需要注意,LLM 本身不具备工具调用的能力。我们看到的「AI 调用工具」,本质上是将可用的工具信息提供给 LLM,LLM 根据当前上下文生成工具的调用参数,然后由 Agent 框架执行真正的工具调用,再将结果返回给 LLM。Agent 框架把这整个过程打包隐藏了实现细节。
3. Memory(记忆)
Memory 是 Agent 的「海马体」,让它能记住上下文和历史信息,实现跨会话的个性化交互。
- 短期记忆:当前对话的上下文,预置的提示词、对话记录。
- 长期记忆:跨会话持续存在的知识,历史对话的沉淀、手动维护的记忆信息。
为什么需要 Memory?当前大部分 Agent 或 Chat 基本上是无状态的,无法从过去的互动中学习。我们得不断跟 AI 重复自己的偏好,或者不断调预设提示词。要从无状态工具变成真正智能的有状态代理,需要赋予它们记忆。
Memory 和 RAG 的区别:RAG 侧重将外部知识引入当前会话,让回答更准确;Memory 侧重捕捉用户偏好、历史决策和失败经验,让交互更智能、更个性化。
4. Planning(规划)
Planning 是 Agent 的思考方式,指导它如何行动。
任务拆解:大任务拆成小步骤。早期通过提示词引导 LLM 逐步推理(如 “think step by step”);后期出现的推理模型(如 o1、DeepSeek R1)则将推理能力通过训练内化到了模型本身,不再依赖外部提示。
自我反思:计划赶不上变化。Agent 需要根据执行结果不断调整。其中最经典的模式是 ReAct(Reasoning and Acting):LLM 不断与环境交互,观察结果,确定下一步。
Thought: 分析当前状态,决定下一步
Action: 执行工具调用
Observation: 观察工具返回结果
...(重复上述循环)
ReAct 非常贴近 Agent 的本质,强调 Agent 与环境的持续交互 and 动态调整,这正是智能体区别于传统程序的关键。
二、MCP 介绍
1. 从 Function Call 到 MCP
前面说到 Tool 是 LLM 与外部世界交互的通道。但 Tool 的具体实现,各家都不一样。
LLM 不能直接调工具。真正发生的过程分为两步:
-
模型 API 层:你把工具的定义(名称、描述、参数 schema)通过 API 的 tools 字段传递给模型。各模型厂商有自己的格式:OpenAI 是一套,Anthropic 是一套,Google 又是一套。模型根据上下文判断是否需要调用工具,并生成调用参数。
-
Agent 运行时:收到模型的工具调用请求后,Agent 框架负责真正执行:调 API、读文件、查数据库,然后把执行结果返回给模型。
问题在于,工具的定义和调用格式没有统一的行业规范。对 Agent 的开发者来说,一个工具只能硬编码在代码里对接特定的平台,特定的SDK,换平台/SDK就要重写。对用户来说,因为没有标准协议,你也无法在常用的 Agent 工具上(如 Cursor、Claude Code)直接接入自己的业务工具。
2. MCP 是什么
MCP(Model Context Protocol)是 Anthropic 开源的一个标准协议,定义了 AI 系统与工具之间通信的规范。就像 HTTP 统一了各种 RPC 实现一样,MCP 统一了各家不同的 Function Call 格式。
- 标准化调用:AI 知道怎么调用你的工具,需要传什么参数
- 结果返回:AI 知道怎么理解你返回的数据
MCP 之于 Function Call,相当于 HTTP 之于 RPC。
在 HTTP 出现之前,各家 RPC 都基于私有协议,互不兼容。RPC 是一个概念/范式(远程调用函数),HTTP 是一个标准协议(统一了客户端和服务端通信的规范)。同样,Function Call 是一个概念(AI 调用外部工具),MCP 是一个标准协议(统一了各家不同的实现格式)。
MCP 的核心概念就两个:
- MCP Tool:一个工具,为 LLM 提供一种能力。不能独立使用,属于 Server 的一部分。
- MCP Server:多个 Tool 的集合,为一类能力打包。例如,一个用于处理邮件的 Server 可以包含查询邮件、发送邮件、标记已读等多个 Tool。
3. 开发一个 MCP Server
开发 MCP Server 并不复杂。本质上就是实现一个满足 MCP 协议的服务,暴露一些 Tool 的元信息(名称、描述、参数 schema),并在收到调用时执行对应的逻辑。
以最简单的场景为例:你想让 AI 能查天气。写一个 MCP Server,暴露一个 get_weather Tool,定义好参数(城市名、日期),实现查询逻辑(调天气 API 或读数据库),然后返回结构化的结果。就这么简单。
如果你想让 AI 能操作你的业务系统,方式完全一样:把对应的接口或查询封装成 Tool 即可。
MCP Server 可以用任何语言写,哪怕没有官方 SDK,自己让 AI 手搓一个问题也不大。开发完成后,将可执行文件的路径或云端链接,配置到 Agent 工具里就能用。 开发一个 MCP 并不复杂,我们不需要了解协议的具体细节,甚至不需要会写代码,只需要给 AI 说「我要开发一个用于 xxx 的 MCP」,最多再把 MCP 的官方文档给 AI,就够了。
开发 mcp 的时候需要注意:工具要精简,返回内容要克制。不要把整个接口的完整响应全部返回给 AI,只保留你真正关心的字段,避免污染上下文。
三、如何让你的 AI 用上工具
理解了 Agent 和 MCP 之后,很多人会想:那我如果我想拥有一个 AI 助手,是不是得自己实现 ReAct 循环,或者基于各种 Agent 框架来开发一套?
不需要。你日常使用的很多工具,已经具备了 Agent 的全部能力。
Cursor、Claude Code、Cline 这类工具,本质上就是完整的 Agent 框架:
- 大模型:接入各类 LLM
- 工具:内置文件读写、代码搜索、终端执行等 Tool,同时支持通过 MCP 扩展
- 记忆:对话历史、项目文档、Cursor Rule、CLAUDE.md
- 规划:任务拆解、ReAct 循环
这些工具虽然都作为 Coding Agent 宣传,但别被这个名字限制住。在文章目录下启动,它就是写作 Agent;在堆满 Excel 的目录启动,它就是数据分析 Agent。需要注意,这种方式仅适用于个人提效,生产级的 Agent 还是需要自己实现 Agent 来覆盖更多细节。
你不需要从零搭建任何东西。只需要做两件事:
- 开发 MCP Server,当这些 Agent 内置的 Tool 不能满足你的诉求时,为 AI 提供针对你业务场景的工具
- 设计 System Prompt,告诉 AI 它是什么角色、要完成什么任务、如何使用这些工具
然后把这些配置到你的 Agent 工具上,它就变成了你的专属助手。
System Prompt 是关键
很多人花大量精力在开发工具上,却忽略了 System Prompt。实际上,对于一个具体场景的 Agent,Prompt 和 Tool 同等重要。Tool 决定了 Agent 的「能力边界」——能做什么,Prompt 决定了「行为方式」——怎么做、什么时候做、做到什么程度。
一个好的 System Prompt 应该包含:
- 角色定位:这个 Agent 是谁,负责什么
- 任务目标:用户期望它完成什么
- 工具使用策略:什么时候用哪个 Tool,如何组合
- 输出规范:给出什么形式的结果
配置到 Agent 工具
配置方式通常很简单:在 Agent 工具的设置中添加 MCP Server 的路径或连接信息,然后在 Rule / System Prompt / CLAUDE.md 中填入你的指令。之后在对话中直接提需求,Agent 就会自动调用你提供的工具。
整个过程不涉及写 Agent 框架代码,不需要实现业务逻辑之外的任何基础设施。你专注在「我的业务需要 AI 帮我做什么」上,把对应的工具写出来,配置好指令,就完成了。
一个具体的例子
假设你想做一个线上问题排查的 Agent。你需要让 AI 能:
- 读取工程代码
- 查询线上日志
- 查数据库里的对应数据
工程代码的读取 Agent 基本上都支持,工作区就放到代码仓库下就行。我们只需要写一个 MCP Server(拆成两个也可以),暴露两个 Tool: query_logs、execute_sql。然后在 CLUADE.md 或者 Cursor Rule 里告诉 AI:「你是一个线上问题排查助手,当用户提供告警信息时,可以根据报错信息使用 query_logs 来查询日志并读取对应的代码来分析问题…」
配置到 Cursor 或 Claude Code 上,粘贴告警信息,AI 就会自动走完整个流程。
四、观点
我并不认为每个人都需要去从零到一构建下一个颠覆行业的 Agent。
对于我们大多数开发者而言,Agent 真正的价值在于创造那些能解决「我自己的问题」的助手:一个能帮你排查线上告警的帮手、一个能自动抓取分析工单的工具、一个能帮你处理繁琐配置的脚本。这些 Agent 虽小,却能实实在在地提升工作效率。
所以,忘掉宏大叙事,从一个微小的痛点开始。
找到那个你每天都在重复的、让你烦躁的机械性任务,然后问自己:AI 能不能帮我做这件事?如果只需要简单的逻辑判断和信息整合,可以让 AI 给你写一个脚本提效;如果任务需要理解模糊的自然语言描述、需要根据上下文动态决策,我们可以用常用的 Agent 工具构建一个我们的 AI 助手。