Библиотека чтения
Спроектируйте осознанный отказ от следующей страницы поиска
Пусть следующая страница LocalLLaMA станет выбором читателя: свяжите нерешённый вопрос, стоимость запроса и границу пагинации, не предсказывая качество невидимых ответов.
Определите нерешённую задачу
Пользу кнопки следующей страницы легче оценить, если читатель может назвать оставшийся вопрос. В предлагаемом поиске о квантовании задачей может быть обсуждение с условиями измерения памяти. Прочитав первый ответ, спросите, раскрывает ли доступный материал это условие. Ответ может быть положительным, отрицательным или неопределённым из-за нехватки контекста. Это решение о чтении, а не вывод, что на первой странице находятся самые релевантные записи. API не гарантирует такого ранжирования.
Оставьте вопрос читателя и короткую заметку рядом с загруженными записями. Если первая страница уже даёт полезную ссылку, разрешите сохранить её и уйти без нового получения. Иначе зафиксируйте точную неопределённость — например, «оборудование не указано», а не просто «нужно больше результатов». Это иллюстративные решения для вашего интерфейса, а не наблюдаемые результаты LocalLLaMA. Автопрокрутка не должна превращать нерешённый вопрос в неограниченный поиск или вытеснять ссылку, которую читатель ещё изучает.
Оцените ещё один запрос
Оценивайте конкретную стоимость запроса и объём чтения, а не ценность невидимых ответов. Переход со страницы 1 на страницу 2 с limit=3 запрашивает ещё максимум три записи при тех же условиях. Каждое успешное получение стоит один кредит, включая пустой ответ. Стандартная конверсия — $1 за 1000 платных кредитов; минимальное пополнение $50 даёт 50 000. Эти сведения помогают оператору планировать расходы, но не позволяют обещать читателю полезный эксперимент или более разнообразные мнения на следующей странице.
Приложение может выбрать меньший бюджет чтения, чем максимум сервиса. Объясните его до запроса: ещё одна страница, до трёх записей, те же фильтры. Не оценивайте релевантность по разнообразию крошечной первой страницы или вымышленному распределению оценок. Порядок _doc не даёт оснований считать, что полезные записи идут первыми или ценность следующих страниц падает. Читатель может вместо этого изменить фильтр или остановиться. Это честнее рекомендации, основанной на материале, которого приложение ещё не получило.
Проверьте признаки границы
Прежде чем предлагать следующую страницу, проверяйте pagination.has_more; увеличивая page, сохраняйте отправленные фильтры и limit. Сервис принимает номера страниц от 1 до 100 и максимум 100 записей на запрос. При page=100 и limit=100 полная последняя страница не оставляет места дополнительной записи для проверки продолжения за пределами окна. Поэтому pagination.window_exhausted может сопровождаться has_more=false и нижней границей общего числа. Остановите последовательность на этой границе, не объявляя все подходящие записи архива прочитанными.
Показывайте pagination.total вместе с pagination.relation. Значение с gte означает, что указано не меньше такого числа совпадений, а не приблизительно столько; unknown может сопровождать null. Пустая страница после первой тоже может иметь неизвестное общее число. Эти поля описывают ограниченный ответ, а не полноту темы. Повторяющиеся или похожие записи также не доказывают избыточность следующих страниц. Если список удаляет дубликаты по реальным ID, объясните это локальное решение и сохраните происхождение данных, чтобы отличать его от каждого полученного ответа.
Разрешите пользователю остановиться
Используйте явное действие следующей страницы и сделайте выход с текущей понятным. Читатель должен иметь возможность сохранить полезную ссылку, закрыть журнал или вернуться к условиям без новых вызовов. Во время получения страницы предотвращайте повторные нажатия того же действия и оставляйте имеющийся текст доступным. Если есть команда «Стоп», объясните, что она реально останавливает: будущие автоматические запросы или ожидание в интерфейсе. Она не гарантирует отмену уже отправленной серверной работы или отсутствие платы за неё.
Если следующий запрос не удался, отделите предыдущие записи от номера ожидавшейся страницы. Предлагайте осознанный повтор только там, где он уместен. Сбой вышестоящего сервиса имеет обработку возврата, иногда с последующей сверкой; потерянный при передаче ответ оставляет итог оплаты неизвестным. Не переходите молча к другой странице, скрывая неудачную попытку. Завершите полезным состоянием: читатель знает, что изучил, почему продолжил или остановился и что неизвестно. Это обоснованная точка завершения исторического поиска даже без полного ответа.