Bienvenidos
😃 Básico
💼 Aplicaciones básicas
🧙‍♂️ Intermediate
🤖 Agentes
⚖️ Reliability
🖼️ Image Prompting
🔓 Prompt Hacking
🔨 Tooling
💪 Prompt Tuning
🎲 Miscellaneous
Models
📙 Referencia de Vocabulario
📚 Bibliography
📦 Prompted Products
🛸 Recursos adicionales
🔥 Hot Topics
✨ Créditos
💼 Aplicaciones básicas🟢 ChatGPT a partir de GPT-3

ChatGPT a partir de GPT-3

🟢 This article is rated easy
Reading Time: 5 minutes
Last updated on August 7, 2024

Sander Schulhoff

Introducción

ChatGPT ha explotado en el último mes, ganando un millón de usuarios en solo una semana. Sorprendentemente, el modelo subyacente, GPT-3, debutó en 2020 y se lanzó para acceso público hace más de un año.

Para aquellos que no lo saben, ChatGPT es un nuevo modelo de lenguaje de OpenAI que fue ajustado a partir de GPT-3 para ser optimizado para la conversación. Tiene una interfaz de chat fácil de usar, donde puedes ingresar una entrada y obtener una respuesta de un asistente de inteligencia artificial. Échale un vistazo en chat.openai.com.

Si bien las primeras versiones de GPT-3 no eran tan avanzadas como la actual serie GPT-3.5, aún eran impresionantes. Estos modelos han estado disponibles a través de una API y una interfaz de usuario web de

playground que te permite ajustar ciertos hiperparámetros de configuración y probar prompts. GPT-3 ganó una tracción significativa, pero no se acercó a la viralidad de ChatGPT.

Lo que hace que ChatGPT sea tan exitoso en comparación con GPT-3 es su accesibilidad como un asistente de IA sencillo para la persona promedio, independientemente de su conocimiento de la ciencia de datos, los modelos de lenguaje o la IA.

En este artículo, describo cómo se pueden implementar chatbots como ChatGPT utilizando un modelo de lenguaje grande como GPT-3.

Motivación

Este artículo se escribió en parte debido a un tweet de

Riley Goodside, que señaló cómo podría haberse implementado ChatGPT.

Al igual que otros modelos de la serie GPT-3.5, ChatGPT fue entrenado utilizando RLHF, pero gran parte de su efectividad proviene de utilizar un buen prompt.

El prompt

Prompt completo de Skippy del encabezado del artículo

El prompting es el proceso de instruir a una IA para que haga algo.

Como probablemente hayas visto en los ejemplos de ChatGPT en línea, puedes pedirle que haga casi cualquier cosa. Los casos de uso comunes son resumir textos, escribir contenido basado en una descripción o crear cosas como poemas, recetas y mucho más.

ChatGPT es tanto un modelo de lenguaje como una interfaz de usuario. La entrada de prompt que el usuario introduce en la interfaz se inserta en realidad en un prompt más grande que contiene toda la conversación entre el usuario y ChatGPT. Esto permite que el modelo de lenguaje subyacente comprenda el contexto de la conversación y responda adecuadamente.

Ejemplo de inserción de prompt de usuario antes de enviarlo al modelo

El modelo de lenguaje completa el prompt determinando qué palabras vienen a continuación en función de las probabilidades que aprendió durante el pre-entrenamiento.

GPT-3 es capaz de 'aprender' a partir de una instrucción simple o unos pocos ejemplos en el prompt. Esto se llama aprendizaje con pocos ejemplos, o aprendizaje en contexto. En el prompt del chatbot de arriba, creo un chatbot ficticio llamado Skippy y le pido que proporcione respuestas a los usuarios. GPT-3 se da cuenta del formato de ida y vuelta, USER: {entrada del usuario} y SKIPPY: {respuesta de Skippy}. GPT-3 entiende que Skippy es un chatbot y que los intercambios anteriores son una conversación, por lo que cuando proporcionamos la siguiente entrada del usuario, "Skippy" responderá.

Memorización

Los intercambios anteriores entre Skippy y el usuario se agregan al siguiente prompt. Cada vez que proporcionamos más entrada del usuario y obtenemos más salida del chatbot, el prompt se expande para incorporar este nuevo intercambio. Así es como los chatbots como Skippy y ChatGPT pueden recordar las entradas anteriores. Sin embargo, hay un límite en cuanto a cuánto puede recordar un chatbot de GPT-3.

Los prompts pueden llegar a ser muy largos después de varias interacciones, especialmente si estamos utilizando el chatbot para generar respuestas largas como publicaciones de blog. Los prompts enviados a GPT-3 se convierten en tokens, que son palabras individuales o partes de ellas. Existe un límite de

4097 tokens (aproximadamente 3000 palabras)

para el prompt combinado y la respuesta generada para modelos GPT-3, incluyendo ChatGPT.

Algunos ejemplos

Hay muchos casos de uso diferentes para prompts de chatbot que almacenan conversaciones previas. ChatGPT está destinado a ser un asistente general multipropósito y, en mi experiencia, rara vez hace preguntas de seguimiento.

Chatbot de terapia que pregunta sobre tu día

Puede ser útil tener un chatbot que haga preguntas y obtenga comentarios del usuario. A continuación se muestra un ejemplo de prompt de chatbot de terapia que hará preguntas y seguimientos para ayudar al usuario a reflexionar sobre su día.

Prompt de chatbot de terapia

Habla con tu yo más joven utilizando antiguas entradas de diario

Michelle Huang usó GPT-3 para tener una conversación con su yo más joven. El prompt utiliza algo de contexto, en este caso antiguas entradas de diario, combinado con un formato de ida y vuelta de chatbot. GPT-3 es capaz de imitar una personalidad basada en estas entradas.

Prompt del Tweet:

El siguiente es una conversación entre Michelle presente (edad [redactada]) y Michelle joven (edad 14).

Michelle joven ha escrito las siguientes entradas en su diario:
[entradas del diario aquí]

Michelle presente: [escribe tus preguntas aquí]

La autora señala que las entradas de diario pueden alcanzar el límite de tokens. En este caso, podrías seleccionar algunas entradas o tratar de resumir varias entradas.

Implementación

Voy a explicar cómo codificar un chatbot simple impulsado por GPT-3 en Python. Incluir GPT-3 en una aplicación que estés construyendo es increíblemente fácil utilizando la API de OpenAI. Necesitarás crear una cuenta en OpenAI y obtener una clave API. Echa un vistazo a su documentación

aquí.

Visión general de lo que tenemos que hacer:

  1. Formatear la entrada del usuario en un mensaje de chatbot para GPT-3.
  2. Obtener la respuesta del chatbot como una respuesta de GPT-3.
  3. Actualizar el mensaje con tanto la entrada del usuario como la respuesta del chatbot.
  4. Repetir.

Aquí está el mensaje que utilizaré. Podemos usar Python para reemplazar

<historial de conversación>

y

<entrada del usuario>

con sus valores reales.

chatbot_prompt = """
    Como chatbot avanzado, tu objetivo principal es ayudar a los usuarios de la mejor manera posible. Esto puede implicar responder preguntas, proporcionar información útil o completar tareas basadas en la entrada del usuario. Para ayudar eficazmente a los usuarios, es importante ser detallado y exhaustivo en tus respuestas. Usa ejemplos y evidencias para respaldar tus puntos y justificar tus recomendaciones o soluciones.


<historial de conversación>

    Usuario:
<entrada del usuario>
    Chatbot:"""

Mantengo un registro tanto de la próxima entrada del usuario como de la conversación anterior. Cada iteración se agrega una nueva entrada/salida entre el chatbot y el usuario.

import openai

openai.api_key = "TU CLAVE API AQUÍ"
model_engine = "text-davinci-003"
chatbot_prompt = """
Como chatbot avanzado, tu objetivo principal es ayudar a los usuarios de la mejor manera posible. Esto puede implicar responder preguntas, proporcionar información útil o completar tareas basadas en la entrada del usuario. Para ayudar eficazmente a los usuarios, es importante ser detallado y exhaustivo en tus respuestas. Usa ejemplos y evidencias para respaldar tus puntos y justificar tus recomendaciones o soluciones.

<historial de conversación>

Usuario:
<entrada del usuario>
Chatbot:"""


def obtener_respuesta(historial_de_conversacion, entrada_del_usuario):
    mensaje = chatbot_prompt.replace("<historial de conversación>", historial_de_conversacion).replace("<entrada del usuario>", entrada_del_usuario)

    # Obtener la respuesta de GPT-3
    respuesta = openai.Completion.create(
        engine=model_engine, prompt=mensaje, max_tokens=2048, n=1, stop=None, temperature=0.5)

    # Extraer la respuesta del objeto de respuesta
    texto_respuesta = respuesta["choices"][0]["text"]

    respuesta_chatbot = texto_respuesta.strip()

    return respuesta_chatbot


def main():
    historial_de_conversacion = ""

    while True:
        entrada_del_usuario = input(">")
        if entrada_del_usuario == "salir":
            break
        respuesta_chatbot = obtener_respuesta(historial_de_conversacion, entrada_del_usuario)
        print(f"Chatbot: {respuesta_chatbot}")
        historial_de_conversacion += f"Usuario: {entrada_del_usuario}\nChatbot: {chatbot_response}\n"

main()

Aquí hay un enlace al código completo para un chatbot simple:

aquí

.

Ahora solo queda construir una interfaz de usuario atractiva con la que los usuarios puedan interactuar.

Written by jayo78.

Sander Schulhoff

Sander Schulhoff is the Founder of Learn Prompting and an ML Researcher at the University of Maryland. He created the first open-source Prompt Engineering guide, reaching 3M+ people and teaching them to use tools like ChatGPT. Sander also led a team behind Prompt Report, the most comprehensive study of prompting ever done, co-authored with researchers from the University of Maryland, OpenAI, Microsoft, Google, Princeton, Stanford, and other leading institutions. This 76-page survey analyzed 1,500+ academic papers and covered 200+ prompting techniques.

Footnotes

  1. OpenAI. (2022). ChatGPT: Optimizing Language Models for Dialogue. https://openai.com/blog/chatgpt/. https://openai.com/blog/chatgpt/

  2. Jurafsky, D., & Martin, J. H. (2009). Speech and Language Processing: An Introduction to Natural Language Processing, Computational Linguistics and Speech Recognition. Prentice Hall.

  3. Brown, T. B. (2020). Language models are few-shot learners. arXiv Preprint arXiv:2005.14165.