Предоставление контекста для повышения точности
Предоставляя контекст модели ИИ, она позволяет модели лучше понять, что вы запрашиваете или что он должен знать, чтобы предоставить лучший ответ. Контекст можно предоставить несколькими способами.
Запрос выходной композиции
Указание структуры выходных данных может оказать большое влияние на результаты. Это может включать что-то вроде запроса модели на ссылки на свои источники, написания ответа в виде сообщения электронной почты, форматирования ответа в виде SQL-запроса, классификации тональности в определенную структуру и т. д. Например:
Prompt
Write a table in markdown with 6 animals in it, with their genus and species
Response
| Animal | Genus | Species |
| ---------------- |:--------------:|:--------------:|
| Red Panda | Ailurus | fulgens |
| African Elephant | Loxodonta | africana |
| Snow Leopard | Panthera | uncia |
| Arctic Fox | Vulpes | lagopus |
| Chimpanzee | Pan | troglodytes |
| Siberian Tiger | Panthera | tigris altaica |
Этот метод можно использовать с пользовательскими форматами, такими как структура JSON:
Prompt
Put two fictional characters into JSON of the following format
{
firstNameFictional:
jobFictional:
}
Response
Here's an example of how you can put two fictional characters into JSON format:
{
"firstNameFictional": "Henry",
"jobFictional": "Wizard"
},
{
"firstNameFictional": "Frank",
"jobFictional": "Hero"
}
Системное сообщение
Системное сообщение включается в начало запроса и предназначено для предоставления инструкций модели, перспективы ответа или другой информации, полезной для руководства ответом модели. Это системное сообщение может включать в себя тон или личность, темы, которые не должны быть включены, или особенности (например, форматирование) способа ответа.
Например, вы можете дать ему некоторые из следующих системных сообщений:
- "Я хочу, чтобы вы действовали как терминал командной строки. Отвечайте на команды точно так же, как cmd.exe, в одном уникальном блоке кода и ничего другого».
- "Я хочу, чтобы вы были переводчиком, с английского на испанский. Не отвечайте на все, что я говорю или спрашиваю, только переводить между этими двумя языками и отвечать с переведенным текстом".
- "Выступайте в качестве мотивационного спикера, свободно давая обнадеживающие советы по целям и задачам. Вы должны включать множество положительных утверждений и предлагаемых действий для достижения конечной цели пользователя".
Другие примеры системных сообщений доступны в верхней части окна чата в Azure AI Studio , нажав кнопку "Примеры запроса". Попробуйте определить собственный системный запрос, указывающий уникальный ответ, и общаться с моделью, чтобы узнать, как отличаются ответы.
Конечная ChatCompletion
точка включает в себя системное сообщение с помощью роли чата System
.
var chatCompletionsOptions = new ChatCompletionsOptions()
{
Messages =
{
new ChatRequestSystemMessage("You are a casual, helpful assistant. You will talk like an American old western film character."),
new ChatRequestUserMessage("Can you direct me to the library?")
}
};
Response
{
"choices": [
{
"finish_reason": "stop",
"index": 0,
"message": {
"content": "Well howdy there, stranger! The library, huh?
Y'all just head down the main road till you hit the town
square. Once you're there, take a left and follow the street
for a spell. You'll see the library on your right, can’t
miss it. Happy trails!",
"role": "assistant"
}
}
],
...
}
response = openai.ChatCompletion.create(
model="gpt-35-turbo",
messages=[
{"role": "system", "content": "You are a casual, helpful assistant. You will talk like an American old western film character."},
{"role": "user", "content": "Can you direct me to the library?"}
]
)
Response
{
"choices": [
{
"finish_reason": "stop",
"index": 0,
"message": {
"content": "Well howdy there, stranger! The library, huh?
Y'all just head down the main road till you hit the town
square. Once you're there, take a left and follow the street
for a spell. You'll see the library on your right, can’t
miss it. Happy trails!",
"role": "assistant"
}
}
],
...
}
Системные сообщения могут значительно изменить ответ как в формате, так и в содержимом. Попробуйте определить четкое системное сообщение для модели, объясняющее именно то, какой ответ вы ожидаете, и что вы делаете или не хотите включать.
История разговоров
Наряду с системным сообщением другие сообщения можно предоставить модели для улучшения беседы. Журнал бесед позволяет модели продолжать отвечать аналогичным образом (например, тон или форматирование) и разрешать пользователю ссылаться на предыдущее содержимое в последующих запросах. Этот журнал можно предоставить двумя способами: из фактического журнала чата или из пользовательского примера беседы.
Интерфейсы чата, использующие модели OpenAI, такие как ChatGPT и игровая площадка чата в Azure AI Studio, включают журнал бесед автоматически, что приводит к более богатой, более понятной беседе. В разделе "Параметры" на игровой площадке чата можно указать количество прошлых сообщений, которые вы хотите включить. Попробуйте уменьшить это до 1 или увеличить до максимума, чтобы увидеть, как различные объемы журнала влияют на беседу.
Примечание.
Больше журнала бесед, включенных в запрос, означает, что используется большее количество маркеров ввода. Вам придется определить, какой баланс соответствует вашему варианту использования, учитывая предел маркера используемой модели.
Системы чата также могут использовать возможности суммирования модели для сохранения на входных маркерах. Приложение может обобщать прошлые сообщения и включать их в журнал бесед, а затем предоставлять только последние несколько сообщений для модели.
Немногие выстрелы обучения
Использование определяемого пользователем примера диалога — это то, что называется несколькими выстрелами обучения, которое предоставляет примеры того, как он должен реагировать на заданный запрос. Эти примеры служат для обучения модели реагирования.
Например, предоставляя модели пару запросов и ожидаемый ответ, он продолжается в том же шаблоне без указания того, что делать:
User: That was an awesome experience
Assistant: positive
User: I won't do that again
Assistant: negative
User: That was not worth my time
Assistant: negative
User: You can't miss this
Assistant:
Если модель предоставляется только You can't miss this
без дополнительного контекста из нескольких снимков обучения, ответ, скорее всего, не будет полезным.
В практических терминах журнал бесед и несколько выстрелов обучения отправляются в модель таким же образом; каждое сообщение пользователя и ответ помощника — это дискретное сообщение в объекте сообщения. ChatCompletion
Конечная точка оптимизирована для включения журнала сообщений, независимо от того, предоставляется ли этот журнал сообщений в виде нескольких снимков обучения или фактического журнала бесед.
var chatCompletionsOptions = new ChatCompletionsOptions()
{
Messages =
{
new ChatRequestSystemMessage("You are a helpful assistant."),
new ChatRequestUserMessage("That was an awesome experience"),
new ChatRequestAssistantMessage("positive"),
new ChatRequestUserMessage("I won't do that again"),
new ChatRequestAssistantMessage("negative"),
new ChatRequestUserMessage("That was not worth my time"),
new ChatRequestAssistantMessage("negative"),
new ChatRequestUserMessage("You can't miss this")
}
};
response = openai.ChatCompletion.create(
model="gpt-35-turbo",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "That was an awesome experience"},
{"role": "assistant", "content": "positive"},
{"role": "user", "content": "I won't do that again"},
{"role": "assistant", "content": "negative"},
{"role": "user", "content": "That was not worth my time"},
{"role": "assistant", "content": "negative"},
{"role": "user", "content": "You can't miss this"}
]
)
Разбиения сложной задачи
Другой способ улучшения взаимодействия — разделить сложные запросы на несколько запросов. Это позволяет модели лучше понять каждую отдельную часть и повысить общую точность. Разделение запросов также позволяет включить ответ из предыдущего запроса в будущий запрос и использовать эти сведения в дополнение к возможностям модели для создания интересных ответов.
Например, можно попросить модель Doug can ride down the zip line in 30 seconds, and takes 5 minutes to climb back up to the top. How many times can Doug ride the zip line in 17 minutes?
. Результат, скорее всего 3
, если Дуг начинается в верхней части zip-строки неправильно.
Более информативный ответ может прийти от задавать его несколько вопросов, о времени кругового пути, чтобы вернуться к верхней части zip-линии, и как учесть тот факт, что Дуг начинается в верхней части. Сломав эту проблему, показывает, что Дуг может, на самом деле, ездить zip line четыре раза.
Цепочка мысли
Один из полезных методов, помогающего эффективно разбить задачу, — попросить модель объяснить свою цепочку мысли.
Запрос модели реагировать на пошаговый процесс, с помощью которого он определил ответ, является полезным способом понять, как модель интерпретирует запрос. Таким образом, можно увидеть, где модель сделала неправильный логический поворот и лучше понять, как изменить запрос, чтобы избежать ошибки. Этот метод может включать запрос на указание его источников, таких как чат Bing (который использует модель поколения GPT-4) и дать основания для того, почему он определил свой ответ.
Цепочка мысли подсказок лучше всего используется, чтобы помочь вам итерировать и улучшить ваши запросы, чтобы получить самый качественный ответ от модели.
Например, запрос модели What sport is easiest to learn but hardest to master?
приводит к ответу с ответом и небольшим объяснением причин. Однако при появлении запроса What sport is easiest to learn but hardest to master? Give a step by step approach of your thoughts, ending in your answer
ответ является полным объяснением того, как он прибыл на свой ответ.
Sure, here's a step-by-step approach to answering the question:
1. Identify sports that are popular and have a large following.
2. Consider the basic mechanics of each sport and how easy they are to learn.
3. Think about the various techniques and skills required to play each sport at a high level, and how difficult they are to master.
4. Compare the relative ease of learning each sport to the difficulty of mastering it.
5. Based on the above analysis, determine which sport is easiest to learn but hardest to master.
Using this approach, I would say that the sport of golf is easiest to learn but hardest to master. Here's why:
1. Golf is a popular sport with a large following.
2. The basic mechanics of hitting a golf ball are relatively simple and can be learned quickly with some practice.
3. However, achieving consistency and mastering the various shots and techniques required to play at a high level can take years of practice and dedication.
4. Compared to other sports, the difference between a beginner and an intermediate golfer is relatively small, while the difference between an intermediate and an advanced golfer is much larger.
5. Therefore, I would say that golf is the sport that is easiest to learn but hardest to master.
Зная шаги причины, по которой модель, используемая для формирования ответа, позволяет определить, где нужно разделить запрос, указать дополнительные сведения или уточнить инструкции.