Разработка AI-powered wiki-платформы

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1 услугВсе 1566 услуг
Разработка AI-powered wiki-платформы
Сложная
от 1 недели до 3 месяцев
Часто задаваемые вопросы
Направления AI-разработки
Этапы разработки AI-решения
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1218
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    853
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1047
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    561
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    825

AI-платформа вики (AI-powered Wiki)

Вики работает, пока её поддерживают. Перестают поддерживать почти всегда — через 6–12 месяцев после запуска. AI-powered Wiki меняет механику: система сама поддерживает актуальность, предлагает контент при создании новых страниц, автоматически связывает статьи и отвечает на вопросы напрямую, не требуя навигации по структуре.

Основные AI-функции платформы

Автогенерация черновиков — при создании новой страницы AI создаёт структурированный черновик на основе заголовка и контекста соседних статей.

Умный поиск — semantic search вместо keyword, с ответом на естественный вопрос.

Автосвязывание — при сохранении статьи система находит семантически связанные страницы и предлагает добавить ссылки.

Детектор устаревания — мониторит изменения в репозиториях и системах, оповещает владельцев статей о потенциальном устаревании.

AI-ассистент — чат-интерфейс для вопросов по базе знаний прямо в боковой панели.

Архитектура: стек для self-hosted вики

# Бэкенд: FastAPI + LlamaIndex + Qdrant + PostgreSQL
# Фронтенд: React + Tiptap (rich text editor)

from llama_index.core import VectorStoreIndex, Document
from llama_index.core.query_engine import RetrieverQueryEngine
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from llama_index.llms.openai import OpenAI
from sqlalchemy import create_engine
from sqlalchemy.orm import Session

class WikiPlatform:
    def __init__(self, db_engine, qdrant_client, openai_key: str):
        self.db = db_engine
        self.embed_model = HuggingFaceEmbedding(
            model_name="intfloat/multilingual-e5-large"
        )
        self.llm = OpenAI(model="gpt-4o-mini", api_key=openai_key)
        self.index = self._build_index(qdrant_client)

    def draft_new_page(self, title: str, space_context: list[str]) -> str:
        """Генерирует черновик новой страницы"""
        context_summary = "\n".join([f"- {c}" for c in space_context[:5]])

        prompt = f"""Создай структурированный черновик вики-статьи.

Заголовок: {title}
Контекст (соседние статьи в разделе):
{context_summary}

Создай черновик в Markdown:
- Краткое введение (2–3 предложения)
- Разделы с заголовками H2/H3
- Placeholder'ы [TODO: заполни X] для разделов, которые требуют экспертных знаний
- Список связанных тем для See Also

Создай структуру, не заполняй технические детали — это задача автора."""

        return self.llm.complete(prompt).text

    def find_related_pages(self, page_content: str, all_pages: list[dict]) -> list[dict]:
        """Находит семантически связанные статьи"""
        page_emb = self.embed_model.get_text_embedding(page_content[:1000])

        scored = []
        for p in all_pages:
            p_emb = self.embed_model.get_text_embedding(p["title"] + " " + p["summary"])
            from numpy import dot
            from numpy.linalg import norm
            score = dot(page_emb, p_emb) / (norm(page_emb) * norm(p_emb))
            if score > 0.72:
                scored.append({"page": p, "score": float(score)})

        return sorted(scored, key=lambda x: x["score"], reverse=True)[:5]

    def answer_question(self, question: str) -> dict:
        """Отвечает на вопрос с цитатами источников"""
        query_engine = RetrieverQueryEngine.from_args(
            retriever=self.index.as_retriever(similarity_top_k=6),
            llm=self.llm
        )
        response = query_engine.query(question)

        return {
            "answer": str(response),
            "sources": [
                {
                    "title": n.metadata.get("title", "Без названия"),
                    "url": n.metadata.get("url", ""),
                    "score": round(n.score or 0, 3)
                }
                for n in response.source_nodes
            ]
        }

Интеграция с редактором (Tiptap + AI)

// AI-ассистент в редакторе вики
import { Extension } from "@tiptap/core";

const AIAssistExtension = Extension.create({
  name: "aiAssist",

  addKeyboardShortcuts() {
    return {
      "Ctrl-Space": () => {
        const { selection, doc } = this.editor.state;
        const currentText = doc.textBetween(
          Math.max(0, selection.from - 200),
          selection.from
        );
        this.triggerCompletion(currentText);
        return true;
      },
    };
  },

  async triggerCompletion(context: string) {
    const response = await fetch("/api/wiki/autocomplete", {
      method: "POST",
      body: JSON.stringify({ context, page_title: this.options.pageTitle }),
    });
    const { suggestion } = await response.json();
    this.editor.commands.insertContent(suggestion);
  },
});

Автоматический мониторинг актуальности

import asyncio
from github import Github

class StalenessMonitor:
    """Следит за изменениями в системах и оповещает владельцев статей"""

    async def check_code_changes(self, article: dict, github_token: str):
        """Проверяет, изменился ли код, на который ссылается статья"""
        g = Github(github_token)
        code_refs = self._extract_code_references(article["content"])

        for ref in code_refs:
            # ref = {"repo": "company/api", "path": "src/auth/oauth.py"}
            try:
                repo = g.get_repo(ref["repo"])
                commits = repo.get_commits(path=ref["path"], since=article["last_updated_at"])
                if commits.totalCount > 0:
                    await self._notify_owner(article, ref, commits[0])
            except Exception:
                pass

    async def _notify_owner(self, article: dict, changed_ref: dict, commit):
        notification = {
            "article_id": article["id"],
            "owner": article["owner_email"],
            "message": f"Файл {changed_ref['path']} изменился после последнего обновления статьи",
            "commit_url": commit.html_url,
            "action": "review_required"
        }
        await self.notification_service.send(notification)

Кейс: технологическая компания, 150 разработчиков. Confluence с 600 страницами, половина которых не обновлялась > года. После развёртывания AI-вики: количество вопросов в Slack-каналах #dev-help снизилось на 31% за первые 2 месяца, а время онбординга нового разработчика (по оценке менеджеров) сократилось с 3 недель до 1.5 недель.

Сроки

  • Базовая AI-вики (поиск + автосвязывание): 4–6 недель
  • С генерацией черновиков и встроенным ассистентом: 8–10 недель
  • Self-hosted деплой с интеграцией GitHub/GitLab: +2–3 недели