Workshop: Professional Writing
On this page
Workshop Objective
The theory is set; now for practice. In this workshop, you’ll apply everything you’ve learned—roles, constraints, expected format, temperature—to write three types of professional content with Mistral: a follow-up email, a product sheet, and an executive summary. For each exercise, you’ll find the business context, the complete prompt ready to run, and a description of the result you should expect. The goal isn’t to copy these prompts verbatim, but to understand why they’re built this way so you can adapt them to your own situations.
Exercise 1: Write a Professional Email
First scenario, very common: you need to follow up with a client who hasn’t responded to your sales proposal in 10 days. The tone must be professional but not pushy—the hardest balance to strike in a follow-up email. Notice how the system prompt sets the writing rules once and for all, while the user message provides the specific context for this client.
messages = [
{
"role": "system",
"content": """You are a senior sales representative at a digital services company.
Email writing rules:
- Use formal address
- Professional, courteous, and direct tone
- Structure: punchy subject, hook, body, call-to-action, signature
- Maximum 150 words for the email body
- No filler phrases ('I wanted to reach out', 'please don't hesitate')"""
},
{
"role": "user",
"content": """Write a follow-up email for Mr. Durand, Technical Director at LogiPro.
Context:
- Proposal sent March 24: cloud migration (Azure) for €45,000
- No response in 10 days
- During our last exchange, he mentioned budget constraints in Q2
- Goal: get a 15-minute phone meeting
Expected format:
Subject: [email subject]
Body: [email text with greeting and signature]"""
}
]
response = client.chat.complete(
model="mistral-large-latest",
messages=messages,
temperature=0.4
)
What should you get? A structured email with a short, non-generic subject—especially not “Follow-up Proposal”—that references the last exchange (the budget constraints Mr. Durand mentioned), formulates a concrete proposal (the 15-minute meeting), and uses an empathetic tone that shows you understand the client’s constraints rather than pressing them. If the result contains filler phrases despite the prohibition, that’s a sign you need to strengthen the constraint in the system prompt, for example by providing a counter-example.
Once you have this first result, experiment. Set the temperature to 0.7 and watch the tone become warmer. Add the constraint “Propose an installment payment plan” and see how the model integrates it into the pitch. Finally, change the persona—a junior account manager instead of a sales director—and compare the stance of the two emails.
Exercise 2: Create a Product Sheet
Second scenario: you’re launching a new SaaS product and need to write the product sheet for your website. The writing challenge is classic copywriting: talk benefits, not features. The prompt provides all the raw data and imposes a strict structure, leaving the model with the only task where it excels here—wording.
messages = [
{
"role": "system",
"content": """You are a web writer specialized in B2B SaaS copywriting.
Style: concise, benefit-oriented (not features), data-driven.
Format: Markdown with structured sections."""
},
{
"role": "user",
"content": """Write the product sheet for 'DataPulse', a real-time data analysis tool.
Product info:
- Price: starting at €79/month
- Target: data teams of 5-50 people
- Features: real-time dashboards, automatic alerts, SQL/NoSQL integration,
PDF/CSV export, REST API, SSO
- Differentiator: setup in 15 minutes (vs 2-3 days for competitors)
- Stack: cloud-native, hosting in France (GDPR)
Expected structure:
1. Headline (max 10 words)
2. Subtitle (max 25 words, benefit-oriented)
3. 3 'benefit' blocks (title + 2 sentences)
4. 'They Trust Us' section (3 fictional testimonials)
5. Final call-to-action"""
}
]
response = client.chat.complete(
model="mistral-large-latest",
messages=messages,
temperature=0.5
)
The expected result is a complete sheet with benefit-oriented headers—not “Features” but something like “Make Decisions in Real Time”—credible testimonials, and a punchy CTA. A temperature of 0.5 is the right compromise for this type of text: enough freedom for lively wording, enough restraint to stay faithful to the brief’s data.
Exercise 3: Write an Executive Summary
Third scenario, the most demanding: summarize a 20-page report for an executive committee that only has 2 minutes. Here, every word counts and every figure must be exact—which is why the temperature drops to 0.2.
messages = [
{
"role": "system",
"content": """You are a strategy consultant who writes executive summaries.
Rules:
- Maximum 200 words
- Structure: situation → problem → recommendation → quantified impact
- Every sentence must provide actionable information
- No unnecessary adverbs ('very', 'really', 'particularly')
- Precise figures, no vague approximations"""
},
{
"role": "user",
"content": """Summarize this data into an executive summary for the Executive Committee.
Key data from Q1 2026 report:
- Revenue: €4.2M (target: €4.8M, so -12.5%)
- Gross margin: 62% (vs 68% Q1 2025)
- Customer acquisition: 234 new (target 300, so -22%)
- Churn: 4.1% monthly (vs 2.8% Q1 2025, so +46%)
- NPS: 32 (vs 45 Q1 2025)
- Sales pipeline: €8.7M for Q2 (vs €6.2M Q2 2025)
- Identified causes: platform incident in February (3 days downtime),
departure of 2 senior sales reps, new competitor aggressive on pricing
Format:
## Executive Summary Q1 2026
[Situation in 2 sentences]
[Main problems in 3 bullet points]
[Recommendations in 3 bullet points]
[Expected impact if actions implemented]"""
}
]
response = client.chat.complete(
model="mistral-large-latest",
messages=messages,
temperature=0.2
)
You should get a summary that gets straight to the point: key figures included and contextualized, concrete recommendations linked to the identified causes, and a quantified impact. Systematically verify that the model hasn’t distorted any figures—this is the minimum quality control for any document intended for leadership.
Tips for Going Further
Three habits will make the difference in your daily practice. First, iterate on your prompts: if the result isn’t satisfactory, add constraints rather than starting from scratch—it’s faster and you build on what already works. Next, save your best prompts in a tested and validated library: the follow-up email prompt you just refined will serve you dozens of times. Finally, test with different models: mistral-small-latest may suffice for simple emails, and reserving mistral-large-latest for complex tasks reduces your costs without sacrificing quality.
Key Takeaways
- Each content type requires a specific persona and constraints
- Temperature influences tone: low for factual, medium for professional
- Structure your prompts with context + data + expected format
- Precise constraints (word count, structure, tone) improve quality
- Build a library of reusable prompts for your recurring tasks