diff --git a/index.cfm b/index.cfm index 252efd5..95adb9e 100644 --- a/index.cfm +++ b/index.cfm @@ -75,7 +75,7 @@
Nubes - Сверка договоров — LLM AI-driven Event Sourcing v1.0.109 — Lucee + Сверка договоров — LLM AI-driven Event Sourcing v1.0.110 — Lucee
@@ -101,12 +101,10 @@
- ⚙ Промпт LLM - -
- - - + ⚙ Промпты LLM +
+ +
@@ -146,6 +144,32 @@ + + + diff --git a/prompt.cfm b/prompt.cfm index b2a2a8d..1aeddb3 100644 --- a/prompt.cfm +++ b/prompt.cfm @@ -6,48 +6,254 @@ + + DROP TABLE IF EXISTS prompts CASCADE + CREATE TABLE IF NOT EXISTS prompts ( - contract_id UUID PRIMARY KEY REFERENCES contracts(id), - prompt_text TEXT NOT NULL + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + role VARCHAR(20) NOT NULL, + name VARCHAR(100) NOT NULL, + body TEXT NOT NULL, + parent_id UUID REFERENCES prompts(id), + is_active BOOLEAN DEFAULT false, + created_at TIMESTAMPTZ DEFAULT now(), + created_by VARCHAR(50) DEFAULT 'system', + notes TEXT ) - + + + SELECT COUNT(*) as cnt FROM prompts + + + + INSERT INTO prompts (role, name, body, is_active, notes) VALUES ( + 'extract', 'default-v1', + 'Ты — анализатор договоров облачного провайдера. + +Ниже текст спецификации услуг из ПЕРВОГО документа (базовый договор). +Извлеки ВСЕ строки спецификации в JSON-массив. + +Верни СТРОГО JSON без пояснений. Не используй markdown-блоки. + +ФОРМАТ: +{ + "mode": "partial", + "ops": [ + {"action": "ADD", "new_row": {"name": "полное наименование", "price": число, "qty": число, "sum": число, "date_start": "YYYY-MM-DD"}, "comment": ""} + ] +} + +ПРАВИЛА: +1. Извлеки КАЖДУЮ строку таблицы спецификации как отдельную ADD-операцию. +2. Пропускай итоговые строки ("Итого...") и строки с подписями. +3. Если ячейка пустая — ставь null (не пиши 0). +4. price, qty, sum — ЧИСЛА, не строки. + +ТЕКСТ ДОКУМЕНТА: +--- +{doc_text} +---', + true, 'Авто-создан из llm_prompt.py _build_initial' + ) + + + + INSERT INTO prompts (role, name, body, is_active, notes) VALUES ( + 'diff', 'default-v1', + 'Ты — анализатор допсоглашений к договорам облачного провайдера. + +У тебя есть текущая спецификация услуг и текст нового допсоглашения (ДС). +Твоя задача — определить, какие изменения вносит ДС в текущую спецификацию. + +Верни СТРОГО JSON без пояснений. Не используй markdown-блоки. + +ФОРМАТ: +{ + "mode": "partial" | "full_replace", + "ops": [ + {"action": "ADD", "new_row": {"name": "...", "price": число, "qty": число, "sum": число, "date_start": "YYYY-MM-DD"}, "comment": "..."}, + {"action": "UPDATE", "target_id": "rN", "new_values": {"price": число}, "comment": "..."}, + {"action": "DELETE", "target_id": "rN", "comment": "..."}, + {"action": "UNRESOLVED", "new_values": {"name": "...", "price": число, ...}, "reason": "почему не смог сопоставить"} + ] +} + +ПРАВИЛА: +1. mode = "full_replace" — если в тексте есть фразы: «в следующей редакции», «заменить приложение», «излагается в следующей редакции». При full_replace — опиши ВСЕ новые строки как ADD. +2. mode = "partial" — если ДС меняет только отдельные строки. +3. Для UPDATE/DELETE — укажи target_id (r1, r2...) из списка текущей спецификации. НЕ придумывай новые id. +4. new_values в UPDATE — только ИЗМЕНЁННЫЕ поля (не все). +5. Если не можешь однозначно сопоставить строку — action: UNRESOLVED с reason. +6. Пропускай итоговые строки и подписи. +7. price, qty, sum — ЧИСЛА (не строки). + +ТЕКУЩАЯ СПЕЦИФИКАЦИЯ: +{spec_current} + +ТЕКСТ ДОПСОГЛАШЕНИЯ: +--- +{doc_text} +---', + true, 'Авто-создан из llm_prompt.py _build_diff' + ) + + + + + + - - - - + + + + SELECT id, name, body, created_at, notes + FROM prompts + WHERE role = + AND is_active = true + ORDER BY created_at DESC + LIMIT 1 + + + + + + + + + + + SELECT id, name, is_active, created_at, created_by, notes + FROM prompts + WHERE role = + ORDER BY created_at DESC + + + + + + + + + + + SELECT id, role, name, body, parent_id, is_active, created_at, created_by, notes + FROM prompts + WHERE id = + + + + + + + + + - - - - DELETE FROM prompts WHERE contract_id = - - - - INSERT INTO prompts (contract_id, prompt_text) VALUES ( - , - - ) - + + + + + + + + + + + + + + + UPDATE prompts SET is_active = false + WHERE role = + + + + INSERT INTO prompts (role, name, body, parent_id, is_active, created_by, notes) + VALUES ( + , + , + , + NULL, + , + , + NULL + ) + + + - + + + + + + + + + + + + SELECT role FROM prompts WHERE id = + + + + + + + UPDATE prompts SET is_active = false + WHERE role = + + + UPDATE prompts SET is_active = true + WHERE id = + + + + + + + + + + + + + + + + + SELECT is_active FROM prompts WHERE id = + + + + + + + + DELETE FROM prompts WHERE id = + + + + + - - - SELECT prompt_text FROM prompts - WHERE contract_id = - - + +