<НА ГЛАВНУЮ

Автоматизированная оптимизация подсказок с 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

Switch to English