Автоматизированная оптимизация подсказок с Gemini Flash
Научитесь оптимизировать подсказки программно для повышения производительности модели с помощью Gemini 2.0 Flash.
Переход к программному созданию подсказок
В данном руководстве мы переходим от традиционного создания подсказок к более системному, программируемому подходу, рассматривая подсказки как настраиваемые параметры, а не статический текст. Вместо того чтобы догадываться, какая инструкция или пример сработает лучше, мы строим оптимизационный цикл вокруг Gemini 2.0 Flash, который проводит эксперименты, оценивает и автоматически выбирает наилучшую конфигурацию подсказок.
Преимущества оптимизации на основе данных
В этой реализации мы наблюдаем, как наша модель улучшается шаг за шагом, что демонстрирует, как создание подсказок становится намного более мощным, когда мы координируем его с поиском на основе данных, а не интуицией.
Настройка Gemini 2.0 Flash
import google.generativeai as genai
import json
import random
from typing import List, Dict, Tuple, Optional
from dataclasses import dataclass
import numpy as np
from collections import Counter
def setup_gemini(api_key: str = None):
if api_key is None:
api_key = input("Введите ваш API-ключ Gemini: ").strip()
genai.configure(api_key=api_key)
model = genai.GenerativeModel('gemini-2.0-flash-exp')
print("✓ Gemini 2.0 Flash настроен")
return modelСоздание набора данных
Мы генерируем небольшой, но разнообразный набор данных для анализа настроений для обучения и проверки с помощью функции create_dataset:
def create_dataset() -> Tuple[List[Example], List[Example]]:
train_data = [
Example("Этот фильм был абсолютно фантастическим! Лучший фильм года.", "положительный"),
Example("Ужасный опыт, бесполезная трата времени и денег.", "отрицательный"),
# ... другие примеры ...
]
val_data = [
Example("Абсолютно люблю это, не могу быть счастливее!", "положительный"),
Example("Пришло сломанное, очень расстроен.", "отрицательный"),
# ... другие примеры ...
]
return train_data, val_dataРеализация модели
Мы оборачиваем Gemini в класс SentimentModel для оценки:
class SentimentModel:
def __init__(self, model, prompt_template: PromptTemplate):
self.model = model
self.prompt_template = prompt_template
def predict(self, text: str) -> Prediction:
prompt = self.prompt_template.format(text)
# ... логика предсказания ...
def evaluate(self, dataset: List[Example]) -> float:
# ... логика оценки ...Оптимизация подсказок
Мы представляем класс PromptOptimizer:
class PromptOptimizer:
def __init__(self, model):
self.model = model
self.instruction_candidates = [
"Анализируйте настроение следующего текста. Классифицируйте как положительное, отрицательное или нейтральное.",
# ... другие инструкции ...
]
def select_best_examples(self, train_data: List[Example], val_data: List[Example], n_examples: int = 3) -> List[Example]:
# ... логика выбора примеров ...
def optimize_instruction(self, examples: List[Example], val_data: List[Example]) -> str:
# ... логика для оптимизации инструкции ...Внедрение лучших практик
Для окончательной оптимизации мы компилируем результаты в PromptTemplate:
def compile(self, train_data: List[Example], val_data: List[Example], n_examples: int = 3) -> PromptTemplate:
best_examples = self.select_best_examples(train_data, val_data, n_examples)
best_instruction = self.optimize_instruction(best_examples, val_data)
# ... вернуть оптимизированный шаблон ...Тестирование и результаты
Наконец, оцените оптимизированную модель по сравнению с базовыми:
print(f"Базовая линия (ноль-съем): {baseline_score:.1f}%")
print(f"Оптимизированная (собранная): {optimized_score:.1f}%")Заключение
Благодаря программной оптимизации подсказок мы достигаем более надежного, основанного на доказательствах рабочего процесса для разработки высокопроизводительных подсказок, что открывает возможности для более богатых наборов данных и более обширного охвата задач в AI.
Switch Language
Read this article in English