AI Executive Assistant — цифровой персональный ассистент
AI Executive Assistant автоматизирует управление временем и коммуникациями руководителя: приоритизация входящих сообщений, подготовка к встречам, составление и отправка писем, создание summary из документов, координация между командами. Интегрируется с корпоративными инструментами: Google Workspace, Microsoft 365, Slack, Notion, Zoom.
Email Management агент
from openai import AsyncOpenAI
from pydantic import BaseModel
from typing import Literal, Optional
client = AsyncOpenAI()
class EmailClassification(BaseModel):
priority: Literal["urgent", "important", "normal", "low", "spam"]
category: Literal["action_required", "info_only", "approval_needed", "follow_up", "newsletter"]
estimated_response_time_minutes: int
summary: str
suggested_action: Optional[str]
can_delegate_to: Optional[str] # Кому можно делегировать
requires_ceo_attention: bool
async def process_inbox(emails: list[dict], ceo_context: str) -> list[dict]:
"""Классифицирует и приоритизирует входящие письма"""
processed = []
for email in emails:
classification = await client.beta.chat.completions.parse(
model="gpt-4o",
messages=[{
"role": "system",
"content": f"""Ты — ассистент CEO. Оцени важность входящего письма.
Контекст: {ceo_context}
Делегируй что можно команде. CEO должен видеть только то, что требует его решения."""
}, {
"role": "user",
"content": f"От: {email['from']}\nТема: {email['subject']}\nТело: {email['body'][:500]}"
}],
response_format=EmailClassification,
temperature=0,
)
processed.append({
**email,
"classification": classification.choices[0].message.parsed.model_dump(),
})
# Сортируем по приоритету
priority_order = {"urgent": 0, "important": 1, "normal": 2, "low": 3, "spam": 4}
return sorted(processed, key=lambda x: priority_order[x["classification"]["priority"]])
Подготовка к встречам
class MeetingPreparationAgent:
async def prepare_briefing(
self,
meeting: dict,
participants: list[dict],
relevant_docs: list[str] = None,
) -> str:
"""Создаёт briefing для руководителя перед встречей"""
# Собираем контекст
participant_profiles = await asyncio.gather(*[
self.get_participant_context(p) for p in participants
])
docs_summary = ""
if relevant_docs:
docs_summary = await self.summarize_documents(relevant_docs)
briefing = await client.chat.completions.create(
model="gpt-4o",
messages=[{
"role": "system",
"content": "Создай краткий briefing для CEO перед встречей. Формат: цель встречи, ключевые участники (кратко), повестка, что нужно решить, open issues."
}, {
"role": "user",
"content": f"""Встреча: {meeting['title']}
Дата/время: {meeting['datetime']}
Участники: {json.dumps(participant_profiles, ensure_ascii=False, indent=2)}
Контекст документов: {docs_summary}
История взаимодействий: {await self.get_interaction_history(participants)}"""
}],
)
return briefing.choices[0].message.content
async def get_participant_context(self, participant: dict) -> dict:
"""Контекст по участнику: роль, последние взаимодействия, открытые вопросы"""
crm_data = await crm.get_contact(participant["email"])
recent_emails = await gmail.get_thread_with(participant["email"], limit=5)
return {
"name": participant["name"],
"title": crm_data.get("title", participant.get("title", "")),
"last_interaction": recent_emails[0]["date"] if recent_emails else "нет данных",
"open_items": crm_data.get("open_tasks", []),
}
Генератор ответов и черновиков
class EmailDraftGenerator:
async def draft_reply(
self,
original_email: dict,
tone: Literal["formal", "professional", "friendly"],
action: str, # "approve", "decline", "request_more_info", "delegate", "custom"
custom_points: list[str] = None,
) -> str:
response = await client.chat.completions.create(
model="gpt-4o",
messages=[{
"role": "system",
"content": f"""Пиши от лица CEO.
Тон: {tone}. Лаконично — руководитель ценит своё время.
Подпись: [Имя], [Должность], [Компания]"""
}, {
"role": "user",
"content": f"""Письмо для ответа:
{original_email['body'][:1000]}
Действие: {action}
Дополнительные пункты: {custom_points}"""
}],
temperature=0.4,
)
return response.choices[0].message.content
Daily briefing
async def generate_daily_briefing(
calendar_events: list[dict],
unread_emails: list[dict],
news_topics: list[str],
team_updates: list[dict],
) -> str:
response = await client.chat.completions.create(
model="gpt-4o",
messages=[{
"role": "system",
"content": "Создай утренний брифинг для CEO. Формат: расписание дня, требуют решения сегодня, важные новости отрасли, обновления от команды. Максимум 1 страница."
}, {
"role": "user",
"content": f"""Встречи сегодня: {json.dumps(calendar_events, ensure_ascii=False)}
Письма требующие ответа: {len([e for e in unread_emails if e['classification']['priority'] in ['urgent', 'important']])}
Новости: {news_topics}
Обновления команды: {json.dumps(team_updates, ensure_ascii=False)}"""
}],
)
return response.choices[0].message.content
Практический кейс: CEO стартапа, Series B
Ситуация: CEO получал 150+ писем/день, тратил 3 часа на email management, часто пропускал важные сообщения под слоем информационного шума.
AI Executive Assistant:
- Классификация и приоритизация входящих (Gmail API)
- Утренний 5-минутный briefing (расписание + топ-5 писем требующих внимания)
- Черновики ответов для 80% типовых писем (CEO редактирует и отправляет)
- Подготовка briefing перед каждой встречей
- Summary входящих документов для прочтения
Результаты:
- Время на email management: 3 часа → 45 минут
- Пропущенных важных писем: -91%
- CEO оценка: 4.4/5.0 («появилось время думать о стратегии»)
Сроки
- Email classification и prioritization: 1–2 недели
- Meeting preparation agent: 1–2 недели
- Draft generator + интеграция с Gmail/Outlook: 1–2 недели
- Daily briefing автоматизация: 1 неделя
- Итого: 4–7 недель







