@ykurilov/agent-chat-reply-check
v0.75.0
Published
Проверки ответа агента для replyChecks службы чата: чужие слова и выдуманные ссылки.
Readme
@ykurilov/agent-chat-reply-check
Проверки готового ответа агента для replyChecks службы чата. Работают в любом приложении, сценарий не нужен.
import { foreignWords, unknownLinks } from "@ykurilov/agent-chat-reply-check";
createChatService({
replyChecks: [
foreignWords({ script: "cyrillic", knownNames: ["Excel", "Telegram"] }),
unknownLinks({ appDomains: ["ykapp.ru"] }),
],
});foreignWords({ script, language?, knownNames?, maxLengthRatio? })
Ищет чужие слова: иероглифы и другие письменности (всегда), слово из соседней письменности вне названий
(латиница в русском ответе, кириллица в английском), латинскую букву внутри русского слова.
Законны слова из seenTexts (инструкция, сценарий, сообщения человека, knownTexts службы), knownNames, сокращения из заглавных и названия
с большой буквы посреди фразы.
script— письменность ответа:"cyrillic"или"latin". Язык «русский» не зашит.language— как назвать язык в инструкции переписки («по-русски», «по-немецки»). По умолчанию: кириллица — «по-русски», латиница — «по-английски».maxLengthRatio— во сколько раз переписанный ответ может быть длиннее исходного (1.5). Короче 0.6 исходного не принимается.
Одна переписка моделью. Не вышло — уходит вариант с меньшим числом чужих слов (при равенстве — исходный).
unknownLinks({ appDomains?, labels? })
Находит адреса (http(s)://, www., домен с путём), которых нет в seenTexts. Законны и голые адреса из них, и короткое
имя на домене приложений, если человек назвал это имя (sveta-nails → sveta-nails.ykapp.ru). Домен приложений
задаёт appDomains или шаблон в знакомых текстах («адрес.ykapp.ru»). Одна переписка, остаток вырезается кодом.
Ответ был целиком выдуманной ссылкой — уходит запасная фраза labels.linkOnlyReply, в note — «запасная фраза».
Слова: russianReplyCheckLabels (по умолчанию), englishReplyCheckLabels или свои (Partial<ReplyCheckLabels>).
Тексты приложения и проверка вне хода
Первое сообщение, прощание, тексты нод, названия роликов в инструкции не стоят. Назовите их в replyChecks.knownTexts
службы: слова и ссылки оттуда законны для обеих проверок (со сценарием — flow.withChat({ replyChecks }) добавит тексты
сценария сам). Реплики сотрудника и служебные сообщения приложения «виденным» не считаются. Свой текст вне хода
проверяется тем же набором: service.checkReply({ ownerId, chatId, text }) → { text, notes }.
Подробно — docs/reply-check.md.
Кэш и журнал
Инструкции переписки постоянные: меняется только текст запроса после них. Итог каждой проверки возвращается в note
(чужие слова: итог=… было=… осталось=…); расход переписки ядро пишет как answer_correction.
