Реалізація AI-сумаризації тексту на сайті

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.
Розробка та обслуговування будь-яких видів сайтів:
Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Реалізація AI-сумаризації тексту на сайті
Середня
~2-3 робочих дні
Часті питання
Наші компетенції:
Етапи розробки
Останні роботи
  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Реалізація AI-суммаризації тексту на сайті

Суммаризація — одна з найбільш затребуваних задач для контентних сайтів: новинні агрегатори, юридичні портали, медичні довідники, бази знань. Користувач отримує короткий виклад за 2–3 секунди замість читання 10-сторінкового документа.

Підходи до суммаризації

Екстрактивна суммаризація — вибір ключових речень з вихідного тексту без змін формулювань. Швидко, передбачувано, без галюцинацій. Реалізується через sumy, gensim, або алгоритм TextRank.

Абстрактивна суммаризація — генерація нового тексту, що передає суть. Якість вище, але потребує LLM. Використовуйте для текстів до 4000 токенів.

Гібридний підхід — спочатку екстрактивний метод скорочує текст до 20% від оригіналу, потім LLM формує фінальний виклад. Працює з документами будь-якої довжини.

Інтеграція через LLM API

Для більшості завдань достатньо OpenAI GPT-4o-mini або Anthropic Claude Haiku — вони дешевші флагманів та справляються з суммаризацією добре.

from openai import OpenAI

client = OpenAI()

def summarize_text(text: str, max_words: int = 150, language: str = "uk") -> str:
    prompt = f"""Склади короткий виклад наступного тексту українською мовою.
Максимум {max_words} слів. Зберігай ключові факти, цифри та висновки.
Не додавай вступних фраз типу "У цьому тексті розглядається".

Текст:
{text}"""

    response = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=[{"role": "user", "content": prompt}],
        max_tokens=300,
        temperature=0.3
    )
    return response.choices[0].message.content

Температура 0.3 дає стабільні результати без зайвої варіативності.

Обробка довгих документів

Контекстне вікно GPT-4o-mini — 128K токенів, але відправлення туди цілого документа дорого. Оптимальна схема для текстів від 5000 слів:

  1. Розділити документ на чанки по 1500–2000 слів з перекриттям 200 слів
  2. Суммаризувати кожен чанк незалежно
  3. Об'єднати проміжні підсумки та суммаризувати повторно
def chunk_text(text: str, chunk_size: int = 1500, overlap: int = 200) -> list[str]:
    words = text.split()
    chunks = []
    start = 0
    while start < len(words):
        end = start + chunk_size
        chunks.append(" ".join(words[start:end]))
        start = end - overlap
    return chunks

def summarize_long_document(text: str) -> str:
    chunks = chunk_text(text)
    chunk_summaries = [summarize_text(chunk, max_words=100) for chunk in chunks]
    combined = "\n\n".join(chunk_summaries)
    return summarize_text(combined, max_words=200)

Кешування результатів

Суммаризація одного й того ж тексту повторно — пустатрата грошей. Кешувати потрібно по хешу вихідного тексту:

import hashlib
import redis

cache = redis.Redis()
CACHE_TTL = 86400 * 7  # 7 днів

def get_summary_cached(text: str, **kwargs) -> str:
    key = "summary:" + hashlib.sha256(text.encode()).hexdigest()
    cached = cache.get(key)
    if cached:
        return cached.decode()

    summary = summarize_text(text, **kwargs)
    cache.setex(key, CACHE_TTL, summary)
    return summary

UI компонент

function TextSummary({ text, maxLength = 150 }) {
  const [summary, setSummary] = useState('');
  const [loading, setLoading] = useState(false);

  async function fetchSummary() {
    setLoading(true);
    const res = await fetch('/api/summarize', {
      method: 'POST',
      body: JSON.stringify({ text, max_words: maxLength }),
    });
    const data = await res.json();
    setSummary(data.summary);
    setLoading(false);
  }

  return (
    <div className="summary-box">
      <button onClick={fetchSummary} disabled={loading}>
        {loading ? 'Суммаризація...' : 'Отримати виклад'}
      </button>
      {summary && <p className="summary-text">{summary}</p>}
    </div>
  );
}

Терміни

  • Абстрактивна суммаризація через API — 2–3 дні
  • Обробка довгих документів (chunking) — плюс 1–2 дні
  • Екстрактивна + абстрактивна гібридна — плюс 2–3 дні
  • UI інтеграція + кешування — плюс 1–2 дні
  • Мультимовна + метрики якості — 2–3 тижні