Home » Техники Few-Shot Prompting: примеры и лучшие практики
Техники Few-Shot Prompting: примеры и лучшие практики

Техники Few-Shot Prompting: примеры и лучшие практики

Если вы когда-нибудь работали с LLM в продакшне, то наверняка сталкивались с той проблемой, когда модель выдает не совсем то, что хочется. Стандартные промпты работают неплохо, но иногда нужно чуть-чуть “подтолкнуть” модель в нужном направлении. Именно для этого и существует Few-Shot Prompting — техника, которая позволяет показать модели несколько примеров желаемого поведения прямо в запросе. Особенно актуально это становится при автоматизации серверных задач: парсинг логов, генерация конфигов, создание скриптов мониторинга. Сегодня разберем, как правильно использовать эту технику, чтобы получать стабильные результаты от AI-помощников в ваших DevOps-процессах.

Как работает Few-Shot Prompting

Принцип довольно простой: вместо того чтобы просто описывать, что нужно сделать, мы показываем модели несколько примеров input-output пар. Модель анализирует паттерн и применяет его к новым данным. Это как объяснить джуну задачу не через техническое задание, а показав пару готовых решений.

Базовая структура выглядит так:

Задача: [описание того, что нужно сделать]

Пример 1:
Input: [входные данные]
Output: [желаемый результат]

Пример 2:
Input: [входные данные]
Output: [желаемый результат]

Пример 3:
Input: [входные данные]
Output: [желаемый результат]

Теперь обработай:
Input: [новые данные]
Output:

Количество примеров может варьироваться от 1 (One-Shot) до 10+ (Many-Shot), но обычно достаточно 3-5 примеров для получения стабильных результатов.

Пошаговая настройка для серверных задач

Давайте сразу на практике. Допустим, нужно автоматизировать парсинг логов Apache и извлекать информацию об ошибках. Вот пошаговый алгоритм:

Шаг 1: Подготовьте репрезентативные примеры

# Создаем файл с примерами логов
cat > log_examples.txt << 'EOF'
192.168.1.100 - - [25/Dec/2023:10:00:32 +0000] "GET /api/users HTTP/1.1" 500 2048 "-" "curl/7.68.0"
10.0.0.55 - - [25/Dec/2023:10:01:15 +0000] "POST /login HTTP/1.1" 404 512 "https://example.com" "Mozilla/5.0"
172.16.0.10 - - [25/Dec/2023:10:02:48 +0000] "GET /dashboard HTTP/1.1" 200 4096 "-" "Chrome/91.0"
EOF

Шаг 2: Создайте промпт с примерами

#!/bin/bash
# Скрипт для работы с OpenAI API
PROMPT="Задача: Извлечь информацию об ошибках из логов Apache (только коды 4xx и 5xx)

Пример 1:
Input: 192.168.1.100 - - [25/Dec/2023:10:00:32 +0000] \"GET /api/users HTTP/1.1\" 500 2048
Output: ERROR | IP: 192.168.1.100 | URL: /api/users | CODE: 500 | TIME: 25/Dec/2023:10:00:32

Пример 2:
Input: 10.0.0.55 - - [25/Dec/2023:10:01:15 +0000] \"POST /login HTTP/1.1\" 404 512
Output: ERROR | IP: 10.0.0.55 | URL: /login | CODE: 404 | TIME: 25/Dec/2023:10:01:15

Пример 3:
Input: 172.16.0.10 - - [25/Dec/2023:10:02:48 +0000] \"GET /dashboard HTTP/1.1\" 200 4096
Output: OK | No error

Теперь обработай:
Input: $1
Output:"

curl -X POST https://api.openai.com/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d "{
    \"model\": \"gpt-3.5-turbo\",
    \"messages\": [{\"role\": \"user\", \"content\": \"$PROMPT\"}],
    \"max_tokens\": 100,
    \"temperature\": 0.1
  }"

Шаг 3: Тестируем и итерируем

# Тестируем скрипт
./parse_log.sh '192.168.1.200 - - [25/Dec/2023:11:30:22 +0000] "GET /api/orders HTTP/1.1" 403 1024'

# Ожидаемый результат:
# ERROR | IP: 192.168.1.200 | URL: /api/orders | CODE: 403 | TIME: 25/Dec/2023:11:30:22

Практические примеры и кейсы

Вот несколько проверенных кейсов, где Few-Shot Prompting показывает отличные результаты:

Генерация конфигов Nginx

Задача: Создать конфиг Nginx для веб-приложения

Пример 1:
Input: domain=api.example.com, port=3000, ssl=true
Output: 
server {
    listen 443 ssl;
    server_name api.example.com;
    location / {
        proxy_pass http://localhost:3000;
    }
}

Пример 2:
Input: domain=blog.test.com, port=8080, ssl=false
Output:
server {
    listen 80;
    server_name blog.test.com;
    location / {
        proxy_pass http://localhost:8080;
    }
}

Теперь создай для:
Input: domain=shop.mysite.com, port=5000, ssl=true

Парсинг системных метрик

# Скрипт для извлечения критических метрик
#!/bin/bash
METRICS_PROMPT="Задача: Проанализировать вывод top и выделить процессы с высокой нагрузкой

Пример 1:
Input: 12345 user 20 0 1024m 512m 128m S 85.5 5.2 10:30.45 nginx
Output: ALERT | PID: 12345 | PROC: nginx | CPU: 85.5% | MEM: 5.2% | STATUS: High CPU

Пример 2:
Input: 67890 www-data 20 0 2048m 1024m 256m S 15.2 12.8 2:15.30 apache2
Output: ALERT | PID: 67890 | PROC: apache2 | CPU: 15.2% | MEM: 12.8% | STATUS: High Memory

Теперь обработай:
Input: $1"

# Использование
top -bn1 | grep -E "(nginx|apache|mysql)" | while read line; do
    ./analyze_process.sh "$line"
done

Сравнение подходов и лучшие практики

Подход Точность Скорость Потребление токенов Когда использовать
Zero-Shot 60-70% Быстро Низкое Простые задачи
Few-Shot (3-5 примеров) 80-90% Средне Среднее Большинство задач
Many-Shot (10+ примеров) 90-95% Медленно Высокое Критические задачи

Положительные практики:

  • Разнообразие примеров — включайте edge cases и типичные ошибки
  • Консистентность формата — всегда используйте одинаковую структуру Input/Output
  • Релевантность — примеры должны покрывать реальные сценарии использования
  • Температура 0.1-0.3 — для детерминированных результатов

Чего избегать:

  • Противоречивые примеры — модель запутается в логике
  • Слишком сложные примеры — лучше разбить на подзадачи
  • Неполные данные — каждый пример должен быть самодостаточным

Автоматизация и интеграция

Вот как можно интегрировать Few-Shot Prompting в существующие мониторинговые системы:

#!/bin/bash
# Скрипт для автоматического анализа логов и отправки в Slack
LOGFILE="/var/log/nginx/error.log"
SLACK_WEBHOOK="https://hooks.slack.com/services/YOUR/WEBHOOK/URL"

# Функция для анализа ошибок
analyze_error() {
    local error_line="$1"
    local prompt="Задача: Классифицировать ошибки веб-сервера и предложить решение

Пример 1:
Input: 2023/12/25 10:00:32 [error] connection refused while connecting to upstream
Output: TYPE: upstream_error | SEVERITY: high | SOLUTION: check backend service

Пример 2:  
Input: 2023/12/25 10:01:15 [error] 404 Not Found
Output: TYPE: not_found | SEVERITY: medium | SOLUTION: check URL routing

Теперь проанализируй:
Input: $error_line
Output:"

    curl -s -X POST https://api.openai.com/v1/chat/completions \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer $OPENAI_API_KEY" \
      -d "{
        \"model\": \"gpt-3.5-turbo\",
        \"messages\": [{\"role\": \"user\", \"content\": \"$prompt\"}],
        \"max_tokens\": 150,
        \"temperature\": 0.2
      }" | jq -r '.choices[0].message.content'
}

# Мониторинг новых ошибок
tail -f $LOGFILE | while read line; do
    if echo "$line" | grep -q "\[error\]"; then
        analysis=$(analyze_error "$line")
        
        # Отправляем в Slack
        curl -X POST -H 'Content-type: application/json' \
          --data "{\"text\":\"🚨 Error Analysis:\n\`\`\`$analysis\`\`\`\"}" \
          $SLACK_WEBHOOK
    fi
done

Интеграция с популярными инструментами

Few-Shot Prompting отлично работает с существующими DevOps-инструментами:

Prometheus + AlertManager

# Скрипт для генерации правил алертов
#!/bin/bash
generate_alert_rule() {
    local metric="$1"
    local threshold="$2"
    
    prompt="Задача: Создать правило Prometheus alert

Пример 1:
Input: metric=cpu_usage, threshold=80
Output: 
- alert: HighCPUUsage
  expr: cpu_usage > 80
  for: 5m
  labels:
    severity: warning

Пример 2:
Input: metric=memory_usage, threshold=90  
Output:
- alert: HighMemoryUsage
  expr: memory_usage > 90
  for: 2m
  labels:
    severity: critical

Создай правило для:
Input: metric=$metric, threshold=$threshold"

    # Вызов API и сохранение результата
    echo "$prompt" | call_openai_api >> /etc/prometheus/alerts.yml
}

# Использование
generate_alert_rule "disk_usage" "85"
generate_alert_rule "network_errors" "100"

Ansible Playbook Generator

#!/bin/bash
# Генератор Ansible задач
create_ansible_task() {
    local service="$1"
    local action="$2"
    
    prompt="Задача: Создать Ansible задачу для управления сервисами

Пример 1:
Input: service=nginx, action=restart
Output:
- name: Restart nginx service
  systemd:
    name: nginx
    state: restarted
  become: yes

Пример 2:
Input: service=mysql, action=start
Output:
- name: Start mysql service
  systemd:
    name: mysql
    state: started
  become: yes

Создай задачу для:
Input: service=$service, action=$action"

    echo "$prompt" | call_openai_api >> playbook.yml
}

# Генерируем playbook
create_ansible_task "apache2" "reload"
create_ansible_task "redis" "restart"

Продвинутые техники и оптимизация

Для серверных задач можно использовать несколько продвинутых подходов:

Chain-of-Thought с Few-Shot

Задача: Диагностировать проблемы с производительностью сервера

Пример 1:
Input: Load Average: 15.2, CPU: 45%, Memory: 89%, Disk I/O: 234 MB/s
Reasoning: Высокая нагрузка при средней загрузке CPU указывает на проблему с I/O
Output: DIAGNOSIS: Disk I/O bottleneck | ACTION: Check disk usage and consider SSD upgrade

Пример 2:
Input: Load Average: 2.1, CPU: 95%, Memory: 45%, Disk I/O: 12 MB/s  
Reasoning: Высокая загрузка CPU при нормальной памяти и I/O говорит о CPU-bound задаче
Output: DIAGNOSIS: CPU bottleneck | ACTION: Identify CPU-intensive processes and optimize

Проанализируй:
Input: Load Average: 8.5, CPU: 23%, Memory: 95%, Disk I/O: 45 MB/s
Reasoning:

Conditional Few-Shot

#!/bin/bash
# Условный анализ в зависимости от типа сервера
analyze_server_issue() {
    local server_type="$1"
    local metrics="$2"
    
    case $server_type in
        "web")
            examples="Examples for web server troubleshooting..."
            ;;
        "db")
            examples="Examples for database server troubleshooting..."
            ;;
        "cache")
            examples="Examples for cache server troubleshooting..."
            ;;
    esac
    
    prompt="$examples\n\nAnalyze: $metrics"
    echo "$prompt" | call_openai_api
}

Мониторинг и отладка

Не забывайте логировать результаты работы Few-Shot промптов:

#!/bin/bash
# Функция с логированием для отладки
few_shot_with_logging() {
    local prompt="$1"
    local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
    
    echo "[$timestamp] PROMPT: $prompt" >> /var/log/ai_analysis.log
    
    result=$(echo "$prompt" | call_openai_api)
    
    echo "[$timestamp] RESULT: $result" >> /var/log/ai_analysis.log
    echo "[$timestamp] ---" >> /var/log/ai_analysis.log
    
    echo "$result"
}

# Скрипт для анализа качества результатов
analyze_quality() {
    grep "RESULT:" /var/log/ai_analysis.log | \
    awk '{print $3}' | \
    sort | uniq -c | sort -nr > /tmp/ai_results_stats.txt
    
    echo "Top AI analysis results:"
    head -10 /tmp/ai_results_stats.txt
}

Альтернативные решения и инструменты

Помимо OpenAI API, Few-Shot Prompting работает с различными моделями:

  • Ollama — локальный запуск моделей, отлично для приватных данных
  • llama.cpp — быстрая инференс для серверов
  • Hugging Face Transformers — большой выбор open-source моделей
  • Microsoft Guidance — специализированная библиотека для промптинга

Пример с Ollama для локального использования:

# Установка Ollama
curl -fsSL https://ollama.ai/install.sh | sh

# Запуск модели
ollama run llama2

# Скрипт для работы с локальной моделью
#!/bin/bash
local_few_shot_analysis() {
    local prompt="$1"
    
    curl -X POST http://localhost:11434/api/generate \
      -H "Content-Type: application/json" \
      -d "{
        \"model\": \"llama2\",
        \"prompt\": \"$prompt\",
        \"stream\": false
      }" | jq -r '.response'
}

# Использование
result=$(local_few_shot_analysis "Your few-shot prompt here")
echo "$result"

Масштабирование и производительность

Для высоконагруженных систем стоит рассмотреть несколько стратегий:

Кеширование результатов

#!/bin/bash
# Простое кеширование для повторяющихся запросов
CACHE_DIR="/tmp/ai_cache"
mkdir -p $CACHE_DIR

cached_few_shot() {
    local input="$1"
    local cache_key=$(echo "$input" | md5sum | cut -d' ' -f1)
    local cache_file="$CACHE_DIR/$cache_key"
    
    if [[ -f "$cache_file" && $(find "$cache_file" -mmin -60) ]]; then
        # Кеш актуален (младше 60 минут)
        cat "$cache_file"
    else
        # Вызываем API и сохраняем результат
        result=$(few_shot_analysis "$input")
        echo "$result" > "$cache_file"
        echo "$result"
    fi
}

# Очистка старого кеша
find $CACHE_DIR -name "*.cache" -mmin +360 -delete

Batch-обработка

#!/bin/bash
# Группировка запросов для экономии токенов
batch_few_shot_analysis() {
    local batch_file="$1"
    
    prompt="Задача: Проанализировать множественные логи

Пример 1:
Input: [лог1], [лог2], [лог3]
Output: [результат1], [результат2], [результат3]

Обработай batch:
Input: $(cat "$batch_file")
Output:"

    echo "$prompt" | call_openai_api
}

# Накопление данных в batch
echo "$log_entry" >> /tmp/batch_$(date +%M).txt

# Обработка batch каждые 5 минут через cron
# */5 * * * * /path/to/process_batch.sh

Интеграция с VPS и выделенными серверами

Для работы с AI-powered инструментами важно правильно подобрать ресурсы сервера. Если планируете использовать локальные модели через Ollama или запускать много параллельных запросов к внешним API, рассмотрите аренду VPS с достаточным объемом RAM (минимум 8GB для простых задач, 16GB+ для локальных моделей).

Для enterprise-решений с высокой нагрузкой и требованиями к приватности данных лучше использовать выделенные серверы с возможностью установки GPU для ускорения inference локальных моделей.

Заключение и рекомендации

Few-Shot Prompting — это мощный инструмент для автоматизации серверных задач, который может значительно улучшить качество работы с AI-помощниками. Основные рекомендации по использованию:

  • Начинайте с простого — 3-5 примеров обычно достаточно для большинства задач
  • Тестируйте итеративно — собирайте метрики качества и корректируйте примеры
  • Используйте кеширование — для повторяющихся задач это экономит время и деньги
  • Логируйте все — это поможет отладить и улучшить промпты
  • Рассмотрите локальные модели — для чувствительных данных или высокой нагрузки

Лучше всего Few-Shot Prompting работает для задач с четкими паттернами: парсинг логов, генерация конфигов, классификация ошибок, создание документации. Для творческих задач или сложной аналитики может потребоваться более сложные подходы.

В итоге, правильно настроенный Few-Shot Prompting может сэкономить часы рутинной работы и сделать ваши DevOps-процессы более интеллектуальными и адаптивными. Главное — начать с простых кейсов и постепенно усложнять задачи по мере накопления опыта.


В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.

Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.

Leave a reply

Your email address will not be published. Required fields are marked