训练
CrewAI 的 training 功能允许你通过命令行界面(CLI)训练 AI agents。
运行命令 crewai train -n <n_iterations>,你可以指定训练过程的迭代次数。
训练过程中,CrewAI 会结合人类反馈和一系列优化技术来提升 agents 的表现。 这有助于 agents 改进对任务的理解、决策和问题解决能力。
使用 CLI 训练你的 Crew
Section titled “使用 CLI 训练你的 Crew”使用 training 功能的步骤如下:
- 打开终端或命令提示符。
- 进入 CrewAI 项目所在目录。
- 运行以下命令:
crewai train -n <n_iterations> -f <filename.pkl>以编程方式训练你的 Crew
Section titled “以编程方式训练你的 Crew”要以编程方式训练 crew,请按以下步骤:
- 定义训练的迭代次数。
- 指定训练过程的输入参数。
- 在 try-except 块中执行训练命令,以处理潜在错误。
n_iterations = 2inputs = {"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}")训练数据如何被 agents 使用
Section titled “训练数据如何被 agents 使用”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/>以实现持续改进"]在训练运行期间
Section titled “在训练运行期间”- 在每次迭代中,系统会为每个 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可指定自定义路径(包括绝对路径)
- 结构:
小型语言模型注意事项
Section titled “小型语言模型注意事项”小模型在训练评估中的限制
Section titled “小模型在训练评估中的限制”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,以确保它们跟上该领域的最新信息和进展。