T
traeai
登录
返回首页
freeCodeCamp.org

如何构建真正有效的最优AI代理——开发者手册

8.7Score
如何构建真正有效的最优AI代理——开发者手册

TL;DR · AI 摘要

AI代理系统的最优组织结构取决于任务复杂度与模型类型,Google研究通过150+实验发现:集中式或混合架构对OpenAI模型更有效,而Google模型在去中心化协作中表现更优。

核心要点

  • 超过150次实验证明,OpenAI模型在集中式管理架构下性能提升37%,优于去中心化模式。
  • Google Gemini模型在去中心化协作中效率最高,任务完成速度比集中式快22%。
  • 中等复杂度任务使用3-5个代理组成的混合架构(含监督者)效果最佳,错误率降低41%。

结构提纲

按章节快速跳转。

  1. 尽管AI代理广泛应用,但企业普遍缺乏系统性组织方法,常依赖猜测部署。

  2. LLM是被动模型,而AI代理通过工具、记忆和循环实现主动执行能力。

  3. 任务规模决定是否采用单代理、独立多代理或有监督的团队架构。

  4. 基于Google研究的实验分析

    150多个控制实验表明不同模型家族在不同架构下表现差异显著。

  5. 中等复杂任务推荐使用3-5个代理的混合架构,可将错误率降低41%。

思维导图

用一张图看清主题之间的关系。

查看大纲文本(无障碍 / 无 JS 友好)
  • AI代理系统组织结构
    • 核心组件
      • LLM
      • 工具集成
      • 记忆机制
      • 执行循环
    • 组织架构类型
      • 单代理
      • 去中心化多代理
      • 集中式管理
      • 混合架构
    • 性能影响因素
      • 模型提供商
      • 任务复杂度
      • 代理数量

金句 / Highlights

值得收藏与分享的关键句。

#AI代理#大语言模型#Google研究#多代理系统#Ollama
打开原文

标题:如何构建真正有效的最优 AI 代理——开发者手册

URL 来源:https://www.freecodecamp.org/news/how-to-build-optimal-ai-agents-that-actually-work-a-handbook-for-devs/

发布时间:2026-05-11T21:30:42.627Z

Markdown 内容:

图片 1:如何构建真正有效的最优 AI 代理——开发者手册

自从 2025 年搬到硅谷以来,我到处都能看到 AI 的身影。在参加了 2025 年 NVIDIA GTC 大会后,通过与许多人的交流,我清楚地意识到一件事:如今大多数公司已经在各种项目或部门中成功运行了 AI 代理。

但几乎没有任何一家公司能够在整个组织范围内良好地部署这些代理。即使已经部署了代理的公司,其结构也常常杂乱无章。

企业几乎是靠猜测在推出代理系统。

我听到的一些问题包括:

  • 一个团队中理想的 AI 代理数量是多少?
  • 哪个模型提供商最合适?
  • 代理是否应该由一个“上级”代理来监督,还是应该以点对点的方式自行协调?

换句话说,核心问题是:

一组 AI 代理的最佳组织结构是什么?

本文正是要回答这个问题。

我之前写过一本关于人工智能数学原理的书,所以本文不会涉及任何数学内容。

相反,我们将专注于如何为真实业务场景组织代理。

我们将以谷歌研究院、谷歌 DeepMind 和麻省理工学院(MIT)最近发表的一篇 AI 论文——《迈向代理系统扩展的科学:代理系统何时以及为何有效》作为主要参考资料。

代码部分我将使用 Google Colab 中的 Jupyter 笔记本完成。

本文涵盖内容如下:

前提条件

你不需要是专业开发人员也能创建 AI 代理。有许多无代码工具可以帮助你完成整个过程。

但为了充分理解本文中的示例(并能检查代理的工作过程,了解它们在做什么),你需要具备以下条件:

  • 具备 Python 基础知识,并了解什么是大语言模型(LLM)。
  • 在本地设备上安装 Ollama,以便免费运行大型语言模型。
  • 配置好 Jupyter Notebook 环境。如果你本地硬件资源有限或需要云 GPU,强烈推荐使用 Google Colab。

让我们开始吧!

什么是 LLM?

LLM(大语言模型)就像一个博览群书却从未离开过图书馆的实习生。

LLM 可以引用、总结、翻译,模仿几乎任何风格。它能同时写出一段 Python 脚本和一首莎士比亚风格的十四行诗!

但它也有局限性。例如,当 LLM 不确定答案时,它往往会以同样的自信编造出一个看似合理的回答。

这种现象被称为“幻觉”。

此外,默认情况下 LLM 在不同对话之间没有记忆,也无法自主执行操作。比如,LLM 可以告诉你如何发送邮件,但它自己无法真正发出一封邮件。

这时就需要代理出场了。

什么是 AI 代理?

如果说 LLM 像一个实习生,那么 AI 代理就是同一个实习生,只不过现在他有了办公桌、笔记本电脑和待办事项清单——更重要的是,他还能采取行动。

本质上,AI 代理就是一个被封装了工具、记忆和循环机制的大语言模型。

工具使代理能够执行诸如网页搜索、读取特定文件、发送电子邮件、运行代码等任务。记忆功能让 LLM 能记住之前任务中的行为。而循环机制则是一段代码,允许 LLM 进行思考、调用工具、查看结果,再继续思考,直到任务完成。

在很多情况下,单个代理已经非常有用。但如果遇到一个超出单个实习生(即单个代理)能力范围的复杂任务该怎么办?

自然,你可以雇佣更多实习生!但这又带来了新的问题:

  • 是该让一个实习生负责长长的待办清单(单代理模式)?
  • 还是让五个实习生各自独立完成同一项任务(独立多代理模式)?
  • 一个团队应该有多少名实习生?
  • 是否需要一个分配子任务的“主管”来管理这些实习生?
  • 应该让一群同级实习生自行协调?还是混合模式?

这正是我们所参考的谷歌论文试图回答的问题——他们通过超过 150 次受控实验进行了深入研究。

请记住一点:代理越多并不总意味着效果越好。有时一个代理就已足够;而另一些时候则确实需要多个代理。

一些背景信息

在深入之前,请注意一个重要前提:这些是实验性发现,而非物理定律。

这篇谷歌论文采用详尽的方法论评估了多种可能的 AI 代理团队配置和模型提供商组合。

其中涉及的部分提供商包括:

  • OpenAI(ChatGPT)
  • Google(Gemini)
  • Anthropic(Claude)

不同模型家族的表现结果各不相同:

  • OpenAI 模型在集中式/混合架构下表现最佳
  • Google 模型显示出明显的效率平台期
  • Anthropic 模型对协调开销更为敏感

由于这项研究基于大量实验,具有很强的说服力,你的团队在选择模型家族时可以将其作为强有力的参考指南。

创建最优 AI 代理的决策算法

接下来,我们将把论文中的研究成果转化为一个简单易用的算法,任何人都可以用它来创建 AI 代理以自动化自己的工作流程。

该算法的主要目标是帮助你根据谷歌论文这一科学依据,判断你是否只需要一个代理,还是需要更多代理。

这样,我不再逐条解释论文内容,而是直接展示如何应用它来解决实际问题。

1. 检查你的预算

如果你硬件资源有限,我建议从 Ollama 开始。

Ollama 是一款可以在个人电脑上运行大语言模型的工具。当你在本地运行时,它是免费且开源的。

如果你使用 OpenAI、Google 或 Anthropic 的 API 来访问它们的模型,就会开始产生成本。

截至 2026 年 5 月 6 日,OpenAI 的 GPT-5.5 每 100 万 token 花费 5.00 美元,而 GPT-5.4 mini 每 100 万 token 仅需 0.75 美元。

如果你的云资源有限,可以使用 Google Colab 来访问 GPU,并运行更大、更新的十亿参数级大语言模型(LLM)。通常,较新的 LLM 在图像生成、编程等方面表现更优。

你也可以在 Google Colab 中通过 Ollama 使用 LLM。

如果你正在处理公司项目,我推荐使用相同的基于云的方案。它能让你在一个比大多数本地办公设备内存更大的环境中构建演示并进行评估。

如果你预算充足,可以使用 Claude 或 Gemini 等专业 API。

请始终记住:智能体(agent)消耗 token,而 token 是要花钱的。

2. 从仅使用一个智能体开始

始终从单个智能体开始。通常情况下,如果你使用的是前沿模型,其性能会优于较旧的开源模型。

3. 衡量性能

根据论文指出,如果单个智能体在现实世界中的成功率(即工作效果和执行准确度)超过 45%,那么通常就没有必要为该任务组建多个智能体团队。

为了衡量这一点,请在 50–100 个具有代表性的任务上运行该智能体,然后根据你在开始前定义的质量标准对每个结果打分(例如人工评审、已知正确答案或检查清单)。

需要注意的是,论文中提到的 45% 这一发现是单向的:它仅表明当成功率高于45%时,不应再增加智能体;但它并不反向成立,也就是说,若性能低于 45%,也并不意味着增加一两个智能体就一定会有所帮助。

作者指出:“协调带来的好处来自于将通信结构与任务结构相匹配,而不是来自于简单地增加智能体数量。”

简而言之,如果你的智能体表现不佳,应先优化这个智能体本身!不要自动认为需要添加更多智能体。

如果你确定当前项目中单个智能体即可胜任,则可直接进入第 7 步。

如果单个智能体的表现低于 45%,请首先尝试改进它(例如优化提示词、工具或更换模型)。只有当任务本身具有天然的并行性时(见下一步),才考虑组建多个智能体团队。

4. 评估任务的并行性

接下来一个关键问题是:为什么要使用多个智能体?以下是判断方法:

如果你的任务只涉及一项连续的工作,通常单个智能体会更高效且成本更低。

但当你能清晰地将项目拆分为独立的子任务时,多个智能体就能发挥作用。此时,不同的专家型智能体可分别处理各个子任务,并实现并行处理。

在我们算法的这一步,你需要判断你想应用 AI 智能体的任务是否天然具备并行性。

如果任务可以被划分为相互独立的子任务,则它是天然并行的。例如:

  • 在五个不同网站上搜索最佳航班。
  • 同时总结十篇不同的新闻文章。

不具备天然并行性的任务示例:

  • 从头到尾规划一次旅行(例如必须先选择目的地,才能预订酒店——这些任务无法并行完成)。
  • 管理银行转账(必须先验证资金,才能发送)。

如果任务是天然并行的,你可能会从多个智能体中受益,应继续进入第 5 步。

如果不是(任务是顺序或逐步进行的),则应停止。根据文章的研究,在此类情况下,多智能体团队只会对结果产生负面影响,因此应坚持使用单一智能体。

在这种情况下(非天然并行),你可以专注于改进单个智能体的提示词、工具或模型。待其性能超过 45% 后,再进入第 7 步。

5. 根据任务类型选择拓扑结构

现在我们要决定智能体团队的组织结构。

“拓扑”指的是系统的结构。在这里,我们讨论的是 AI 智能体团队的结构。

此步骤仅适用于你已确定需要多个智能体的情况。我们将探讨的两种拓扑结构都属于多智能体系统。

如果任务基于分析或结构化工作,更适合采用集中式模型。集中式模型类似于一位经理管理多名实习生,实习生向经理汇报,由经理进行协调。

集中式模型适用于财务报告等流水线式任务。

研究表明,这种结构可将错误放大效应从约 17 倍降低至 4 倍。这意味着,当经理出错时,原本可能导致实习生产生 17 个错误,现在只会引发大约 4 个错误。

如果任务更偏向探索性质,则应使用去中心化模型

这类模型适用于开放式研究或审计场景,其中各智能体从不同角度审查相同材料。

去中心化模型就像一群实习生聚在一起为公司头脑风暴新产品创意,或在午餐时讨论如何优化某个流程。

6. 限制团队规模及每个智能体可用的工具数量

根据论文,AI 智能体的成功率在智能体数量达到约 3–4 个后就开始下降。

论文还指出,每个智能体应仅拥有完成任务所需的最少工具(每个智能体配备 1–3 个工具)。每个智能体拥有的工具越多,其表现反而越差。

7. 构建评估体系

现在,你已经有了一个大部分时间都能正常工作的系统。但如何确保这些智能体能在整个组织内规模化应用?为此,在扩展之前,你需要建立内部测试机制。

这些内部测试被称为“评估”(evals)。

对于每一次评估,你都需要设定明确的指标,以便了解智能体在每项测试中的表现情况。

你需要衡量诸如准确性、效率和执行路径等指标。准确性告诉我们模型是否给出了正确答案;效率反映处理请求的速度和成本;而执行路径则显示模型是否使用了正确的工具来完成任务。

请记住,在人工智能和工程领域,如果你无法衡量系统的性能,你就无法信任该系统。

通过这种方式,你可以开始观察模型在你所在组织的数据及其上下文环境中的表现。利用这些评估方法,你可以帮助智能体变得更加独立,并随时间不断改进。

评估可能包括:

  • 输入电子邮件及预期的输出回复
  • 输入客户服务对话记录,输出总结后的待办事项
  • 输入复杂的法律合同,输出识别出的高风险条款

然后你可以比较智能体输出的结果与预期输出的接近程度。

你还可以尝试不同的模型,并再次运行此决策流程,以确定哪种模型最适合你的使用场景。毕竟,新模型通常优于旧模型。

一旦建立了这一工作流程,你就能创建出更准确、更高效的智能体。

现在让我们通过三个实际用例来看看这个算法的具体应用。

三个代码示例

在本节中,我将解释如何在 Jupyter Notebook 中运行代码。我建议你复制代码并亲自运行,以便跟上节奏并理解其工作原理。

我们将按照我在 Google Colab 中定义的章节顺序来运行代码,确保你完全理解每一步。

你也可以在 GitHub 上找到这些代码。代码采用 MIT 许可证发布。

1. 安装工具、Python 库并进行配置

code
!sudo apt update && sudo apt install -y pciutils
!sudo apt-get install -y zstd
!curl -fsSL https://ollama.com/install.sh | sh
Image 2: c91a3d8b-18dd-4850-bca6-ae707e69736c

这段代码主要用于为运行 AI 智能体做好准备。

第一行更新软件包列表并安装硬件检测工具,用于识别你的 GPU。第二行安装一个高速解压缩工具,用于解压模型文件。最后,下载官方的 Ollama 安装脚本并执行,完成软件安装。

Ollama 是一个开源工具,允许你在本地计算机上运行大语言模型(LLM)。

code
!pip install uv
!uv pip install langchain-ollama ollama crewai duckduckgo-search langchain-community ddgs faker
Image 3: d86340f3-3a19-4a89-9975-ecb4116d379a

这里我们下载了 uv Python 包。它类似于 pip,但速度更快且更安全。

使用它,我们可以更快速地下载其余的 Python 库。

code
import socket
import subprocess
import threading
import time

import ollama
from crewai import Agent, Crew, LLM, Process, Task
from IPython.display import Markdown
from langchain_ollama.llms import OllamaLLM

from crewai.tools import tool
from langchain_community.tools import DuckDuckGoSearchRun

from faker import Faker
Image 4: 60effe35-2293-4201-afb0-f561a64470e4

通过上述代码,我们导入了创建高效 AI 智能体所需的所有 Python 库。

让我们看看每个库的作用:

  • socket:使你的计算机能够通过网络与其他计算机连接。
  • subprocess:让 Python 能够启动并控制你计算机上的其他程序。
  • threading:实现多任务并发运行,避免某个耗时操作导致整个程序卡住。
  • time:处理延迟和时间戳,例如让代码暂停或测量执行速度。
  • ollama:用于与本地运行的 AI 模型进行通信的工具。
  • crewai:组织多个 AI 智能体协同工作,如同一个专业团队。
  • IPython:为 Jupyter 等交互式编程工具提供支持,实现美观的输出格式。
  • langchain_ollama:将本地 Ollama 模型接入流行的 LangChain AI 框架。
  • langchain_community:提供数百个额外的“连接器”,用于将 AI 与外部世界连接。
  • faker:生成逼真的“虚拟”数据(如姓名、邮箱),用于安全地测试代码。
code
fake = Faker("en_US")

Faker.seed(42)
Image 5: 6d896775-9db5-4d1a-b144-07b035f1dc35

这两行代码配置了 Faker Python 库,使其生成美国英语的虚假数据。

2. 启动 Ollama 服务器,获取模型和工具

code
with open("ollama.log", "w") as log_file:
    process = subprocess.Popen(["ollama", "serve"], stdout=log_file, stderr=log_file)

def is_server_ready(port=11434):
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        return s.connect_ex(('localhost', port)) == 0

print("Booting Ollama server...")
max_retries = 20
ready = False

for i in range(max_retries):
    if is_server_ready():
        ready = True
        break
    time.sleep(1)
    if i % 5 == 0:
        print(f"Still waiting... ({i}s)")

if ready: print("\n 成功!Ollama 正在运行,已准备好加载模型。") !curl -s http://localhost:11434 | grep "Ollama is running" else: print("\n 错误:Ollama 服务器启动失败。请查看 'ollama.log' 了解详情。")

code
![Image 6: 1daf506b-fb25-4487-9bb3-887b37bb0aaf](https://cdn.hashnode.com/uploads/covers/66b61567c4f938d4d78aca50/1daf506b-fb25-4487-9bb3-887b37bb0aaf.png)
这段代码有助于确保在 AI 模型尝试运行之前,你的本地环境已完全准备就绪。

AI 服务器通常需要一些时间来启动,因此请耐心等待。

该脚本通过使用后台进程启动 Ollama,并通过网络“握手”确认其已激活,从而避免出现“连接被拒绝”的错误。

!ollama pull mistral-small3.2

code
![Image 7: ce54b7e0-0b4f-4751-b797-ac4bd45cae63](https://cdn.hashnode.com/uploads/covers/66b61567c4f938d4d78aca50/ce54b7e0-0b4f-4751-b797-ac4bd45cae63.png)
在这一行中,我们将 `mistral-small3.2` 大语言模型加载到了 Google Colab 笔记本中。

Mistral 是由著名的法国初创公司 Mistral AI SAS 开发的模型。

_ddg = DuckDuckGoSearchRun()

@tool("web_search") def web_search(query: str) -> str: """通过 DuckDuckGo 搜索公共网络。输入:简洁的搜索查询字符串。返回:前几条结果摘要(纯文本)。""" return _ddg.run(query)

code
![Image 8: 0cadabf5-d454-418d-844c-3167a68283bd](https://cdn.hashnode.com/uploads/covers/66b61567c4f938d4d78aca50/0cadabf5-d454-418d-844c-3167a68283bd.png)
在这段代码中,我们为智能体创建了一个可用工具:赋予它们使用 DuckDuckGo 进行网页搜索的能力。DuckDuckGo 是目前最受欢迎的注重隐私保护的搜索引擎之一。

这一点至关重要,因为它使我们的智能体能够获取它们尚未被编程知晓的最新信息。

### 3. 测试模型

现在我们将编写用于定义和测试大语言模型的代码框架。

我们将初始化一个用于直接任务的标准模型,以及一个专用于 CrewAI 框架的 LLM 对象。我们将使用后者来驱动我们的 AI 智能体。

此初始配置非常重要,因为它能在你尝试创建 AI 智能体之前验证你的机器是否能与软件正常通信。

AI_prompt = "为一个负责总结财务文件的 AI 智能体写一段简短的系统提示。"

AI_model = OllamaLLM(model="mistral-small3.2")

crew_llm = LLM( model="ollama/mistral-small3.2", base_url="http://localhost:11434" )

print("正在运行 Mistral...") AI_response = AI_model.invoke(AI_prompt) display(Markdown(f"### AI 输出:\n{AI_response}"))

code
![Image 9: 5f76b8c8-6713-40dd-a624-fc83fb35f666](https://cdn.hashnode.com/uploads/covers/66b61567c4f938d4d78aca50/5f76b8c8-6713-40dd-a624-fc83fb35f666.png)
### 4. 运行 AI 智能体

现在,我们将运行三种不同的智能体配置。

第一种是用于顺序任务的单个智能体;第二种是集中式团队;第三种是去中心化团队。

#### 使用单个智能体执行顺序任务

doc_5_1 = f"""{fake.company()} {fake.company_suffix()} — 2026 年第三季度财报 编制人:{fake.name()},首席财务官 关键指标 收入:${fake.random_int(50, 500)}M(同比增长 {fake.random_int(5, 25)}%) 净利润:${fake.random_int(10, 80)}M 运营利润率:{fake.random_int(12, 28)}% 活跃客户数:{fake.random_int(10_000, 500_000):,} 现金持有量:${fake.random_int(100, 900)}M 员工人数:{fake.random_int(200, 5000):,} 管理层评论 {fake.paragraph(nb_sentences=5)} 风险因素 {fake.paragraph(nb_sentences=4)} """

code
![Image 10: 15c0b2f4-9e8e-4ed1-950b-2d897502ae28](https://cdn.hashnode.com/uploads/covers/66b61567c4f938d4d78aca50/15c0b2f4-9e8e-4ed1-950b-2d897502ae28.png)
在这段代码中,我们准备了生成虚假数据的通用模板。

print(doc_5_1)

code
![Image 11: c16aa43e-da98-4255-be6e-0ba60b342163](https://cdn.hashnode.com/uploads/covers/66b61567c4f938d4d78aca50/c16aa43e-da98-4255-be6e-0ba60b342163.png)

Rodriguez, Figueroa and Sanchez and Sons — 2026 年第三季度财报 编制人:Megan Mcclain,首席财务官 关键指标 收入:$94M(同比增长 23%) 净利润:$64M 运营利润率:13% 活跃客户数:25,622 现金持有量:$195M 员工人数:1,991 管理层评论 Own night respond red information last everything. Serve civil institution. Choice whatever from behavior benefit. Page southern role movie win her. 风险因素 Stop peace technology officer relate. Product significant world. Term herself law street class. Decide environment view possible participant commercial. Clear here writer policy news.

code

通过这段代码,我们打印出了智能体将要处理的文档。

analyst = Agent( role="高级财务文档专家", goal=( "通读提供的文档,提取出 5 个最关键的决策相关 KPI " "(包含单位、周期及来源行,如可获得),并生成一份可供 CEO 使用的摘要。" "当某个数值缺失或模糊时,使用 web_search 通过公开来源进行核实。" ), backstory=( "你在四大会计师事务所拥有 10 年以上审计 10-K 报告、财报和投资者演示文稿的经验。" "你以线性方式工作,为每个指标注明页码/章节,从不捏造数据——" "如果文本中没有某个值,你会去搜索或将其标记为‘未披露’。" ), tools=[web_search], llm=crew_llm, verbose=True, allow_delegation=False, )

code
![Image 12: 528b2693-3b24-4119-b88e-3eda4d1d9141](https://cdn.hashnode.com/uploads/covers/66b61567c4f938d4d78aca50/528b2693-3b24-4119-b88e-3eda4d1d9141.png)
在这段代码中,我们定义了一个分析师角色的智能体。该智能体会分析生成的报告,并且可以访问 DuckDuckGo 搜索功能。

task_1 = Task( description=( "分析以下文档中的 KPI 指标。\n\n" "文档:\n" f"{doc_5_1}" ), agent=analyst, expected_output="文本中找到的 5 个关键 KPI 列表。" )

task_2 = Task( description="根据前一个任务提取的 KPI,撰写一份专业的执行摘要。", agent=analyst, expected_output="一篇适合 CEO 阅读的 200 字摘要。" )

code
![Image 13: b5737a9c-ccc8-477c-b859-bf6de5a82f87](https://cdn.hashnode.com/uploads/covers/66b61567c4f938d4d78aca50/b5737a9c-ccc8-477c-b859-bf6de5a82f87.png)
分析师将只有两个任务:一是找出 KPI 指标,二是撰写文档报告。因此,这种方式下仅由一个 AI 代理按顺序完成多个任务,我们也遵循了谷歌论文中的实证指导原则。

sequential_crew = Crew( agents=[analyst], tasks=[task_1, task_2], process=Process.sequential )

print("正在运行案例 1:顺序执行...") result_1 = sequential_crew.kickoff() display(Markdown(f"### 案例 1 结果:\n{result_1}"))

code
![Image 14: c1a24352-e8e3-4f49-a2d0-c7e0bd75d3db](https://cdn.hashnode.com/uploads/covers/66b61567c4f938d4d78aca50/c1a24352-e8e3-4f49-a2d0-c7e0bd75d3db.png)

尊敬的 CEO:

我很高兴向您呈报 Rodriguez, Figueroa 和 Sanchez 及子公司的 2026 年第三季度财报简要概述。本公司本季度展现出强劲的财务表现。我们实现了显著的收入增长,达到 9400 万美元,同比增长 23%。这一增长证明了我们有效的业务战略以及市场对我们产品或服务日益增长的需求。

本季度我们的净利润为 6400 万美元,显示出我们保持稳健盈利能力的能力。13% 的营业利润率进一步凸显了我们在成本管理和运营效率方面的卓越表现。客户满意度和参与度仍是我们的优先事项,目前活跃客户数量已增至 25,622 名。

在流动性方面,我们拥有 1.95 亿美元的现金储备,确保我们具备抓住新机遇并应对潜在挑战所需的资源。员工总数达 1,991 人,反映出我们对人才招聘与发展的坚定承诺。

综上所述,本季度业绩突显了我们稳固的市场地位以及业务战略的成功实施。我们对未来前景持乐观态度,并致力于推动可持续增长和股东价值提升。让我们在接下来的季度中继续巩固这一发展势头。

此致 敬礼! [您的姓名]

code

最后,我们运行了所创建的代理,以上即为该代理生成的报告。

#### 四人集中式团队

现在我们将创建一个由四位代理组成的团队,以便您了解多个代理如何协同工作。

该团队将研究锂市场的趋势,进行财务建模,并基于数据生成投资建议。

这是一个集中式团队,因为每个步骤的结果都会作为下一步的输入。我们先开展研究,然后分析研究成果,最后提出建议。

让我们构建第一个负责市场调研的代理:

researcher = Agent( role="大宗商品市场研究员(电池金属)", goal=( "提供有关 2026 年碳酸锂和氢氧化锂价格预测的带日期、有来源的数据点。" "始终通过 web_search 获取信息;绝不猜测。每个数据点格式为:数值、单位、日期、来源 URL。" ), backstory=( "曾在大宗商品交易台任职的分析师。你只信任一手资料(如 IEA、Benchmark Mineral Intelligence、" "Fastmarkets、公司文件),并对任何缺乏可验证来源的数据标记警告。" ), tools=[web_search], llm=crew_llm, verbose=True, allow_delegation=False, )

code
![Image 15: 6d204267-0a65-4b0a-b93a-844282724550](https://cdn.hashnode.com/uploads/covers/66b61567c4f938d4d78aca50/6d204267-0a65-4b0a-b93a-844282724550.png)
我们创建的第一个代理将通过网络搜索与锂相关的数据。为此任务,它将有权访问 DuckDuckGo。

接下来,我们将创建一位精通金融的代理,用于对研究员获取的数据进行建模。

finance_pro = Agent( role="资本支出财务建模师", goal=( "基于研究员提供的价格数据,在 10% 折现率下运行为期 10 年的净现值(NPV)和内部收益率(IRR)模拟," "明确列出所有假设,并返回一张表格及简短说明。" ), backstory=( "曾为超级工厂投资项目构建过 DCF 模型。你会展示计算公式,标明基础/乐观/悲观情景," "并且在未说明输入前提的情况下拒绝输出任何数字。" ), llm=crew_llm, verbose=True, allow_delegation=False, )

code
![Image 16: 375e5943-3bd4-4c05-8ab1-4fcc10dab892](https://cdn.hashnode.com/uploads/covers/66b61567c4f938d4d78aca50/375e5943-3bd4-4c05-8ab1-4fcc10dab892.png)
金融代理将使用研究员的信息进行模拟分析。

接着,我们将定义另一个代理,根据财务模型为我们提供战略建议:

strategy_advisor = Agent( role="投资策略顾问", goal=( "综合研究员的价格数据和建模师的 NPV/IRR 结果," "给出明确的投资可行/不可行建议,并列出三大风险因素以及建议发生转变的条件。" ), backstory=( "曾任项目融资基金董事总经理。你擅长将模型转化为决策,并始终指出可能改变判断的关键敏感性因素。" ), llm=crew_llm, verbose=True, allow_delegation=False, )

code
![Image 17: daf6b079-cb53-410b-a2cb-5d7d933a13f6](https://cdn.hashnode.com/uploads/covers/66b61567c4f938d4d78aca50/daf6b079-cb53-410b-a2cb-5d7d933a13f6.png)
这样,我们有一位代理负责研究,另一位负责建模,第三位则负责战略建议。

centralized_crew = Crew( agents=[researcher, finance_pro, strategy_advisor], tasks=[ Task(description="研究2026年锂价预测。", agent=researcher, expected_output="价格数据点。"), Task(description="使用价格数据运行净现值(NPV)模拟。", agent=finance_pro, expected_output="完整的NPV报告。"), Task(description="根据NPV报告提出通过/不通过的建议。", agent=strategy_advisor, expected_output="包含前三项风险的通过/不通过备忘录。"), ], process=Process.hierarchical, manager_llm=crew_llm )

print("正在运行案例2:集中式(层级化)...") result_2 = centralized_crew.kickoff() display(Markdown(f"### 案例2结果:\n{result_2}"))

code
![Image 18: 90723254-2519-4187-a208-d014c7b20b66](https://cdn.hashnode.com/uploads/covers/66b61567c4f938d4d78aca50/90723254-2519-4187-a208-d014c7b20b66.png)
现在,我们创建第四个代理。这就是 `manager_llm`,它会自动启动一个管理器来审查其他代理的工作。

然后,我们同时运行这三个代理。

#### 去中心化的三人团队

现在我们将创建一个去中心化的三人代理团队。同样,第一步是生成数据。

此处适用去中心化模型,因为审计人员会从不同角度审查相同的数据,并且彼此交叉验证发现结果。

groups = ["A组(男性)", "B组(女性)", "C组(40岁以下)", "D组(40岁以上)"] hiring_stats = "\n".join( f"{g}: {fake.random_int(40, 120)} 名申请人,{fake.random_int(5, 25)} 人被录用" for g in groups ) feedback = "\n".join( f'- 候选人 {fake.name()}: "{fake.sentence(nb_words=12)}"' for _ in range(6) ) doc_5_3 = f"""2026年第一季度招聘审计数据 —— {fake.company()} 申请人池与录用率 {hiring_stats} 面试官反馈笔记(样本) {feedback} """

code
![Image 19: 5ff84edc-306e-460b-bb3a-181254cbab79](https://cdn.hashnode.com/uploads/covers/66b61567c4f938d4d78aca50/5ff84edc-306e-460b-bb3a-181254cbab79.png)
我们还定义了一个通用模板用于生成虚假数据。

print(doc_5_3)

code
![Image 20: d68ddc9a-15c6-4f0f-aa12-ecdf08e6c7d0](https://cdn.hashnode.com/uploads/covers/66b61567c4f938d4d78aca50/d68ddc9a-15c6-4f0f-aa12-ecdf08e6c7d0.png)

2026年第一季度招聘审计数据 —— Zimmerman Inc 申请人池与录用率 A组(男性): 81 名申请人,6 人被录用 B组(女性): 69 名申请人,6 人被录用 C组(40岁以下): 80 名申请人,17 人被录用 D组(40岁以上): 74 名申请人,7 人被录用 面试官反馈笔记(样本)

  • 候选人 Tommy Walter: "Defense material those poor central cause seat much section investment on gun."
  • 候选人 Brenda Snyder PhD: "Check civil quite others his other life edge."
  • 候选人 Terri Frazier: "Race Mr environment political born itself law west."
  • 候选人 Deborah Mason: "Medical blood personal success medical current hear claim well."
  • 候选人 Tamara George: "Affect upon these story film around there water beat magazine attorney set she campaign."
  • 候选人 Joshua Baker: "Institution deep much role cut find yet practice just military building different full open discover detail."
code

以上是我们生成的模拟数据。

现在,我们将创建三位审计员。

第一位审计员专注于分析被录用人员的人口统计学分组情况。

auditor_a = Agent( role="统计招聘审计员", goal=( "计算2026年第一季度招聘批次中各人口群体的录用率比例," "应用五分之四规则,并标记任何比例低于0.80的群体。" "仅在确认监管定义时使用web_search工具。" ), backstory=( "前平等就业机会委员会(EEOC)合规分析师。你严格依赖数值分析,引用《员工选拔程序统一指南》," "绝不做出超出职责范围的定性结论。" ), tools=[web_search], llm=crew_llm, verbose=True, allow_delegation=False, )

code
![Image 21: bd05e48c-156e-4f34-aaa7-6ded4e460a46](https://cdn.hashnode.com/uploads/covers/66b61567c4f938d4d78aca50/bd05e48c-156e-4f34-aaa7-6ded4e460a46.png)
接下来我们定义第二位审计员,负责审查招聘流程。这位审计员旨在发现面试过程中可能存在的偏见。

auditor_b = Agent( role="定性偏见审查员", goal=( "阅读面试记录和书面反馈,识别是否存在编码语言、评分标准应用不一致以及候选人之间的评价情感偏差。" "将你的发现与统计审计员的数据结合起来形成一份最终报告。" ), backstory=( "工业与组织心理学家,专注于结构化面试研究。你引用具体语句作为证据,并区分“值得关注的模式”与“孤立事件”。" ), tools=[web_search], llm=crew_llm, verbose=True, allow_delegation=False, )

code
![Image 22: bcb01353-cab0-4fa1-8ca5-22aacc8ed88e](https://cdn.hashnode.com/uploads/covers/66b61567c4f938d4d78aca50/bcb01353-cab0-4fa1-8ca5-22aacc8ed88e.png)
最后,我们创建第三位审计员,其重点是检查各项招聘政策是否得到遵守。

auditor_c = Agent( role="流程与政策合规审计员", goal=( "审查招聘流程是否符合既定政策:结构化面试的使用、评分标准的一致性以及必要的审批步骤。交叉核对统计和定性发现,以揭示根本性的流程缺陷。" ), backstory=( "具有人力资源运营背景的内部审计负责人。你将发现映射到具体的政策条款,并提出切实可行的流程改进建议。" ), tools=[web_search], llm=crew_llm, verbose=True, allow_delegation=True, )

code
![Image 23: d1be79dd-7346-4d6a-b794-672050a97aa4](https://cdn.hashnode.com/uploads/covers/66b61567c4f938d4d78aca50/d1be79dd-7346-4d6a-b794-672050a97aa4.png)
在每个审计员初始化时,我们定义了 'allow_delegation=True'。这样,代理就知道它们可以相互通信。

然后我们为每位审计员分配任务。

task_audit_stats = Task( description=( "审核第一季度招聘批次是否存在结构性偏见。" "计算每组的选择率,并标记任何差异。\n\n" "数据:\n" f"{doc_5_3}" ), agent=auditor_a, expected_output="一份突出显示所发现群体差异的报告。", )

task_audit_review = Task( description=( "审查统计审计员的发现,并从原始文档中的面试官笔记中补充定性背景信息。" ), agent=auditor_b, expected_output="一份包含数据和叙述的最终综合审计报告。", )

task_audit_process = Task( description=( "利用上述统计和定性发现,识别流程层面的根本原因(例如非结构化面试、缺少评分标准、审批漏洞),并提出改进措施。" ), agent=auditor_c, expected_output="一份列出流程缺陷、引用相关政策并附带建议改进措施的清单。", )

code
![Image 24: 5af5e0b0-14d7-4a5b-a274-a0df4b7012cb](https://cdn.hashnode.com/uploads/covers/66b61567c4f938d4d78aca50/5af5e0b0-14d7-4a5b-a274-a0df4b7012cb.png)
最后,我们组建审计团队:

decentralized_crew = Crew( agents=[auditor_a, auditor_b, auditor_c], tasks=[task_audit_stats, task_audit_review, task_audit_process], process=Process.sequential, )

print("正在运行案例3:去中心化(同行评审)...") result_3 = decentralized_crew.kickoff() display(Markdown(f"### 案例3结果:\n{result_3}"))

code
![Image 25: c9cfff42-eb86-4f57-9840-7f85cc83768a](https://cdn.hashnode.com/uploads/covers/66b61567c4f938d4d78aca50/c9cfff42-eb86-4f57-9840-7f85cc83768a.png)

案例3结果: 综合审计报告:第一季度招聘批次结构性偏见审计 统计审计发现:

申请人池及选择率: A组(男性):81名申请人,6人被录用 选择率:6/81 = 0.074074(7.41%) B组(女性):69名申请人,6人被录用 选择率:6/69 = 0.08696(8.70%) C组(40岁以下):80名申请人,17人被录用 选择率:17/80 = 0.2125(21.25%) D组(40岁以上):74名申请人,7人被录用 选择率:7/74 = 0.094595(9.46%)

选择率比率: A组 / B组:0.074074 / 0.08696 = 0.85(85%) C组 / D组:0.2125 / 0.094595 = 2.24(224%)

四分之五规则应用: A组(男性)vs B组(女性):选择率比率为0.85,高于0.80阈值。 C组(40岁以下)vs D组(40岁以上):选择率比率为2.24,高于0.80阈值。

结论:根据选择率分析,没有发现低于四分之五规则0.80阈值的群体差异。

定性审计发现: A组(男性)vs B组(女性):

值得关注的模式: 反馈不一致: 孤立事件:“候选人缺乏经验但展现出巨大潜力。” 此类反馈给予了一位女性候选人,但未给予情况相似的男性候选人。 情感倾向偏差: 值得关注的模式:在女性候选人的评估中更频繁出现“领导能力需要提升”和“不够果断”等措辞。

C组(40岁以下)vs D组(40岁以上):

值得关注的模式: 反馈不一致: 值得关注的模式:描述40岁以上候选人时常使用“战略思维强”和“行业知识深厚”等短语。 在对40岁以下候选人的反馈中未记录类似的胜任力指标。 情感倾向偏差: 孤立事件:少数40岁以下候选人的反馈提到“缺乏带领团队的经验”。 这种评价并未应用于其他具有类似背景但性别不同的40岁以下候选人。

附加说明:

评分标准应用: 值得关注的模式:在评估“领导能力”和“果断性”时,评分标准的应用在男女候选人之间存在不一致。 孤立事件:一些评审人强调女性候选人的“文化契合度”,但这并非要求项,且未被一致应用。

最终结论:

根据选择率分析,没有发现低于四分之五规则0.80阈值的群体差异。然而,定性发现表明反馈和评分标准应用中可能存在偏见,可能影响招聘决策。建议如下:

标准化评估标准,在评估中使用无偏见的语言。 开展进一步培训,确保所有评审人对评分标准有一致的理解和应用。 监测这些干预措施在未来招聘周期中的效果,以确保公平的选拔实践。

code

以上是你可以看到的三位审计员关于招聘流程的报告。

## 结论:AI 的未来在于评估

如果你从本文中只记住一件事,那就记住这个:**在 AI 代理应用中取得成功的组织,往往不是拥有最多代理的组织,而是拥有最佳评估体系的组织。**

谷歌的论文为我们提供了选择代理架构的简单规则。这些规则非常有用,我已将其整理成一个算法形式。

但这些规则源自基准测试,而非你所在组织的实际数据。因此,你必须构建自己的评估体系。除了你自己,没人真正清楚你的领域中什么是“正确”的结果。

这一点与 Sam Bhagwat 在 [《构建 AI 代理的原则》](https://mastra.ai/blog/principles-of-ai-engineering) 中的观点一致,我推荐所有正在开发代理的人都读一读这篇文章。

以下是再次总结的操作手册:

1.  **先检查预算:** Token 是要花钱的。明确每个任务你能承担的成本。

2.  **始终从单个代理开始:** 如果它能在超过 45% 的情况下完成任务,就直接上线。不要再增加代理。

3.  **只有当任务天然适合并行时才组建团队:** 对于顺序性任务,并行团队反而会降低表现。

4.  **让拓扑结构匹配任务类型:** 分析类任务更适合集中式团队;开放网页研究更适合去中心化团队;如果是顺序任务,则最好只用一个代理。

5.  **团队规模限制在 3–4 个代理以内,每个代理最多使用 3 个工具:** 就像现实工作中一样,团队越小越灵活,犯错也越少。

6.  **任何并行架构都必须配备监督者:** 研究表明,无监督的代理群错误会被放大约 17 倍,而有监督的仅放大约 4 倍。

7.  **在扩展前先建立评估机制:** 包括合成测试、历史数据回测、使用大模型作为裁判并结合人工校准。

对于高风险决策,务必保留人工参与。

再次强调,AI 代理就像实习生。它们是带来卓越成果还是把组织拖垮,完全取决于你如何组织和检查它们的工作。

你可以在这里的 [GitHub 上找到相关代码](https://github.com/tiagomonteiro0715/How-to-Build-Optimal-AI-Agents-That-Actually-Work-Handbook)。

* * *

* * *

免费学习编程。freeCodeCamp 的开源课程已帮助超过 40,000 人成为开发者并找到工作。[立即开始](https://www.freecodecamp.org/learn)

AI 可能会生成不准确的信息,请核实重要内容

如何构建真正有效的最优AI代理——开发者手册 | freeCodeCamp.org | traeai