主题
训练
了解如何通过早期给 CrewAI 智能体提供反馈来训练它们,并获得稳定的结果。
概述
CrewAI 的训练功能让你可以使用命令行界面(CLI)训练 AI 智能体。 通过运行命令 crewai train -n <n_iterations>,你可以指定训练过程的迭代次数。
在训练过程中,CrewAI 会结合人工反馈运用各种技术来优化智能体的性能。 这有助于智能体提升其理解、决策和解决问题的能力。
使用 CLI 训练你的团队
要使用训练功能,请按以下步骤操作:
- 打开终端或命令提示符。
- 导航到你的 CrewAI 项目所在的目录。
- 运行以下命令:
shell
crewai train -n <n_iterations> -f <filename.pkl>TIP
将 <n_iterations> 替换为所需的训练迭代次数,将 <filename> 替换为以 .pkl 结尾的相应文件名。
NOTE
如果省略 -f,输出默认写入当前工作目录中的 trained_agents_data.pkl。你可以传入绝对路径来控制文件的写入位置。
以编程方式训练你的团队
要以编程方式训练你的团队,请使用以下步骤:
- 定义训练的迭代次数。
- 指定训练过程的输入参数。
- 在 try-except 块中执行训练命令,以处理潜在的错误。
python
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 以两种方式使用训练产物:在训练期间整合你的人工反馈,以及在训练之后用汇总后的建议指导智能体。
训练数据流
flowchart TD
A["Start training<br/>CLI: crewai train -n -f<br/>or Python: crew.train(...)"] --> B["Setup training mode<br/>- task.human_input = true<br/>- disable delegation<br/>- init training_data.pkl + trained file"]
subgraph "Iterations"
direction LR
C["Iteration i<br/>initial_output"] --> D["User human_feedback"]
D --> E["improved_output"]
E --> F["Append to training_data.pkl<br/>by agent_id and iteration"]
end
B --> C
F --> G{"More iterations?"}
G -- "Yes" --> C
G -- "No" --> H["Evaluate per agent<br/>aggregate iterations"]
H --> I["Consolidate<br/>suggestions[] + quality + final_summary"]
I --> J["Save by agent role to trained file<br/>(default: trained_agents_data.pkl)"]
J --> K["Normal (non-training) runs"]
K --> L["Auto-load suggestions<br/>from trained_agents_data.pkl"]
L --> M["Append to prompt<br/>for consistent improvements"]
训练运行期间
- 在每次迭代中,系统会为每个智能体记录:
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 } - 用途:持久化汇总指导,供未来的运行使用
- 位置:默认写入 CWD;使用
-f可设置自定义路径(包括绝对路径)
- 结构:
小语言模型注意事项
WARNING
使用较小的语言模型(≤7B 参数)进行训练数据评估时,请注意它们在生成结构化输出和遵循复杂指令方面可能会遇到困难。
小模型在训练评估中的局限
JSON Output Accuracy
较小的模型往往难以生成结构化训练评估所需的有效 JSON 响应,从而导致解析错误和数据不完整。
Evaluation Quality
与更大的模型相比,7B 参数以下的模型可能给出细致程度较低、推理深度有限的评估。
Instruction Following
较小的模型可能无法完全遵循或考虑复杂的训练评估标准。
Consistency
使用较小的模型时,多次训练迭代之间的评估可能缺乏一致性。
训练建议
为了获得最佳的训练质量和可靠的评估,我们强烈建议使用至少 7B 参数或更大的模型:
python
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
)TIP
更强大的模型能提供更高质量的反馈和更好的推理,从而带来更有效的训练迭代。
关键注意事项
- 正整数要求: 确保迭代次数(
n_iterations)是正整数。如果不满足此条件,代码会抛出ValueError。 - 文件名要求: 确保文件名以
.pkl结尾。如果不满足此条件,代码会抛出ValueError。 - 错误处理: 代码会处理子进程错误和意外异常,并向用户提供错误消息。
- 训练得到的指导会在构造提示词时应用;它不会修改你的 Python/YAML 智能体配置。
- 智能体会自动从当前工作目录中名为
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 之外,支持绝对路径。
需要注意的是,训练过程可能需要一些时间,具体取决于智能体的复杂程度,并且每次迭代都需要你的反馈。
训练完成后,你的智能体将具备更强的能力和知识,可以处理复杂任务并提供更一致、更有价值的洞见。
记得定期更新并重新训练你的智能体,以确保它们始终掌握该领域的最新信息和进展。