doc: уточнения Opus — advisory lock, NFKC, формат промпта с ID
This commit is contained in:
@@ -62,3 +62,44 @@
|
||||
В3 и В4 решаются одним сдвигом — давать LLM spec_current с готовыми ID и считать/резолвить всё на сервере. Это убирает и нестабильные хэши, и пустые ячейки в UI.
|
||||
|
||||
**Уточнение Opus:** допники у вас кумулятивные (могут менять то, что добавили предыдущие) или независимые?
|
||||
|
||||
---
|
||||
|
||||
## Уточнения (23.06.2026)
|
||||
|
||||
### 1. Advisory lock в CFML
|
||||
|
||||
**Да, безопасен.** `pg_advisory_xact_lock` — транзакционный: снимается автоматически при завершении транзакции (и commit, и rollback).
|
||||
|
||||
Условия в Lucee:
|
||||
- Лок и INSERT в одном `<cftransaction>` — одно соединение, одна транзакция
|
||||
- `pg_advisory_xact_lock` требует быть внутри транзакции — `<cftransaction>` гарантирует
|
||||
|
||||
Ключ: `pg_advisory_xact_lock(hashtext(contract_id))`. Коллизии hashtext безвредны — два контракта просто сериализуются.
|
||||
|
||||
### 2. NFKC-нормализация — в PostgreSQL
|
||||
|
||||
Делать в PostgreSQL, в том же выражении что считает хэш. Python не дублировать.
|
||||
|
||||
NFKC НЕ объединяет разные тире. Нужна связка в одном выражении:
|
||||
```sql
|
||||
lower(trim(regexp_replace(translate(normalize(name, NFKC), '–—‑−«»""', '------""'), '\s+', ' ', 'g')))
|
||||
```
|
||||
Всё одним выражением — для INSERT-хэша и для lookup.
|
||||
|
||||
### 3. Формат spec_current в промпте с готовыми ID
|
||||
|
||||
Давать LLM компактный список с коротким суррогатным id (`r1, r2...`):
|
||||
|
||||
```json
|
||||
{"current_spec": [
|
||||
{"id": "r1", "name": "Аренда стойко-места...", "price": 15000, "qty": 2, "sum": 30000, "date_start": "2025-01-01"}
|
||||
]}
|
||||
```
|
||||
|
||||
Инструкция в промпте:
|
||||
- UPDATE: `{"op":"UPDATE","target_id":"r1","new_values":{...}}`
|
||||
- DELETE: `{"op":"DELETE","target_id":"r2"}`
|
||||
- ADD: `{"op":"ADD","new_row":{...}}` (без id)
|
||||
|
||||
LLM не видит хэши — только выбирает из готового набора. Сервер маппит `id → name_hash`. Устойчивее, меньше токенов, нет шанса опечатки в md5.
|
||||
|
||||
Reference in New Issue
Block a user