AI Skill Report Card
Building Multi Agent Automations
Quick Start14 / 15
Bashpip install praisonaiagents export OPENAI_API_KEY=your_key_here
Pythonfrom praisonaiagents import Agent agent = Agent(instructions="You are a helpful AI assistant") agent.start("Write a haiku about AI")
For multi-agent systems, use PraisonAIAgents or Workflow. For CLI/no-code usage, install the full praisonai package instead.
Recommendation▾
Add an example showing error handling or a failed/bad output scenario to contrast with good outcomes
Workflow14 / 15
Progress checklist for building a PraisonAI automation:
- [ ] 1. Define the task and decide: single agent, multi-agent, or workflow with patterns?
- [ ] 2. Choose LLM provider(s) and set API keys/env vars
- [ ] 3. Create Agent(s) with clear instructions/role/goal
- [ ] 4. Add tools/planning/memory as needed
- [ ] 5. Compose agents into PraisonAIAgents or Workflow
- [ ] 6. Apply workflow patterns (route/parallel/loop/repeat) if orchestration is needed
- [ ] 7. Add safety controls (guardrails, human approval) for production
- [ ] 8. Run, verify output, and tune (memory, context, cost tracking)
Step 1: Decide the architecture
- Single Agent: one task, one instruction set →
Agent(...).start(...) - Multi-Agent (sequential): independent agents handing off results →
PraisonAIAgents(agents=[...]) - Workflow: explicit control over step order and branching →
Workflow(steps=[...])
Step 2: Create agents
Pythonagent = Agent( name="Researcher", role="Research Analyst", goal="Research topics thoroughly", instructions="Provide concise, factual information.", )
Always set instructions; add role/goal for multi-agent clarity.
Step 3: Enhance agents as needed
- Tools: pass Python functions in
tools=[...] - Planning mode:
planning=True, planning_tools=[...], planning_reasoning=True— use for multi-step research/tasks requiring upfront decomposition - Memory:
memory=True(zero-dependency file storage) ormemory="sqlite"/memory="chromadb"for semantic search; setuser_idto isolate per-user state - Rules/instructions: drop a
PRAISON.md,CLAUDE.md, or.cursorrulesin project root — auto-discovered and injected into system prompt
Step 4: Compose and orchestrate
Pythonfrom praisonaiagents import Agent, PraisonAIAgents research_agent = Agent(instructions="Research about AI") summarise_agent = Agent(instructions="Summarise research agent's findings") agents = PraisonAIAgents(agents=[research_agent, summarise_agent]) agents.start()
For explicit control, use Workflow with pattern helpers:
Pythonfrom praisonaiagents import Agent, Workflow from praisonaiagents.workflows import route, parallel, loop, repeat workflow = Workflow(steps=[ classifier, route({"technical": [tech_agent], "creative": [creative_agent]}) ]) result = workflow.start("...")
Step 5: Add safety/observability for production
- Guardrails and human-approval steps for high-risk actions
- Session management / auto-save for long-running workflows
- Telemetry and cost tracking for monitoring
Recommendation▾
Include a brief troubleshooting section for common setup errors (e.g., missing API keys, provider mismatches)
Examples17 / 20
Example 1: Research + Summarize pipeline Input: "Automate researching AI trends and producing a summary." Output:
Pythonfrom praisonaiagents import Agent, PraisonAIAgents research_agent = Agent(instructions="Research about AI trends in 2025") summarise_agent = Agent(instructions="Summarise research agent's findings") agents = PraisonAIAgents(agents=[research_agent, summarise_agent]) agents.start()
Example 2: Query classification and routing Input: "Route technical questions to a tech expert, creative ones to a creative writer." Output:
Pythonfrom praisonaiagents import Agent, Workflow from praisonaiagents.workflows import route classifier = Agent(name="Classifier", instructions="Respond with 'technical' or 'creative'") tech_agent = Agent(name="TechExpert", role="Technical Expert") creative_agent = Agent(name="Creative", role="Creative Writer") workflow = Workflow(steps=[ classifier, route({"technical": [tech_agent], "creative": [creative_agent]}) ]) result = workflow.start("How do I optimize a Python function for speed?")
Example 3: Agent with persistent memory Input: "Build an assistant that remembers user preferences across sessions." Output:
Pythonfrom praisonaiagents import Agent agent = Agent( name="Personal Assistant", instructions="You are a helpful assistant that remembers user preferences.", memory=True, user_id="user123" ) agent.start("My name is John and I prefer Python")
Recommendation▾
Consider adding a table of workflow patterns (route/parallel/loop/repeat) with one-line descriptions for quicker scanning
Best Practices
- Start with the lightweight
praisonaiagentspackage; only install fullpraisonaiif CLI/no-code UI is needed. - Prefer
memory=True(file-based, zero deps) unless semantic search is required — then usememory="chromadb". - Use
planning=Truefor tasks that benefit from explicit multi-step decomposition (research, complex writing) rather than hardcoding sequential agents. - Use
Workflow+ pattern helpers (route,parallel,loop,repeat) instead of manually chaining agents when branching/parallelism is needed — it's clearer and more maintainable. - Isolate memory per user with
user_idin any multi-tenant application. - Leverage auto-discovered rule files (
PRAISON.md,CLAUDE.md,.cursorrules) to inject project-specific conventions instead of repeating instructions per agent. - For production systems, always add guardrails or human-approval steps before irreversible actions.
- Check provider-specific setup (API keys, model names) before assuming a model is supported — PraisonAI supports 100+ providers via LiteLLM-style config.
Common Pitfalls
- Don't use
CrewAI-style heavy sequential chaining when aWorkflowwithparallel()would be faster — PraisonAI agents are optimized for low-latency instantiation. - Don't forget to set
user_idwhen using memory in multi-user contexts — otherwise memories leak across users. - Don't skip
planning_toolswhen enablingplanning=Trueif the task requires external lookups (e.g., web search) — the planner needs tools to act on its plan. - Don't hardcode agent order with
PraisonAIAgentswhen conditional branching is required — useWorkflow+route()instead. - Don't assume memory persists without specifying a storage backend for production — default file-based storage is fine for prototyping but consider
sqlite/chromadbfor scale.