跳转到内容

训练

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

训练过程中,CrewAI 会结合人类反馈和一系列优化技术来提升 agents 的表现。 这有助于 agents 改进对任务的理解、决策和问题解决能力。

使用 training 功能的步骤如下:

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

要以编程方式训练 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"训练 crew 时发生错误:{e}")

CrewAI 会以两种方式使用训练产物:训练期间用于纳入人类反馈,训练之后用于通过汇总后的建议来指导 agents。

flowchart TD
A["开始训练<br/>CLI: crewai train -n -f<br/>或 Python: crew.train(...)"] --> B["设置 training 模式<br/>- task.human_input = true<br/>- 禁用 delegation<br/>- 初始化 training_data.pkl + trained 文件"]
subgraph "Iterations"
direction LR
C["第 i 次迭代<br/>initial_output"] --> D["用户 human_feedback"]
D --> E["improved_output"]
E --> F["按 agent_id 和 iteration<br/>追加到 training_data.pkl"]
end
B --> C
F --> G{"还有更多迭代吗?"}
G -- "是" --> C
G -- "否" --> H["按 agent 汇总<br/>aggregate iterations"]
H --> I["Consolidate<br/>suggestions[] + quality + final_summary"]
I --> J["按 agent role 保存到 trained 文件<br/>(默认:trained_agents_data.pkl)"]
J --> K["正常(非训练)运行"]
K --> L["自动加载 suggestions<br/>from trained_agents_data.pkl"]
L --> M["追加到 prompt<br/>以实现持续改进"]
  • 在每次迭代中,系统会为每个 agent 记录:
    • initial_output:agent 的第一版回答
    • human_feedback:提示后你提供的行内反馈
    • improved_output:根据反馈后的下一版回答
  • 这些数据会保存在一个名为 training_data.pkl 的工作文件中,并按 agent 的内部 ID 和迭代次数进行索引。
  • 在 training 进行时,agent 会自动把你之前的人类反馈追加到 prompt 中,以便在同一训练会话的后续尝试中贯彻这些指令。 Training 是交互式的:tasks 会设置 human_input = true,因此在非交互环境中运行会因为等待用户输入而阻塞。
  • train(...) 完成后,CrewAI 会按 agent 评估收集到的训练数据,并生成一个汇总结果,包含:
    • suggestions:从你的反馈和初始/改进输出差异中提炼出的清晰、可执行指令
    • quality:0–10 分,用于衡量改进程度
    • final_summary:未来任务的分步骤行动项
  • 这些汇总结果会保存到你传入 train(...) 的文件名中(CLI 默认是 trained_agents_data.pkl)。条目会按 agent 的 role 键入,以便跨会话复用。
  • 在正常(非训练)执行期间,每个 agent 会自动加载其汇总后的 suggestions,并把它们作为强制指令追加到 task 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 }
    • 目的:为未来运行保留汇总后的指导
    • 位置:默认写入 CWD;使用 -f 可指定自定义路径(包括绝对路径)

JSON 输出准确性

较小的模型经常难以生成训练评估所需的有效 JSON 响应,容易导致解析错误和数据不完整。

评估质量

参数少于 7B 的模型与更大模型相比,推理深度有限,评估往往不够细腻。

指令遵循

复杂的训练评估标准对于较小模型来说可能无法完全遵守或考虑。

一致性

多轮训练迭代之间的评估,在小模型下可能缺乏一致性。

最佳实践

为了获得最佳训练质量和可靠评估,我们强烈建议使用至少 7B 参数或更大的模型:

from crewai import Agent, Crew, Task, LLM
# 训练评估推荐的最低配置
llm = LLM(model="mistral/open-mistral-7b")
# 更适合可靠训练评估的选择
llm = LLM(model="anthropic/claude-3-sonnet-20240229-v1:0")
llm = LLM(model="gpt-4o")
# 将这个 LLM 用在你的 agents 上
agent = Agent(
role="Training Evaluator",
goal="Provide accurate training feedback",
llm=llm
)
小模型使用

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

# 使用较小模型(预期会有一些限制)
llm = LLM(model="huggingface/microsoft/Phi-3-mini-4k-instruct")
  • 正整数要求: 确保迭代次数(n_iterations)是正整数。如果不满足这个条件,代码会抛出 ValueError
  • 文件名要求: 确保文件名以 .pkl 结尾。如果不满足这个条件,代码会抛出 ValueError
  • 错误处理: 代码会处理 subprocess 错误和未预期的异常,并向用户提供错误信息。
  • 已训练的指导会在 prompt 阶段应用;它不会修改你的 Python/YAML agent 配置。
  • Agents 会自动从当前工作目录中的 trained_agents_data.pkl 文件加载训练后的建议。如果你训练时使用了其他文件名,可以在 Crew(trained_agents_file="my_custom_trained.pkl") 中传入该路径,设置 CREWAI_TRAINED_AGENTS_FILE,或使用 crewai run -f my_custom_trained.pkl
  • 你可以在调用 crewai train 时通过 -f/--filename 更改输出文件名。如果你想将其保存到 CWD 之外,也支持绝对路径。

需要注意的是,训练过程可能会花费一些时间,这取决于 agents 的复杂程度,而且每次迭代都需要你的反馈。

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

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