外观
AI 智能体(Agent)的构建要素
Building blocks of AI Agents
AI 智能体(Agent)的设计初衷,就是让它能够自主推理、规划并采取行动。不过,
要真正发挥作用,智能体的构建还必须遵循一些关键原则。有六个基础构建要素,能让 AI 智能体在实际应用中变得更可靠、更智能、更有用:1. 角色扮演 2. 专注度 3. 工具 4. 协作 5. 护栏机制 6. 记忆
让我们逐一探讨这些概念,理解它们为什么是构建优秀 AI 智能体的根本所在。
1)角色扮演
提升智能体表现最简单的方法之一,就是给它一个清晰、具体的角色设定。

一个通用的 AI 助手可能只会给出含糊的回答。但如果把它设定为「资深合同律师」,它的回答就会带上法律层面的精准性和语境把握。为什么会这样?因为角色设定会塑造智能体的推理和检索过程。角色设定得越具体,输出就越精准、越贴题。
2)专注与任务范围
专注度是减少幻觉、提升准确性的关键。
给智能体分配过多任务或过量数据,非但没有帮助,反而会适得其反。

任务过载会导致混乱、前后不一致、结果不理想。举例来说,一个营销智能体应该专注于信息传达、语气和受众,而不是定价或市场分析。与其让一个智能体包揽一切,更好的做法是使用多个智能体,每个智能体只负责一个具体而狭窄的领域。专业化的智能体表现始终更出色——无一例外。
3)工具
当智能体能够使用恰当的工具时,它们就会变得更聪明。
但工具越多 ≠ 结果越好。

举例来说,一个 AI 科研智能体可以从以下工具中受益:
- 网络搜索工具,用于检索最新发表的论文。
- 摘要模型,用于压缩长篇研究论文。
- 文献管理工具,用于规范格式化参考文献。
但如果加入不必要的工具——比如语音转文字模块或代码执行环境——反而可能让智能体感到困惑,降低效率。
3.1)自定义工具
虽然由 LLM 驱动的智能体擅长推理和生成回答,但它们无法直接访问实时信息、外部系统和专门的计算能力。工具能让智能体做到:
- 联网搜索获取实时数据。
- 从 API 和数据库中检索结构化信息。
- 执行代码以完成计算或数据转换。
- 分析图像、PDF 和文档等超越纯文本的输入内容。
CrewAI 支持多种可以与智能体集成的工具,如下图所示:

不过,有时你可能需要自己搭建自定义工具。在这个示例中,我们将在 CrewAI 中构建一个实时货币转换工具。与其让 LLM 去猜测汇率,我们不如接入一个自定义工具,让它从外部 API 获取实时汇率,并给出一些洞见。接下来,让我们看看如何在 CrewAI 框架中根据自己的需求搭建这样一个工具。首先,确保已经安装了 tools 包:

你还需要从这里获取一个 API 密钥:https://www.exchangerate-api.com/(免费)。然后按照下图所示,把它写入 .env 文件:

完成之后,我们先写一些标准的 import 语句:

接下来,我们用 Pydantic 定义该工具所需的输入字段。

现在,我们通过继承 BaseTool 来定义 CurrencyConverterTool:

每个工具类都应该包含一个 _run 方法,每当智能体需要调用这个工具时,就会执行这个方法。对于我们的场景,实现如下:

在上面这段代码中,我们通过一次 API 请求来获取实时汇率,同时也处理了请求失败或货币代码无效的情况。接下来,我们定义一个用于实时汇率分析的智能体,并为它接入我们的 CurrencyConverterTool,让它在需要时可以直接调用:

我们给 currency_analyst 这个智能体分配一个任务。

最后,我们创建一个 Crew,把智能体分配给这个任务,然后执行它。

打印出响应结果,我们会得到如下输出:

运行结果符合预期!
3.2)通过模型上下文协议(MCP)实现自定义工具
现在,让我们再往前推进一步。
与其把这个工具直接嵌入每一个 Crew,我们不如把它封装成一个可复用的 MCP 工具——通过一个简单的服务器,让它能被多个智能体和多条流程共同调用。
首先,安装所需的依赖包:

我们会继续在 .env 文件中使用 ExchangeRate-API:

接下来,我们编写一个轻量级的 server.py 脚本,用来对外暴露这个货币转换工具。先从标准的 import 语句开始:

然后,我们加载环境变量并初始化服务器:

接下来,我们用 @mcp.tool() 定义工具的具体逻辑:

这个函数接收三个输入——金额、源货币和目标货币,并通过实时汇率 API 返回转换后的结果。
为了让这个工具可以被访问,我们需要运行 MCP 服务器。在脚本末尾加上这段代码:

这会启动服务器,并把 convert_currency 工具暴露在:http://localhost:8081/sse。
现在,任何 CrewAI 智能体都可以通过 MCPServerAdapter 连接到它。接下来,让我们在一个 CrewAI 智能体中调用这个工具。
首先,我们导入所需的 CrewAI 类:从 CrewAI 中导入 Agent、Task 和 Crew,再用 MCPServerAdapter 连接到我们的工具服务器。

接下来,我们连接到 MCP 工具服务器:定义好服务器参数,以连接到正在运行的工具(也就是 server.py)。

现在,我们在一个智能体中使用发现到的这个 MCP 工具:
这个智能体被分配了来自远程服务器的 convert_currency 工具,现在它调用这个工具的方式,就跟调用本地定义的工具一样。

我们给智能体设定一段任务描述:

最后,我们创建 Crew,传入输入参数并运行它:

打印结果,我们会得到如下输出:

4)协作
当各个智能体能够相互协作、交换反馈时,多智能体系统的表现才最出色。
与其让一个智能体包办一切,不如让一组专业化的智能体分工协作,彼此完善对方的输出。

以一个 AI 驱动的金融分析系统为例:
- 一个智能体负责收集数据,
- 另一个负责评估风险,
- 第三个负责制定策略,
- 第四个负责撰写报告
协作能带来更智能、更准确的结果。
最佳实践是通过设计合理的工作流,让智能体之间可以交换见解、共同打磨彼此的输出,从而实现真正的协作。
5)护栏机制
智能体的能力很强,但如果没有约束,它们也可能偏离轨道,可能会
产生幻觉、陷入无限循环,或者做出糟糕的判断。
护栏机制能确保智能体始终不偏离轨道,并维持应有的质量标准。

一些实用的护栏机制包括:
- 限制工具使用:防止智能体过度调用 API 或生成不相关的查询。
- 设置校验节点:确保输出在进入下一步之前,满足预先设定的标准。
- 建立兜底机制:如果某个智能体未能完成任务,可以由另一个智能体或人工审核者介入处理。
举例来说,一个 AI 驱动的法律助手应该避免引用过时的法律条文或做出不实陈述——护栏机制正是为此而存在的。
6)记忆
最后是记忆,它是 AI 智能体最关键的组成部分之一。没有记忆,智能体每次都要从零开始,丢失此前所有交互留下的上下文。有了记忆,智能体就能随着时间不断改进,记住过去的行动,给出更连贯一致的回应。

AI 智能体中的记忆可以分为以下几种类型:
- 短期记忆——仅在执行过程中存在(例如,记住最近的对话历史)。
- 长期记忆——在执行结束后依然保留(例如,跨多次交互记住用户偏好)。
- 实体记忆——存储关于所讨论的关键对象的信息(例如,在 CRM 智能体中跟踪客户详情)。举例来说,在一个 AI 驱动的辅导系统中,记忆能让智能体回忆起过去教过的课程内容,据此给出针对性的反馈,并避免重复讲解。