rcrewai 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,527 @@
1
+ ---
2
+ layout: example
3
+ title: Task Automation with RCrewAI
4
+ description: Automate repetitive business tasks using specialized AI agents with defined roles and workflows
5
+ ---
6
+
7
+ # Task Automation with RCrewAI
8
+
9
+ This example demonstrates how to automate repetitive business tasks using RCrewAI agents. We'll create a workflow that automatically processes incoming data, generates reports, and handles routine communications.
10
+
11
+ ## Overview
12
+
13
+ We'll build an automation system that:
14
+ - **Processes incoming data** from various sources
15
+ - **Generates standardized reports** with analysis
16
+ - **Handles routine email responses** based on content
17
+ - **Updates tracking systems** with processed information
18
+ - **Escalates complex issues** to human operators
19
+
20
+ ## Complete Implementation
21
+
22
+ ```ruby
23
+ require 'rcrewai'
24
+ require 'json'
25
+ require 'csv'
26
+
27
+ # Configure RCrewAI
28
+ RCrewAI.configure do |config|
29
+ config.llm_provider = :openai
30
+ config.temperature = 0.3 # Balanced for automation tasks
31
+ end
32
+
33
+ # ===== DATA PROCESSING AGENT =====
34
+ data_processor = RCrewAI::Agent.new(
35
+ name: "data_processor",
36
+ role: "Data Processing Specialist",
37
+ goal: "Efficiently process and validate incoming data from multiple sources",
38
+ backstory: "You are a meticulous data specialist who ensures data quality and consistency. You excel at identifying patterns, cleaning data, and preparing it for analysis.",
39
+ tools: [
40
+ RCrewAI::Tools::FileReader.new,
41
+ RCrewAI::Tools::FileWriter.new
42
+ ],
43
+ verbose: true
44
+ )
45
+
46
+ # ===== REPORT GENERATOR AGENT =====
47
+ report_generator = RCrewAI::Agent.new(
48
+ name: "report_generator",
49
+ role: "Business Report Analyst",
50
+ goal: "Generate comprehensive and actionable business reports from processed data",
51
+ backstory: "You are an experienced business analyst who creates clear, insightful reports that help stakeholders make informed decisions. You excel at data visualization and trend analysis.",
52
+ tools: [
53
+ RCrewAI::Tools::FileReader.new,
54
+ RCrewAI::Tools::FileWriter.new
55
+ ],
56
+ verbose: true
57
+ )
58
+
59
+ # ===== EMAIL AUTOMATION AGENT =====
60
+ email_agent = RCrewAI::Agent.new(
61
+ name: "email_assistant",
62
+ role: "Customer Communication Specialist",
63
+ goal: "Handle routine customer communications with professionalism and accuracy",
64
+ backstory: "You are a professional customer service representative who excels at written communication. You handle routine inquiries efficiently while maintaining a personal touch.",
65
+ tools: [
66
+ RCrewAI::Tools::FileReader.new,
67
+ RCrewAI::Tools::FileWriter.new
68
+ ],
69
+ verbose: true
70
+ )
71
+
72
+ # ===== QUALITY ASSURANCE AGENT =====
73
+ qa_agent = RCrewAI::Agent.new(
74
+ name: "quality_controller",
75
+ role: "Quality Assurance Specialist",
76
+ goal: "Review automated outputs and flag items requiring human attention",
77
+ backstory: "You are a detail-oriented quality assurance professional who ensures all automated processes meet high standards. You identify edge cases and exceptions that need human review.",
78
+ tools: [
79
+ RCrewAI::Tools::FileReader.new,
80
+ RCrewAI::Tools::FileWriter.new
81
+ ],
82
+ verbose: true
83
+ )
84
+
85
+ # ===== CREATE AUTOMATION CREW =====
86
+ automation_crew = RCrewAI::Crew.new("task_automation_crew")
87
+
88
+ # Add all agents to crew
89
+ automation_crew.add_agent(data_processor)
90
+ automation_crew.add_agent(report_generator)
91
+ automation_crew.add_agent(email_agent)
92
+ automation_crew.add_agent(qa_agent)
93
+
94
+ # ===== DEFINE AUTOMATION TASKS =====
95
+
96
+ # Task 1: Data Processing and Validation
97
+ data_processing_task = RCrewAI::Task.new(
98
+ name: "process_incoming_data",
99
+ description: "Process incoming data files from various sources. Validate data quality, clean inconsistencies, and prepare structured output. Handle CSV files, JSON data, and text reports. Flag any data quality issues or anomalies.",
100
+ expected_output: "Clean, validated dataset with quality report highlighting any issues or anomalies found",
101
+ agent: data_processor,
102
+ async: true
103
+ )
104
+
105
+ # Task 2: Report Generation
106
+ report_task = RCrewAI::Task.new(
107
+ name: "generate_business_report",
108
+ description: "Create comprehensive business reports from processed data. Include key metrics, trend analysis, executive summary, and actionable recommendations. Format reports professionally with clear visualizations and insights.",
109
+ expected_output: "Professional business report with executive summary, key metrics, trends, and actionable recommendations",
110
+ agent: report_generator,
111
+ context: [data_processing_task],
112
+ async: true
113
+ )
114
+
115
+ # Task 3: Email Response Automation
116
+ email_task = RCrewAI::Task.new(
117
+ name: "handle_customer_emails",
118
+ description: "Process customer emails and generate appropriate responses. Handle common inquiries about orders, products, and services. Maintain professional tone while providing helpful information. Flag complex issues for human review.",
119
+ expected_output: "Professional email responses with clear, helpful information and flags for human review when needed",
120
+ agent: email_agent,
121
+ async: true
122
+ )
123
+
124
+ # Task 4: Quality Assurance Review
125
+ qa_task = RCrewAI::Task.new(
126
+ name: "quality_review",
127
+ description: "Review all automated outputs for quality and accuracy. Verify that reports are comprehensive, emails are appropriate, and data processing was successful. Flag any outputs that require human review or intervention.",
128
+ expected_output: "Quality assurance report with approval status and list of items requiring human attention",
129
+ agent: qa_agent,
130
+ context: [data_processing_task, report_task, email_task]
131
+ )
132
+
133
+ # Add tasks to crew
134
+ automation_crew.add_task(data_processing_task)
135
+ automation_crew.add_task(report_task)
136
+ automation_crew.add_task(email_task)
137
+ automation_crew.add_task(qa_task)
138
+
139
+ # ===== SAMPLE DATA CREATION =====
140
+
141
+ puts "📋 Creating Sample Data for Automation"
142
+ puts "="*50
143
+
144
+ # Create sample customer data
145
+ customer_data = [
146
+ ["Customer ID", "Name", "Email", "Order Value", "Status", "Issue Type"],
147
+ ["C001", "John Smith", "john@example.com", 299.99, "pending", "shipping_query"],
148
+ ["C002", "Sarah Johnson", "sarah@example.com", 156.50, "completed", "product_question"],
149
+ ["C003", "Mike Brown", "mike@example.com", 89.99, "cancelled", "refund_request"],
150
+ ["C004", "Lisa Davis", "lisa@example.com", 425.00, "processing", "order_modification"],
151
+ ["C005", "David Wilson", "david@example.com", 199.99, "completed", "product_review"]
152
+ ]
153
+
154
+ CSV.open("sample_customer_data.csv", "w") do |csv|
155
+ customer_data.each { |row| csv << row }
156
+ end
157
+
158
+ # Create sample sales data
159
+ sales_data = {
160
+ "period": "2024-Q1",
161
+ "total_sales": 125890.45,
162
+ "total_orders": 892,
163
+ "average_order_value": 141.16,
164
+ "top_products": [
165
+ {"name": "Premium Widget", "sales": 35420.00, "units": 156},
166
+ {"name": "Standard Widget", "sales": 28750.50, "units": 287},
167
+ {"name": "Widget Pro", "sales": 22350.00, "units": 89}
168
+ ],
169
+ "customer_segments": {
170
+ "new_customers": 234,
171
+ "returning_customers": 658,
172
+ "premium_customers": 127
173
+ }
174
+ }
175
+
176
+ File.write("sample_sales_data.json", JSON.pretty_generate(sales_data))
177
+
178
+ # Create sample email inquiries
179
+ email_inquiries = [
180
+ {
181
+ "from": "john@example.com",
182
+ "subject": "Order C001 - Shipping Status",
183
+ "body": "Hi, I placed order C001 last week and haven't received shipping information yet. Can you please provide an update on when it will ship? Thanks!"
184
+ },
185
+ {
186
+ "from": "sarah@example.com",
187
+ "subject": "Product Question - Widget Compatibility",
188
+ "body": "Hello, I purchased the Premium Widget but I'm not sure if it's compatible with my current setup. Can you provide compatibility information or technical specifications?"
189
+ },
190
+ {
191
+ "from": "mike@example.com",
192
+ "subject": "Refund Request - Order C003",
193
+ "body": "I need to cancel my order C003 and request a refund. The product doesn't meet my requirements. Please process this as soon as possible."
194
+ }
195
+ ]
196
+
197
+ File.write("sample_email_inquiries.json", JSON.pretty_generate(email_inquiries))
198
+
199
+ puts "✅ Sample data created:"
200
+ puts " - sample_customer_data.csv (5 customer records)"
201
+ puts " - sample_sales_data.json (Q1 sales summary)"
202
+ puts " - sample_email_inquiries.json (3 customer emails)"
203
+
204
+ # ===== AUTOMATION EXECUTION =====
205
+
206
+ puts "\n🚀 Starting Task Automation Workflow"
207
+ puts "="*50
208
+
209
+ # Execute the automation crew
210
+ results = automation_crew.execute
211
+
212
+ # ===== RESULTS ANALYSIS =====
213
+
214
+ puts "\n📊 AUTOMATION RESULTS"
215
+ puts "="*50
216
+
217
+ puts "Overall Success Rate: #{results[:success_rate]}%"
218
+ puts "Total Tasks: #{results[:total_tasks]}"
219
+ puts "Completed Tasks: #{results[:completed_tasks]}"
220
+ puts "Failed Tasks: #{results[:failed_tasks]}"
221
+
222
+ puts "\n📋 TASK BREAKDOWN:"
223
+ puts "-"*40
224
+
225
+ results[:results].each_with_index do |task_result, index|
226
+ status_emoji = task_result[:status] == :completed ? "✅" : "❌"
227
+
228
+ puts "#{index + 1}. #{status_emoji} #{task_result[:task].name}"
229
+ puts " Agent: #{task_result[:assigned_agent] || task_result[:task].agent.name}"
230
+ puts " Status: #{task_result[:status]}"
231
+
232
+ if task_result[:status] == :completed
233
+ puts " Result: #{task_result[:result][0..100]}..."
234
+ else
235
+ puts " Error: #{task_result[:error]&.message}"
236
+ end
237
+ puts
238
+ end
239
+
240
+ # ===== SAVE AUTOMATION OUTPUTS =====
241
+
242
+ puts "\n💾 SAVING AUTOMATION OUTPUTS"
243
+ puts "-"*40
244
+
245
+ completed_results = results[:results].select { |r| r[:status] == :completed }
246
+
247
+ completed_results.each do |task_result|
248
+ task_name = task_result[:task].name
249
+ output_filename = "automation_output_#{task_name}.md"
250
+
251
+ content = <<~CONTENT
252
+ # #{task_name.split('_').map(&:capitalize).join(' ')} Output
253
+
254
+ **Generated by:** #{task_result[:assigned_agent] || task_result[:task].agent.name}
255
+ **Status:** #{task_result[:status]}
256
+ **Generated at:** #{Time.now}
257
+
258
+ ## Task Description
259
+ #{task_result[:task].description}
260
+
261
+ ## Expected Output
262
+ #{task_result[:task].expected_output}
263
+
264
+ ## Result
265
+
266
+ #{task_result[:result]}
267
+
268
+ ---
269
+ *Generated by RCrewAI Task Automation System*
270
+ CONTENT
271
+
272
+ File.write(output_filename, content)
273
+ puts " ✅ Saved #{output_filename}"
274
+ end
275
+
276
+ # ===== AUTOMATION SUMMARY REPORT =====
277
+
278
+ summary_report = <<~REPORT
279
+ # Task Automation Summary Report
280
+
281
+ **Execution Date:** #{Time.now}
282
+ **Automation Crew:** #{automation_crew.name}
283
+ **Total Agents:** #{automation_crew.agents.length}
284
+
285
+ ## Performance Metrics
286
+ - **Success Rate:** #{results[:success_rate]}%
287
+ - **Tasks Completed:** #{results[:completed_tasks]}/#{results[:total_tasks]}
288
+ - **Processing Time:** Completed in parallel execution
289
+
290
+ ## Agent Performance
291
+
292
+ #{automation_crew.agents.map do |agent|
293
+ assigned_tasks = completed_results.select do |r|
294
+ (r[:assigned_agent] || r[:task].agent.name) == agent.name
295
+ end
296
+
297
+ "- **#{agent.name}** (#{agent.role}): #{assigned_tasks.length} task(s) completed"
298
+ end.join("\n")}
299
+
300
+ ## Automation Outputs Generated
301
+
302
+ #{completed_results.map.with_index do |result, i|
303
+ "#{i + 1}. #{result[:task].name} - #{result[:result].length} characters"
304
+ end.join("\n")}
305
+
306
+ ## Data Processing Summary
307
+
308
+ ✅ **Customer Data:** 5 customer records processed
309
+ ✅ **Sales Data:** Q1 2024 metrics analyzed
310
+ ✅ **Email Inquiries:** 3 customer emails processed
311
+ ✅ **Quality Review:** All outputs reviewed for accuracy
312
+
313
+ ## Automation Benefits Achieved
314
+
315
+ - **Time Saved:** ~4-6 hours of manual work automated
316
+ - **Consistency:** Standardized processing across all tasks
317
+ - **Quality:** Built-in quality assurance and validation
318
+ - **Scalability:** Can handle increased volume automatically
319
+ - **Documentation:** Complete audit trail of all processes
320
+
321
+ ## Recommendations for Enhancement
322
+
323
+ 1. **Integration:** Connect to email systems for automatic processing
324
+ 2. **Scheduling:** Set up automated execution on regular intervals
325
+ 3. **Monitoring:** Add performance dashboards and alerting
326
+ 4. **Customization:** Tailor responses based on customer segments
327
+ 5. **Machine Learning:** Implement learning from human feedback
328
+
329
+ ## Next Steps
330
+
331
+ - Review and approve automated outputs
332
+ - Deploy to production environment
333
+ - Set up monitoring and alerting
334
+ - Train team on oversight procedures
335
+ - Plan for scaling to additional task types
336
+
337
+ ---
338
+ *This report was generated automatically by the RCrewAI Task Automation System*
339
+ REPORT
340
+
341
+ File.write("automation_summary_report.md", summary_report)
342
+ puts " ✅ Saved automation_summary_report.md"
343
+
344
+ puts "\n🎉 TASK AUTOMATION COMPLETED SUCCESSFULLY!"
345
+ puts "="*50
346
+ puts "The automation system has successfully processed all tasks:"
347
+ puts "• Customer data validated and cleaned"
348
+ puts "• Business reports generated with insights"
349
+ puts "• Customer emails processed with appropriate responses"
350
+ puts "• Quality assurance review completed"
351
+ puts ""
352
+ puts "📁 Check the generated files:"
353
+ puts "• automation_output_*.md - Individual task results"
354
+ puts "• automation_summary_report.md - Complete automation summary"
355
+ puts ""
356
+ puts "🚀 This automation system can now be:"
357
+ puts "• Scheduled to run automatically"
358
+ puts "• Integrated with your existing systems"
359
+ puts "• Scaled to handle larger volumes"
360
+ puts "• Enhanced with additional task types"
361
+ ```
362
+
363
+ ## Key Automation Features
364
+
365
+ ### 1. **Multi-Agent Specialization**
366
+ Each agent has a specific role in the automation pipeline:
367
+
368
+ ```ruby
369
+ # Specialized agents for different automation tasks
370
+ data_processor # Handles data validation and cleaning
371
+ report_generator # Creates business reports and analysis
372
+ email_agent # Manages customer communications
373
+ qa_agent # Reviews outputs for quality assurance
374
+ ```
375
+
376
+ ### 2. **Parallel Processing**
377
+ Tasks that can run independently execute in parallel:
378
+
379
+ ```ruby
380
+ # These tasks run simultaneously
381
+ data_processing_task # Async: true
382
+ email_task # Async: true (independent of data processing)
383
+
384
+ # Report generation waits for data processing
385
+ report_task # Context: [data_processing_task]
386
+
387
+ # QA reviews all outputs
388
+ qa_task # Context: [data_processing_task, report_task, email_task]
389
+ ```
390
+
391
+ ### 3. **Quality Assurance**
392
+ Built-in quality control ensures reliable automation:
393
+
394
+ ```ruby
395
+ qa_task = RCrewAI::Task.new(
396
+ name: "quality_review",
397
+ description: "Review all automated outputs for quality and accuracy...",
398
+ context: [data_processing_task, report_task, email_task] # Reviews all outputs
399
+ )
400
+ ```
401
+
402
+ ### 4. **Comprehensive Output**
403
+ The system generates detailed documentation of all processes:
404
+
405
+ - Individual task results with full audit trails
406
+ - Summary reports with performance metrics
407
+ - Quality assurance findings
408
+ - Recommendations for improvements
409
+
410
+ ## Automation Patterns
411
+
412
+ ### Sequential Processing
413
+ ```ruby
414
+ # Tasks with dependencies run in sequence
415
+ Task A → Task B → Task C
416
+
417
+ # Example: Data must be processed before report generation
418
+ data_processing_task → report_task
419
+ ```
420
+
421
+ ### Parallel Processing
422
+ ```ruby
423
+ # Independent tasks run simultaneously
424
+ Task A ∥ Task B ∥ Task C
425
+
426
+ # Example: Data processing and email handling can run together
427
+ data_processing_task ∥ email_task
428
+ ```
429
+
430
+ ### Hub-and-Spoke Pattern
431
+ ```ruby
432
+ # Multiple inputs feed into central processing
433
+ Task A ↘
434
+ Task B → Central Task → Output
435
+ Task C ↗
436
+
437
+ # Example: QA agent reviews outputs from all other agents
438
+ [data_task, report_task, email_task] → qa_task
439
+ ```
440
+
441
+ ## Use Cases for Task Automation
442
+
443
+ ### 1. **Customer Service Automation**
444
+ - Process support tickets
445
+ - Generate standard responses
446
+ - Escalate complex issues
447
+ - Update CRM systems
448
+
449
+ ### 2. **Data Processing Workflows**
450
+ - Clean and validate incoming data
451
+ - Generate standardized reports
452
+ - Update databases and systems
453
+ - Flag anomalies for review
454
+
455
+ ### 3. **Content Management**
456
+ - Process document uploads
457
+ - Generate summaries and metadata
458
+ - Organize and categorize content
459
+ - Update content management systems
460
+
461
+ ### 4. **Financial Processing**
462
+ - Process invoices and receipts
463
+ - Generate expense reports
464
+ - Validate transactions
465
+ - Update accounting systems
466
+
467
+ ## Scaling the Automation
468
+
469
+ ### Adding New Task Types
470
+ ```ruby
471
+ # Add a new specialized agent
472
+ invoice_processor = RCrewAI::Agent.new(
473
+ name: "invoice_processor",
474
+ role: "Accounts Payable Specialist",
475
+ goal: "Process invoices accurately and efficiently"
476
+ )
477
+
478
+ # Add corresponding tasks
479
+ invoice_task = RCrewAI::Task.new(
480
+ name: "process_invoices",
481
+ description: "Process pending invoices...",
482
+ agent: invoice_processor
483
+ )
484
+
485
+ # Integrate into existing workflow
486
+ automation_crew.add_agent(invoice_processor)
487
+ automation_crew.add_task(invoice_task)
488
+ ```
489
+
490
+ ### Integration with External Systems
491
+ ```ruby
492
+ # Custom tools for system integration
493
+ crm_tool = CRMIntegrationTool.new(api_key: ENV['CRM_API_KEY'])
494
+ email_tool = EmailSystemTool.new(smtp_config: email_config)
495
+
496
+ # Agents can use integration tools
497
+ customer_agent.tools << crm_tool
498
+ email_agent.tools << email_tool
499
+ ```
500
+
501
+ ## Best Practices for Task Automation
502
+
503
+ ### 1. **Error Handling**
504
+ - Implement comprehensive error catching
505
+ - Provide fallback procedures
506
+ - Log all errors for analysis
507
+ - Set up alerting for failures
508
+
509
+ ### 2. **Quality Control**
510
+ - Always include quality assurance steps
511
+ - Validate outputs before use
512
+ - Maintain human oversight for complex decisions
513
+ - Regular auditing of automated processes
514
+
515
+ ### 3. **Documentation**
516
+ - Document all automated processes
517
+ - Maintain audit trails
518
+ - Generate regular performance reports
519
+ - Keep process documentation updated
520
+
521
+ ### 4. **Monitoring**
522
+ - Track success/failure rates
523
+ - Monitor processing times
524
+ - Set up performance alerts
525
+ - Regular performance reviews
526
+
527
+ This automation system provides a solid foundation for automating repetitive business tasks while maintaining quality and providing comprehensive audit trails. It can be easily extended and integrated into existing business processes.