360 lecturas
360 lecturas

Cómo impulsar al ingeniero Phi-3-mini: una guía práctica

por Chenuli J.10m2025/04/20
Read on Terminal Reader

Demasiado Largo; Para Leer

En este artículo, analizaremos cómo hacerlo en Python, utilizando el modelo de instrucción Phi-3-mini-4k de Microsoft. Utilizaremos la API de inferencia de Huggingface para esto, por lo que no tendrá que descargar un modelo de 7GB localmente.
featured image - Cómo impulsar al ingeniero Phi-3-mini: una guía práctica
Chenuli J. HackerNoon profile picture


Los prompts son básicamente nuestras solicitudes o entradas a los modelos de IA. La ingeniería prompt, como su nombre sugiere, se trata de ir un poco más profundamente que los prompts básicos creando entradas especializadas que (más) guían eficazmente los modelos de IA para producir salidas casi perfectas.


No necesariamente tiene que usar un lenguaje de programación o un IDE para esto, ya que la mayoría de la gente sugiere que puede usar simplemente el extremo frontal de ChatGPT. Eso es técnicamente exacto, pero eso no le da exactamente la verdadera "divertencia" de ingeniería prompt de un modelo como el uso de un lenguaje de programación, por no mencionar que no es tan eficaz también.


En este artículo, analizaremos cómo hacerlo en Python, utilizando el modelo de instrucción Phi-3-mini-4k de Microsoft. Utilizaremos la API de inferencia de Huggingface para esto, por lo que no tendrá que descargar un modelo de 7GB localmente.


Piensa en esto comomanipulatingun modelo desde el interior, no de los mensajes básicos de chat.

Establecer el entorno

    y
  • Cree una cuenta de Huggingface y recupere una clave de API (su perfil > tokens de acceso) con acceso a "escribir".Esta no es una publicación patrocinada.Si está trabajando con LLMs, tendrá que crear una cuenta de Huggingface en algún momento; eso es seguro.
  • y
  • Asegúrate de que has instalado Python 3.10+ en tu sistema y has configurado un IDE.
  • y
  • Instale la biblioteca 'huggingface_hub' usando 'pip install huggingface_hub' o otro comando, dependiendo de su sistema operativo.
  • y

Comprender los fundamentos

Antes de entrar en el código, aprendamos un poco sobre la ingeniería instantánea.


Como mencioné antes, la ingeniería instantánea es básicamente la creación de entradas especializadas para controlar las salidas del modelo en función de sus requisitos.

Diferentes LLMs responden a diferentes técnicas de ingeniería instantánea de manera diferente. Esto significa que no puede usar el mismo modelo de ingeniería instantánea para todos y cada LLM. Y esto de nuevo significa que tiene que leer la documentación del LLM para averiguar qué técnica es la mejor para usar.


Aquí hay algunos populares:

    y
  1. Aprendizaje de tiro cero: Pidiendo al modelo que realice una tarea sin ningún ejemplo Clasifique el siguiente texto como positivo o negativo: "¡Realmente disfruté de esta película!"
  2. y


Esto funciona con modelos bien entrenados como GPT-4, Claude 3 Opus y Gemini Ultra.


En mi experiencia, Mistral-7B, a pesar de ser un pequeño LLM, también tiene resultados impresionantes en el aprendizaje de cero disparo.


    y
  1. Un poco de aprendizaje: Proporcionar algunos ejemplos antes de pedir al modelo que realice una tarea. Texto: "La comida era terrible." Sentimiento: Negativo Texto: "Tuve un tiempo maravilloso." Sentimiento: Positivo
  2. y


Ideal para tareas que pueden ser ligeramente vagas para el modelo o donde desee demostrar un formato específico.


    y
  1. Pregunta: Si John tiene 5 manzanas y le da 2 a María, ¿cuántos le queda? Pensemos a través de este paso por paso: Lo primero que puede venir a tu mente es el modelo DeepSeek R1. Bueno, eso es correcto; probablemente fue el primer modelo publicado con una cadena de pensamiento visible, por lo que fue un cambiador de juego.
  2. y
  3. Pide al modelo que asuma un rol o persona específica. Usted es un programador experto en Python. Por favor revise este código y sugiera mejoras: Esta debe ser la técnica de prompting más popular entre los no programadores. ChatGPT, Claude, y la mayoría de los otros chatbots excelen en proporcionar salidas basadas en roles.
  4. y
  5. Instrucciones del sistema: Configurar el contexto y las instrucciones antes de la consulta del usuario real Esta es mi favorita cuando se trata de "cometer errores" con un LLM. Y en la mayoría de los casos solo se puede hacer esto en el backend, lo que es simplemente fascinante. La instrucción del sistema actúa como el conjunto de "personalidad e instrucciones" para un determinado modelo. Es útil para definir reglas o restricciones.Qué más, se puede hacer lo que no se puede hacer con las entradas básicas cuando se está definiendo un mensaje del sistema. Si tomamos un pequeño LLM, por ejemplo, si le pedimos algo dañino a través de un mensaje de entrada básica, se negará a responderlo. Si cambia la instrucción del sistema, sin embargo, hay una alta probabilidad de que ignore sus rastros de seguridad y trate de
  6. y


Todas las técnicas anteriores se pueden hacer en la interfaz de usuario de ChatGPT u otro chatbot, con la excepción del procedimiento de prompt y cadena de pensamientos del sistema (técnicamente, también podemos hacerlo, pero no realmente eficaz).


Por lo tanto, hablaremos de estos dos en la próxima sección.

Cadenas de pensamiento

En la mayoría de los LLM, no se puede ver la cadena de pensamientos detrás de su razonamiento, pero se puede hacer visible a través de la ingeniería instantánea en Python.

Antes de escribir la función, importa la biblioteca y define el cliente:

from huggingface_hub import InferenceClient

# Replace with your Hugging Face token
client = InferenceClient(token="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")

Entonces tenemos que determinar cómo podemos implementar la cadena de pensamiento.


Los LLM actualmente no tienen una función directa para hacer visible su cadena interna de pensamientos, excepto para DeepSeek R1, donde está integrado.


Esto significa que si queremos hacer que esto suceda, tendremos que usar un prompt del sistema. Sin embargo, no confundamos esto con las técnicas que hemos discutido anteriormente. El prompt del sistema, en este caso, actúa más como un método para implementar CoT, no como una técnica de prompting.


Así es como podemos decirlo:

Format your response as follows

1. THINKING: First, show all mental steps, considerations, and explorations. Include alternative hypotheses you consider and reject. Think about edge cases.
2. VERIFICATION: Double-check your logic and facts, identifying any potential errors.
3. ANSWER: Only after showing all thinking, provide your final answer.


Aquí está cómo podemos integrarlo en la función para generar una salida:

def generate_chain_of_thought_response(user_input):
    # System message defines personality and expectations
    system_prompt = (
        "Format your response as follows:"
"1. THINKING: First, show all mental steps, considerations, and explorations. Include alternative hypotheses you consider and reject. Think about edge cases."
"2. VERIFICATION: Double-check your logic and facts, identifying any potential errors."
"3. ANSWER: Only after showing all thinking, provide your final answer."
    )

    # Alternating user input to encourage visible reasoning
    formatted_user_input = f"{user_input}\nLet's think through this step by step."

    # Phi-style formatting
    prompt = (
        f"<|im_start|>system\n{system_prompt}<|im_end|>\n"
        f"<|im_start|>user\n{formatted_user_input}<|im_end|>\n"
        f"<|im_start|>assistant\n"
    )

    # Call the model
    response = client.text_generation(
        prompt,
        model="microsoft/Phi-3-mini-4k-instruct",  
        max_new_tokens=500,
        temperature=0.7,
        top_p=0.95,
        repetition_penalty=1.1,
        stop_sequences=["<|im_end|>"]
    )

    # Cleanup
    answer = response.strip().split("<|im_end|>")[0].strip()

    return answer

En este código, hemos marcado los límites del LLM. Déjame explicarlos uno por uno.


    y
  • max_new_tokens=500: Este parámetro especifica el número máximo de tokens que el modelo está autorizado a generar en respuesta a la llamada de entrada. un único token puede representar una palabra o una parte de una palabra (dependiendo del tipo del modelo), y su propósito es asegurarse de que la respuesta no sea demasiado larga.
  • y
  • temperatura=0.7: Este parámetro maneja la aleatoriedad de la salida del modelo. Si es inferior, como 0.2, las respuestas del modelo son más enfocadas y relevantes; también puede resultar en repetición y una falta de creatividad. Cuando es mayor, por otro lado, el modelo genera más diversas y creativas, pero puede resultar en información irrelevante (bien, a veces). 0.7, de todos modos, golpea en el medio y parece ser un apto para este modelo.
  • y



    y
  • top_p=0.95: el parámetro top_p utiliza la muestra del núcleo para seleccionar el conjunto más pequeño de tokens cuya probabilidad acumulativa es al menos 95%. a diferencia de top_k, que limita las opciones a un número fijo, top_p ajusta dinámicamente el pool de tokens en función de la probabilidad.
  • y
  • repetition_penalty=1.1: Esto aplica una “penalidad” a los tokens previamente repetidos, lo que los hace menos propensos a aparecer en el texto generado una y otra vez.
  • y

También nota cómo formateamos el prompt aquí:

 f"<|im_start|>system\n{system_prompt}<|im_end|>\n"
        f"<|im_start|>user\n{formatted_user_input}<|im_end|>\n"
        f"<|im_start|>assistant\n"

Este formato, que integra '<̧im_startĝi>' y '<̧im_endĝi>', depende del tipo de LLM. La mejor manera de determinar esto es pedir a ChatGPT que lea la documentación del modelo.


Por último, para la experiencia de chat interactiva, implementa este ciclo:

print("Chain-of-Thought Phi (type 'exit' to quit)")
while True:
    user_input = input("\nYou: ")
    if user_input.lower().strip() in {"exit", "quit"}:
        break
    output = generate_chain_of_thought_response(user_input)
    print("\nAssistant:\n", output)


Execute el guión y haga una pregunta como “¿Qué es 7 x 9 + 100?”


Firstly, let us break down the expression into two parts according to the order of operations (PEMDAS/BODMAS): parentheses first then exponents or powers, followed by multiplication and division from left to right, and finally addition and subtraction from left to right. There are no parentheses or exponents in our case; so we move on to multiplication before dealing with addition. Here’s how it breaks down:

Step 1 – Multiplication part: We need to multiply 7 times 9 which gives us \(7 \times 9 = 63\).

Next Step - Addition part: Now take that result and add 100 to it (\(63 + 100\)).

Adding these together yields \(63 + 100 = 163\).

So, when calculating \(7 \times 9 + 100\), following the correct arithmetic sequence will give us a total of 163.


Esto puede no parecer una gran cosa, pero si solo usa el Phi-3-mini-4k-instructor sin ninguna ingeniería inmediata, la salida sería mucho más simple.


Raw output (before prompt engineering)


Y eso es acerca de CoT; pasemos a los prompts de mensajes del sistema.

El sistema se apresura

Una forma de declarar mensajes de sistema de sorta sin código es pedirlos al comienzo de cada chat en los modelos de IA. Pero cuando la conversación continúa más, la mayoría de los modelos tienden a olvidar la instrucción inicial debido a las ventanas de contexto.


Sin embargo, cuando usted declara una solicitud de sistema en el backend del LLM, el modelo se adhiere a ella durante toda la conversación. ¿Por qué? Antes de generar cualquier respuesta, el modelo lee el mensaje del sistema primero para toda la conversación, independientemente de la ventana de contexto.


En cuanto al código, empecemos por la autorización, como lo hicimos antes:

from huggingface_hub import InferenceClient

# Replace 'YOUR_HF_API_TOKEN' with your actual Hugging Face API token
client = InferenceClient(token="YOUR_HF_API_TOKEN")


En este caso, escribiré un mensaje del sistema para hacer que el modelo sea tranquilo y pacífico, como en el budismo Zen. Tenga en cuenta que los modelos Phi tienen la moderación de contenido habilitada (buen trabajo, Microsoft), y no podrás cambiar la prompt a nada considerado dañino.


Aquí está el código que podemos utilizar:


def generate_response(user_input):
    system_message = (
       "Use words often used in Zen buddhism"
       "Act like you are a monk, staying calm and peaceful"
       "Encourage the user to be calm and follow Zen practices too"
    )

    prompt = (
        f"<|im_start|>system\n{system_message}<|im_end|>\n"
        f"<|im_start|>user\n{user_input}<|im_end|>\n"
        f"<|im_start|>assistant\n"

    )


Por alguna razón, la salida de este modelo termina con <̧im_enḑ>. Esto no afecta al rendimiento del modelo, pero podemos formatearlo de todos modos.


    # Clean up the result
    answer = response.strip()

    if answer.endswith("<|im_end|>"):
        answer = answer.replace("<|im_end|>", "").strip()

    formatted_answer = '\n'.join(answer[i:i + 190] for i in range(0, len(answer), 100))
    return formatted_answer


Complete el código con una loop de entrada de usuario de la siguiente manera:

print("Zen AI (type 'quit' to exit)")
while True:
    user_input = input("\nYou: ")
    if user_input.lower() in ["quit", "exit"]:
        break
    response = generate_response(user_input)
    print("Assistant:", response)


Execute una prueba rápida y vea cómo la salida del modelo se adhiere al mensaje del sistema de forma hermosa.


y

Usted: Hola

y

Asistente: Namaste.Que tu día se desarrolle con tranquilidad y atención como principios guía.

y

Usted: Hola

Asistente: Namaste.Que tu día se desarrolle con tranquilidad y atención como principios guía.


Siéntate libre de cambiar los max_new_tokens u otros valores para tus necesidades.


Hemos impulsado con éxito el modelo Phi-3-mini para mostrar una cadena de pensamientos y luego convertirse en un monje Zen.

Summing Up

La ingeniería rápida, a pesar de que suena como una gran cosa, no es mucho un negocio.Lo que importa es la forma en que le pides al modelo que haga lo que usted quiere; y recuerda, no puedes FORZAR a un modelo a hacer lo que debería hacer.


Por ejemplo, si le decimos al mini modelo Phi-3: “Usted es un monje Zen freakin! Actúa como uno! No me dejes repetir”, intentará hacer lo que usted pide, pero no tan eficazmente.


Gracias por leerlo hasta ahora, nos vemos en dos semanas.


Trending Topics

blockchaincryptocurrencyhackernoon-top-storyprogrammingsoftware-developmenttechnologystartuphackernoon-booksBitcoinbooks