1.7 KiB
1.7 KiB
Сессия 11 — process.cfm: один запрос вместо N+1
Дата: 2026-06-19
Проблема
Сравнение на Lucee занимало 264.6с. Причина:
- Браузер делал N+1 HTTP-запросов — по одному
fetch('/extractor.cfm')на каждый допник + отдельныйfetch('/differ.cfm'). Каждый экстрактор вызывалcfhttp timeout=120к LLM. - Не было проверки на уже извлечённые — каждый запуск заново гонял LLM для всех допников.
- Не было DELETE перед INSERT — плодились дубликаты.
- DEFAULT_PROMPT различался — в Python
{{(двойные скобки), в Lucee{(одинарные).
Решение
process.cfm (новый)
Один эндпоинт, аналог Python /llm/process/<cid>:
GET /process.cfm?contract_id=X- Сервер внутри обходит все допники:
- Проверяет
spec_rows→ если есть, skip - textify → LLM → parse → DELETE + INSERT
- Проверяет
- Затем differ на свежих данных
requesttimeout=600- Все ключи JSON в UPPERCASE (как ждёт JS)
index.cfm (JS)
Вместо:
for (supplements) { await fetch('/extractor.cfm?...'); }
await fetch('/differ.cfm?...');
Стало:
await fetch('/process.cfm?contract_id=...');
// один ответ: {OK, EXTRACTED, ALL_CHANGES}
extractor.cfm
DEFAULT_PROMPT: {{"rows":[...]}} вместо {"rows":[...]} — как в Python.
Версия
v1.0.47 → v1.0.49
Деплой
git push origin master → Lucee k8s