---
title: "AI Matcher"
description: "AI-движок матчинга Ring — LLM-powered Matcher с восемью оценёнными факторами, базовый fallback NeuralMatcher, итоги модерации и training-пайплайн над журналом событий"
locale: "ru"
---
# AI Matcher

> **Info**
> Используйте вкладки **Founder** / **Developer** в боковой панели, чтобы отфильтровать эту страницу. Цикл функции (create → match → notify) описан в [Opportunities](/docs/features/opportunities.md); эта страница — **движок** за оценками.

AI Matcher — движок матчинга Ring: он оценивает каждого кандидата относительно opportunity по **восьми факторам**, объясняет *почему* в ≤160 символов и падает на базовый векторный матчер, когда LLM не настроен. Та же AI-поверхность также сжимает отчёты модерации сущностей для админ-очереди.

| Previous | Ring equivalent |
|----------|-----------------|
| Keyword search on listings | Оценённый матчинг кандидатов с LLM-объяснениями |
| One model, hard-coded | Model router (`lib/ai/model-router`) с классами задач |
| Matching quality guesswork | Training-пайплайн учится на событиях `opportunity_matched` / `application_success` |
| Manual moderation triage | Однопредложные LLM-итоги отчётов → админ-очередь + tunnel notify |

## Восемь факторов оценки

`MatchFactors` в `lib/ai/types.ts` (каждый 0–100): `skillMatch`, `experienceMatch`, `industryMatch`, `locationMatch`, `budgetMatch`, `availabilityMatch`, `careerMatch`, `cultureMatch`.

Рантайм-пороги — это **конфиг клона**, не kingdom-wide SLA. Значения по умолчанию (`ring-config.json → matcher`): `scoreThreshold` **0.7**, `maxMatches` **10**, `autoApprove` **false**, `autoApproveMinScore` **0.7**, `llmConfidenceGate` **0.8**. Объяснения обрезаются до **≤160 символов** в `MatchingService`.

### For founders

## Почему это важно для вашего клона

- **Матчи находят участников.** Новые opportunities запускают пайплайн матчера и уведомляют лучшие совпадения — участникам не нужно искать в ленте.
- **Объяснения строят доверие.** Каждое уведомление несёт короткое «почему это вам подходит», а не только оценку.
- **Вы контролируете пороги.** Настройте `scoreThreshold`, `maxMatches` и auto-approve в **Admin → Platform Settings → AI → Matcher**; держите auto-approve выключенным, пока не доверяете данным вертикали.
- **Модерация становится проще.** Отчёты по сущностям LLM сжимает в одно предложение для админ-очереди.

### Чеклист оператора

1. Держите пороги Matcher на значениях по умолчанию, пока не появится реальный трафик.
2. Просматривайте полосы качества матчей (high ≥80 / medium 60–79 / low <60) в аналитике Matcher — это сигналы, не гарантии.
3. Когда уверены, поднимите `maxMatches` или включите `autoApprove` с его score- и LLM confidence-гейтами.

### For developers

## Модули движка (проверено)

| Module | Role |
|--------|------|
| `lib/ai/matcher.ts` | Класс `Matcher` — LLM-оценка + объяснения; загрузка профилей кандидатов в `cache()` |
| `lib/ai/neural-matcher.ts` | Базовый `NeuralMatcher` — сходство тег/вектор через `lib/ai/vector-store`, когда LLM недоступен |
| `lib/ai/matcher-moderation-notify.ts` | Однопредложные LLM-итоги отчётов модерации сущностей → админ-очередь + tunnel-канал |
| `lib/ai/training-pipeline.ts` | `AITrainingPipeline` — supervised-примеры из журнала событий (`opportunity_matched`, `application_success`) |
| `lib/ai/model-router/` | Каталог моделей, классы задач и резолюция |
| `lib/ai/user-profile-loader.ts` | Мапит документы `users` → `UserProfile`; ограничен `MATCHING_MAX_CANDIDATES` |
| `lib/ai/llm-client.ts` | Гейты доступности `createLLMClientAsync` / `isLLMAvailableAsync` |
| `lib/ai/types.ts` | `MatchFactors`, `LLMConfig`, `AIOperationError` |

## Конфигурация

**Environment (только fallback — config имеет приоритет)**

{`MAX_MATCHES_PER_OPPORTUNITY=10   # fallback cap
MATCHING_SCORE_THRESHOLD=0.7      # fallback min score
MATCHING_MAX_CANDIDATES=200       # candidate scan cap`}

`Matcher` предпочитает resolved AI-конфиг из `features/admin/platform-settings/resolved-ai-config`; env-значения — fallback, читаемые при конструкции.

**Конфиг клона (`ring-config.json → matcher`)**

{`"matcher": {
  "scoreThreshold": 0.7,
  "maxMatches": 10,
  "autoApprove": false,
  "autoApproveMinScore": 0.7,
  "llmConfidenceGate": 0.8
}`}

Override существуют на клон; env `MATCHER_AUTO_APPROVE` / `MATCHER_AUTO_APPROVE_MIN_SCORE` также могут переключать auto-approve.

### Как протекает match run

`OpportunityMatchingService` → `Matcher` (LLM) или `NeuralMatcher` (baseline) → `MatchFactors` + объяснения → fan-out уведомлений. Сопоставленные пользователи открывают opportunity; их реакции питают коллекцию событий training-пайплайна.

## Связанная документация

  
- [features/opportunities](/docs/features/opportunities.md) — Same-workflow: create → match → notify, плюс Contact в browse-feed, который best-effort записывает contact_intent.

  
- [architecture/discovery-mutation-sync](/docs/architecture/discovery-mutation-sync.md) — Deep-dive: как новые opportunities запускают пайплайн матчера и держат карточки матчей свежими.

  
- [features/admin](/docs/features/admin.md) — See-also: пороги Matcher живут в админ platform settings.
