אוטומציה של פרוטוקול פגישות עם AI – תמלול, זיהוי דוברים ואינטגרציה

תיעוד ידני של פגישות גוזל זמן ומוביל לאובדן החלטות ומשימות מרכזיות. אנו מפתחים פתרון AI שממיר אוטומטית הקלטות אודיו של פגישות לפרוטוקול מובנה עם הדגשת משימות ואחראים. הצוות שלנו מספק את הפרויקט במפתח מלא—מבדיקת תהליכים ועד הטמעה ותמיכה שוטפת, תוך הבטחת פעילות אמינה ואינטגרציה עם הכלים שלכם.

תחומי פיתוח AI

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1365
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

אוטומציה של פרוטוקול ישיבות באמצעות 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. ביקורת ישיבות קיימות – איסוף הקלטות לדוגמה, זיהוי דפוסים (סטנד-אפים, סקירות קוד, פגישות אישיות).
  2. בחירת המודל – לישיבות קצרות (<1 שעה) Whisper + GPT‑4o מספיקים; לישיבות ארוכות (3+ שעות) אנו משתמשים בחלוקה מבוססת VAD ועיבוד מקבילי.
  3. הקמת אינטגרציות – דרך Zoom Recording API, Google Workspace Events, Microsoft Graph. הפלט הוא webhook שמפעיל את הצינור.
  4. הגדרת פורמט הפרוטוקול – 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. אנו מספקים אחריות על תפקוד הצינור.

לייעוץ והערכת פרויקט, צרו קשר. בקשו ביקורת של הישיבות שלכם — נראה לכם כמה זמן תוכלו לחסוך.