Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.praison.ai/llms.txt

Use this file to discover all available pages before exploring further.

CrewAI framework integration with PraisonAI provides collaborative multi-agent workflows with advanced configuration options for agents, tasks, and execution.
Need a framework that isn’t listed here? See Framework Adapter Plugins to register your own via Python entry points.

Quick Start

1

Install

pip install "praisonai[crewai]"
2

Create YAML file

framework: crewai
topic: Create Movie Script About Cat in Mars

roles:
  researcher:
    role: Research Analyst
    goal: Gather information about Mars and cats
    backstory: Skilled in research, with a focus on gathering accurate and relevant information.
    tasks:
      research_task:
        description: Research about Mars environment and cat behavior for the movie concept
        expected_output: Research findings document with key facts
3

Run

export OPENAI_API_KEY=your-key
praisonai agents.yaml --framework crewai

How CrewAI Works


YAML Format for CrewAI

CrewAI requires the roles format YAML (not the steps workflow format):
framework: crewai
topic: Create Movie Script About Cat in Mars

roles:
  researcher:
    role: Research Analyst
    goal: Gather information about Mars and cats
    backstory: Skilled in research, with a focus on gathering accurate and relevant information.
    tasks:
      research_task:
        description: Research about Mars environment and cat behavior
        expected_output: Research findings document with key facts
The --framework crewai flag only works with YAML files using the roles format. The newer steps + agents workflow format only supports the praisonai framework.

Advanced YAML Fields

PraisonAI’s CrewAI adapter supports extensive configuration options for both agents and tasks:

Agent-Level Fields

Configure advanced agent behavior under each roles.<name>:
YAML KeyTypeDefaultDescriptionMaps to CrewAI
llmobjectinherits dispatcherLLM configuration via PraisonAIModelllm=
function_calling_llmobjectinherits dispatcherSeparate LLM for function callsfunction_calling_llm=
allow_delegationboolFalseAllow agent to delegate tasksallow_delegation=
max_iterint15Maximum iterations per agentmax_iter=
max_rpmintNoneRequests per minute throttlemax_rpm=
max_execution_timeintNoneExecution timeout in secondsmax_execution_time=
verboseboolTrueEnable verbose outputverbose=
cacheboolTrueEnable LLM response cachingcache=
system_templatestrNoneOverride system prompt templatesystem_template=
prompt_templatestrNoneOverride prompt templateprompt_template=
response_templatestrNoneOverride response templateresponse_template=

Task-Level Fields

Configure advanced task behavior under each roles.<name>.tasks.<task_name>:
YAML KeyTypeDefaultDescriptionMaps to CrewAI
descriptionstrrequiredTask descriptiondescription=
expected_outputstrrequiredExpected output formatexpected_output=
toolslist[str][]Tool names from tools_dicttools=
async_executionboolFalseExecute task asynchronouslyasync_execution=
contextlist[str][]Task dependencies by namecontext= (resolved to Task objects)
configobject{}Free-form task configurationconfig=
output_jsontypeNonePydantic schema for JSON outputoutput_json=
output_pydantictypeNonePydantic model classoutput_pydantic=
output_filestr""Output file pathoutput_file=
callbackcallableNoneTask completion callbackcallback=
human_inputboolFalseRequire human inputhuman_input=
create_directoryboolFalseCreate parent directoriescreate_directory=

Advanced Configuration Example

framework: crewai
topic: Quarterly report

roles:
  analyst:
    role: Financial Analyst
    goal: Extract Q3 numbers from the input docs
    backstory: Senior analyst, CFA, 10y experience.
    llm:
      model: openai/gpt-4o
    function_calling_llm:
      model: openai/gpt-4o-mini
    max_iter: 20
    verbose: true
    cache: true
    system_template: "You are a precise financial analyst. Never invent figures."
    tasks:
      extract_numbers:
        description: Pull revenue, COGS, opex for Q3 from {topic}
        expected_output: A JSON table with revenue, cogs, opex.
        tools: ["file_reader", "calculator"]
        async_execution: false

  writer:
    role: Report Writer
    goal: Write a narrative summary
    backstory: Equity-research writer.
    llm:
      model: openai/gpt-4o
    max_iter: 10
    verbose: false
    system_template: "You are a precise, hedge-friendly equity research writer."
    tasks:
      draft_summary:
        description: Draft a 200-word summary of the extracted numbers.
        expected_output: A 200-word markdown summary.
        context: [extract_numbers]
        output_file: out/q3_summary.md
        create_directory: true
        human_input: false

LLM Configuration

Model Resolution

The CrewAI adapter resolves LLM configuration in this order:
  1. Agent-level llm: roles.<agent>.llm.*
  2. Global llm_config: From CLI dispatcher
  3. Environment: MODEL_NAME environment variable
  4. Default: openai/gpt-4o-mini

Function Calling LLM

Use function_calling_llm to specify a different model for tool calls:
roles:
  researcher:
    role: Research Analyst
    llm:
      model: openai/gpt-4o          # For reasoning
    function_calling_llm:
      model: openai/gpt-4o-mini     # For tool calls (cheaper/faster)

Task Dependencies

Use the context field to create task dependencies. Reference tasks by name:
roles:
  researcher:
    tasks:
      research_phase:
        description: Research the topic thoroughly
        expected_output: Research findings

  analyst:
    tasks:
      analysis_phase:
        description: Analyze the research findings
        expected_output: Analysis report
        context: [research_phase]  # Wait for research_phase to complete
The context field accepts a list of task names (strings), not Task objects. The adapter resolves them automatically after all tasks are created.

File Output

Use output_file with create_directory to save task results:
tasks:
  report_task:
    description: Generate final report
    expected_output: Comprehensive report
    output_file: reports/final_report.md
    create_directory: true  # Creates 'reports/' directory if needed

AgentOps Integration

When agentops is installed, the CrewAI adapter automatically calls agentops.end_session("Success") after crew execution completes. No configuration required.
pip install agentops
# AgentOps tracking is automatically enabled

Framework Selection Priority

  1. CLI flag (--framework crewai) takes precedence
  2. YAML file (framework: crewai) is used if no CLI flag
  3. Default: praisonai framework

Auto Mode

praisonai --framework crewai --auto "Create a Movie Script About Cat in Mars"

Troubleshooting

Common Issues

Task context not found: If context: [some_task] fails, ensure some_task exists as a key under any role’s tasks: block in the same YAML file. Function calling LLM inheritance: function_calling_llm falls back to MODEL_NAME environment variable or openai/gpt-4o-mini, not the agent’s main llm configuration. Direct prompt limitation: Direct prompts (praisonai "question" --framework crewai) always use the praisonai framework. Use YAML files with roles format for CrewAI. Missing installation error: If the framework is not installed, PraisonAI now fails fast at CLI entry with:
Framework 'crewai' was requested but is not installed.
Install it with:
    pip install 'praisonai[crewai]'   # or: pip install crewai
The error appears immediately, before YAML parsing — so a typo in --framework is caught before any expensive setup runs.

Installation Errors

  • Missing CrewAI: pip install "praisonai[crewai]"
  • Tool resolution issues: Ensure tool names in tools: [] exist in the global tools_dict

Best Practices

Set a cheaper/faster model for function_calling_llm while using a more capable model for reasoning tasks.
Use descriptive task names in context: [] lists. The order doesn’t matter, but referenced tasks must exist.
Use output_file with create_directory: true for tasks that produce artifacts other agents need to reference.
Set max_execution_time for long-running tasks and max_iter to prevent infinite loops.

AutoGen

AutoGen framework integration

PraisonAI Agents

PraisonAI native agents framework