Перейти к содержанию

LLM Сервис (Суммаризация звонков)

Автоматически сгенерировано: 2026-02-19 11:02:19

⚠️ ВАЖНО: Документация генерируется из РЕАЛЬНОГО кода (llm_service.py)

Обзор

LLM сервис используется для автоматической суммаризации транскрибированных звонков.

⚠️ PRODUCTION AI сервер 85.29.137.199НЕ ТРОГАТЬ!

Реальная технология (из кода)

Из исходного кода llm_service.py:

from openai import OpenAI

def get_llm_client() -> OpenAI:
    return OpenAI(
        api_key=settings.LLM_API_KEY,
        base_url=settings.LLM_API_URL,
        timeout=settings.LLM_TIMEOUT
    )
Параметр Значение Источник
URL http://85.29.137.199:5010/v1 Конфиг: LLM_API_URL
Модель leon-se/gemma-3-12b-it-FP8-Dynamic Конфиг: LLM_MODEL
API Key leet-Zup*** Конфиг: LLM_API_KEY
Timeout 60 сек Конфиг: LLM_TIMEOUT
Протокол OpenAI-compatible API Код: from openai import OpenAI

Параметры генерации (из кода)

Реальные значения из summarize_text():

response = client.chat.completions.create(
    model=settings.LLM_MODEL,
    messages=[...],
    max_tokens=300,
    temperature=0.3  # Низкая температура для предсказуемости
)
Параметр Значение Назначение
max_tokens 300 Максимальная длина резюме
temperature 0.3 Низкая = более предсказуемые ответы

Системный промпт (из кода)

Для абонента (caller):

Ты — ассистент медицинского колл-центра. Проанализируй обращение пациента и сформулируй суть в 2-3 предложениях.

Правила:
- Исправляй очевидные ошибки распознавания речи (например "пиратура" → "температура", "тирапевт" → "терапевт")
- Выдели: причину обращения, симптомы, желаемое действие (запись, ...

Для оператора (operator): - Аналогичный промпт - Фокус на: какое решение, дата/время записи, специалист

Формат запроса (из кода)

OpenAI Chat Completions API:

messages=[
    {"role": "system", "content": system_prompt},
    {"role": "user", "content": "Текст обращения:\n{text}"}
]

Формат ответа (из кода)

summary = response.choices[0].message.content.strip()

return {
    "summary_caller": summary_caller,
    "summary_operator": summary_operator
}

Интеграция с CallBox

Процесс суммаризации

graph LR
    A[Транскрипция готова] --> B[STT текст]
    B --> C[Разделение caller/operator]
    C --> D[LLM суммаризация caller]
    D --> E[LLM суммаризация operator]
    E --> F[Сохранение в БД]

Используется в

  • Backend: app/services/llm_service.py
  • API: Автоматически после транскрипции
  • БД: call_detail_records.summary_caller, summary_operator

Обработка ошибок (из кода)

API Key не настроен:

if not settings.LLM_API_KEY:
    raise LLMError("LLM_API_KEY не настроен в .env")

Неизвестная роль:

if role not in ["caller", "operator"]:
    raise LLMError(f"Неизвестная роль: {role}")

Мониторинг

Логи:

docker logs callbox-backend | grep LLM

Статистика:

SELECT COUNT(*) FROM call_detail_records WHERE summary_caller IS NOT NULL;

Критические правила

⚠️ Сервер 85.29.137.199: - НЕ делать SSH - НЕ перезапускать сервисы
- НЕ изменять конфигурацию - ТОЛЬКО HTTP-запросы к API


Документация генерируется из реального кода llm_service.py. НЕ редактировать вручную.