Training
了解如何通过尽早为 CrewAI agents 提供反馈来训练它们,并获得一致的结果。
概述
CrewAI 中的训练功能允许你通过命令行界面( CLI )来训练 AI agents。
运行命令 crewai train -n <n_iterations> 时,你可以指定训练过程的迭代次数。
在训练期间,CrewAI 会结合人工反馈,使用多种技术来优化 agents 的表现。 这有助于 agents 提升其理解、决策和问题解决能力。
使用 CLI 训练你的 Crew
要使用训练功能,请按照以下步骤操作:
- 打开终端或命令提示符。
- 进入你的 CrewAI 项目所在目录。
- 运行以下命令:
crewai train -n <n_iterations> -f <filename.pkl>
将
<n_iterations>替换为你希望的训练迭代次数,将<filename>替换为合适的、以.pkl结尾的文件名。如果省略
-f,输出将默认写入当前工作目录中的trained_agents_data.pkl。你也可以传入绝对路径,以控制文件写入位置。
以编程方式训练你的 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"An error occurred while training the crew: {e}")
训练数据如何被 agents 使用
CrewAI 会以两种方式使用训练产物:训练期间用来吸收你的人工反馈,以及训练完成后用来为 agents 提供整合后的建议。
训练数据流
flowchart TDA["开始训练<br/>CLI: crewai train -n -f<br/>或 Python: crew.train(...)"] --> B["设置训练模式<br/>- task.human_input = true<br/>- 禁用 delegation<br/>- 初始化 training_data.pkl + trained file"]subgraph "迭代过程"direction LRC["第 i 次迭代<br/>initial_output"] --> D["用户 human_feedback"]D --> E["improved_output"]E --> F["追加到 training_data.pkl<br/>按 agent_id 和 iteration 存储"]endB --> CF --> G{"还有更多迭代吗?"}G -- "是" --> CG -- "否" --> H["按 agent 评估<br/>聚合各轮迭代"]H --> I["整合结果<br/>suggestions[] + quality + final_summary"]I --> J["按 agent role 保存到 trained file<br/>(默认:trained_agents_data.pkl)"]J --> K["正常(非训练)运行"]K --> L["自动加载 suggestions<br/>来自 trained_agents_data.pkl"]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 参数或更大的模型:
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 用于你的 agentsagent = Agent(role="Training Evaluator",goal="Provide accurate training feedback",llm=llm)
更强大的模型能够提供更高质量的反馈和更好的推理能力,从而带来更有效的训练迭代。
使用小模型
如果你必须使用较小模型进行训练评估,请注意以下限制:
# 使用较小模型(会存在一定限制)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,以确保它们始终跟上最新信息和领域进展。
