АДРЕСНЫЙ РЕЖИМ - ллм декомпоз
This commit is contained in:
@@ -11,12 +11,17 @@ const ADDRESS_ACTION_TOKENS = [
|
||||
"debt",
|
||||
"owe",
|
||||
"покажи",
|
||||
"покаж",
|
||||
"показ",
|
||||
"список",
|
||||
"найди",
|
||||
"найд",
|
||||
"выведи",
|
||||
"вывед",
|
||||
"кто",
|
||||
"кому",
|
||||
"какие",
|
||||
"что по",
|
||||
"остаток",
|
||||
"долг",
|
||||
"задолж",
|
||||
@@ -70,6 +75,10 @@ const ADDRESS_ENTITY_TOKENS = [
|
||||
"кредитор",
|
||||
"аванс",
|
||||
"оплат",
|
||||
"поступлен",
|
||||
"поступлени",
|
||||
"списан",
|
||||
"списани",
|
||||
"долг",
|
||||
"должен",
|
||||
"должны",
|
||||
@@ -142,6 +151,83 @@ function hasAddressFollowupSignal(text: string): boolean {
|
||||
return false;
|
||||
}
|
||||
|
||||
function hasDocsOrBankSignal(text: string): boolean {
|
||||
return /(?:док(?:и|умент|ументы|ументов)|docs?|documents?|банк|выписк|платеж|платёж|оплат|поступлен|списан|transactions?|bank\s+ops|bank\s+operations?)/iu.test(
|
||||
text
|
||||
);
|
||||
}
|
||||
|
||||
function hasLikelyCounterpartyToken(text: string): boolean {
|
||||
const stopWords = new Set([
|
||||
"за",
|
||||
"с",
|
||||
"по",
|
||||
"на",
|
||||
"и",
|
||||
"или",
|
||||
"док",
|
||||
"доки",
|
||||
"документ",
|
||||
"документы",
|
||||
"документов",
|
||||
"банк",
|
||||
"банковские",
|
||||
"операции",
|
||||
"платежи",
|
||||
"платеж",
|
||||
"платёж",
|
||||
"контрагент",
|
||||
"контрагенту",
|
||||
"контрагента",
|
||||
"компания",
|
||||
"компании",
|
||||
"организация",
|
||||
"организации",
|
||||
"год",
|
||||
"года",
|
||||
"г",
|
||||
"плс",
|
||||
"pls",
|
||||
"пж",
|
||||
"пжлст",
|
||||
"пожалуйста",
|
||||
"бля",
|
||||
"блять",
|
||||
"епт",
|
||||
"ёпт",
|
||||
"епта",
|
||||
"нах",
|
||||
"нахуй",
|
||||
"покеж",
|
||||
"покажи",
|
||||
"показать",
|
||||
"покаж",
|
||||
"выведи",
|
||||
"show",
|
||||
"list",
|
||||
"please",
|
||||
"all",
|
||||
"vse"
|
||||
]);
|
||||
const tokens = String(text ?? "")
|
||||
.split(/[^a-zа-яё0-9._-]+/iu)
|
||||
.map((token) => token.trim())
|
||||
.filter((token) => token.length >= 2);
|
||||
return tokens.some((token) => {
|
||||
const lowered = token.toLowerCase();
|
||||
if (stopWords.has(lowered)) {
|
||||
return false;
|
||||
}
|
||||
if (/^\d+$/.test(lowered)) {
|
||||
return false;
|
||||
}
|
||||
if (/^(?:19|20)\d{2}$/.test(lowered)) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
function hasAnyToken(text: string, tokens: string[]): boolean {
|
||||
return tokens.some((token) => text.includes(token));
|
||||
}
|
||||
@@ -186,6 +272,14 @@ export function detectAddressQuestionMode(userMessage: string): AddressModeDetec
|
||||
};
|
||||
}
|
||||
|
||||
if (!hasDeepReasoning && hasDocsOrBankSignal(text) && (hasLooseByAnchor || hasLikelyCounterpartyToken(text))) {
|
||||
return {
|
||||
mode: "address_query",
|
||||
confidence: "medium",
|
||||
reasons: ["docs_or_bank_signal_detected", "anchor_like_token_detected"]
|
||||
};
|
||||
}
|
||||
|
||||
if (hasDeepReasoning) {
|
||||
return {
|
||||
mode: "deep_analysis",
|
||||
|
||||
Reference in New Issue
Block a user