Разработка AI-системы анализа пробелов в знаниях
Knowledge Gap Analysis — систематическое выявление разрыва между текущими знаниями команды/организации и необходимыми для достижения стратегических целей. AI-система анализирует корпус внутренних знаний, обращения в поддержку, поведение при поиске и выявляет области, где знаний недостаточно.
Источники для анализа пробелов
Поисковые запросы во внутренней базе знаний: поиск без результата — явный пробел. Поиск с результатом, но без последующих действий — возможно, ответ неудовлетворительный.
Обращения в поддержку: вопросы, которые повторяются многократно, — сигнал об отсутствии документации.
Вопросы в корпоративных чатах: анализ вопросов в Slack-каналах — о чём чаще всего спрашивают.
Завершаемость онбординга: где новые сотрудники застревают, какие задания вызывают затруднения.
Обнаружение пробелов
class KnowledgeGapDetector:
def analyze_search_logs(self, search_logs: list[SearchLog]) -> list[KnowledgeGap]:
gaps = []
# Группируем zero-result запросы по семантической близости
zero_results = [log for log in search_logs if log.result_count == 0]
clusters = cluster_queries(zero_results)
for cluster in clusters:
gaps.append(KnowledgeGap(
topic=cluster.representative_query,
evidence_queries=cluster.queries[:10],
frequency=len(cluster.queries),
unique_users=len({q.user_id for q in cluster.queries}),
gap_type="missing_content",
priority=self.calculate_priority(cluster)
))
# Запросы с результатом, но низким engagement
low_engagement = [
log for log in search_logs
if log.result_count > 0 and log.clicked_result is None
]
clusters_low = cluster_queries(low_engagement)
for cluster in clusters_low:
gaps.append(KnowledgeGap(
topic=cluster.representative_query,
frequency=len(cluster.queries),
gap_type="poor_quality_content",
existing_articles=find_related_articles(cluster.representative_query),
priority=self.calculate_priority(cluster)
))
return sorted(gaps, key=lambda g: g.priority, reverse=True)
def calculate_priority(self, cluster) -> float:
# Приоритет = частота × количество уникальных пользователей × срочность
urgency_bonus = 2.0 if cluster.has_recent_spike() else 1.0
return (cluster.frequency * len(cluster.unique_users) * urgency_bonus) ** 0.5
Анализ покрытия базы знаний
Для каждой темы, требуемой бизнесом, — оценка покрытия:
class CoverageAnalyzer:
def assess_coverage(
self,
required_topics: list[str],
knowledge_base: KnowledgeBase
) -> CoverageReport:
coverage = {}
for topic in required_topics:
# Поиск релевантного контента
articles = knowledge_base.search(topic, top_k=5)
if not articles:
coverage[topic] = CoverageStatus(level=0.0, status="missing")
continue
# Оценка глубины и актуальности
coverage_score = llm.parse(f"""Оцени покрытие темы '{topic}' по найденным статьям.
Статьи:
{format_articles(articles)}
Оцени:
- Полнота (0-1): насколько полно тема раскрыта
- Актуальность (0-1): насколько информация свежая
- Практичность (0-1): есть ли примеры, инструкции
- Что не хватает: конкретные аспекты темы без покрытия""",
response_format=CoverageScore
)
coverage[topic] = CoverageStatus(
level=coverage_score.overall,
status="adequate" if coverage_score.overall > 0.7 else "insufficient",
gaps=coverage_score.missing_aspects
)
return CoverageReport(
total_topics=len(required_topics),
well_covered=[t for t, c in coverage.items() if c.level > 0.7],
gaps=[t for t, c in coverage.items() if c.level <= 0.7],
coverage_map=coverage
)
Рекомендации по устранению пробелов
На основе анализа система генерирует контент-план: список статей к созданию с приоритетами, шаблонами структуры и предложениями авторов (на основе Expertise Locator). Автоматическое создание задач в Jira/Confluence с дедлайнами, рассчитанными по частоте запросов (высокочастотные пробелы → скорее).







