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?