跳转到主要内容

概述

CrewAI 中的训练功能允许您使用命令行界面(CLI)来训练您的 AI 智能体。通过运行命令 crewai train -n <n_iterations>,您可以指定训练过程的迭代次数。 在训练期间,CrewAI 利用技术结合人类反馈来优化您的智能体的性能。这有助于智能体提高其理解、决策和解决问题的能力。

使用 CLI 训练您的 Crew

要使用训练功能,请按照以下步骤操作
  1. 打开您的终端或命令提示符。
  2. 导航到您的 CrewAI 项目所在的目录。
  3. 运行以下命令
crewai train -n <n_iterations> -f <filename.pkl>
<n_iterations> 替换为您期望的训练迭代次数,并将 <filename> 替换为以 .pkl 结尾的相应文件名。
如果您省略 -f,输出将默认为当前工作目录下的 trained_agents_data.pkl。您可以传递一个绝对路径来控制文件的写入位置。

以编程方式训练您的 Crew

要以编程方式训练您的 Crew,请使用以下步骤
  1. 定义训练的迭代次数。
  2. 为训练过程指定输入参数。
  3. 在 try-except 块中执行训练命令以处理潜在的错误。
代码
n_iterations = 2
inputs = {"topic": "CrewAI Training"}
filename = "your_model.pkl"

try:
    YourCrewName_Crew().crew().train(
      n_iterations=n_iterations,
      inputs=inputs,
      filename=filename
    )

except Exception as e:
    raise Exception(f"An error occurred while training the crew: {e}")

智能体如何使用训练数据

CrewAI 以两种方式使用训练产物:在训练期间融入您的人类反馈,以及在训练后用整合的建议来指导智能体。

训练数据流

在训练运行期间

  • 在每次迭代中,系统会为每个智能体记录
    • initial_output:智能体的第一个答案
    • human_feedback:您在被提示时提供的内联反馈
    • improved_output:智能体在收到反馈后的后续答案
  • 这些数据存储在一个名为 training_data.pkl 的工作文件中,以智能体的内部 ID 和迭代次数为键。
  • 在训练进行时,智能体会自动将您之前的人类反馈附加到其提示中,以便在训练会话的后续尝试中强制执行这些指令。训练是交互式的:任务设置 human_input = true,因此在非交互式环境中运行将会因等待用户输入而阻塞。

训练完成后

  • train(...) 完成时,CrewAI 会评估每个智能体收集到的训练数据,并生成一个包含以下内容的整合结果
    • suggestions:从您的反馈和初始/改进输出之间的差异中提炼出的清晰、可操作的指令
    • quality:一个 0–10 的分数,用于衡量改进程度
    • final_summary:为未来任务准备的一套分步行动项
  • 这些整合结果会保存到您传递给 train(...) 的文件名中(通过 CLI 默认为 trained_agents_data.pkl)。条目以智能体的 role(角色)为键,以便它们可以在不同会话中应用。
  • 在正常的(非训练)执行期间,每个智能体会自动加载其整合的 suggestions 并将其作为强制性指令附加到任务提示中。这使您无需更改智能体定义即可获得持续的改进。

文件摘要

  • training_data.pkl (临时的,每个会话一个)
    • 结构:agent_id -> { iteration_number: { initial_output, human_feedback, improved_output } }
    • 目的:在训练期间捕获原始数据和人类反馈
    • 位置:保存在当前工作目录(CWD)中
  • trained_agents_data.pkl (或您的自定义文件名)
    • 结构:agent_role -> { suggestions: string[], quality: number, final_summary: string }
    • 目的:为未来的运行持久化整合的指导意见
    • 位置:默认写入当前工作目录;使用 -f 设置自定义(包括绝对)路径

小型语言模型的注意事项

当使用较小的语言模型(≤7B 参数)进行训练数据评估时,请注意它们在生成结构化输出和遵循复杂指令方面可能会面临挑战。

小型模型在训练评估中的局限性

JSON 输出准确性

较小的模型通常难以生成结构化训练评估所需的有效 JSON 响应,从而导致解析错误和数据不完整。

评估质量

与大型模型相比,参数少于 7B 的模型可能提供不够细致的评估,推理深度有限。

指令遵循

复杂的训练评估标准可能不会被较小的模型完全遵循或考虑。

一致性

使用较小模型时,跨多个训练迭代的评估可能缺乏一致性。

训练建议

  • 最佳实践
  • 小型模型的使用
为了获得最佳的训练质量和可靠的评估,我们强烈建议使用至少有 7B 参数或更大的模型
from crewai import Agent, Crew, Task, LLM

# Recommended minimum for training evaluation
llm = LLM(model="mistral/open-mistral-7b")

# Better options for reliable training evaluation
llm = LLM(model="anthropic/claude-3-sonnet-20240229-v1:0")
llm = LLM(model="gpt-4o")

# Use this LLM with your agents
agent = Agent(
    role="Training Evaluator",
    goal="Provide accurate training feedback",
    llm=llm
)
更强大的模型提供更高质量的反馈和更好的推理能力,从而带来更有效的训练迭代。

关键注意事项

  • 正整数要求: 确保迭代次数(n_iterations)是一个正整数。如果不满足此条件,代码将引发 ValueError
  • 文件名要求: 确保文件名以 .pkl 结尾。如果不满足此条件,代码将引发 ValueError
  • 错误处理: 代码会处理子进程错误和意外异常,并向用户提供错误消息。
  • 训练后的指导在提示时应用;它不会修改您的 Python/YAML 智能体配置。
  • 智能体自动从位于当前工作目录中名为 trained_agents_data.pkl 的文件加载训练建议。如果您训练时使用了不同的文件名,请在运行前将其重命名为 trained_agents_data.pkl,或在代码中调整加载器。
  • 您可以在调用 crewai train 时使用 -f/--filename 来更改输出文件名。如果您想保存在当前工作目录之外,支持使用绝对路径。
需要注意的是,训练过程可能需要一些时间,具体取决于您的智能体的复杂性,并且在每次迭代中都需要您的反馈。 一旦训练完成,您的智能体将具备增强的能力和知识,准备好处理复杂的任务并提供更一致、更有价值的见解。 请记住定期更新和重新训练您的智能体,以确保它们与领域的最新信息和进展保持同步。