- Home »

Техники 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-процессы более интеллектуальными и адаптивными. Главное — начать с простых кейсов и постепенно усложнять задачи по мере накопления опыта.
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.