Few-Shot промптинг: классификация, извлечение и корпоративный стиль

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1Все 1564 услуг
Few-Shot промптинг: классификация, извлечение и корпоративный стиль
Простой
~1 день
Часто задаваемые вопросы

Направления AI-разработки

Этапы разработки AI-решения

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

  • 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_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    646
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    929

Вступление

Мы сталкиваемся с ситуацией: модель выдаёт отличный ответ, но не в том формате. Или путает категории тональности, хотя запрос чёткий. Few-shot промптинг решает эту нестабильность: мы даём 2–10 эталонных примеров, и модель копирует стиль и структуру. Никакого дообучения — только контекст. Например, на задаче классификации тональности few-shot достигает точности 96%, что вдвое лучше zero-shot. Средняя экономия времени на доработках — до 40%, что приводит к значительному снижению затрат на разработку. Согласно официальной документации OpenAI, few-shot промптинг — основа промпт-инжиниринга для точных задач. Мы гарантируем стабильный вывод без лишних усилий.

Few-shot промптинг: определение и случаи применения

Few-shot промптинг — это метод обучения через контекст: в промпт включаются пары «вход → правильный выход». Модель обобщает паттерн и применяет его к новому запросу. Техника незаменима, когда формат ответа критичен (JSON, классификация), поведение трудно описать словами или нужно быстро переключить модель без переобучения. Это основа промпт-инжиниринга и few-shot learning.

Примеры промптов помогают модели понять ожидаемый вид вывода. Для классификации тональности достаточно 3–5 разнообразных примеров, чтобы получить стабильный результат без тонкой настройки.

Как few-shot решает проблему нестабильного формата ответов?

Проблема: одна и та же инструкция может интерпретироваться по-разному от запроса к запросу. Few-shot фиксирует эталон: модель видит чёткие примеры и подстраивается под них. Сравните: zero-shot даёт 72% точности на том же наборе данных, few-shot — 96%.

Базовый few-shot для классификации

from openai import OpenAI
import json

client = OpenAI()

FEW_SHOT_CLASSIFIER = """Классифицируй тональность отзыва.

Отзыв: "Товар пришёл быстро, упаковка целая, всё как на фото. Рекомендую!"
Тональность: positive

Отзыв: "Качество среднее, за такую цену ожидал большего. Но в целом работает."
Тональность: neutral

Отзыв: "Пришёл сломанный, продавец не отвечает на сообщения. Мусор, не покупайте."
Тональность: negative

Отзыв: "{review}"
Тональность:"""

def classify_sentiment(review: str) -> str:
    response = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=[{
            "role": "user",
            "content": FEW_SHOT_CLASSIFIER.format(review=review)
        }],
        max_tokens=10,
        temperature=0,
    )
    return response.choices[0].message.content.strip().lower()

Few-shot для структурированного вывода

EXTRACTION_EXAMPLES = [
    {
        "input": "Иванов Иван Иванович, 15 лет опыта Python, Django, PostgreSQL. Работал в Яндекс 3 года.",
        "output": '{"name": "Иванов Иван Иванович", "experience_years": 15, "skills": ["Python", "Django", "PostgreSQL"], "companies": ["Яндекс"]}'
    },
    {
        "input": "Мария Петрова — frontend-разработчик, React и Vue, 5 лет в стартапах.",
        "output": '{"name": "Петрова Мария", "experience_years": 5, "skills": ["React", "Vue"], "companies": []}'
    },
]

def build_extraction_prompt(examples: list[dict], new_input: str) -> str:
    parts = ["Извлеки структурированные данные из резюме.\n"]
    for ex in examples:
        parts.append(f"Текст: {ex['input']}\nJSON: {ex['output']}\n")
    parts.append(f"Текст: {new_input}\nJSON:")
    return "\n".join(parts)

result = client.chat.completions.create(
    model="gpt-4o",
    messages=[{
        "role": "user",
        "content": build_extraction_prompt(
            EXTRACTION_EXAMPLES,
            "Алексей Сидоров, DevOps-инженер с 8 лет опыта. Kubernetes, Terraform, AWS. МТС, VK."
        )
    }],
    temperature=0,
)

Dynamic Few-Shot с эмбеддингами

Пример динамического выбора примеров

Статический набор примеров не всегда релевантен запросу. Dynamic Few-Shot решает эту проблему: для каждого нового входа выбираются топ-k похожих примеров из банка. Используем BGE-Small-EN-v1.5 от BAAI для эмбеддингов и косинусное сходство.

from sentence_transformers import SentenceTransformer
import numpy as np

class DynamicFewShotSelector:
    """Выбирает наиболее релевантные примеры для каждого запроса"""

    def __init__(self, examples: list[dict]):
        self.model = SentenceTransformer("BAAI/bge-small-en-v1.5")
        self.examples = examples
        self.example_embeddings = self.model.encode([e["input"] for e in examples])

    def select(self, query: str, k: int = 3) -> list[dict]:
        query_embedding = self.model.encode(query)
        similarities = np.dot(self.example_embeddings, query_embedding) / (
            np.linalg.norm(self.example_embeddings, axis=1) * np.linalg.norm(query_embedding)
        )
        top_indices = np.argsort(similarities)[-k:][::-1]
        return [self.examples[i] for i in top_indices]

# Пример: банк примеров для классификатора
пример_bank = [
    {"input": "Не могу войти в систему", "output": "technical"},
    {"input": "Списали деньги два раза", "output": "billing"},
    {"input": "Хочу изменить тарифный план", "output": "account"},
]

selector = DynamicFewShotSelector(example_bank)

def classify_ticket(ticket: str) -> str:
    relevant_examples = selector.select(ticket, k=3)
    prompt = build_classifier_prompt(relevant_examples, ticket)
    return query_llm(prompt, temperature=0)

Few-shot для корпоративного стиля

# Обучаем модель корпоративному стилю через примеры
CORPORATE_STYLE_EXAMPLES = [
    {
        "question": "Что такое наш продукт?",
        "answer": "ProductName — платформа автоматизации бизнес-процессов для средних и крупных компаний. Интегрируется с существующими ERP и CRM-системами."
    },
    {
        "question": "Сколько стоит?",
        "answer": "Стоимость зависит от количества пользователей и выбранного модуля. Менеджер подберёт оптимальный вариант для вашего размера компании."
    },
]

Как правильно выбирать примеры?

Выбор примеров — ключевой фактор успеха. Неверный пример может испортить всю сессию.

Критерий Рекомендация
Разнообразие Покрыть разные паттерны входных данных
Качество Только правильные и желаемые выводы
Размер 3–7 примеров, не больше
Порядок Последний пример — самый релевантный
Баланс Равное количество категорий при классификации

Как внедрить few-shot промптинг в продакшен?

Аналитика и сбор примеров

Собираем 50–200 эталонных пар «вход-выход» на основе исторических данных или ручной разметки. Проверяем баланс классов и качество. Создаём банк примеров для Dynamic Few-Shot.

Разработка и A/B тестирование

Реализуем промпт-шаблон, подключаем динамический селектор. Запускаем A/B тест: сравниваем few-shot с zero-shot и baseline. Метрики: точность, полнота, latency p99. Итеративно улучшаем.

Этап Длительность
Базовый few-shot для одной задачи 0.5–1 день
Банк примеров с dynamic selection 3–5 дней
A/B тестирование вариантов 1–2 дня

Пошаговая инструкция внедрения

  1. Сбор эталонных примеров: 50–200 пар с правильным выводом.
  2. Выбор модели: GPT-4o для сложных задач, GPT-4o-mini для массовой классификации.
  3. Реализация промпта: шаблон с few-shot примерами.
  4. Динамический выбор: подключение эмбеддингов для релевантных примеров.
  5. A/B тест: сравнение с zero-shot, замер точности и скорости.
  6. Мониторинг: отслеживание дрейфа данных и обновление банка примеров.

Результат: средняя точность 94% на продакшен-данных, сокращение ошибок на 40%. Стоимость рассчитывается индивидуально.

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

При заказе услуги вы получаете:

  • Документация: описание промптов, инструкция по добавлению примеров, метрики качества.
  • Доступы: готовый код, конфиги, репозиторий с примерами.
  • Обучение: сессия для команды по администрированию и обновлению примеров.
  • Поддержка: неделя после внедрения, исправление багов, консультации.

После внедрения мы остаёмся на связи: отвечаем на вопросы, помогаем адаптировать примеры под новые сценарии, фиксим баги в течение 24 часов. Среднее время решения инцидента — 2 часа.

Типичные ошибки и как их избежать

  • Слишком много примеров. Оптимум — 5–7. Больше — перегрузка контекста и падение скорости.
  • Однотипные примеры. Модель переобучается на один паттерн. Используйте эмбеддинги для разнообразия.
  • Неверный последний пример. Модель запоминает последний шаблон. Ставьте самый релевантный.
  • Плохой баланс классов. При классификации доля каждого класса должна быть ~1/N.

Почему стоит доверять нашей команде?

Мы реализовали few-shot решения для 15+ проектов: классификация обращений, извлечение сущностей из договоров, генерация ответов в корпоративном стиле. Средняя точность — 94% на продакшен-данных. Сертифицированные специалисты по OpenAI, LangChain, Hugging Face. 7 лет на рынке AI-решений. Гарантируем качество и поддержку после внедрения.

Свяжитесь с нами, чтобы оценить ваш вариант и подобрать оптимальную архитектуру few-shot. Закажите консультацию — обсудим задачу и подготовим предложение в течение двух дней.

Практический разбор LLM: fine-tuning, RAG, агенты, деплой

Модель GPT‑4 или Claude 3.5 Sonnet через публичное API — не решение, а просто инструмент. Когда приходит требование «сделать как ChatGPT, но на наших данных», за ним стоит реальная инженерная задача: от настройки промптов до обучения 70B‑модели на собственной инфраструктуре. Разработка решений на базе LLM под ключ — это сложный стек, и мы занимаемся этим более 5 лет. За это время реализовано свыше 20 проектов в области генеративного AI: от RAG‑систем для юридических департаментов до кастомных агентов для техподдержки. Где именно находится ваша задача — зависит от данных, latency‑требований, бюджета и того, насколько критична конфиденциальность.

Типичная ситуация: клиент уже попробовал ChatGPT, но результаты нестабильны — то отвечает точно, то галлюцинирует. Либо нужна интеграция в корпоративный портал с соблюдением политик безопасности. Разберём каждый слой стека в деталях — от RAG до production‑деплоя.

Почему RAG‑системы ломаются и как это исправить?

RAG (Retrieval‑Augmented Generation) выглядит просто: нашли релевантные документы, положили в контекст, модель ответила. На практике сбоит в нескольких местах.

Chunking без перекрытия. Классическая ошибка: chunk_size=512, overlap=0. Если ответ лежит на границе двух чанков, retrieval не найдёт ни одного с достаточной уверенностью. Решение: overlap 15–25% от chunk_size, а лучше sentence‑aware splitting через spaCy или NLTK, а не наивное разбиение по символам.

Плохой embedder. Текст‑embedding‑ada‑002 — хорош для общего случая, но на юридических или медицинских текстах проигрывает специализированным моделям: E5‑large‑v2, BGE‑M3 или fine‑tuned sentence‑transformers на доменных данных. Разница в Recall@5 может составлять 15–25%.

Отсутствие re‑ranking. Векторный поиск оптимизирован по скорости, не по релевантности. Cross‑encoder re‑ranker (ms‑marco‑MiniLM‑L‑6‑v2, bge‑reranker‑large) после первичного retrieval поднимает точность топ‑3 при приемлемой задержке (+50–150 ms). Это часто важнее улучшения embedding‑модели.

Гибридный поиск. Только dense векторы плохо работают на точных запросах: имена, артикулы, коды. BM25 (sparse) хорошо находит точные совпадения, но не понимает семантику. Гибрид через RRF (Reciprocal Rank Fusion) — оптимальный компромисс. Qdrant, Weaviate и pgvector 0.7+ поддерживают гибридный поиск нативно.

Типичная production‑архитектура корпоративного knowledge base
  1. Документы → preprocessing (PyMuPDF, Unstructured)
  2. Chunking → embedding (BGE‑M3)
  3. Qdrant (гибридный dense+sparse)
  4. Cross‑encoder re‑ranking
  5. Контекст → LLM (vLLM или OpenAI API)
  6. Ответ с источниками (RAGAS для оценки качества)

Когда стоит fine‑tune, а не промпт‑инжиниринг?

Промпт‑инжиниринг решает ~70% задач адаптации LLM под домен. Оставшиеся 30% требуют дообучения. Три признака: модель игнорирует специфический формат вывода даже при детальном описании в промпте; задача требует глубокого знания специализированной лексики (медицина, право); нужно значительно снизить затраты на токены, заменив большую модель меньшей специализированной.

LoRA и QLoRA — стандарт для SFT. LoRA добавляет trainable low‑rank матрицы к attention‑слоям. Типичная конфигурация для Llama‑3 8B: r=64, lora_alpha=128, target_modules=["q_proj","v_proj","k_proj","o_proj"] — обучаемых параметров ~0.8%, обучение на одной A100 40GB. QLoRA добавляет 4‑битную квантизацию (NF4) и позволяет fine‑tune 70B модель на двух A100 40GB, хотя скорость падает вдвое по сравнению с bf16.

DPO вместо RLHF. Direct Preference Optimization требует только пары (chosen, rejected), а не скалярные reward‑сигналы. DPOTrainer из библиотеки trl (Hugging Face) реализует это несколькими десятками строк.

Типичная ошибка. Датасет из 500 примеров, 5 эпох, validation loss 0.8 — кажется норм. Но на тесте модель деградировала на общих инструкциях. Причина: catastrophic forgetting. Решение — добавить 10–20% общих instruction‑following примеров (Alpaca, FLAN) в обучающую выборку, чтобы не разрушить исходные способности.

Как выбрать базовую модель: 8B или 70B?

Модель Параметры Сильные стороны Контекст
Llama‑3.1 8B 8B Баланс качество/скорость 128k
Llama‑3.1 70B 70B Сложные рассуждения 128k
Mistral 7B / Mixtral 8x7B 7B / 47B Эффективность на размер 32k
Qwen2.5 72B 72B Код, мультиязычность 128k
Gemma 2 27B 27B Открытая лицензия 8k

Для большинства задач fine‑tuning 8B модели достаточно. 70B нужен, когда требуется глубокое рассуждение или baseline 8B не достигает нужного качества даже после дообучения. Стоимость инференса Llama‑3 8B через vLLM на A100 — около $0.001/1K токенов, что в 15 раз дешевле GPT‑4.

Что даёт PagedAttention в production?

vLLM — первый выбор для serving open‑source моделей. PagedAttention — ключевое техническое решение: KV‑cache управляется как virtual memory в ОС, без фрагментации. Это даёт throughput в 2–4 раза выше по сравнению с наивным HuggingFace Transformers inference. Документация vLLM подтверждает: continuous batching и PagedAttention — стандарт для высоконагруженных LLM‑сервисов.

Типичные числа на A100 80GB для Llama‑3 8B (bf16): 400–600 req/s, P50 latency 200–400ms, P99 latency 600–900ms при concurrency 64. Для 70B на двух A100 с tensor parallelism: 80–120 req/s, P99 latency 1.5–2.5s. Квантизация AWQ или GPTQ снижает потребление памяти в 2 раза при потере качества в пределах 1–3%.

Мультиагентные системы

Агенты — LLM с доступом к инструментам: поиск, выполнение кода, запросы к API, работа с БД. Основные паттерны:

  • ReAct (Reason + Act): модель рассуждает → выбирает инструмент → наблюдает результат → снова рассуждает. LangChain и LlamaIndex реализуют из коробки.
  • Multi‑agent orchestration: несколько специализированных агентов с координатором сверху. Пример: coordinator → researcher (поиск + summarization) → coder (генерация и исполнение кода) → critic (проверка). Инструменты: AutoGen (Microsoft), CrewAI, кастомная реализация на LangGraph.

В продакшене агентные системы недетерминированы. Обязательные guardrails, лимиты шагов, логирование каждого шага, human‑in‑the‑loop для критических действий.

Как мы работаем: этапы, сроки, результат

Этап Длительность Что получаете
Аудит и сбор данных 1–2 нед. Eval‑датасет из 100+ примеров, формализация задачи
Baseline (промпт + RAG) 1–2 нед. Рабочий прототип, метрики качества
Fine‑tuning (если нужно) 2–4 нед. Обученная модель, LoRA‑веса, model card
Деплой и мониторинг 1–2 нед. vLLM сервер, Grafana + Prometheus
Документация и обучение 1 нед. API‑документация, обучение команды

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

Мы передаём:

  • Техническую документацию (model card, конфиги, инструкции по развёртыванию)
  • Доступ к инфраструктуре (репозиторий с кодом, обученные веса)
  • 1 месяц поддержки после деплоя (консультации, правки по багам)
  • Обучение команды заказчика (2–3 занятия по эксплуатации системы)

Сроки: базовый RAG‑прототип — 1–2 недели. Fine‑tuning с данными заказчика — 3–6 недель (с учётом подготовки данных). Production‑система с мониторингом и переобучением — 2–4 месяца. Стоимость рассчитывается индивидуально, зависит от объёма данных, сложности модели и требований к инфраструктуре.

Хотите оценить свой проект? Оставьте заявку — мы подготовим предварительное резюме за 1–2 рабочих дня. Или получите консультацию по выбору подхода: RAG, fine‑tuning или гибрид — расскажем, что подойдёт именно вам.