Мастерство техники Self-Refine с большими языковыми моделями и Mirascope
Узнайте, как использовать Mirascope для реализации техники Self-Refine с большими языковыми моделями, чтобы улучшать ответы ИИ через итеративную доработку.
Что такое техника Self-Refine
В этом руководстве показано, как реализовать технику Self-Refine с использованием больших языковых моделей (LLM) и фреймворка Mirascope, который позволяет строить структурированные рабочие процессы с подсказками. Self-Refine — это стратегия prompt engineering, при которой модель оценивает собственный ответ, формирует обратную связь и итеративно улучшает результат на основе этой обратной связи. Цикл улучшения можно повторять несколько раз, чтобы повысить качество и точность итогового ответа.
Применение и преимущества
Техника Self-Refine особенно эффективна для задач, связанных с рассуждениями, генерацией кода и созданием контента, где постепенные улучшения приводят к заметно лучшим результатам.
Установка зависимостей
Для начала установите необходимые пакеты:
!pip install "mirascope[openai]"Настройка OpenAI API ключа
Получите ключ API OpenAI на https://platform.openai.com/settings/organization/api-keys. Новым пользователям может потребоваться добавить платежные данные и внести минимальный платеж в $5 для активации доступа.
Пример настройки:
import os
from getpass import getpass
os.environ["OPENAI_API_KEY"] = getpass('Введите OpenAI API Key: ')Базовая реализация Self-Refine
С помощью декораторов Mirascope процесс начинается с генерации начального ответа, его оценки и создания улучшенного ответа на основе обратной связи. Цикл может повторяться для повышения точности.
from mirascope.core import openai, prompt_template
from mirascope.core.openai import OpenAICallResponse
@openai.call(model="gpt-4o-mini")
def call(query: str) -> str:
return query
@openai.call(model="gpt-4o-mini")
@prompt_template(
"""
Вот запрос и ответ на него. Дайте обратную связь по ответу,
отметьте, что было правильно и что нет.
Запрос:
{query}
Ответ:
{response}
"""
)
def evaluate_response(query: str, response: OpenAICallResponse): ...
@openai.call(model="gpt-4o-mini")
@prompt_template(
"""
Для этого запроса:
{query}
Был дан следующий ответ:
{response}
Вот обратная связь по ответу:
{feedback}
Используйте обратную связь для создания нового ответа.
"""
)
def generate_new_response(
query: str, response: OpenAICallResponse
) -> openai.OpenAIDynamicConfig:
feedback = evaluate_response(query, response)
return {"computed_fields": {"feedback": feedback}}
def self_refine(query: str, depth: int) -> str:
response = call(query)
for _ in range(depth):
response = generate_new_response(query, response)
return response.content
query = "Поезд проезжает 120 км с определённой скоростью. Если бы скорость была на 20 км/ч больше, время в пути сократилось бы на 30 минут. Какова была исходная скорость поезда?"
print(self_refine(query, 1))Расширенная версия с моделью ответа
В этой версии используется Pydantic для создания структурированной модели MathSolution, которая фиксирует шаги решения и окончательный числовой ответ, что повышает ясность и удобство использования.
from pydantic import BaseModel, Field
class MathSolution(BaseModel):
steps: list[str] = Field(..., description="Шаги решения задачи")
final_answer: float = Field(..., description="Окончательный числовой ответ")
@openai.call(model="gpt-4o-mini", response_model=MathSolution)
@prompt_template(
"""
Для этого запроса:
{query}
Был дан следующий ответ:
{response}
Вот обратная связь по ответу:
{feedback}
Используйте её для создания нового ответа.
Укажите шаги решения и окончательный числовой ответ.
"""
)
def enhanced_generate_new_response(
query: str, response: OpenAICallResponse
) -> openai.OpenAIDynamicConfig:
feedback = evaluate_response(query, response)
return {"computed_fields": {"feedback": feedback}}
def enhanced_self_refine(query: str, depth: int) -> MathSolution:
response = call(query)
for _ in range(depth):
solution = enhanced_generate_new_response(query, response)
response = f"Steps: {solution.steps}\nFinal Answer: {solution.final_answer}"
return solution
# Пример использования
result = enhanced_self_refine(query, 1)
print(result)Результаты и преимущества
Данная техника успешно решила математическую задачу за одну итерацию, предоставив пошаговое рассуждение и правильный ответ — 60 км/ч. Ключевые преимущества:
- Повышенная точность благодаря итеративной обратной связи
- Чёткие шаги решения
- Прозрачность и доверие к ответу
Техника подходит для задач, требующих точности и структурированного подхода, от технических решений до творческого письма. Важно учитывать вычислительные затраты и настраивать количество итераций под задачи.
Дополнительные ресурсы
Полный код и подробности доступны в оригинальном руководстве. Следите за исследователями в Twitter и присоединяйтесь к сообществу AI для обновлений и обсуждений.
Switch Language
Read this article in English