# Шаблоны сообщений чата

Модели чата ожидают диалоги в виде списка словарей. Каждый словарь использует ключи `role` и `content`. Ключ `content` содержит сообщение пользователя, передаваемое модели. Большие языковые модели принимают текст и инструменты, а мультимодальные модели комбинируют текст с изображениями, видео и аудио.

Transformers использует единый формат, в котором каждый тип модальности указывается явно, что позволяет легко комбинировать различные типы входных данных в одном сообщении.

В этом руководстве описаны паттерны форматирования сообщений для каждой модальности, инструменты, пакетный вывод и многоходовые диалоги.

## Текст

Текст — это самый базовый тип контента. Он служит основой для всех остальных паттернов. Передайте ваше сообщение в `"content"` в виде строки.

```py
message = [
    {
        "role": "user",
        "content": "Explain the French Bread Law."
    }
]
```

Вы также можете использовать явный формат `"type": "text"`, чтобы сохранить согласованность кода при последующем добавлении изображений, видео или аудио.

```py
message = [
    {
        "role": "user",
        "content": [{"type": "text", "text": "Explain the French Bread Law."}]
    }
]
```

## Инструменты

[Инструменты](./chat_extras) — это функции, которые может вызывать чат-модель, например, для получения данных о погоде в реальном времени, вместо того чтобы генерировать их самостоятельно.

Роль `assistant` обрабатывает запрос инструмента. Установите `"type": "function"` в ключе `"tool_calls"` и передайте ваш инструмент в ключе `"function"`. Добавьте запрос инструмента от ассистента к вашему сообщению.

```py
weather = {"name": "get_current_temperature", "arguments": {"location": "Paris, France", "unit": "celsius"}}
message.append(
    {
        "role": "assistant", 
        "tool_calls": [{"type": "function", "function": weather}]
    }
)
```

Роль `tool` обрабатывает результат. Добавьте его в `"content"`. Это значение всегда должно быть строкой.

```py
message.append({"role": "tool", "content": "22"})
```

## Мультимодальность

Мультимодальные модели расширяют этот формат для обработки изображений, видео и аудио. Каждый вход указывает свой `"type"` и предоставляет медиафайл с помощью `"url"` или `"path"`.

### Изображение

Установите `"type": "image"` и используйте `"url"` для ссылок или `"path"` для локальных файлов.

```py
message = [
    {
        "role": "user",
        "content": [
            {"type": "image", "url": "https://assets.bonappetit.com/photos/57ad4ebc53e63daf11a4ddc7/master/w_1280,c_limit/kouign-amann.jpg"},
            {"type": "text", "text": "What pastry is shown in the image?"}
        ]
    }
]
```

### Видео

Установите `"type": "video"` и используйте `"url"` для ссылок или `"path"` для локальных файлов.

```py
message = [
    {
        "role": "user",
        "content": [
            {"type": "video", "url": "https://static01.nyt.com/images/2019/10/01/dining/01Sourdough-GIF-1/01Sourdough-GIF-1-superJumbo.gif"},
            {"type": "text", "text": "What is shown in this video?"}
        ]
    }
]
```

### Аудио

Укажите `"type": "audio"` и используйте `"url"` для ссылок или `"path"` для локальных файлов.

```py
message = [
    {
        "role": "user",
        "content": [
            {"type": "audio", "url": "https://huggingface.co/datasets/Narsil/asr_dummy/resolve/main/mlk.flac"},
            {"type": "text", "text": "Transcribe the speech."}
        ]
    }
]
```

### Смешанные несколько

Список `content` принимает любую комбинацию типов. Модель обрабатывает все входные данные совместно, что позволяет выполнять сравнения или рассуждения между модальностями.

```py
message = [
    {
        "role": "user",
        "content": [
            {"type": "image", "url": "https://assets.bonappetit.com/photos/57ad4ebc53e63daf11a4ddc7/master/w_1280,c_limit/kouign-amann.jpg"},
            {"type": "video", "url": "https://static01.nyt.com/images/2019/10/01/dining/01Sourdough-GIF-1/01Sourdough-GIF-1-superJumbo.gif"},
            {"type": "text", "text": "What does the image and video share in common?"},
        ],
    },
    {
        "role": "user",
        "content": [
            {"type": "image", "url": "https://assets.bonappetit.com/photos/57ad4ebc53e63daf11a4ddc7/master/w_1280,c_limit/kouign-amann.jpg"},
            {"type": "image", "url": "https://assets.bonappetit.com/photos/57e191f49f19b4610e6b7693/master/w_1600%2Cc_limit/undefined"},
            {"type": "text", "text": "What type of pastries are these?"},
        ],
    }
]
```

## Пакетная

Пакетный вывод обрабатывает несколько диалогов за один прямой проход, что повышает пропускную способность и эффективность. Оберните каждый диалог в собственный список, затем передайте их вместе как список списков.

```py
messages = [
    [
        {"role": "user",
        "content": [
                {"type": "image", "url": "https://assets.bonappetit.com/photos/57ad4ebc53e63daf11a4ddc7/master/w_1280,c_limit/kouign-amann.jpg"},
                {"type": "text", "text": "What type of pastry is this?"}
            ]
        },
    ],
    [
        {"role": "user",
        "content": [
                {"type": "image", "url": "https://assets.bonappetit.com/photos/57e191f49f19b4610e6b7693/master/w_1600%2Cc_limit/undefined"},
                {"type": "text", "text": "What type of pastry is this?"}
            ]
        },
    ],
]
```

## Многоразовый

Диалоги включают несколько взаимодействий, чередующихся между ролями `"user"` и `"assistant"`. Каждый ход добавляет новое сообщение в список, предоставляя модели доступ к полной истории диалога. Этот контекст помогает модели генерировать более уместные ответы.

```py
message = [
    {
        "role": "user",
        "content": [
            {"type": "image", "url": "https://assets.bonappetit.com/photos/57ad4ebc53e63daf11a4ddc7/master/w_1280,c_limit/kouign-amann.jpg"},
            {"type": "text", "text": "What pastry is shown in the image?"}
        ]
    },
    {
        "role": "assistant",
        "content": [{"type": "text", "text": "This is kouign amann, a laminated dough pastry (i.e., dough folded with layers of butter) that also incorporates sugar between layers so that during baking the sugar caramelizes."}]
    },
    {
        "role": "user",
        "content": [
            {"type": "image", "url": "https://static01.nyt.com/images/2023/07/21/multimedia/21baguettesrex-hbkc/21baguettesrex-hbkc-videoSixteenByNineJumbo1600.jpg"},
            {"type": "text", "text": "Compare it to this image now."}
        ]
    }
]
```

