mirror of
https://github.com/crewAIInc/crewAI.git
synced 2026-07-02 13:48:09 +00:00
Switch docs.crewai.com from navigation-only versioning (every version selector entry rendered the same docs/<lang>/* source files) to Mintlify's directory-based versioning so each version selector entry renders its own snapshot. Add an "Edge" channel under docs/edge/<lang>/* that always reflects main HEAD for unreleased work, eliminating pre-release leakage onto frozen release labels. External links to canonical /<lang>/* URLs are preserved via wildcard redirects that always land on the current default version. Layout: - docs/edge/<lang>/* rolling source (you edit here) - docs/edge/enterprise-api.*.yaml - docs/v<X.Y.Z>/<lang>/* frozen, immutable snapshots - docs/v<X.Y.Z>/enterprise-api.*.yaml - docs/images/ shared, append-only - docs/docs.json nav + redirects URLs follow the Mintlify-idiomatic shape: /edge/<lang>/<page> for Edge, /v<X.Y.Z>/<lang>/<page> for every frozen snapshot. The wildcard redirects /<lang>/:slug* -> /<default>/<lang>/:slug* keep stale links working, and every freeze rewrites them (plus all per-section/per-page redirects) so destinations always resolve to the current default without depending on a second redirect hop. Release flow integration (devtools release): - New module crewai_devtools.docs_versioning.freeze() materialises docs/v<X.Y.Z>/ from docs/edge/, rewrites openapi: refs inside the snapshot, inserts the version into every language block in docs.json, and refreshes all redirect destinations. - _update_docs_and_create_pr() in cli.py now calls that freeze during Phase 2 of devtools release. Edge changelogs are updated first (so the snapshot freeze picks them up), then the snapshot is staged alongside docs.json, branched as docs/freeze-v<X.Y.Z>, and the PR is titled [docs-freeze] docs: snapshot and changelog for v<X.Y.Z> — the title prefix the new CI guard reads. - The PR still gates tag, GitHub release, PyPI publish, and the enterprise release as before; no new PRs are added. - Pre-releases (1.X.YaN, 1.X.YbN, ...) skip the snapshot — they ride Edge — and the docs PR title omits the [docs-freeze] prefix. - docs_check (AI-generated docs scaffolding) writes to docs/edge/<lang>/* so newly-generated unreleased docs land in Edge and never accidentally touch a frozen snapshot. Migration scripts (one-shot): - scripts/docs/freeze_historical_versions.py reconstructs all 16 historical snapshots (v1.10.0 .. v1.14.7) from git tags via git archive | tar, rewriting openapi: MDX refs so each snapshot reads its own enterprise-api YAML rather than the live one. - scripts/docs/prefix_version_paths.py one-shot-migrates docs.json: rewrites every page path in 16 versioned blocks to point under docs/v<X.Y.Z>/, inserts a new Edge entry per language, tags v1.14.7 as Latest (default), prunes pages whose target file doesn't exist in the snapshot (e.g. docs/ar/ didn't exist before v1.12.0), and writes the wildcard + per-section redirects. - scripts/docs/freeze_current_edge.py is now a thin CLI wrapper around docs_versioning.freeze for manual one-off freezes (e.g. retroactively snapshotting a forgotten release). CI guards (.github/workflows/docs-snapshots.yml): - Frozen snapshots under docs/v[0-9]*/ are immutable; only PRs whose title contains [docs-freeze] (i.e. release-cut PRs generated by devtools release or the manual wrapper) may modify them. - Images under docs/images/ are append-only since snapshots share a single image directory. Deleting or renaming an image breaks every historical snapshot that still references it. Restored docs/images/crewai-otel-export.png from PR #3673; it was deleted in PR #4908 but v1.10.0 / v1.10.1 snapshots still reference it. Restoring instead of editing the snapshots preserves historical rendering fidelity and validates the new append-only rule retroactively. Tests: - lib/devtools/tests/test_docs_versioning.py covers the freeze: file copy, openapi rewrite, version insertion, default demotion, redirect upserts, per-section redirect rewriting, idempotency, and invalid inputs. Verified locally with mintlify broken-links: 0 broken links across the full site (Edge + 16 frozen versions, 4 locales). AGENTS.md (repo root) is the contributor guide for the new model; RELEASING.md is the release-cut runbook; README's Contribution section links to both. Co-authored-by: Cursor <cursoragent@cursor.com>
198 lines
8.9 KiB
Plaintext
198 lines
8.9 KiB
Plaintext
---
|
||
title: Training
|
||
description: Learn how to train your CrewAI agents by giving them feedback early on and get consistent results.
|
||
icon: dumbbell
|
||
mode: "wide"
|
||
---
|
||
|
||
## Overview
|
||
|
||
The training feature in CrewAI allows you to train your AI agents using the command-line interface (CLI).
|
||
By running the command `crewai train -n <n_iterations>`, you can specify the number of iterations for the training process.
|
||
|
||
During training, CrewAI utilizes techniques to optimize the performance of your agents along with human feedback.
|
||
This helps the agents improve their understanding, decision-making, and problem-solving abilities.
|
||
|
||
### Training Your Crew Using the CLI
|
||
|
||
To use the training feature, follow these steps:
|
||
|
||
1. Open your terminal or command prompt.
|
||
2. Navigate to the directory where your CrewAI project is located.
|
||
3. Run the following command:
|
||
|
||
```shell
|
||
crewai train -n <n_iterations> -f <filename.pkl>
|
||
```
|
||
<Tip>
|
||
Replace `<n_iterations>` with the desired number of training iterations and `<filename>` with the appropriate filename ending with `.pkl`.
|
||
</Tip>
|
||
|
||
<Note>
|
||
If you omit `-f`, the output defaults to `trained_agents_data.pkl` in the current working directory. You can pass an absolute path to control where the file is written.
|
||
</Note>
|
||
|
||
### Training your Crew programmatically
|
||
|
||
To train your crew programmatically, use the following steps:
|
||
|
||
1. Define the number of iterations for training.
|
||
2. Specify the input parameters for the training process.
|
||
3. Execute the training command within a try-except block to handle potential errors.
|
||
|
||
```python Code
|
||
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}")
|
||
```
|
||
|
||
## How trained data is used by agents
|
||
|
||
CrewAI uses the training artifacts in two ways: during training to incorporate your human feedback, and after training to guide agents with consolidated suggestions.
|
||
|
||
### Training data flow
|
||
|
||
```mermaid
|
||
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"]
|
||
```
|
||
|
||
### During training runs
|
||
|
||
- On each iteration, the system records for every agent:
|
||
- `initial_output`: the agent’s first answer
|
||
- `human_feedback`: your inline feedback when prompted
|
||
- `improved_output`: the agent’s follow-up answer after feedback
|
||
- This data is stored in a working file named `training_data.pkl` keyed by the agent’s internal ID and iteration.
|
||
- While training is active, the agent automatically appends your prior human feedback to its prompt to enforce those instructions on subsequent attempts within the training session.
|
||
Training is interactive: tasks set `human_input = true`, so running in a non-interactive environment will block on user input.
|
||
|
||
### After training completes
|
||
|
||
- When `train(...)` finishes, CrewAI evaluates the collected training data per agent and produces a consolidated result containing:
|
||
- `suggestions`: clear, actionable instructions distilled from your feedback and the difference between initial/improved outputs
|
||
- `quality`: a 0–10 score capturing improvement
|
||
- `final_summary`: a step-by-step set of action items for future tasks
|
||
- These consolidated results are saved to the filename you pass to `train(...)` (default via CLI is `trained_agents_data.pkl`). Entries are keyed by the agent’s `role` so they can be applied across sessions.
|
||
- During normal (non-training) execution, each agent automatically loads its consolidated `suggestions` and appends them to the task prompt as mandatory instructions. This gives you consistent improvements without changing your agent definitions.
|
||
|
||
### File summary
|
||
|
||
- `training_data.pkl` (ephemeral, per-session):
|
||
- Structure: `agent_id -> { iteration_number: { initial_output, human_feedback, improved_output } }`
|
||
- Purpose: capture raw data and human feedback during training
|
||
- Location: saved in the current working directory (CWD)
|
||
- `trained_agents_data.pkl` (or your custom filename):
|
||
- Structure: `agent_role -> { suggestions: string[], quality: number, final_summary: string }`
|
||
- Purpose: persist consolidated guidance for future runs
|
||
- Location: written to the CWD by default; use `-f` to set a custom (including absolute) path
|
||
|
||
## Small Language Model Considerations
|
||
|
||
<Warning>
|
||
When using smaller language models (≤7B parameters) for training data evaluation, be aware that they may face challenges with generating structured outputs and following complex instructions.
|
||
</Warning>
|
||
|
||
### Limitations of Small Models in Training Evaluation
|
||
|
||
<CardGroup cols={2}>
|
||
<Card title="JSON Output Accuracy" icon="triangle-exclamation">
|
||
Smaller models often struggle with producing valid JSON responses needed for structured training evaluations, leading to parsing errors and incomplete data.
|
||
</Card>
|
||
<Card title="Evaluation Quality" icon="chart-line">
|
||
Models under 7B parameters may provide less nuanced evaluations with limited reasoning depth compared to larger models.
|
||
</Card>
|
||
<Card title="Instruction Following" icon="list-check">
|
||
Complex training evaluation criteria may not be fully followed or considered by smaller models.
|
||
</Card>
|
||
<Card title="Consistency" icon="rotate">
|
||
Evaluations across multiple training iterations may lack consistency with smaller models.
|
||
</Card>
|
||
</CardGroup>
|
||
|
||
### Recommendations for Training
|
||
|
||
<Tabs>
|
||
<Tab title="Best Practice">
|
||
For optimal training quality and reliable evaluations, we strongly recommend using models with at least 7B parameters or larger:
|
||
|
||
```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>
|
||
More powerful models provide higher quality feedback with better reasoning, leading to more effective training iterations.
|
||
</Tip>
|
||
</Tab>
|
||
<Tab title="Small Model Usage">
|
||
If you must use smaller models for training evaluation, be aware of these constraints:
|
||
|
||
```python
|
||
# Using a smaller model (expect some limitations)
|
||
llm = LLM(model="huggingface/microsoft/Phi-3-mini-4k-instruct")
|
||
```
|
||
|
||
<Warning>
|
||
While CrewAI includes optimizations for small models, expect less reliable and less nuanced evaluation results that may require more human intervention during training.
|
||
</Warning>
|
||
</Tab>
|
||
</Tabs>
|
||
|
||
### Key Points to Note
|
||
|
||
- **Positive Integer Requirement:** Ensure that the number of iterations (`n_iterations`) is a positive integer. The code will raise a `ValueError` if this condition is not met.
|
||
- **Filename Requirement:** Ensure that the filename ends with `.pkl`. The code will raise a `ValueError` if this condition is not met.
|
||
- **Error Handling:** The code handles subprocess errors and unexpected exceptions, providing error messages to the user.
|
||
- Trained guidance is applied at prompt time; it does not modify your Python/YAML agent configuration.
|
||
- Agents automatically load trained suggestions from a file named `trained_agents_data.pkl` located in the current working directory. If you trained to a different filename, pass that path with `Crew(trained_agents_file="my_custom_trained.pkl")`, set `CREWAI_TRAINED_AGENTS_FILE`, or use `crewai run -f my_custom_trained.pkl`.
|
||
- You can change the output filename when calling `crewai train` with `-f/--filename`. Absolute paths are supported if you want to save outside the CWD.
|
||
|
||
It is important to note that the training process may take some time, depending on the complexity of your agents and will also require your feedback on each iteration.
|
||
|
||
Once the training is complete, your agents will be equipped with enhanced capabilities and knowledge, ready to tackle complex tasks and provide more consistent and valuable insights.
|
||
|
||
Remember to regularly update and retrain your agents to ensure they stay up-to-date with the latest information and advancements in the field.
|