18 KiB
Тестовый файл LLM
Этот документ проверяет, понимает ли 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 — недетерминированные алгоритмы).
Тесты:
Фрагменты кода
//// tab | Тест
Это фрагмент кода: foo. А это ещё один фрагмент кода: bar. И ещё один: baz quux.
////
//// tab | Информация
Содержимое фрагментов кода должно оставаться как есть.
См. раздел ### Content of code snippets в общем промпте в scripts/translate.py.
////
Кавычки
//// tab | Тест
Вчера мой друг написал: "Если вы написали incorrectly правильно, значит вы написали это неправильно". На что я ответил: "Верно, но 'incorrectly' — это неправильно, а не '"incorrectly"'".
/// note | Примечание
LLM, вероятно, переведёт это неправильно. Интересно лишь то, сохранит ли она фиксированный перевод при повторном переводе.
///
////
//// tab | Информация
Автор промпта может выбрать, хочет ли он преобразовывать нейтральные кавычки в типографские. Допускается оставить их как есть.
См., например, раздел ### Quotes в docs/de/llm-prompt.md.
////
Кавычки во фрагментах кода
//// 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 | Информация
... Однако кавычки внутри фрагментов кода должны оставаться как есть.
////
Блоки кода
//// tab | Тест
Пример кода Bash...
# Вывести приветствие вселенной
echo "Hello universe"
...и пример вывода в консоли...
$ <font color="#4E9A06">fastapi</font> run <u style="text-decoration-style:solid">main.py</u>
<span style="background-color:#009485"><font color="#D3D7CF"> FastAPI </font></span> Starting server
Searching for package file structure
...и ещё один пример вывода в консоли...
// Создать директорию "Code"
$ mkdir code
// Перейти в эту директорию
$ cd code
...и пример кода на Python...
wont_work() # Это не сработает 😱
works(foo="bar") # Это работает 🎉
...и на этом всё.
////
//// tab | Информация
Код в блоках кода не должен изменяться, за исключением комментариев.
См. раздел ### Content of code blocks в общем промпте в scripts/translate.py.
////
Вкладки и цветные блоки
//// tab | Тест
/// info | Информация Некоторый текст ///
/// note | Примечание Некоторый текст ///
/// note | Технические подробности Некоторый текст ///
/// check | Проверка Некоторый текст ///
/// tip | Совет Некоторый текст ///
/// warning | Предупреждение Некоторый текст ///
/// danger | Опасность Некоторый текст ///
////
//// tab | Информация
Для вкладок и блоков Info/Note/Warning/и т.п. нужно добавить перевод их заголовка после вертикальной черты (|).
См. разделы ### Special blocks и ### Tab blocks в общем промпте в scripts/translate.py.
////
Веб- и внутренние ссылки
//// tab | Тест
Текст ссылок должен переводиться, адрес ссылки не должен изменяться:
- Ссылка на заголовок выше
- Внутренняя ссылка{.internal-link target=_blank}
- Внешняя ссылка
- Ссылка на стиль
- Ссылка на скрипт
- Ссылка на изображение
Текст ссылок должен переводиться, адрес ссылки должен указывать на перевод:
////
//// tab | Информация
Ссылки должны переводиться, но их адреса не должны изменяться. Исключение — абсолютные ссылки на страницы документации FastAPI. В этом случае ссылка должна вести на перевод.
См. раздел ### Links в общем промпте в scripts/translate.py.
////
HTML-элементы "abbr"
//// tab | Тест
Вот некоторые элементы, обёрнутые в HTML-элементы "abbr" (часть выдумана):
abbr даёт полную расшифровку
- GTD
lt- XWT
- PSGI
abbr даёт объяснение
- кластер
- Глубокое обучение
abbr даёт полную расшифровку и объяснение
- MDN
- I/O.
////
//// tab | Информация
Атрибуты "title" элементов "abbr" переводятся по определённым правилам.
Переводы могут добавлять свои собственные элементы "abbr", которые LLM не должна удалять. Например, чтобы объяснить английские слова.
См. раздел ### HTML abbr elements в общем промпте в scripts/translate.py.
////
Заголовки
//// tab | Тест
Разработка веб‑приложения — руководство
Привет.
Аннотации типов и -аннотации
Снова привет.
Супер- и подклассы
Снова привет.
////
//// tab | Информация
Единственное жёсткое правило для заголовков — LLM должна оставить часть хеша в фигурных скобках без изменений, чтобы ссылки не ломались.
См. раздел ### Headings в общем промпте в scripts/translate.py.
Для некоторых языковых инструкций см., например, раздел ### Headings в docs/de/llm-prompt.md.
////
Термины, используемые в документации
//// 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.
////