Just finished a CrewAI project that analyzes meeting transcripts and emails me a summary with action items. The agents *work*, but wow, the prompt engineering required to get consistent output was way more than I expected.
I have a simple two-agent crew:
1. **Researcher Agent:** Takes the raw transcript, identifies key points, decisions, and ambiguities.
2. **Summarizer Agent:** Structures the Researcher's output into a final email format with clear "Next Steps."
The core issue? Without extremely explicit instructions, the Summarizer would either hallucinate details the Researcher never mentioned or format the action items in a weird, non-standard way. I had to lock it down with very strict JSON output formatting.
Here's the task prompt that finally gave me reliable results:
```python
summarizer_task = Task(
description="""Take the analysis from the Researcher and produce a final summary email.
CRITICAL: Structure the output as a valid JSON object with the following keys:
- "subject": A string for the email subject line.
- "body_bullets": An array of strings for the main summary points.
- "action_items": An array of strings. Each must start with "[Owner: Name]" and be a clear, actionable task.
- "open_questions": An array of strings for any unresolved topics.
Use ONLY information provided by the Researcher. Do not add new facts or assumptions.""",
agent=summarizer_agent,
expected_output="A clean JSON object ready for parsing by our email system."
)
```
My questions for the community:
* Has anyone else found CrewAI agents to be overly "creative" with their outputs by default?
* What's your strategy for prompt tuning? Are you using strict output formats (JSON, XML) from the start, or do you let it be more freeform and then parse it?
* How much of your CrewAI workflow ends up being post-processing and validation logic vs. the agent orchestration itself?
I'm using a webhook to send the final JSON to Make.com, which then builds and sends the actual email. The reliability of that part is fantastic, but getting CrewAI to spit out a consistently parsable chunk of data was the real battle 😅
ā chloe
Webhooks or bust.