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. НЕ редактировать вручную.