62 lines
3.3 KiB
Markdown
62 lines
3.3 KiB
Markdown
# Opus Prompt Improvement — Few-Shot + Domain Glossary
|
|
|
|
Дата: 2026-06-23 | Источник: Opus (раунд 3, старый чат)
|
|
Связано: llm_prompt.py, prompt-strategy.md, provenance-columns.md
|
|
|
|
---
|
|
|
|
## Что попросили у Opus
|
|
|
|
Улучшить промпты для extract (первый документ) и diff (сравнение ДС). Ключевые требования:
|
|
- Few-shot примеры на домене ЦОД/colocation
|
|
- Доменный глоссарий (кВт, юнит, стойко-место, IP, каналы)
|
|
- Edge-cases инструкция
|
|
- JSON-формат не менять
|
|
- Новые actions не добавлять
|
|
|
|
## Что Opus выдал
|
|
|
|
### EXTRACT
|
|
- Добавлен доменный глоссарий
|
|
- 1 few-shot пример (стойко-место + IP-адрес)
|
|
- Усилены правила чисел и null
|
|
|
|
### DIFF
|
|
- Добавлен доменный глоссарий
|
|
- 4 few-shot примера:
|
|
1. `partial`, UPDATE цены
|
|
2. `partial`, ADD + UPDATE qty + UPDATE мощности (внутри name)
|
|
3. `full_replace` (новая редакция приложения)
|
|
4. `UNRESOLVED` (не с чем сопоставить)
|
|
- Edge-cases: сопоставление по смыслу (не по символам), qty++ = UPDATE, мощность внутри name, приоритет full_replace, null при отсутствии данных
|
|
|
|
## Какие проблемы решает
|
|
|
|
| Проблема | Решение |
|
|
|----------|---------|
|
|
| Модель путает единицы (кВт vs шт.) | Глоссарий |
|
|
| Не понимает что «Аренда стойко-места» = «Colocation» | Сопоставление по смыслу |
|
|
| При увеличении qty создаёт ADD вместо UPDATE | Пример 2 |
|
|
| full_replace: пишет UPDATE вместо ADD | Пример 3 |
|
|
| Не создаёт UNRESOLVED для незнакомых услуг | Пример 4 |
|
|
| «55 000,00 руб.» → строка вместо числа | Правило чисел |
|
|
|
|
## Размещение
|
|
|
|
Два варианта:
|
|
1. Заменить `FALLBACK_EXTRACT` / `FALLBACK_DIFF` в `llm_prompt.py`
|
|
2. Обновить активный промпт в БД через UI (вкладка «⚙ Промпты»)
|
|
|
|
**Рекомендация:** оба. Fallback в Python — защита если БД недоступна. БД — основной источник. Сделать одновременно.
|
|
|
|
## ⚠️ Важно: фигурные скобки в Python
|
|
|
|
В Python-строке (тройные кавычки) `{` и `}` НЕ требуют удвоения — они не являются f-string placeholder'ами. Удвоение (`{{`, `}}`) нужно ТОЛЬКО если используется `.format()`. В текущем коде промпты — обычные строки в тройных кавычках, подстановка через `.replace()`. Поэтому фигурные скобки оставляем одинарными.
|
|
|
|
## Статус
|
|
|
|
- [x] Opus выдал готовые промпты
|
|
- [ ] Заменить в `llm_prompt.py`
|
|
- [ ] Обновить в БД (сохранить как новую версию)
|
|
- [ ] Bump + пуш + синк VM
|