Repository navigation
fix(procurement): не превращать подсказки ассистента в требования клиента - #853
Merged
Merged
Conversation
…ента Клиент спросил «АВР есть на 630А?», ассистент предложил два варианта «Устройство АВР ТСР1/ТСM … EKF PROxima», клиент ответил «мне нужен из наличия» — и билдер запроса собрал `устройство АВР 630А 3Р EKF PROxima`, подставив и бренд, и слово «устройство» из ответа САМОГО ассистента. Поиск честно вернул только EKF, три позиции «Устройство АВР …» забрали всё окно выдачи, и Chint NXZM-630S/3B 630A — 36 штук на складе, срок 4 дня — до клиента не доехал вообще. Ассистент отвечал «ни по одной позиции нет подтверждённого наличия», и это было правдой про то, что ему дали. Получалась воронка: что ассистент показал первым, то и становилось требованием клиента навсегда, а остальной каталог он больше не видел. - В промпт билдера добавлено правило: бренд, серию и модель брать только из слов клиента; ответы ассистента — контекст для понимания «из наличия»/ «этот», а не источник требований. Плюс пример ровно этого случая. - Инструкции мало, она не гарантия, поэтому слова чистятся и кодом: `_drop_words_only_the_assistant_used()` убирает из запроса то, что произносил ассистент и не произносил клиент. - Критерий именно «сказал ассистент, но не клиент», а не «нет у клиента»: нормализацию модель делает своими словами («нужен промышленный» → «контактор силовой»), и «силовой» не произносил никто — такие слова нужны и остаются. - Числовые номиналы («630а», «3р», «220в») не отбираются никогда, даже если их назвал только ассистент: он мог уточнить «трёхполюсный?» — «да». Проверено на реальном диалоге прода: запрос превращается в «АВР 630А 3Р», и клиентский канал видит NXZM-630S первой строкой с «в наличии 36 шт., срок до 4 дн.» вместо трёх EKF с «наличие уточняется». ## NEWS 💡 **Ассистент больше не зацикливается на том, что предложил первым** Если ассистент показывал варианты одного бренда, дальше он искал только по нему — даже когда клиент про бренд не спрашивал. Из-за этого подходящий товар со склада мог вообще не попасть в ответ. Теперь требованиями считаются только слова клиента, а свои прошлые подсказки ассистент за них не принимает. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Продолжение разбора по АВР NXZM-630S/3B 3P 630A. После #852 поиск находил позицию первой строкой, но в живом диалоге ассистент продолжал отвечать «ни по одной позиции нет подтверждённого наличия» — ответ от 01.10 18:06 UTC, через 1 ч 20 мин после выката.
Лог билдера показал почему:
Клиент ни разу не называл EKF. И бренд, и слово «устройство» билдер взял из ответа самого ассистента, который до этого предложил «Устройство АВР ТСР1/ТСM … EKF PROxima». Поиск честно вернул только EKF, три позиции «Устройство АВР …» забрали всё окно выдачи — и Chint NXZM-630S (36 шт. на складе, срок 4 дня) до клиента не доехал вообще.
Воронка: что ассистент показал первым, то и становилось требованием клиента навсегда.
_drop_words_only_the_assistant_used()убирает из запроса то, что произносил ассистент и не произносил клиент.NEWS
💡 Ассистент больше не зацикливается на том, что предложил первым
Если ассистент показывал варианты одного бренда, дальше он искал только по нему — даже когда клиент про бренд не спрашивал. Из-за этого подходящий товар со склада мог вообще не попасть в ответ. Теперь требованиями считаются только слова клиента, а свои прошлые подсказки ассистент за них не принимает.
Test plan
test_offer_query_builder.py: слова ассистента (бренд + «устройство») выкидываются, серия ТСР1 выкидывается, названный клиентом бренд сохраняется, модель клиента сохраняется в другом алфавите, нормализованное «контактор силовой» не принимается за модель, запрос из одних чужих слов не опустошается, номинал от ассистента сохраняетсяruff check .+ruff format --check .— чистоустройство АВР 630А 3Р EKF PROxima→АВР 630А 3Р, и клиентский канал видитNXZM-630S/3B 3P 630A — в наличии 36 шт., срок до 4 дн.первой строкой вместо трёх EKF с «наличие уточняется»🤖 Generated with Claude Code