You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[ compose ] в панели system.prompt — по текущей вакансии один
не-стриминговый LLM-вызов собирает системный промпт-«плейбук» и отбирает
нерелевантные разделы профиля (композер получает только ##-заголовки,
а не весь контент), которые затем вырезаются из user-сообщения через dropSections. Профиль уходил в каждый запрос целиком, и основной выигрыш
фичи — сокращение этого шума, а не сам промпт (~600 Б). Откат — кнопкой вернуть прежний, reset default чистит и промпт, и отбор.
POST /api/prompt/compose (пакет internal/prompt): возвращает systemPrompt, dropSections, reason, truncated, sections, droppedBytes, elapsedMs — видно, сколько профиля сэкономлено.
Поле usedSystemPrompt в SSE-done — что фактически отправлялось модели
(кастом или дефолт): отладка перестала быть догадкой.
Подпись #prompt-sub показывает источник промпта честно: кастом / авто / default (раньше очищенное поле давало дефолт на бэке, а UI
продолжал утверждать «кастом»).
Хард-защита антигаллюцинации: разделы с «ФАКТЫ-ОГРАНИЧИТЕЛИ» невырезаемы
по построению — prompt.Parse отбрасывает такие dropSections, даже если
модель их вернула.
Две страховки вокруг compose: при смене вакансии старый отбор разделов
сбрасывается (иначе по чужой вакансии молча вырезался бы релевантный
раздел), а потеря инвариантов безопасности в собранном промпте
(missingInvariants) показывается предупреждением — playbook заменяет
дефолт целиком, и «не выдумывай» не должно исчезнуть молча.
prompt.Parse принимает дроп только по паре (file, heading): заголовок с
чужим файлом ничего не вырежет и больше не отчитывается об успехе. Обрезка
промпта по байтовому лимиту не разрывает UTF-8-руну.