乐于分享
好东西不私藏

Agent入门:解构AI智能体的五大核心能力

Agent入门:解构AI智能体的五大核心能力

欢迎来到 AI Agent 的世界!

你可以把 Agent 想象成一个拥有超级能力的智能助手。你给它一个目标(比如“帮我规划下周去北京的旅行”),它就能像人一样,自己上网查信息、分析利弊、制定计划,甚至调用工具(比如订票网站)来完成任务。

那么,Agent 是如何实现这一切的呢?奥秘就在于它具备的五大核心能力。


Prompt:五大能力的“总指挥”

那么,我们作为开发者,如何驾驭这五大能力呢?答案是 Prompt

如果说五大核心能力是 Agent 身体的“器官”(大脑、眼睛、手、记忆系统),那么 Prompt 就是向这些器官下达指令的“灵魂”和“总指挥”。它是一个蓝图,用来定义和编排这五大能力该如何协同工作。

它们的关系如下:

核心能力
Prompt 在其中扮演的角色
🎯 目标导向
Prompt 直接定义了 Agent 的最终目标。Prompt 的第一句话通常就是:“你是一个 XX Agent,你的任务是 XX。”
🧠 规划
Prompt 为 Agent 预设了思考的蓝图和决策逻辑。它告诉 Agent 在拿到一个任务后,应该遵循怎样的宏观计划。
🎬 行动
Prompt 负责向 Agent 说明它拥有哪些工具(行动能力)以及何时、如何使用它们,就像一份工具使用说明书。
📚 记忆
Prompt 指导 Agent 如何与它的记忆系统互动,比如何时读取长期记忆(如用户偏好),何时写入新的记忆。
👀 感知
Prompt 决定了 Agent 如何理解和响应“感知”到的信息(如工具返回的结果),并基于此进行下一步决策。

总而言之,我们正是通过编写高水平的 Prompt,才能将大语言模型(LLM)强大的底层能力,组织和激发出来,形成一个真正好用的 Agent。

你可能会问,这和我们微调模型时用的 system_prompt 有什么关系?

你的理解完全正确!system_prompt 正是承载“目标”的容器。但对于 Agent 来说,这个容器里装的东西更丰富:

  • 简单聊天机器人 system_prompt = 目标 + 角色
  • Agent system_prompt = 目标 + 角色 + 详细的规划 + 行动/工具说明书

所以,你为 Agent 设计的 system_prompt,本质上就是一个更高级、更详尽的行动纲领。

用户发送的 Prompt 归属于哪里?

那么,用户在对话中发送的 prompt,在 Agent 的五大核心能力中又扮演什么角色呢?

它直接归属于 👀 感知 (Perception) 环节。

用户发送的 prompt 是 Agent 从环境中接收到的初始刺激具体任务指令。它的整个处理流程是这样的:

  1. 外部环境触发:用户输入并发送 prompt。
  2. Agent 进行感知:Agent 的“感知”模块捕获到这个外部信息。
  3. 信息传递至规划:这个被感知到的用户 prompt,会作为 LLM 进行“规划”时的重要输入,指导它如何结合自身的“目标”和“记忆”来制定下一步的行动方案。

区分总结:

Prompt 类型
角色
谁定义的?
在五大组件中的主要作用
系统提示 (System Prompt)
Agent 的“灵魂”和“行动纲领”,是内在的、持久的。
开发者
主要定义 🎯 目标🧠 规划 的宏观策略和 🎬 行动 的工具清单。
用户提示 (User Prompt)
Agent 需要完成的具体任务指令,是外来的、实时的。
用户
Agent 👀 感知 环节的输入信息,是触发 Agent 整个工作流的起点。

可以想象成一位前台接待员(Agent):

  • 系统提示 是她的岗位职责手册(设定了她的使命、工作流程和工具使用规范)。
  • 用户提示 则是访客(你)对她提出的具体请求(比如“我找张三”)。她通过耳朵(感知)接收到这个请求,然后参考手册(系统提示)来完成工作。

一张图看懂 Agent 如何工作

为了把所有概念串联起来,我们可以用一张图来总结 System Prompt用户提示模型返回 和 工具 这四个部分,是如何与五大核心组件协同工作的。

  • System Prompt: 为 Agent 定义了 🎯 目标预设了 🧠 规划 的蓝图和 🎬 行动 的工具清单。
  • 用户提示: 作为外部指令,被 Agent 的 👀 感知 模块捕获。
  • 模型返回: 是 🧠 规划 模块的输出,它可能是一个最终答案,也可能是一个调用工具的决策
  • 工具: 是 🎬 行动 的具体体现,其返回结果会再次被 👀 感知 模块捕获,形成循环。

这张图清晰地描绘了 Agent 著名的 ReAct (Reason + Act) 循环思考 -> 行动 -> 观察 -> 再思考...

Agent 的五大核心能力

这五大能力——目标导向、感知、规划、行动、记忆——是当前 AI Agent 领域普遍认可的核心框架。它并非某个单一的学术定义,而是对人工智能研究(尤其是经典的 BDI 模型)的现代化提炼和实践总结。

我们可以通过下面这张图直观地理解这五大能力是如何协同工作的:

从代码层面看五大能力

下面这张图表将五大核心能力与 LangChain 生态中的具体代码实现联系起来,帮助你更直观地理解如何在代码中构建一个 Agent:

接下来,我们将逐一解析这五大能力,并为你揭示实现它们需要哪些“技术工具箱”。

关于“技术工具箱”: 这里的“工具箱”是一个比喻。它并非特指某个软件,而是指为了实现某种能力,我们需要用到的一系列技术、库、框架或设计模式的组合。


1. 🎯 目标导向 (Goal-Oriented) - “我最终要做什么?”

  • 是什么:这是 Agent 所有行动的出发点和最终目的,是驱动它工作的“初心”。
  • 核心技能需求分析 与 提示工程 (Prompt Engineering)
  • 新手理解:就像你对一位真人助手说:“帮我整理下笔记”。助手首先要动脑筋,把这个模糊指令变得清晰具体:“好的,您的意思是扫描 /notes 目录下的所有 .md 文件,并按 YYYY-MM-DD 的格式创建文件夹来存放它们吗?” 这个将模糊想法精确化的过程,就是“目标导向”的核心。在 Agent 开发中,我们通过精良的提示词(Prompt)来赋予 Agent 这种能力。

2. 👀 感知 (Perception) - “我看到了什么?”

  • 是什么:Agent 用来“观察”和“听取”外部世界信息的方式。
  • 技术工具箱:主要是信息抓取相关的 Python 库
  • 新手理解:这是 Agent 的“眼睛”和“耳朵”。
    • 看网页:使用 requests + BeautifulSoup 读取静态网页,或者用 Playwright / Selenium 浏览需要复杂交互的动态网站。
    • 调接口:通过调用 API 从其他系统获取数据。
    • 读文件:利用 pathlib 库在你的电脑上查找和读取本地文件。

3. 🧠 规划 (Planning) - “我该怎么做?”

  • 是什么:Agent 的“大脑”,根据目标和感知到的信息,制定一步一步的行动计划。
  • 技术工具箱:指导 Agent 思考和决策的设计模式与框架
  • 新手理解
    • 基础模式 (ReAct): 这是所有现代 Agent 的思考基础,即 “思考 -> 行动 -> 观察” 的循环。就像人一样,想一下做什么,然后动手,再看看结果,接着想下一步。
    • 进阶模式 (思维树/反思): Agent 也可以“深思熟虑”。它可以在一个决策点上,想象多种可能(思维树),或者在行动后“复盘”反思,看看计划是否需要调整(反思)。

4. 🎬 行动 (Action) - “开始动手!”

  • 是什么:Agent 执行规划好的具体步骤,通常通过调用 工具 (Tools) 来与外部世界互动。
  • 技术工具箱函数调用 (Function Calling / Tool Use) 技术。
  • 新手理解:如果说“规划”是写菜谱,“行动”就是真正拿起锅铲。这里的“锅铲”就是 Agent 的工具。一个工具本质上就是一个 Python 函数(例如 read_file)。我们需要教会 LLM 如何理解这个函数的功能、参数,并在需要时准确地调用它。同时,还要考虑工具调用失败了怎么办?是重试、换个工具,还是向你求助?

5. 📚 记忆 (Memory) - “我记住了什么?”

  • 是什么:Agent 记录和回忆信息的能力,让它不是“金鱼脑”。
  • 技术工具箱对话历史管理向量数据库 (Vector Database)
  • 新手理解
    • 存入知识: 使用向量数据库(入门可选 ChromaDBFAISS)将大量信息(如你的个人笔记、公司文档)存起来。
    • 提取知识: 当 Agent 需要时,它能快速从这个数据库中检索出最相关的信息来辅助回答。比如,记住你“不吃香菜”的偏好,下次找菜谱时就会自动避开。
    • 短期记忆 (聊天上下文): Agent 能记住你们当前的对话内容,这样你就可以说“上一步提到的那个链接怎么样?”它能理解你的意思。
    • 长期记忆 (知识库/RAG): 这是让 Agent 变得更“博学”和“个性化”的关键。通过检索增强生成 (RAG) 技术,我们可以给 Agent 一个外部知识库。


实战演练:设计一个“菜谱 Agent”

理论有点枯燥?没关系!让我们通过一个具体的“菜谱 Agent”例子,看看这五大能力是如何无缝协作的。

你的提问: "如何做西红柿炒鸡蛋?"

1. 🎯 目标导向 (Goal-Oriented)

Agent 首先明确了你的意图,并设定了清晰的内部目标:“找到一份靠谱的西红柿炒鸡蛋菜谱,并以‘食材清单’和‘步骤说明’的格式清晰地呈现给你。

2. 🎬 行动 (Action) - 定义工具箱

为了实现目标,Agent 需要一套称手的“工具”:

  1. search_recipes(dish_name): 上网搜索菜谱链接。
  2. get_webpage_content(url): 获取网页的详细内容。
  3. extract_recipe_details(content): 从杂乱的网页内容中,提取出结构化的食材和步骤。

3. 🧠 规划 (Planning) - Agent 的思考过程 (ReAct 循环)

Agent 的“大脑”开始运转,通过“思考 -> 行动 -> 观察”的循环来解决问题。

  • 第1轮:搜索

    • 🤔 思考: "用户想找‘西红柿炒鸡蛋’的菜谱。我应该先上网搜一下。我需要用 search_recipes 工具。"
    • 🎬 行动: 调用 search_recipes(dish_name="西红柿炒鸡蛋")
    • 👀 观察: 工具返回了几个高分链接。
  • 第2轮:抓取内容

    • 🤔 思考: "第一个链接评分最高,看起来最靠谱。我需要用 get_webpage_content 工具获取它的内容。"
    • 🎬 行动: 调用 get_webpage_content(url="...")
    • 👀 观察: 工具返回了一大段带 HTML 代码的原始文本,很乱。
  • 第3轮:提取信息

    • 🤔 思考: "内容太乱了,我得把它整理成干净的格式。我需要用 extract_recipe_details 工具。"
    • 🎬 行动: 调用 extract_recipe_details(content="...")
    • 👀 观察: 工具成功返回了结构化的 JSON 数据,包含食材和步骤。
  • 第4轮:完成任务

    • 🤔 思考: "我已经拿到了所有需要的信息,任务完成了。现在可以整理并回复用户了。"
    • 🎬 行动: 将 JSON 数据格式化为易读的文本,作为最终答案输出。

4. 👀 感知 (Perception) 与 📚 记忆 (Memory)

这两个能力贯穿始终:

  • 感知:Agent 在每个“观察”阶段都在感知上一步行动的结果(搜索结果、网页内容、提取的数据)。
  • 记忆
    • 短期记忆让它在整个流程中记得自己每一步做了什么。
    • 长期记忆(如果配置了)则更强大:它可以记住你“喜欢少盐”的偏好,或者缓存这次找到的菜谱,下次再有人问同样问题时,就能秒回答案,又快又准。

LangChain 实现“菜谱 Agent”的学习要点

如果你想用 LangChain 生态从零到一构建这个 Agent,下面是你需要重点关注的核心模块:

1. Agent 的“大脑”:AgentExecutor 与 Chat Models
  • 学什么:
    • Chat Models: 选择一个大语言模型作为推理核心,如 ChatOpenAI
    • create_openai_tools_agent: 这是组装 Agent 的现代化“工厂”,它将 LLMTools 和 Prompt 粘合在一起。
    • AgentExecutor: 这是 Agent 的“执行器”,负责驱动 ReAct 循环,让 Agent 真正“活”起来。
2. Agent 的“行动”能力:自定义工具 (Tools)
  • 学什么:
    • @tool 装饰器: 将任何 Python 函数变成 Agent 可用工具的最简单方法。
    • 现成工具: 学习使用 LangChain 提供的 DuckDuckGoSearchRun(搜索)、WebBaseLoader(网页加载)等工具。
    • 提取链 (Extraction Chains): 这是实现 extract_recipe_details 的关键。学习 create_extraction_chain,它可以让 LLM 自动从文本中提取信息并填充到你定义的 Pydantic 模型中。
3. Agent 的“规划”蓝图:提示工程 (Prompt Engineering)
  • 学什么:
    • ChatPromptTemplate: 构建 Agent 核心提示的“模板”。
    • MessagesPlaceholder: 这是模板中的关键“占位符”,用于动态插入用户输入 (input) 和 Agent 的思考轨迹 (agent_scratchpad),是实现多步推理的基石。
4. Agent 的“记忆”系统:Memory 与 Retriever
  • 学什么:
    • 短时记忆: 学习 ConversationBufferMemory,让 Agent 能够联系上下文进行对话。
    • 长时记忆 (RAG): 学习完整的 RAG 流程,包括用 FAISS 或 Chroma 创建向量存储,用 OpenAIEmbeddings 生成词向量,并最终用 create_retriever_tool 将你的知识库也包装成一个工具,让 Agent 可以在需要时主动查询。

学习路径建议

  1. 从工具开始: 先学会用 @tool 把简单的 Python 函数变成工具。
  2. 创建简单 Agent: 用 AgentExecutor 把工具和简单的 Prompt 组合起来,让它跑起来。
  3. 强化工具: 学习 Document Loaders 和 Extraction Chains,让 Agent 能与外部世界进行更复杂的交互。
  4. 添加记忆: 最后,学习加入对话记忆和 RAG,让你的 Agent 变得更智能、更个性化。

完整实现代码与运行指南

本节提供了“菜谱 Agent”的完整 Python 实现代码,您可以将其保存为 recipe_agent.py 文件并运行。

1. 依赖文件 (requirements.txt)

在运行代码之前,请确保安装了所有必要的库。将以下内容保存到 requirements.txt 文件中:

langchainlangchain-openailangchain-google-genaigoogle-generativeaiduckduckgo-searchbeautifulsoup4faiss-cpupydanticlxml
2. Agent 核心代码 (recipe_agent.py)

代码,可以自己拷贝下来,保存到本地运行:

https://gist.github.com/xiaodizi/fb99dc602a26e7a4ddd9f3a407abd764

3. 运行指南

请按照以下步骤来运行您的“菜谱 Agent”:

第 1 步:设置环境变量

在您的终端中,确保已设置我们之前讨论过的全部 5 个环境变量。每次新开一个终端都需要重新设置,或者您可以将它们添加到您的 shell 配置文件中(如 .zshrc 或 .bash_profile)。

# 聊天模型配置export OPENAI_API_KEY='XXX'export OPENAI_API_BASE='XXX'export OPENAI_CHAT_MODEL_NAME='XXX'# 嵌入模型配置export GOOGLE_API_KEY='XXX'export GOOGLE_EMBEDDING_MODEL_NAME='XXX'

第 2 步:安装依赖库

在包含 requirements.txt 和 recipe_agent.py 的目录下,运行以下命令来安装所有必需的 Python 库:

pip install -r requirements.txt

第 3 步:运行 Agent

安装完成后,运行 Python 脚本来启动 Agent:

python recipe_agent.py

第 4 步:与 Agent 交互

脚本运行后,您会看到欢迎信息。您可以开始与它对话了:

  • 提问菜谱:直接输入菜名,例如 如何做可乐鸡翅
  • 记录偏好:使用 偏好: 开头来告诉 Agent 您的口味,例如 偏好: 我不吃香菜
  • 退出程序:输入 退出

代码中的 verbose=True 设置会打印出 Agent 详细的思考和行动过程,便于您观察和理解它的工作原理。