Training

了解如何通过尽早为 CrewAI agents 提供反馈来训练它们,并获得一致的结果。

概述

CrewAI 中的训练功能允许你通过命令行界面( CLI )来训练 AI agents。 运行命令 crewai train -n <n_iterations> 时,你可以指定训练过程的迭代次数。

在训练期间,CrewAI 会结合人工反馈,使用多种技术来优化 agents 的表现。 这有助于 agents 提升其理解、决策和问题解决能力。

使用 CLI 训练你的 Crew

要使用训练功能,请按照以下步骤操作:

  1. 打开终端或命令提示符。
  2. 进入你的 CrewAI 项目所在目录。
  3. 运行以下命令:
  1. crewai train -n <n_iterations> -f <filename.pkl>

<n_iterations> 替换为你希望的训练迭代次数,将 <filename> 替换为合适的、以 .pkl 结尾的文件名。

如果省略 -f,输出将默认写入当前工作目录中的 trained_agents_data.pkl。你也可以传入绝对路径,以控制文件写入位置。

以编程方式训练你的 Crew

如果你想通过代码来训练 crew,请按以下步骤操作:

  1. 定义训练的迭代次数。
  2. 指定训练过程的输入参数。
  3. 在 try-except 代码块中执行训练命令,以处理潜在错误。
  1. n_iterations = 2
  2. inputs = {"topic": "CrewAI Training"}
  3. filename = "your_model.pkl"
  4. try:
  5. YourCrewName_Crew().crew().train(
  6. n_iterations=n_iterations,
  7. inputs=inputs,
  8. filename=filename
  9. )
  10. except Exception as e:
  11. raise Exception(f"An error occurred while training the crew: {e}")

训练数据如何被 agents 使用

CrewAI 会以两种方式使用训练产物:训练期间用来吸收你的人工反馈,以及训练完成后用来为 agents 提供整合后的建议。

训练数据流

  1. flowchart TD
  2. A["开始训练<br/>CLI: crewai train -n -f<br/>或 Python: crew.train(...)"] --> B["设置训练模式<br/>- task.human_input = true<br/>- 禁用 delegation<br/>- 初始化 training_data.pkl + trained file"]
  3. subgraph "迭代过程"
  4. direction LR
  5. C["第 i 次迭代<br/>initial_output"] --> D["用户 human_feedback"]
  6. D --> E["improved_output"]
  7. E --> F["追加到 training_data.pkl<br/>按 agent_id 和 iteration 存储"]
  8. end
  9. B --> C
  10. F --> G{"还有更多迭代吗?"}
  11. G -- "是" --> C
  12. G -- "否" --> H["按 agent 评估<br/>聚合各轮迭代"]
  13. H --> I["整合结果<br/>suggestions[] + quality + final_summary"]
  14. I --> J["按 agent role 保存到 trained file<br/>(默认:trained_agents_data.pkl)"]
  15. J --> K["正常(非训练)运行"]
  16. K --> L["自动加载 suggestions<br/>来自 trained_agents_data.pkl"]
  17. L --> M["追加到 prompt<br/>以实现持续一致的改进"]

训练运行期间

  • 在每次迭代中,系统都会为每个 agent 记录:

    • initial_output:agent 的第一次回答
    • human_feedback:提示时你输入的反馈
    • improved_output:agent 在收到反馈后的改进版回答
  • 这些数据会存储在一个名为 training_data.pkl 的工作文件中,并按 agent 的内部 ID 与迭代次数进行索引。
  • 当训练处于激活状态时,agent 会自动将你之前的人类反馈追加到 prompt 中,以便在当前训练会话后续尝试中强制遵循这些指令。 训练是交互式的:任务会设置 human_input = true,因此如果你在非交互环境中运行,它会阻塞并等待用户输入。

训练完成后

  • train(...) 执行完成后,CrewAI 会按 agent 对收集到的训练数据进行评估,并生成一份整合结果,其中包括:

    • suggestions:从你的反馈以及初始输出 / 改进输出差异中提炼出的清晰、可执行指令
    • quality:一个 0 - 10 的评分,用于衡量提升幅度
    • final_summary:未来任务中可执行的分步骤行动指南
  • 这些整合结果会保存到你传给 train(...) 的文件中( CLI 默认值是 trained_agents_data.pkl )。这些条目会以 agent 的 role 为键存储,从而可跨会话复用。
  • 在正常(非训练)执行时,每个 agent 都会自动加载其整合后的 suggestions,并将它们追加到任务 prompt 中作为强制性指令。这使你无需修改 agent 定义,也能获得持续一致的改进效果。

文件说明

  • 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 参数或更大的模型:

  1. from crewai import Agent, Crew, Task, LLM
  2. # 推荐的训练评估最低配置
  3. llm = LLM(model="mistral/open-mistral-7b")
  4. # 更可靠的训练评估选择
  5. llm = LLM(model="anthropic/claude-3-sonnet-20240229-v1:0")
  6. llm = LLM(model="gpt-4o")
  7. # 将这个 LLM 用于你的 agents
  8. agent = Agent(
  9. role="Training Evaluator",
  10. goal="Provide accurate training feedback",
  11. llm=llm
  12. )

更强大的模型能够提供更高质量的反馈和更好的推理能力,从而带来更有效的训练迭代。

使用小模型

如果你必须使用较小模型进行训练评估,请注意以下限制:

  1. # 使用较小模型(会存在一定限制)
  2. llm = LLM(model="huggingface/microsoft/Phi-3-mini-4k-instruct")

尽管 CrewAI 针对小模型做了一些优化,但你仍应预期其评估结果可靠性较低、细致程度不足,并可能需要更多人工干预。

需要注意的关键点

  • 正整数要求: 请确保迭代次数( n_iterations )是正整数。如果不满足,该代码会抛出 ValueError
  • 文件名要求: 请确保文件名以 .pkl 结尾。如果不满足,该代码会抛出 ValueError
  • 错误处理: 代码会处理 subprocess 错误和其他意外异常,并向用户提供错误信息。
  • 训练得到的指导是在 prompt 层面应用的;它不会修改你的 Python / YAML agent 配置。
  • Agents 会自动从当前工作目录中的 trained_agents_data.pkl 文件加载训练建议。如果你训练时使用了不同文件名,那么在运行前要么将它重命名为 trained_agents_data.pkl,要么在代码中调整加载器逻辑。
  • 你可以在调用 crewai train 时通过 -f/--filename 更改输出文件名。若你想保存在当前工作目录之外,也支持使用绝对路径。

需要特别说明的是,训练过程可能会花费一些时间,这取决于你的 agents 的复杂度,而且每轮迭代中还需要你提供反馈。

一旦训练完成,你的 agents 将具备增强后的能力和知识,能够更好地处理复杂任务,并输出更一致、更有价值的洞察。

请记得定期更新并重新训练你的 agents,以确保它们始终跟上最新信息和领域进展。