Шаблоны запросов с небольшим набором примеров
Включение интерактивных образцов в запросы помогает модели лучше понимать намерения пользователя и предоставлять лучшие ответы или выполнять задачи. Шаблоны запросов с небольшим набором примеров подразумевают использование небольшого набора примеров для направления модели в обработке новых входных данных. Эти примеры могут быть использованы для обучения модели, чтобы она могла лучше понимать и отвечать на похожие вопросы.
Пример:
Q: Что такое Бэтмен?
A: Бэтмен - вымышленный комиксовый персонаж.
Q: Что такое торсальная плексия?
A: Неизвестно.
Q: Что такое языковая модель?
A:
Сообщите модели, что Q - это вопрос, а A - это ответ, и взаимодействуйте в этом формате.
Ниже представлено объяснение класса инструментов, предоставляемого Lanchain, для вставки небольшого количества интерактивных образцов в запрос.
Использование набора примеров
Создание набора образцов
Определите массив examples
ниже, который содержит набор примеров Q&A.
from langchain.prompts.few_shot import FewShotPromptTemplate
from langchain.prompts.prompt import PromptTemplate
examples = [
{
"question": "Чья продолжительность жизни длиннее, Мухаммед Али или Алан Тьюринг?",
"answer":
"""
Нужно ли задать дополнительные вопросы по данному вопросу: Да.
Дополнительный вопрос: Сколько лет было Мухаммеду Али, когда он умер?
Промежуточный ответ: Мухаммеду Али было 74 года, когда он умер.
Дополнительный вопрос: Сколько лет было Алану Тьюрингу, когда он умер?
Промежуточный ответ: Алану Тьюрингу было 41 год, когда он умер.
Итак, окончательный ответ: Мухаммед Али
"""
},
{
"question": "Когда родился основатель craigslist?",
"answer":
"""
Нужно ли задать дополнительные вопросы по данному вопросу: Да.
Дополнительный вопрос: Кто основатель craigslist?
Промежуточный ответ: craigslist был основан Крейгом Ньюмарком.
Дополнительный вопрос: Когда родился Крейг Ньюмарк?
Промежуточный ответ: Крейг Ньюмарк родился 6 декабря 1952 года.
Итак, окончательный ответ: 6 декабря 1952 года
"""
},
{
"question": "Кто была матерью бабушки и дедушки Джорджа Вашингтона?",
"answer":
"""
Нужно ли задать дополнительные вопросы по данному вопросу: Да.
Дополнительный вопрос: Кто была матерью Джорджа Вашингтона?
Промежуточный ответ: Мать Джорджа Вашингтона - Мэри Болл Вашингтон.
Дополнительный вопрос: Кто был отцом Мэри Болл Вашингтон?
Промежуточный ответ: Отец Мэри Болл Вашингтон - Джозеф Болл.
Итак, окончательный ответ: Джозеф Болл
"""
},
{
"question": "Режиссеры фильмов 'Челюсти' и 'Казино Рояль' из одной страны?",
"answer":
"""
Нужно ли задать дополнительные вопросы по данному вопросу: Да.
Дополнительный вопрос: Кто режиссер 'Челюсти'?
Промежуточный ответ: Режиссер 'Челюсти' - Стивен Спилберг.
Дополнительный вопрос: Откуда Стивен Спилберг?
Промежуточный ответ: Соединенные Штаты.
Дополнительный вопрос: Кто режиссер 'Казино Рояль'?
Промежуточный ответ: Режиссер 'Казино Рояль' - Мартин Кэмпбелл.
Дополнительный вопрос: Откуда Мартин Кэмпбелл?
Промежуточный ответ: Новая Зеландия.
Итак, окончательный ответ: Нет
"""
}
]
Создание форматировщика для небольших примеров
Просто вставьте примеры в шаблон запроса, используя объект PromptTemplate
.
example_prompt = PromptTemplate(input_variables=["question", "answer"], template="Вопрос: {question}\\n{answer}")
print(example_prompt.format(**examples[0]))
Результат:
Вопрос: Чья продолжительность жизни длиннее, Мухаммед Али или Алан Тьюринг?
Нужно ли задать дополнительные вопросы по данному вопросу: Да.
Дополнительный вопрос: Сколько лет было Мухаммеду Али, когда он умер?
Промежуточный ответ: Мухаммеду Али было 74 года, когда он умер.
Дополнительный вопрос: Сколько лет было Алану Тьюрингу, когда он умер?
Промежуточный ответ: Алану Тьюрингу было 41 год, когда он умер.
Итак, окончательный ответ: Мухаммед Али
Предоставление образцов и форматирования для FewShotPromptTemplate
С объектом FewShotPromptTemplate
вы можете массово вставлять образцы контента.
prompt = FewShotPromptTemplate(
examples=examples,
example_prompt=example_prompt,
suffix="Вопрос: {input}",
input_variables=["input"]
)
print(prompt.format(input="Кто является отцом Джорджа Вашингтона?"))
Возвращает:
Вопрос: Чья продолжительность жизни длиннее, Мухаммед Али или Алан Тьюринг?
Нужно ли продолжить работу над этим вопросом: Да.
Продолжить: Каков возраст Мухаммеда Али на момент смерти?
Промежуточный ответ: Мухаммед Али умер в 74 года.
Продолжить: Каков возраст Алана Тьюринга на момент смерти?
Промежуточный ответ: Алан Тьюринг умер в 41 год.
Итак, окончательный ответ: Мухаммед Али
Вопрос: Когда родился основатель craigslist?
Нужно ли продолжить работу над этим вопросом: Да.
Продолжить: Кто является основателем craigslist?
Промежуточный ответ: Основателем craigslist является Крейг Ньюмарк.
Продолжить: Когда родился Крейг Ньюмарк?
Промежуточный ответ: Крейг Ньюмарк родился 6 декабря 1952 года.
Итак, окончательный ответ: 6 декабря 1952 года
Вопрос: Кто является матерью бабушки и дедушки Джорджа Вашингтона?
Нужно ли продолжить работу над этим вопросом: Да.
Продолжить: Кто является матерью Джорджа Вашингтона?
Промежуточный ответ: Мать Джорджа Вашингтона - Мэри Болл Вашингтон.
Продолжить: Кто является отцом Мэри Болл Вашингтон?
Промежуточный ответ: Отец Мэри Болл Вашингтон - Джозеф Болл.
Итак, окончательный ответ: Джозеф Болл
Вопрос: Режиссеры фильмов "Челюсти" и "Казино Рояль" родом из одной страны?
Нужно ли продолжить работу над этим вопросом: Да.
Продолжить: Кто является режиссером фильма "Челюсти"?
Промежуточный ответ: Режиссер фильма "Челюсти" - Стивен Спилберг.
Продолжить: Откуда родом Стивена Спилберга?
Промежуточный ответ: Соединенные Штаты.
Продолжить: Кто является режиссером фильма "Казино Рояль"?
Промежуточный ответ: Режиссер фильма "Казино Рояль" - Мартин Кэмпбелл.
Продолжить: Откуда родом Мартина Кэмпбелла?
Промежуточный ответ: Новая Зеландия.
Итак, окончательный ответ: Нет
Вопрос: Кто является отцом Джорджа Вашингтона?
Использование селекторов образцов
Предоставление примеров для ExampleSelector
Здесь мы повторно используем набор примеров и шаблон запроса из предыдущего раздела. Однако вместо непосредственного предоставления примеров объекту FewShotPromptTemplate
и вставки всех примеров в запрос, мы предоставим их объекту ExampleSelector
для вставки части примеров.
Здесь мы будем использовать класс SemanticSimilarityExampleSelector
. Этот класс выбирает небольшой образец примера на основе его сходства с вводом. Он использует модель вложения для расчета сходства между вводом и небольшими образцами примеров, а затем использует векторную базу данных для выполнения поиска сходства и извлечения примеров, подобных вводу.
- Примечание: Это включает в себя векторные вычисления и векторную базу данных, которые главным образом используются в области искусственного интеллекта для поиска сходства данных, таких как запросы сходного содержания статьи, изображений, видео и т. д. Просто получите здесь общее понимание на сейчас.
from langchain.prompts.example_selector import SemanticSimilarityExampleSelector
from langchain_community.vectorstores import Chroma
from langchain_openai import OpenAIEmbeddings
example_selector = SemanticSimilarityExampleSelector.from_examples(
examples,
OpenAIEmbeddings(),
Chroma,
k=1
)
question = "Кто является отцом Джорджа Вашингтона?"
selected_examples = example_selector.select_examples({"question": question})
print(f"Наиболее похожий пример: {question}")
for example in selected_examples:
print("\\n")
for k, v in example.items():
print(f"{k}: {v}")
Здесь подобраны примеры, похожие на вопрос, и возвращается следующее:
Запуск Chroma непосредственно с использованием локального API.
Использование базы данных в памяти DuckDB. Данные будут временными.
Наиболее похожий пример: Кто является матерью бабушки и дедушки Джорджа Вашингтона?
question: Кто является матерью Джорджа Вашингтона?
answer:
Нужно ли продолжить работу над этим вопросом: Да.
Продолжить: Кто является матерью Джорджа Вашингтона?
Промежуточный ответ: Мать Джорджа Вашингтона - Мэри Болл Вашингтон.
Продолжить: Кто является отцом Мэри Болл Вашингтон?
Промежуточный ответ: Отец Мэри Болл Вашингтон - Джозеф Болл.
Итак, окончательный ответ: Джозеф Болл
Предоставление селектора примера для FewShotPromptTemplate
Наконец, создайте объект FewShotPromptTemplate
. Основываясь на селекторе примера из предыдущего примера, выберите пример, похожий на заданный вопрос.
prompt = FewShotPromptTemplate(
example_selector=example_selector,
example_prompt=example_prompt,
suffix="Вопрос: {input}",
input_variables=["input"]
)
print(prompt.format(input="Кто является отцом Джорджа Вашингтона?"))
Результат:
Вопрос: Кто является матерью дедушки Джорджа Вашингтона?
Нужно ли задать продолжающий вопрос: Да.
Продолжение: Кто является матерью Джорджа Вашингтона?
Промежуточный ответ: Мать Джорджа Вашингтона - Мэри Болл Вашингтон.
Продолжение: Кто является отцом Мэри Болл Вашингтон?
Промежуточный ответ: Отец Мэри Болл Вашингтон - Джозеф Болл.
Итак, окончательный ответ: Джозеф Болл
Вопрос: Кто является отцом Джорджа Вашингтона?