Plantillas de ejemplo para poca capacidad

Incluir ejemplos interactivos en las plantillas ayuda al modelo a comprender mejor la intención del usuario y proporcionar mejores respuestas o realizar tareas. Las plantillas de ejemplo para poca capacidad se refieren al uso de un pequeño conjunto de ejemplos para guiar al modelo en el manejo de nuevas entradas. Estos ejemplos se utilizan para entrenar al modelo para que pueda comprender y responder mejor a preguntas similares.

Ejemplo:

P: ¿Quién es Batman?
R: Batman es un personaje de cómic ficticio.

P: ¿Qué es la torsalplexidad?
R: Desconocido.

P: ¿Qué es un modelo de lenguaje?
R:

Indica al modelo que P es la pregunta y R es la respuesta, e interactúa en este formato.

A continuación se muestra una explicación de la clase de herramientas proporcionada por Lanchain para insertar un pequeño número de ejemplos interactivos en la solicitud.

Uso del conjunto de ejemplos

Crear un conjunto de ejemplos

Define una matriz examples a continuación, que contiene un conjunto de ejemplos de preguntas y respuestas.

from langchain.prompts.few_shot import FewShotPromptTemplate
from langchain.prompts.prompt import PromptTemplate

examples = [
  {
    "question": "¿Cuya vida es más larga, la de Muhammad Ali o la de Alan Turing?",
    "answer":
"""
¿Necesitamos dar seguimiento a la pregunta: Sí.
Seguimiento: ¿Cuántos años tenía Muhammad Ali cuando murió?
Respuesta intermedia: Muhammad Ali tenía 74 años cuando murió.
Seguimiento: ¿Cuántos años tenía Alan Turing cuando murió?
Respuesta intermedia: Alan Turing tenía 41 años cuando murió.
Así que la respuesta final es: Muhammad Ali
"""
  },
  {
    "question": "¿Cuándo nació el fundador de craigslist?",
    "answer":
"""
¿Necesitamos dar seguimiento a la pregunta: Sí.
Seguimiento: ¿Quién es el fundador de craigslist?
Respuesta intermedia: craigslist fue fundada por Craig Newmark.
Seguimiento: ¿Cuándo nació Craig Newmark?
Respuesta intermedia: Craig Newmark nació el 6 de diciembre de 1952.
Así que la respuesta final es: 6 de diciembre de 1952
"""
  },
  {
    "question": "¿Quién fue la madre de los abuelos de George Washington?",
    "answer":
"""
¿Necesitamos dar seguimiento a la pregunta: Sí.
Seguimiento: ¿Quién es la madre de George Washington?
Respuesta intermedia: La madre de George Washington es Mary Ball Washington.
Seguimiento: ¿Quién es el padre de Mary Ball Washington?
Respuesta intermedia: El padre de Mary Ball Washington es Joseph Ball.
Así que la respuesta final es: Joseph Ball
"""
  },
  {
    "question": "¿Los directores de 'Jaws' y 'Casino Royale' son del mismo país?",
    "answer":
"""
¿Necesitamos dar seguimiento a la pregunta: Sí.
Seguimiento: ¿Quién es el director de 'Jaws'?
Respuesta intermedia: El director de 'Jaws' es Steven Spielberg.
Seguimiento: ¿De dónde es Steven Spielberg?
Respuesta intermedia: Estados Unidos.
Seguimiento: ¿Quién es el director de 'Casino Royale'?
Respuesta intermedia: El director de 'Casino Royale' es Martin Campbell.
Seguimiento: ¿De dónde es Martin Campbell?
Respuesta intermedia: Nueva Zelanda.
Así que la respuesta final es: No
"""
  }
]

Crear un formateador para ejemplos de pequeñas muestras

Simplemente inserta ejemplos en la plantilla de la solicitud usando el objeto PromptTemplate.

ejemplo_solicitud = PromptTemplate(input_variables=["question", "answer"], template="Pregunta: {question}\\n{answer}")

print(ejemplo_solicitud.format(**examples[0]))

Salida:

Pregunta: ¿Cuya vida es más larga, la de Muhammad Ali o la de Alan Turing?

¿Necesitamos dar seguimiento a la pregunta: Sí.
Seguimiento: ¿Cuántos años tenía Muhammad Ali cuando murió?
Respuesta intermedia: Muhammad Ali tenía 74 años cuando murió.
Seguimiento: ¿Cuántos años tenía Alan Turing cuando murió?
Respuesta intermedia: Alan Turing tenía 41 años cuando murió.
Así que la respuesta final es: Muhammad Ali

Proporcionar muestras y formato para FewShotPromptTemplate

Con el objeto FewShotPromptTemplate, puedes insertar contenido de muestra de forma masiva.

prompt = FewShotPromptTemplate(
    examples=ejemplos,
    example_prompt=ejemplo_prompt,
    suffix="Pregunta: {input}",
    input_variables=["input"]
)

print(prompt.format(input="¿Quién es el padre de George Washington?"))

Devuelve:

Pregunta: ¿Cuál es la esperanza de vida más larga, la de Muhammad Ali o la de Alan Turing?

¿Necesitamos hacer un seguimiento a esta pregunta? Sí.
Seguimiento: ¿Cuántos años tenía Muhammad Ali cuando murió?
Respuesta intermedia: Muhammad Ali tenía 74 años cuando murió.
Seguimiento: ¿Cuántos años tenía Alan Turing cuando murió?
Respuesta intermedia: Alan Turing tenía 41 años cuando murió.
Entonces la respuesta final es: Muhammad Ali

Pregunta: ¿Cuándo nació el fundador de craigslist?

¿Necesitamos hacer un seguimiento a esta pregunta? Sí.
Seguimiento: ¿Quién es el fundador de craigslist?
Respuesta intermedia: craigslist fue fundada por Craig Newmark.
Seguimiento: ¿Cuándo nació Craig Newmark?
Respuesta intermedia: Craig Newmark nació el 6 de diciembre de 1952.
Entonces la respuesta final es: 6 de diciembre de 1952

Pregunta: ¿Quién es la madre de los abuelos de George Washington?

¿Necesitamos hacer un seguimiento a esta pregunta? Sí.
Seguimiento: ¿Quién es la madre de George Washington?
Respuesta intermedia: La madre de George Washington es Mary Ball Washington.
Seguimiento: ¿Quién es el padre de Mary Ball Washington?
Respuesta intermedia: El padre de Mary Ball Washington es Joseph Ball.
Entonces la respuesta final es: Joseph Ball

Pregunta: ¿Los directores de "Jaws" y "Casino Royale" son del mismo país?

¿Necesitamos hacer un seguimiento a esta pregunta? Sí.
Seguimiento: ¿Quién es el director de "Jaws"?
Respuesta intermedia: El director de "Jaws" es Steven Spielberg.
Seguimiento: ¿De dónde es Steven Spielberg?
Respuesta intermedia: De Estados Unidos.
Seguimiento: ¿Quién es el director de "Casino Royale"?
Respuesta intermedia: El director de "Casino Royale" es Martin Campbell.
Seguimiento: ¿De dónde es Martin Campbell?
Respuesta intermedia: De Nueva Zelanda.
Entonces la respuesta final es: No

Pregunta: ¿Quién es el padre de George Washington?

Uso de selectores de ejemplos

Proporcionar ejemplos para ExampleSelector

Aquí reutilizamos el conjunto de ejemplos y la plantilla de sugerencias de la sección anterior. Sin embargo, en lugar de proporcionar directamente los ejemplos al objeto FewShotPromptTemplate e insertar todos los ejemplos en la sugerencia, los proporcionaremos a un objeto ExampleSelector para insertar una parte de los ejemplos.

Aquí usaremos la clase SemanticSimilarityExampleSelector. Esta clase selecciona un pequeño ejemplo de muestra en función de su similitud con la entrada. Utiliza un modelo de incrustación para calcular la similitud entre la entrada y los pequeños ejemplos de muestra, y luego utiliza una base de datos vectorial para realizar una búsqueda de similitud y recuperar ejemplos similares a la entrada.

  • Nota: Esto implica cálculos vectoriales y una base de datos vectorial, que se utilizan principalmente en el campo de la IA para la búsqueda de similitud de datos, como consultar contenido de artículos similares, imágenes similares, videos, etc. Solo obtén una comprensión básica por ahora.
from langchain.prompts.example_selector import SemanticSimilarityExampleSelector
from langchain_community.vectorstores import Chroma
from langchain_openai import OpenAIEmbeddings

example_selector = SemanticSimilarityExampleSelector.from_examples(
    ejemplos,
    OpenAIEmbeddings(),
    Chroma,
    k=1
)

pregunta = "¿Quién es el padre de George Washington?"
ejemplos_seleccionados = example_selector.select_examples({"pregunta": pregunta})
print(f"El ejemplo más similar: {pregunta}")
for ejemplo in ejemplos_seleccionados:
    print("\\n")
    for k, v in ejemplo.items():
        print(f"{k}: {v}")

Aquí se hacen coincidir ejemplos similares a la pregunta, y se devuelve lo siguiente:

Ejecutando Chroma directamente usando la API local.
    Usando la base de datos en memoria DuckDB. Los datos serán transitorios.
    El ejemplo más similar: ¿Quién es la madre de los abuelos de George Washington?

    pregunta: ¿Quién es la madre de George Washington?
    respuesta: 
    ¿Necesitamos hacer un seguimiento con esta pregunta? Sí.
    Seguimiento: ¿Quién es la madre de George Washington?
    Respuesta intermedia: La madre de George Washington es Mary Ball Washington.
    Seguimiento: ¿Quién es el padre de Mary Ball Washington?
    Respuesta intermedia: El padre de Mary Ball Washington es Joseph Ball.
    Entonces la respuesta final es: Joseph Ball

Proporciona el selector de ejemplo para FewShotPromptTemplate

Por último, crea un objeto FewShotPromptTemplate. Basándote en el selector de ejemplo del ejemplo anterior, selecciona un ejemplo similar a la pregunta.

prompt = FewShotPromptTemplate(
    example_selector=example_selector,
    example_prompt=example_prompt,
    suffix="Pregunta: {input}",
    input_variables=["input"]
)

print(prompt.format(input="¿Quién es el padre de George Washington?"))

Devuelve:

Pregunta: ¿Quién es la madre de los abuelos de George Washington?

¿Necesitamos seguir con esta pregunta? Sí.
Seguir con: ¿Quién es la madre de George Washington?
Respuesta intermedia: La madre de George Washington es Mary Ball Washington.
Seguir con: ¿Quién es el padre de Mary Ball Washington?
Respuesta intermedia: El padre de Mary Ball Washington es Joseph Ball.
Entonces la respuesta final es: Joseph Ball

Pregunta: ¿Quién es el padre de George Washington?