AI-курація та оновлення бази знань
Ми часто бачимо, як база знань, яку не підтримують, гірша за відсутність бази знань. Вона створює ілюзію порядку, але насправді сповнена застарілих інструкцій, дублюючих статей і мертвих посилань. Ручна курація при обсязі 500+ статей нереалістична: у редактора просто немає часу систематично перевіряти кожну.
Наша AI-система курування не замінює експертів, але автоматично виявляє проблеми, розставляє пріоритети для рев'ю та пропонує конкретні правки — редактор працює з готовим рев'ю-листом, а не з голим контентом. За 5 років роботи ми обробили бази знань від 200 до 10 000 статей та гарантуємо покращення метрик свіжості та покриття.
Як AI виявляє застарілий контент?
Система аналізує кожну статтю за декількома параметрами. По-перше, перевіряється дата останнього оновлення та зіставляється з тематикою: статті про версії ПЗ втрачають актуальність швидше, ніж концептуальні матеріали. По-друге, LLM оцінює вміст на предмет згадки застарілих версій, назв продуктів або команд. Наприклад, якщо в статті згадується v1.2, а поточна версія v3.0 — ставиться прапорець. По-третє, перевіряються внутрішні посилання: биті посилання відправляються до списку на виправлення. Для ембеддингів ми використовуємо SentenceTransformer, а для оркестрації LLM — LangChain.
П'ять типів проблем, які виявляє AI
- Застарілий контент — версії ПЗ, назви команд, посилання на неіснуючі процеси.
- Дублювання — семантично схожі статті за різними URL.
- Прогалини — питання, які користувачі часто ставлять, але статті немає.
- Низька якість — статті без acceptance criteria, без прикладів, з розпливчастими формулюваннями.
- Порушені зв'язки — внутрішні посилання ведуть на неіснуючі сторінки.
from langchain_openai import ChatOpenAI
from sentence_transformers import SentenceTransformer
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np
from datetime import datetime, timedelta
class KnowledgeBaseAuditor:
def __init__(self, confluence_client, llm: ChatOpenAI, embedder: SentenceTransformer):
self.confluence = confluence_client
self.llm = llm
self.embedder = embedder
def find_duplicates(self, articles: list[dict], threshold: float = 0.88) -> list[tuple]:
"""Знаходить семантично дублюючі статті"""
texts = [f"{a['title']} {a['body'][:500]}" for a in articles]
embeddings = self.embedder.encode(texts, batch_size=32, show_progress_bar=True)
# Попарне порівняння — тільки верхній трикутник матриці
sim_matrix = cosine_similarity(embeddings)
np.fill_diagonal(sim_matrix, 0)
duplicates = []
for i in range(len(articles)):
for j in range(i + 1, len(articles)):
if sim_matrix[i][j] >= threshold:
duplicates.append((
articles[i]["id"], articles[i]["title"],
articles[j]["id"], articles[j]["title"],
round(float(sim_matrix[i][j]), 3)
))
return sorted(duplicates, key=lambda x: x[4], reverse=True)
async def check_staleness(self, article: dict) -> dict:
"""Оцінює застарілість статті через LLM"""
last_updated = datetime.fromisoformat(article["last_updated"])
age_days = (datetime.now() - last_updated).days
prompt = f"""Оціни свіжість технічної статті.
Заголовок: {article['title']}
Вміст (перші 1000 символів):
{article['body'][:1000]}
Останнє оновлення: {age_days} днів тому
Перевір:
1. Чи згадуються конкретні версії ПЗ/інструментів? Чи актуальні вони?
2. Чи є застарілі терміни (наприклад, назва старої команди або продукту)?
3. Посилання виглядають актуально?
4. Загальна оцінка актуальності: актуально/потребує_перевірки/застаріло
Поверни JSON: {{staleness_level, reasons: [], suggested_action}}"""
result = await self.llm.ainvoke(prompt)
return {"article_id": article["id"], **eval(result.content)}
def find_content_gaps(
self,
support_queries: list[str],
articles: list[dict]
) -> list[dict]:
"""Знаходить питання, на які немає статей"""
# Індексуємо існуючі статті
article_embs = self.embedder.encode(
[a["title"] + " " + a["body"][:200] for a in articles]
)
gaps = []
for query in support_queries:
query_emb = self.embedder.encode([query])
similarities = cosine_similarity(query_emb, article_embs)[0]
max_sim = np.max(similarities)
if max_sim < 0.65: # немає достатньо схожої статті
gaps.append({
"query": query,
"best_match_score": round(float(max_sim), 3),
"best_match_article": articles[np.argmax(similarities)]["title"]
})
return sorted(gaps, key=lambda x: x["best_match_score"])
Автоматичне пропонування правок
Після виявлення проблем — генерація конкретних покращень:
async def suggest_improvements(self, article: dict) -> dict:
prompt = f"""Перевір статтю бази знань та запропонуй конкретні покращення.
Стаття: {article['title']}
Текст:
{article['body'][:2000]}
Оціни та запропонуй правки за кожним критерієм:
1. Ясність — чи зрозуміла стаття новому співробітнику?
2. Повнота — чи є приклади, конкретні кроки?
3. Структура — чи потрібні заголовки, списки?
4. Актуальність — чи немає застарілих деталей?
Для кожної проблеми: цитата з оригіналу → пропонована правка.
Поверни JSON: {{score: 0-10, issues: [{{location, problem, suggestion}}]}}"""
result = await self.llm.ainvoke(prompt)
return {"article_id": article["id"], **eval(result.content)}
Дашборд стану бази знань
| Метрика | Як рахується | Цільове значення |
|---|---|---|
| Coverage Rate | % питань із саппорту з відповіддю в KB | > 70% |
| Freshness Score | % статей оновлених < 6 міс тому | > 80% |
| Duplication Rate | % дублюючих пар / всього статей | < 5% |
| Quality Score | Середній AI-бал якості по всіх статтях | > 7.5/10 |
| Broken Links Rate | % статей з неробочими посиланнями | < 2% |
Приклад дашборда після аудиту
Статистика по базі з 800 статей:
- Дуби: 67 пар
- Застарілі: 124 статті (>18 міс)
- Прогалини: 89 питань без статей
- Середній Quality Score: 6.2/10
Чому автоматичне курування ефективніше за ручне?
Порівняємо: редактор-людина витрачає в середньому 15–20 хвилин на перевірку однієї статті. Для бази з 800 статей це 200–270 годин безперервної роботи — без урахування часу на виправлення. AI-система обробляє той самий обсяг за 2–3 години аналізу та видає пріоритезований список проблем. Редактору залишається лише затвердити або відхилити запропоновані правки. Таким чином, AI скорочує час курації в 15–20 разів, зберігаючи якість.
| Параметр | Ручна курація | AI-курація |
|---|---|---|
| Час на 500 статей | 125–175 годин | 2–3 години аналізу |
| Повнота охоплення | Залежить від втоми редактора | 100% статей |
| Об'єктивність | Суб'єктивно | Стандартизовані критерії |
| Оновлюваність | Раз на квартал | Щотижня |
Що входить в роботу
- Аудит поточної бази знань: повний аналіз статей, виявлення дублів, застарілого контенту, прогалин.
- Налаштування AI-пайплайну: інтеграція з Confluence, Notion, GitBook або API; вибір моделі, налаштування порогів схожості.
- Дашборд з метриками: візуалізація Freshness Score, Coverage Rate, Duplication Rate, Quality Score.
- Автоматичні рекомендації: LLM генерує конкретні правки для кожної проблемної статті.
- Навчання команди: семінар з роботи з системою, передача документації.
- Гарантія підтримки: 3 місяці супроводу після впровадження.
За нашими даними, після впровадження AI-курації компанії скорочують час на підтримку бази знань на 60–80%.
Процес роботи
- Аналітика: збір та структурування поточних статей, вивантаження логів пошуку та запитів у саппорт.
- Проектування: вибір архітектури (RAG, fine-tuning або zero-shot), підбір моделі та ембедера.
- Реалізація: розробка пайплайну аудиту, інтеграція зі сховищем, налаштування дашборду.
- Тестування: прогін на тестовій вибірці, звірка з експертною оцінкою, калібрування порогів.
- Деплой: запуск у продакшн, передача команді, навчання.
Терміни та вартість
Терміни залежать від обсягу бази та складності інтеграції. Аудит та виявлення проблем займають від 1 до 2 тижнів. Система автоматичних рекомендацій та дашборд — ще 3–4 тижні. Вартість розраховується індивідуально після оцінки вашої бази знань та поточних процесів. Ми гарантуємо прозоре ціноутворення та фіксацію вартості на етапі договору.
Оцінимо ваш проект безкоштовно. Зв'яжіться з нами, щоб отримати попередній аналіз та дашборд метрик вашої бази знань.







