process.cfm: один запрос вместо N+1, skip already extracted, DELETE before INSERT, prompt fix (v1.0.49)
This commit is contained in:
@@ -0,0 +1,52 @@
|
|||||||
|
# Сессия 11 — process.cfm: один запрос вместо N+1
|
||||||
|
|
||||||
|
Дата: 2026-06-19
|
||||||
|
|
||||||
|
## Проблема
|
||||||
|
|
||||||
|
Сравнение на Lucee занимало 264.6с. Причина:
|
||||||
|
|
||||||
|
1. **Браузер делал N+1 HTTP-запросов** — по одному `fetch('/extractor.cfm')` на каждый допник + отдельный `fetch('/differ.cfm')`. Каждый экстрактор вызывал `cfhttp timeout=120` к LLM.
|
||||||
|
2. **Не было проверки на уже извлечённые** — каждый запуск заново гонял LLM для всех допников.
|
||||||
|
3. **Не было DELETE перед INSERT** — плодились дубликаты.
|
||||||
|
4. **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)
|
||||||
|
|
||||||
|
Вместо:
|
||||||
|
```javascript
|
||||||
|
for (supplements) { await fetch('/extractor.cfm?...'); }
|
||||||
|
await fetch('/differ.cfm?...');
|
||||||
|
```
|
||||||
|
|
||||||
|
Стало:
|
||||||
|
```javascript
|
||||||
|
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
|
||||||
Reference in New Issue
Block a user