Внедрение RAG для корпоративного AI-бота на сайте

Наша компания занимается разработкой, поддержкой и обслуживанием сайтов любой сложности. От простых одностраничных сайтов до масштабных кластерных систем построенных на микро сервисах. Опыт разработчиков подтвержден сертификатами от вендоров.

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Услуги, которые мы предлагаем
Показано 1 из 1Все 2062 услуг
Внедрение RAG для корпоративного AI-бота на сайте
Сложный
~2-4 недели
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1358
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1250
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    956
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1188
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    929
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    947

Внедрение RAG для корпоративного AI-бота на сайте

Типичный AI-бот, обученный только на общих данных, не знает ваш продукт. Он выдумывает ответы — галлюцинирует. RAG (Retrieval-Augmented Generation) — архитектурный паттерн — решает эту проблему: бот находит релевантные фрагменты из вашей базы знаний (документация, FAQ, статьи) и формирует ответ строго по ним. Результат — точные, проверяемые ответы без вымысла. Наш опыт: более 5 лет разработки NLP-систем, 10+ внедрённых RAG-ботов.

Например, компания с 5000 страницами технической документации тратила 20 человеко-часов в неделю на ответы однотипных вопросов. После внедрения RAG-бота время сократилось до 2 часов, а точность ответов превысила 95%. Затраты на поддержку снизились вдвое — экономия составила более 1 млн рублей в год. Экономия бюджета на поддержку достигает 60%, а окупаемость проекта — в течение полугода. При этом бот использует только проверенные данные, исключая риск утечки.

Как работает RAG-система?

RAG состоит из нескольких компонентов:

  • Knowledge base — источник данных: документация, FAQ, статьи базы знаний, страницы сайта, PDF-файлы, тикеты поддержки.
  • Ingestion pipeline — процесс загрузки, разбивки на чанки и индексации документов.
  • Vector store — база данных, хранящая эмбеддинги и обеспечивающая семантический поиск.
  • Retrieval — по запросу пользователя находим топ-N релевантных чанков.
  • Generation — отправляем найденные чанки + вопрос в LLM, получаем ответ.

Каждый этап настраивается индивидуально под ваш объём данных и требования к скорости.

Ingestion Pipeline

Разбивка документов на чанки — критичный этап. Слишком маленькие чанки теряют контекст, слишком большие — снижают точность поиска. Оптимально: 500–1000 токенов с перекрытием 100–200 токенов.

from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.document_loaders import (
    WebBaseLoader, PyPDFLoader, UnstructuredMarkdownLoader
)

def load_and_chunk_documents(sources: list[dict]) -> list:
    documents = []

    for source in sources:
        if source["type"] == "url":
            loader = WebBaseLoader(source["path"])
        elif source["type"] == "pdf":
            loader = PyPDFLoader(source["path"])
        elif source["type"] == "markdown":
            loader = UnstructuredMarkdownLoader(source["path"])

        docs = loader.load()
        documents.extend(docs)

    splitter = RecursiveCharacterTextSplitter(
        chunk_size=800,
        chunk_overlap=150,
        separators=["\n\n", "\n", ". ", " ", ""]
    )

    return splitter.split_documents(documents)

Эмбеддинги и векторное хранилище

Модели эмбеддингов:

  • text-embedding-3-small (OpenAI) — 1536 измерений, $0.02 за 1M токенов, отличное соотношение цены и качества
  • text-embedding-3-large — 3072 измерений, лучше для сложных запросов
  • multilingual-e5-large (локально, Hugging Face) — бесплатно, хорошо для русского языка

Векторные хранилища:

Решение Тип Масштаб Особенности
pgvector PostgreSQL расширение до 10M векторов Знакомый SQL, транзакции
Qdrant Self-hosted / Cloud сотни миллионов Фильтрация по payload
Weaviate Self-hosted / Cloud сотни миллионов GraphQL API
Pinecone SaaS любой Полностью управляемый
Chroma In-process / Server до 1M Удобен для старта

Для сайта со средней нагрузкой и базой до 100 000 документов — pgvector или Qdrant. Не нужно поднимать отдельный сервис.

import psycopg2
from pgvector.psycopg2 import register_vector
import numpy as np

def store_embeddings(chunks: list, embeddings: list[list[float]]):
    conn = psycopg2.connect(DATABASE_URL)
    register_vector(conn)
    cur = conn.cursor()

    cur.execute("""
        CREATE TABLE IF NOT EXISTS documents (
            id SERIAL PRIMARY KEY,
            content TEXT,
            embedding vector(1536),
            metadata JSONB,
            source_url TEXT,
            created_at TIMESTAMP DEFAULT NOW()
        )
    """)
    cur.execute("CREATE INDEX IF NOT EXISTS documents_embedding_idx ON documents USING ivfflat (embedding vector_cosine_ops) WITH (lists = 100)")

    for chunk, embedding in zip(chunks, embeddings):
        cur.execute(
            "INSERT INTO documents (content, embedding, metadata, source_url) VALUES (%s, %s, %s, %s)",
            (chunk.page_content, np.array(embedding), json.dumps(chunk.metadata), chunk.metadata.get("source", ""))
        )

    conn.commit()

Поиск: семантический и гибридный

Семантический поиск возвращает чанки по косинусному сходству эмбеддингов. Для точных запросов (артикулы, имена) он иногда промахивается — тогда подключаем гибридный поиск с полнотекстовым индексом (BM25).

def hybrid_search(query: str, top_k: int = 5) -> list[dict]:
    # Семантический поиск
    query_embedding = get_embedding(query)
    conn = psycopg2.connect(DATABASE_URL)
    register_vector(conn)
    cur = conn.cursor()

    cur.execute("""
        SELECT content, source_url, metadata,
               1 - (embedding <=> %s::vector) AS similarity
        FROM documents
        WHERE 1 - (embedding <=> %s::vector) > 0.75
        ORDER BY embedding <=> %s::vector
        LIMIT %s
    """, (query_embedding, query_embedding, query_embedding, top_k * 2))
    semantic_results = cur.fetchall()

    # Полнотекстовый поиск
    cur.execute("""
        SELECT content, source_url, ts_rank(to_tsvector('russian', content), query) AS rank
        FROM documents, to_tsquery('russian', %s) query
        WHERE to_tsvector('russian', content) @@ query
        ORDER BY rank DESC LIMIT %s
    """, (prepare_ts_query(query), top_k * 2))
    keyword_results = cur.fetchall()

    # Reciprocal Rank Fusion
    return reciprocal_rank_fusion(semantic_results, keyword_results, top_k)

Generation: формирование ответа

from openai import OpenAI

client = OpenAI()

SYSTEM_PROMPT = """Ты помощник службы поддержки компании.
Отвечай ТОЛЬКО на основе предоставленного контекста.
Если ответа нет в контексте — честно скажи об этом.
Не придумывай информацию. Указывай источник из контекста."""

def generate_answer(query: str, context_chunks: list[dict]) -> dict:
    context = "\n\n".join([
        f"[Источник: {c['source']}]\n{c['content']}"
        for c in context_chunks
    ])

    response = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=[
            {"role": "system", "content": SYSTEM_PROMPT},
            {"role": "user", "content": f"Контекст:\n{context}\n\nВопрос: {query}"}
        ],
        temperature=0.1,
        max_tokens=800
    )

    sources = list({c["source"] for c in context_chunks if c.get("source")})

    return {
        "answer": response.choices[0].message.content,
        "sources": sources,
        "chunks_used": len(context_chunks)
    }

Re-ranking и оценка качества

Векторный поиск возвращает кандидатов по косинусному сходству, но не всегда самый семантически близкий чанк — самый полезный. Cross-encoder re-ranking переоценивает кандидатов с учётом вопроса, поднимая релевантные чанки в топ. Мы используем модель cross-encoder/ms-marco-MiniLM-L-6-v2 из библиотеки Sentence Transformers.

Метрики RAG-системы включают Faithfulness (не противоречит ли ответ контексту), Answer Relevance (отвечает ли на вопрос), Context Recall (все ли нужные факты найдены) и Context Precision (нет ли лишнего в контексте). Для оценки применяем RAGAS (open-source) и LangSmith (платный SaaS). Настроенный мониторинг гарантирует стабильное качество.

Обновление индекса

При изменении контента на сайте нужно пересчитать эмбеддинги. Стратегии:

  • Полная переиндексация — раз в сутки, при объёме до 50 000 документов занимает 15–30 минут.
  • Инкрементальная — при изменении страницы удаляем старые чанки по source_url, добавляем новые. Подходит для CMS с webhook на публикацию.
  • Мягкое удаление — помечаем устаревшие чанки флагом, не удаляем немедленно. Позволяет откатиться при ошибке.

Сколько времени занимает внедрение RAG?

Сроки зависят от объёма данных и требований. Ориентировочные этапы:

Этап Срок
Ingestion pipeline + эмбеддинги + pgvector 5–7 дней
Retrieval + базовая генерация 3–4 дня
Гибридный поиск + re-ranking 3–4 дня
Чат-интерфейс на сайте (виджет) 4–5 дней
Инкрементальная переиндексация 2–3 дня
Метрики качества + мониторинг 3–4 дня

Минимально рабочий RAG-бот с одним источником данных — 2 недели. Продуктовая система с несколькими источниками, гибридным поиском и мониторингом — 4–5 недель.

Что входит в работу

При заказе внедрения RAG вы получаете:

  • Полноценный ingestion pipeline под ваши источники данных
  • Векторное хранилище (pgvector или Qdrant)
  • Семантический и гибридный поиск
  • Генерацию ответов с указанием источников
  • Re-ranking для повышения точности
  • Интеграцию с сайтом (виджет чата)
  • Документацию по архитектуре и настройке
  • Обучение сотрудников работе с системой
  • Гарантию 3 месяца на работу системы

Мы имеем опыт внедрения RAG для интернет-магазинов, корпоративных порталов и служб поддержки. Реализовали 10+ проектов.

Закажите внедрение RAG под ключ — свяжитесь с нами для оценки вашего проекта. Получите консультацию бесплатно.

Интеграция AI: чат-боты, RAG, семантический поиск, рекомендации

В 8 из 10 проектов «AI-чат-бот» оказывается дорогой обёрткой над GPT-4o с системным промптом. Без доступа к реальным данным компании. Пользователь спрашивает «сколько стоит тариф Премиум» — бот галлюцинирует цену из воздуха. Спрашивает «когда придёт заказ» — получает вежливое «напишите в поддержку». Это не интеграция — это имитация. Мы за 5 лет внедрили RAG-решения в 30+ проектах: от интернет-магазинов до медицинских порталов. Гарантируем: полезная AI-помощь начинается там, где модель читает ваши документы, а не общие ответы.

Как мы строим RAG-системы?

Retrieval-Augmented Generation — стандартная архитектура: запрос → поиск релевантных фрагментов в векторной БД → вставка найденного в контекст → ответ модели. Но дьявол в деталях реализации. Разберём ключевые узлы, которые определяют качество.

Chunking. Резать документ на куски по 500 токенов без оглядки на структуру — гарантия потери смысла. Если разрез пришёлся на середину абзаца, контекст разрывается. Решение — рекурсивный RecursiveCharacterTextSplitter с overlap 10–15% для документации. Для контрактов и инструкций используем семантический сплиттер: выделяем заголовки, списки, блоки кода — каждый раздел становится независимым чанком. Разница в качестве поиска: на одном медицинском проекте precision вырос с 0.55 до 0.84 только за счёт правильной нарезки.

Модель эмбеддингов. Для русскоязычных текстов intfloat/multilingual-e5-large даёт заметный прирост точности против устаревшей text-embedding-ada-002. По нашим замерам, NDCG@10 на тестовой выборке из 10 000 пар «запрос-документ» на 12% выше. OpenAI text-embedding-3-large — хороший вариант для англоязычного контента, но для русского рекомендуем BAAI/bge-m3 или упомянутую e5-large.

Векторная БД. Если у вас уже стоит PostgreSQL — pgvector экономит ресурсы. Ставим расширение CREATE EXTENSION vector, добавляем колонку vector(1024), создаём HNSW-индекс. На проекте с 80 000 статей поддержки p95 поиска — 12 мс. Этого хватает. Для каталогов с миллионами единиц — Qdrant или Weaviate: нативный гибридный поиск и шардирование «из коробки».

Что даёт гибридный поиск?

Только векторный поиск слеп к точным совпадениям: артикулы «ABC-123», имена собственные, аббревиатуры теряются. Только полнотекстовый поиск не улавливает синонимы и перефразирования. Комбинация через RRF (Reciprocal Rank Fusion) даёт лучшее из двух миров: BM25 + векторный поиск, результаты смешиваются. На практике recall@20 растёт с 0.65 до 0.92 — разница заметна пользователю.

Reranking — финальный фильтр: top-20 кандидатов из гибридного поиска прогоняем через cross-encoder cross-encoder/ms-marco-MiniLM-L-6-v2. Он добавляет 50–100 мс к ответу, но relevance поднимает ещё на 5–10%. Без reranking чат-бот может показывать нерелевантные документы.

Семантический поиск на сайте

Поиск «удобные кожаные кресла» должен находить товары с описанием «мягкие стулья из натуральной кожи» — обычный LIKE-поиск не способен. Наша архитектура: при добавлении товара/поста автоматически генерируем эмбеддинг через multilingual-e5-large, сохраняем в pgvector. На запросе — эмбеддим его той же моделью, ищем ближайших соседей через cosine distance с HNSW-индексом. Для каталога из 100 000 позиций индекс строится 3 минуты, в памяти ~400 Мбайт (1536-мерные векторы). Cреднее время поиска — 20 мс.

Рекомендательные системы

Коллаборативная фильтрация («пользователи, похожие на вас, покупали X») требует истории — минимум 2–3 месяца данных с 1000+ активных пользователей. Для стартапов или малых проектов используем content-based: эмбеддинг текущего товара → поиск ближайших соседей по косинусной близости. Когда накапливается статистика (обычно 15–20 взаимодействий на пользователя), переключаемся на гибридную модель LightFM. Она объединяет и поведение, и признаки товаров. У нас в e-commerce проекте с 50 000 SKU гибридная модель повысила конверсию в рекомендательный блок на 18% (A/B-тест длился 2 недели).

Стриминг ответов

Пользователь не обязан ждать, пока модель сгенерирует весь текст — это убивает UX. Server-Sent Events (SSE) — протокол для стриминга токенов. OpenAI SDK поддерживает stream: true, возвращая AsyncIterator. На фронтенде — Vercel AI SDK (useChat) или самописный EventSource. Типичная ошибка: использовать WebSocket для однонаправленного стрима — SSE проще (меньше кода, встроенный реконнект). Стек: Node.js + SSE + React.

Оркестрация агентов

Простой чат-бот отвечает. Агент — выполняет действия: создаёт тикет в Jira, проверяет статус заказа в CRM, бронирует слот в календаре. Для оркестрации используем LangGraph: граф состояний, где каждый узел — вызов модели или инструмента. Vercel AI SDK useChat + tools для Next.js позволяет добавить интеграцию в 10 строк кода. Главная сложность — надёжность: модель иногда вызывает не тот инструмент или передаёт кривые параметры. Защита — Zod-схемы на каждый инструмент и structured outputs для гарантии JSON.

Что входит в работу

Этап Результат Срок
Аудит данных и бизнес-логики Карта источников, формат документов, оценка качества 1–2 дня
Прототип RAG или рекомендательной системы Демонстрация с метриками (recall, precision, latency) 1–2 недели
Интеграция в существующее веб-приложение API-эндпоинты, интерфейс для чат-бота/поиска 1–2 недели
A/B-тестирование и оптимизация Отчёт по метрикам (CTR, конверсия, hallucination rate) 1 неделя
Документация и обучение команды Руководство по эксплуатации, код-ревью 2–3 дня

Дополнительно: мы передаём исходный код векторизатора, дашборды мониторинга (Langfuse), доступ к админке для обновления базы знаний. Постпродакшн-поддержка — 1 месяц бесплатно.

Сроки

Задача Ориентировочный срок
RAG-чат-бот на базе существующей базы знаний 3–6 недель
Семантический поиск по каталогу 2–4 недели
Рекомендательная система с A/B-тестированием 6–10 недель
Мультиагентная система с интеграциями от 8 недель

Стоимость рассчитывается индивидуально после знакомства с проектом. Оценим ваш проект за 1 день. Свяжитесь с нами — расскажем, как превратить AI из игрушки в инструмент, который приносит прибыль.