אוטומציה של פרוטוקול ישיבות באמצעות AI
פרוטוקול ידני של ישיבות גוזל 15–25% מזמנם של המשתתפים. חברות מפסידות עד 15% מהתקציב שלהן על ישיבות לא אפקטיביות ורישום הערות ידני. בארגון טיפוסי עם 50 ישיבות בשבוע, פרוטוקול ידני תופס עד 20 שעות אדם, ועד 30% מהמשימות אובדות או משוכפלות. החלטות קריטיות נקברות, מועדים נדחים, והאחריות מיטשטשת. אנו פותרים זאת עם צינור עיבוד: הקלטת אודיו → הפרדת דוברים → תמלול → חילוץ NLP → פרוטוקול מובנה. זה עובד בזמן אמת או בדיעבד, ומשתלב עם Zoom, Google Meet, MS Teams, Slack, Jira ו-Notion. הפתרון שלנו משיג דיוק חילוץ משימות גבוה פי 2–3 משירותים מוכנים, הודות ל-NLP מותאם אישית.
בעיות שצוותים מתמודדים איתן
- אין מקור אמת יחיד. משתתפים זוכרים ישיבות בצורה שונה. החלטות נדונות מחדש, משימות משוכפלות.
- תמלול ללא הפרדת דוברים. שירותים פשוטים כמו Otter.ai אינם מפרידים בין דוברים — התמליל בלתי קריא.
- אינטגרציה עם מערכות מעקב משימות. גם עם תמליל, יש להזין משימות ל-Jira/Notion ידנית.
אנו סוגרים את כל שלושת הפערים. הצינור שלנו משתמש ב-Whisper large‑v3 (WER ברוסית ~4.5% בהקלטות נקיות), pyannote.audio 3.1 להפרדת דוברים (DER ~8% בוועידות רב-ערוציות), ו-GPT‑4o לחילוץ מבנה. בתרחישים רגישים אנו יכולים לפרוס LLaMA 3 70B מקומי — נתונים סודיים לעולם לא עוזבים את ההיקף.
כיצד אנו מתאימים פרוטוקול AI לתשתית שלך
פרויקט טיפוסי אורך 4–6 שבועות וכולל:
- ביקורת ישיבות קיימות – איסוף הקלטות לדוגמה, זיהוי דפוסים (סטנד-אפים, סקירות קוד, פגישות אישיות).
- בחירת המודל – לישיבות קצרות (<1 שעה) Whisper + GPT‑4o מספיקים; לישיבות ארוכות (3+ שעות) אנו משתמשים בחלוקה מבוססת VAD ועיבוד מקבילי.
- הקמת אינטגרציות – דרך Zoom Recording API, Google Workspace Events, Microsoft Graph. הפלט הוא webhook שמפעיל את הצינור.
- הגדרת פורמט הפרוטוקול – Markdown עבור Confluence, תבניות מותאמות עבור Notion, יצירת משימות אוטומטית ב-Jira עם מועדים מהתמליל.
מקרה אמיתי
חברת פינטק עם 200+ עובדים, אסיפה כללית שבועית ל-150 איש. פרוטוקול ידני לקח 8 שעות אדם בשבוע. פרסנו את הצינור על קלאסטר Kubernetes שלהם עם GPU T4. תוצאות:
- זמן עיבוד להקלטה של שעה: 12 דקות (כולל הפרדת דוברים ו-NLP).
- דיוק זיהוי שמות: 97% לאחר כוונון עדין של Whisper על מונחים ארגוניים.
- חיסכון: 7 שעות בשבוע רק על הכנת פרוטוקול.
מדוע פתרונות מוכנים נכשלים
| פרמטר | מוכן (Otter, Fireflies) | הפתרון שלנו |
|---|---|---|
| הפרדת דוברים | DER 15–25% | DER <10% (pyannote 3.1) |
| תמיכה בשפות | רוסית – בסיסית, WER >15% | WER <5% ברוסית |
| אינטגרציית Jira | רק דרך Zapier | API מקורי, שדות מותאמים |
| מיקום נתונים | ענן בלבד | On‑premise או VPC |
| כוונון עדין | אין | LoRA לאוצר המילים שלך |
לסטארטאפים עם 5–10 ישיבות בשבוע, פתרונות מוכנים עובדים. אבל לארגונים עם נתונים סודיים, טרמינולוגיה ייחודית ודרישות רגולטוריות, הפתרון שלנו נותן שליטה ודיוק.
| אפשרות פריסה | ביצועים | אבטחה | עלות |
|---|---|---|---|
| ענן (VPC) | גבוהים (GPU T4) | נתונים בענן מבודד | צפויה |
| On‑premise | מקסימליים (כל GPU) | שליטה מלאה | השקעה + תמיכה |
| היברידי | מאוזנים | גמישה | מותאמת אישית |
מה כלול במסירה
- צינור תמלול + הפרדת דוברים – קוד Python עם תמיכת CUDA, עם בדיקות יחידה.
- מודול NLP לחילוץ החלטות ומשימות – prompts שנבדקו על 500+ תמלילים.
- אינטגרציות – קלט: Zoom/Teams/Google Meet; פלט: Notion/Confluence/Jira/Slack.
- תיעוד – README, דיאגרמת ארכיטקטורה, מדריך תפעול.
- הכשרת צוות – סדנה של שעתיים.
- אחריות ל-3 חודשים – תיקוני באגים, התאמה לעדכוני API.
פרטים טכניים של הצינור
אנו משתמשים ב-Whisper large‑v3 לתמלול, pyannote.audio 3.1 להפרדת דוברים, ו-GPT‑4o ל-NLP. הקוד מותאם ל-GPU T4/V100 ותומך בעיבוד מקבילי של הקלטות ארוכות. כל הרכיבים ממוחזרים ונפרסים דרך Docker Compose או Kubernetes.
קבלו הערכת פרויקט. צרו קשר — נראה לכם כיצד לקצר את זמן הפרוטוקול פי 5–10. התייעצו עם מהנדס ה-AI שלנו.
פרטי יישום
תמלול עם הפרדת דוברים
import whisper
from pyannote.audio import Pipeline
import torch
class MeetingTranscriber:
def __init__(self):
self.whisper = whisper.load_model("large-v3", device="cuda")
self.diarizer = Pipeline.from_pretrained(
"pyannote/speaker-diarization-3.1",
use_auth_token="HF_TOKEN"
)
def transcribe_with_speakers(self, audio_path: str) -> list[dict]:
diarization = self.diarizer(audio_path)
segments_by_speaker = [
{"speaker": turn.speaker, "start": turn.start, "end": turn.end}
for turn, _, _ in diarization.itertracks(yield_label=True)
]
result = self.whisper.transcribe(audio_path, language="ru", word_timestamps=True)
transcript = []
for seg in result["segments"]:
speaker = self._find_speaker(seg["start"], segments_by_speaker)
transcript.append({
"speaker": speaker,
"start": seg["start"],
"end": seg["end"],
"text": seg["text"].strip()
})
return transcript
def _find_speaker(self, timestamp: float, diar_segments: list) -> str:
for s in diar_segments:
if s["start"] <= timestamp <= s["end"]:
return s["speaker"]
return "UNKNOWN" עיבוד NLP וחילוץ מבנה
from openai import AsyncOpenAI
import json
client = AsyncOpenAI()
async def extract_meeting_structure(transcript: list[dict]) -> dict:
formatted = "\n".join([
f"[{seg['speaker']} | {int(seg['start']//60):02d}:{int(seg['start']%60):02d}] {seg['text']}"
for seg in transcript
])
response = await client.chat.completions.create(
model="gpt-4o",
messages=[{
"role": "system",
"content": """Ты — ассистент для протоколирования встреч. Проанализируй транскрипт и верни JSON: {
"summary": "краткое резюме 2-3 предложения",
"participants": ["SPEAKER_00 = Иван Петров", ...],
"agenda_items": [{"topic": "...", "discussion": "..."}],
"decisions": [{"decision": "...", "context": "..."}],
"action_items": [{"task": "...", "owner": "...", "deadline": "..."}],
"next_meeting": "дата/условие следующей встречи если обсуждалась"
}"""
}, {
"role": "user",
"content": f"Транскрипт встречи:\n\n{formatted[:8000]}"
}],
response_format={"type": "json_object"}
)
return json.loads(response.choices[0].message.content) עיצוב פרוטוקול וייצוא
def format_meeting_minutes(structure: dict, transcript: list[dict]) -> str:
date = datetime.now().strftime("%d.%m.%Y")
duration_min = int(transcript[-1]["end"] / 60) if transcript else 0
md = f"""## Протокол встречи от {date}
**Продолжительность:** {duration_min} минут
**Участники:** {", ".join(structure.get("participants", []))}
### Краткое резюме
{structure.get("summary", "")}
### Принятые решения
"""
for d in structure.get("decisions", []):
md += f"- **{d['decision']}**\n _{d.get('context', '')}_\n\n"
md += "### Задачи\n\n"
md += "| Задача | Ответственный | Срок |\n|--------|--------------|------|\n"
for item in structure.get("action_items", []):
md += f"| {item['task']} | {item.get('owner', '—')} | {item.get('deadline', '—')} |\n"
return md
class MinutesExporter:
async def to_notion(self, minutes: str, database_id: str): ...
async def to_confluence(self, minutes: str, space_key: str): ...
async def to_jira_tasks(self, action_items: list, project_key: str): ...
async def to_slack(self, summary: str, channel_id: str): ...
async def to_email(self, minutes: str, recipients: list[str]): ...
אינטגרציית Webhook (דוגמת Zoom)
@app.post("/webhook/zoom/recording")
async def zoom_recording_webhook(payload: dict):
if payload["event"] == "recording.completed":
recording_url = payload["payload"]["object"]["recording_files"][0]["download_url"]
meeting_id = payload["payload"]["object"]["uuid"]
asyncio.create_task(process_meeting_recording(meeting_id, recording_url))
return {"status": "ok"} ציר זמן
צינור בסיסי (תמלול + NLP + Markdown) – 1–2 שבועות. מערכת מלאה עם אינטגרציות Zoom/Teams/Notion/Jira – 4–6 שבועות. ציר הזמן המדויק תלוי במספר מקורות ההקלטה ובדרישות ההתאמה.
אנו עוסקים באוטומציית AI למעלה מ-5 שנים, עם מסירה של 30+ פרויקטים לפיננסים, קמעונאות ו-IT. אנו מספקים אחריות על תפקוד הצינור.
לייעוץ והערכת פרויקט, צרו קשר. בקשו ביקורת של הישיבות שלכם — נראה לכם כמה זמן תוכלו לחסוך.







