Este tutorial demuestra cómo implementar la técnica de autorrefina utilizando modelos de idiomas grandes (LLM) con Mirascope, un poderoso marco para construir flujos de trabajo de inmediato estructurados. El autorrefino es una estrategia de ingeniería rápida en la que el modelo evalúa su propio resultado, genera retroalimentación y mejora iterativamente su respuesta en función de esa retroalimentación. Este bucle de refinamiento se puede repetir varias veces para mejorar progresivamente la calidad y la precisión de la respuesta final.
El enfoque de autorrefino es particularmente efectivo para las tareas que involucran razonamiento, generación de código y creación de contenido, donde las mejoras incrementales conducen a resultados significativamente mejores. Mira el Códigos completos aquí
Instalación de las dependencias
!pip install "mirascope[openai]"
Clave de API de OpenAI
Para obtener una llave de API de OpenAI, visite https://platform.openai.com/settings/organization/api-keys y generar una nueva clave. Si es un nuevo usuario, es posible que deba agregar detalles de facturación y realizar un pago mínimo de $ 5 para activar el acceso a la API. Mira el Códigos completos aquí
import os
from getpass import getpass
os.environ["OPENAI_API_KEY"] = getpass('Enter OpenAI API Key: ')
Implementación básica de auto-refino
Comenzamos implementando la técnica de autorefino utilizando los decoradores de Mirascope’s @OpenAI.Call y @Prompt_Template. El proceso comienza con generar una respuesta inicial a una consulta de usuario. Esta respuesta es evaluada por el modelo en sí, que proporciona retroalimentación constructiva. Finalmente, el modelo utiliza esta retroalimentación para generar una respuesta mejorada. La función Self_refine nos permite repetir este proceso de refinamiento para un número especificado de iteraciones, mejorando la calidad de la salida con cada ciclo. Mira el Códigos completos aquí
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(
"""
Here is a query and a response to the query. Give feedback about the answer,
noting what was correct and incorrect.
Query:
{query}
Response:
{response}
"""
)
def evaluate_response(query: str, response: OpenAICallResponse): ...
@openai.call(model="gpt-4o-mini")
@prompt_template(
"""
For this query:
{query}
The following response was given:
{response}
Here is some feedback about the response:
{feedback}
Consider the feedback to generate a new response to the query.
"""
)
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 = "A train travels 120 km at a certain speed. If the speed had been 20 km/h faster, it would have taken 30 minutes less to cover the same distance. What was the original speed of the train?"
print(self_refine(query, 1))
AutoRefino mejorado con modelo de respuesta
En esta versión mejorada, definimos un modelo de respuesta estructurada MathSolution usando Pydantic para capturar tanto los pasos de solución como la respuesta numérica final. La función mejorada_generate_new_esponse refina la salida incorporando retroalimentación generada por el modelo y formateo de la respuesta mejorada en un esquema bien definido. Este enfoque garantiza la claridad, la consistencia y la mejor usabilidad posterior de la respuesta refinada, especialmente para tareas como la resolución de problemas matemáticos. Mira el Códigos completos aquí
from pydantic import BaseModel, Field
class MathSolution(BaseModel):
steps: list[str] = Field(..., description="The steps taken to solve the problem")
final_answer: float = Field(..., description="The final numerical answer")
@openai.call(model="gpt-4o-mini", response_model=MathSolution)
@prompt_template(
"""
For this query:
{query}
The following response was given:
{response}
Here is some feedback about the response:
{feedback}
Consider the feedback to generate a new response to the query.
Provide the solution steps and the final numerical answer.
"""
)
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
# Example usage
result = enhanced_self_refine(query, 1)
print(result)
La técnica mejorada de auto-refina demostró ser efectiva para resolver con precisión el problema matemático dado:
“Un tren viaja 120 km a cierta velocidad. Si la velocidad hubiera sido de 20 km/h más rápido, habría tardado 30 minutos menos en cubrir la misma distancia. ¿Cuál era la velocidad original del tren?”
A través de una sola iteración de refinamiento, el modelo entregó una derivación lógicamente sólida y paso a paso que conduce a la respuesta correcta de 60 km/h. Esto ilustra varios beneficios clave del enfoque de autorrefino:
- Precisión mejorada a través de la mejora iterativa basada en retroalimentación.
- Pasos de razonamiento más claros, incluida la configuración variable, la formulación de la ecuación y la aplicación de solución cuadrática.
- Mayor transparencia, lo que facilita a los usuarios comprender y confiar en la solución.
En aplicaciones más amplias, esta técnica es muy prometedora para las tareas que exigen precisión, estructura y mejora iterativa, que se extiende desde la resolución de problemas técnicos hasta la escritura creativa y profesional. Sin embargo, los implementadores deben mantenerse conscientes de las compensaciones en el costo computacional y ajustar las indicaciones de profundidad y retroalimentación para que coincidan con su caso de uso específico.
Mira el Códigos completos aquí. Todo el crédito por esta investigación va a los investigadores de este proyecto. Además, siéntete libre de seguirnos Gorjeo Y no olvides unirte a nuestro Subreddit de 100k+ ml y suscribirse a Nuestro boletín.
Preguntas frecuentes: ¿Puede MarktechPost ayudarme a promover mi producto AI y colocarlo frente a los desarrolladores de IA e ingenieros de datos?
Respuesta: Sí, MarktechPost puede ayudar a promover su producto AI publicando artículos patrocinados, estudios de casos o características del producto, dirigida a una audiencia global de desarrolladores de IA e ingenieros de datos. La plataforma MTP es ampliamente leída por profesionales técnicos, aumentando la visibilidad y el posicionamiento de su producto dentro de la comunidad de IA. [SET UP A CALL]