Реализация Few-Shot промптинга

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

Реализация Few-Shot промптинга

Few-Shot Prompting — включение в промпт 2–10 примеров входа-выхода, демонстрирующих желаемый формат и стиль ответа. Модель обобщает паттерн из примеров и применяет его к новому входу. Наиболее эффективен для задач, где точный формат вывода критичен или желаемое поведение сложно описать словами.

Базовый 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)

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)
        )

        # Топ-k наиболее похожих
        top_indices = np.argsort(similarities)[-k:][::-1]
        return [self.examples[i] for i in top_indices]

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

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 для конкретной задачи: 0.5–1 день
  • Банк примеров с dynamic selection: 3–5 дней
  • A/B тестирование вариантов few-shot: 1–2 дня