# Тестовый файл LLM { #llm-test-file } Этот документ проверяет, понимает ли LLM, переводящая документацию, `general_prompt` в `scripts/translate.py` и языковой специфичный промпт в `docs/{language code}/llm-prompt.md`. Языковой специфичный промпт добавляется к `general_prompt`. Тесты, добавленные здесь, увидят все создатели языковых специфичных промптов. Использование: * Подготовьте языковой специфичный промпт — `docs/{language code}/llm-prompt.md`. * Выполните новый перевод этого документа на нужный целевой язык (см., например, команду `translate-page` в `translate.py`). Это создаст перевод в `docs/{language code}/docs/_llm-test.md`. * Проверьте, всё ли в порядке в переводе. * При необходимости улучшите ваш языковой специфичный промпт, общий промпт или английский документ. * Затем вручную исправьте оставшиеся проблемы в переводе, чтобы он был хорошим. * Переведите заново, имея хороший перевод на месте. Идеальным результатом будет ситуация, когда LLM больше не вносит изменений в перевод. Это означает, что общий промпт и ваш языковой специфичный промпт настолько хороши, насколько это возможно (иногда он будет делать несколько, казалось бы, случайных изменений, причина в том, что LLM — недетерминированные алгоритмы). Тесты: ## Фрагменты кода { #code-snippets } //// tab | Тест Это фрагмент кода: `foo`. А это ещё один фрагмент кода: `bar`. И ещё один: `baz quux`. //// //// tab | Информация Содержимое фрагментов кода должно оставаться как есть. См. раздел `### Content of code snippets` в общем промпте в `scripts/translate.py`. //// ## Кавычки { #quotes } //// tab | Тест Вчера мой друг написал: "Если вы написали incorrectly правильно, значит вы написали это неправильно". На что я ответил: "Верно, но 'incorrectly' — это неправильно, а не '"incorrectly"'". /// note | Примечание LLM, вероятно, переведёт это неправильно. Интересно лишь то, сохранит ли она фиксированный перевод при повторном переводе. /// //// //// tab | Информация Автор промпта может выбрать, хочет ли он преобразовывать нейтральные кавычки в типографские. Допускается оставить их как есть. См., например, раздел `### Quotes` в `docs/de/llm-prompt.md`. //// ## Кавычки во фрагментах кода { #quotes-in-code-snippets } //// tab | Тест `pip install "foo[bar]"` Примеры строковых литералов во фрагментах кода: `"this"`, `'that'`. Сложный пример строковых литералов во фрагментах кода: `f"I like {'oranges' if orange else "apples"}"` Хардкор: `Yesterday, my friend wrote: "If you spell incorrectly correctly, you have spelled it incorrectly". To which I answered: "Correct, but 'incorrectly' is incorrectly not '"incorrectly"'"` //// //// tab | Информация ... Однако кавычки внутри фрагментов кода должны оставаться как есть. //// ## Блоки кода { #code-blocks } //// tab | Тест Пример кода Bash... ```bash # Вывести приветствие вселенной echo "Hello universe" ``` ...и пример вывода в консоли... ```console $ fastapi run main.py FastAPI Starting server Searching for package file structure ``` ...и ещё один пример вывода в консоли... ```console // Создать директорию "Code" $ mkdir code // Перейти в эту директорию $ cd code ``` ...и пример кода на Python... ```Python wont_work() # Это не сработает 😱 works(foo="bar") # Это работает 🎉 ``` ...и на этом всё. //// //// tab | Информация Код в блоках кода не должен изменяться, за исключением комментариев. См. раздел `### Content of code blocks` в общем промпте в `scripts/translate.py`. //// ## Вкладки и цветные блоки { #tabs-and-colored-boxes } //// tab | Тест /// info | Информация Некоторый текст /// /// note | Примечание Некоторый текст /// /// note | Технические подробности Некоторый текст /// /// check | Проверка Некоторый текст /// /// tip | Совет Некоторый текст /// /// warning | Предупреждение Некоторый текст /// /// danger | Опасность Некоторый текст /// //// //// tab | Информация Для вкладок и блоков `Info`/`Note`/`Warning`/и т.п. нужно добавить перевод их заголовка после вертикальной черты (`|`). См. разделы `### Special blocks` и `### Tab blocks` в общем промпте в `scripts/translate.py`. //// ## Веб- и внутренние ссылки { #web-and-internal-links } //// tab | Тест Текст ссылок должен переводиться, адрес ссылки не должен изменяться: * [Ссылка на заголовок выше](#code-snippets) * [Внутренняя ссылка](index.md#installation){.internal-link target=_blank} * Внешняя ссылка * Ссылка на стиль * Ссылка на скрипт * Ссылка на изображение Текст ссылок должен переводиться, адрес ссылки должен указывать на перевод: * Ссылка на FastAPI //// //// tab | Информация Ссылки должны переводиться, но их адреса не должны изменяться. Исключение — абсолютные ссылки на страницы документации FastAPI. В этом случае ссылка должна вести на перевод. См. раздел `### Links` в общем промпте в `scripts/translate.py`. //// ## HTML-элементы "abbr" { #html-abbr-elements } //// tab | Тест Вот некоторые элементы, обёрнутые в HTML-элементы "abbr" (часть выдумана): ### abbr даёт полную расшифровку { #the-abbr-gives-a-full-phrase } * GTD * lt * XWT * PSGI ### abbr даёт полную расшифровку и объяснение { #the-abbr-gives-a-full-phrase-and-an-explanation } * MDN * I/O. //// //// tab | Информация Атрибуты "title" элементов "abbr" переводятся по определённым правилам. Переводы могут добавлять свои собственные элементы "abbr", которые LLM не должна удалять. Например, чтобы объяснить английские слова. См. раздел `### HTML abbr elements` в общем промпте в `scripts/translate.py`. //// ## HTML-элементы "dfn" { #html-dfn-elements } * кластер * Глубокое обучение ## Заголовки { #headings } //// tab | Тест ### Разработка веб‑приложения — руководство { #develop-a-webapp-a-tutorial } Привет. ### Аннотации типов и -аннотации { #type-hints-and-annotations } Снова привет. ### Супер- и подклассы { #super-and-subclasses } Снова привет. //// //// tab | Информация Единственное жёсткое правило для заголовков — LLM должна оставить часть хеша в фигурных скобках без изменений, чтобы ссылки не ломались. См. раздел `### Headings` в общем промпте в `scripts/translate.py`. Для некоторых языковых инструкций см., например, раздел `### Headings` в `docs/de/llm-prompt.md`. //// ## Термины, используемые в документации { #terms-used-in-the-docs } //// tab | Тест * вы * ваш * например * и т.д. * `foo` как `int` * `bar` как `str` * `baz` как `list` * Учебник — Руководство пользователя * Расширенное руководство пользователя * Документация по SQLModel * Документация API * Автоматическая документация * Наука о данных * Глубокое обучение * Машинное обучение * Внедрение зависимостей * Аутентификация HTTP Basic * HTTP Digest * формат ISO * стандарт JSON Schema * JSON-схема * определение схемы * password flow * Мобильный * устаревший * спроектированный * некорректный * на лету * стандарт * по умолчанию * чувствительный к регистру * нечувствительный к регистру * обслуживать приложение * отдавать страницу * приложение * приложение * HTTP-запрос * HTTP-ответ * ответ с ошибкой * операция пути * декоратор операции пути * функция-обработчик пути * тело * тело запроса * тело ответа * JSON-тело * тело формы * тело файла * тело функции * параметр * body-параметр * path-параметр * query-параметр * cookie-параметр * параметр заголовка * параметр формы * параметр функции * событие * событие запуска * запуск сервера * событие остановки * событие lifespan * обработчик * обработчик события * обработчик исключений * обрабатывать * модель * Pydantic-модель * модель данных * модель базы данных * модель формы * объект модели * класс * базовый класс * родительский класс * подкласс * дочерний класс * родственный класс * метод класса * заголовок * HTTP-заголовки * заголовок авторизации * заголовок `Authorization` * заголовок `Forwarded` * система внедрения зависимостей * зависимость * зависимый объект * зависимый * ограниченный вводом/выводом * ограниченный процессором * конкурентность * параллелизм * многопроцессность * переменная окружения * переменная окружения * `PATH` * переменная `PATH` * аутентификация * провайдер аутентификации * авторизация * форма авторизации * провайдер авторизации * пользователь аутентифицируется * система аутентифицирует пользователя * CLI * интерфейс командной строки * сервер * клиент * облачный провайдер * облачный сервис * разработка * этапы разработки * dict * словарь * перечисление * enum * член перечисления * кодировщик * декодировщик * кодировать * декодировать * исключение * вызвать * выражение * оператор * фронтенд * бэкенд * обсуждение на GitHub * Issue на GitHub (тикет/обращение) * производительность * оптимизация производительности * тип возвращаемого значения * возвращаемое значение * безопасность * схема безопасности * задача * фоновая задача * функция задачи * шаблон * шаблонизатор * аннотация типов * аннотация типов * воркер сервера * воркер Uvicorn * воркер Gunicorn * воркер-процесс * класс воркера * рабочая нагрузка * деплой * развернуть * SDK * набор средств разработки ПО * `APIRouter` * `requirements.txt` * токен Bearer * несовместимое изменение * баг * кнопка * вызываемый объект * код * коммит * менеджер контекста * корутина * сессия базы данных * диск * домен * движок * фиктивный X * метод HTTP GET * элемент * библиотека * lifespan * блокировка * middleware (Промежуточный слой) * мобильное приложение * модуль * монтирование * сеть * origin (источник) * переопределение * полезная нагрузка * процессор * свойство * прокси * пулл-реквест (запрос на изменение) * запрос * ОЗУ * удалённая машина * статус-код * строка * тег * веб‑фреймворк * подстановочный знак * вернуть * валидировать //// //// tab | Информация Это неполный и ненормативный список (в основном) технических терминов, встречающихся в документации. Он может помочь автору промпта понять, по каким терминам LLM нужна подсказка. Например, когда она продолжает возвращать действительно хороший перевод к неоптимальному. Или когда у неё возникают проблемы со склонением/спряжением термина на вашем языке. См., например, раздел `### List of English terms and their preferred German translations` в `docs/de/llm-prompt.md`. ////