AIREITER

Как настроить веб-поиск и загрузку файлов в DeepSeek API

Последнее обновление: 2026-11-14 07:40:48

13 ноября 2026 года DeepSeek вынес возможности своего приложения в API-параметры. Встроенный поиск сам решает, когда обращаться к интернету, и тарифицируется по запросам с результатами. Отдельные Search/Fetch полностью контролируются кодом и оплачиваются за успешные запросы, а файлы загружаются через самостоятельный Files API и подключаются по file_id.

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

Страница анонса DeepSeek App API

Что появилось в DeepSeek App API 13 ноября

В анонсе DeepSeek — The full DeepSeek App experience, now via API — веб-поиск, загрузка файлов и чтение URL стали доступны через API для модели deepseek-flash (DeepSeek-V4.1-Flash).

Один и тот же набор возможностей доступен через три интерфейса: Messages API, Responses API и Chat Completions API — это описано в руководстве по созданию чат-бота. Вызовы инструментов и сборка контекста выполняются на стороне сервера, поэтому клиенту остаётся отобразить структурированные блоки и передать их обратно без изменений. В демо браузерного приложения с открытым исходным кодом показана соответствующая схема, но сам проект предназначен только для демонстрации.

Как включить веб-поиск и чтение URL

В запросе к deepseek-flash объявите два инструмента в массиве tools — именно так показано в руководстве по Web Tools:

"tools": [{"type": "deepseek_web_search"}, {"type": "deepseek_read_url"}]

Если рассуждения отключены, deepseek_web_search работает как поиск в чате: модель сама решает, нужен ли поиск, один вызов может содержать несколько запросов, а ответ приходит с цитатами. При включённых рассуждениях тот же инструмент превращается в поиск для глубокого анализа: между шагами рассуждения чередуются open_page и find_in_page, а до финального ответа может произойти около 20 обращений к инструментам.

В том же руководстве по Web Tools указаны четыре важных ограничения:

  • Учитываются только URL из последнего сообщения пользователя — максимум первые 10 уникальных адресов. Какие именно страницы читать, выбирает модель.
  • Принудительно вызвать инструмент через tool_choice нельзя: указание конкретного инструмента приводит к HTTP 400, а значение "none" заодно отключает чтение URL.
  • При включённых веб-инструментах, повышенном уровне безопасности или генерации заголовка параметры temperature, top_p и несколько полей управления инструментами игнорируются без предупреждения.
  • Ответ, в котором использовались веб-инструменты, нельзя продолжить — запрос придётся отправить заново.

«При цене $0.75 за 1000 запросов хочется понимать, сколько обращений агент делает в фоне. Кто-нибудь считал стоимость типичной исследовательской задачи?» — u/Glum-Guitar-5083 на r/DeepSeek

Тарификация зависит от выбранного пути. Встроенный веб-поиск оплачивается за каждый запрос, который вернул результаты: если в одном вызове было три запроса, это считается как три. Встроенный fetch оплачивается за каждую загруженную страницу, включая страницы, которые позже заменяются на url_not_allowed или unavailable после проверки безопасности. Недоступные для загрузки ссылки не тарифицируются. Для отдельных Search/Fetch оплата возникает только при HTTP 200 и непустых результатах либо возвращённом содержимом. Ошибочные и пустые поисковые запросы в обоих вариантах бесплатны.

Загрузка файлов без собственного парсера

Files API позволяет загрузить файл один раз, а затем обращаться к нему по file_id. Минимальный сценарий выглядит так:

curl https://api.deepseek.com/files \
  -H "Authorization: Bearer $DEEPSEEK_API_KEY" \
  -F purpose="rich_layout_recognition" \
  -F file="@report.pdf"
# -> {"id": "file-api-xxxxxxxxxxxxxxxx", ...}

# then reference it in chat (Chat Completions shape):
# {"model": "deepseek-flash", "messages": [{"role": "user",
#   "content": [{"type": "text", "text": "Compare this with today's numbers"},
#   {"type": "file", "file_id": "file-api-xxxxxxxxxxxxxxxx"}]}]}

Параметр purpose определяет способ обработки, а для документов его нужно передать до поля file. Значение user_data подходит для изображений (JPEG, PNG, GIF, WebP), обычного текста, таблиц и электронных книг. text_recognition извлекает только текст из PDF, Word, PowerPoint и изображений. rich_layout_recognition возвращает текст и фигуры, сохраняя информацию о таблицах и колонках. Загрузка PDF как user_data заканчивается HTTP 400, а обработанные документы нельзя повторно использовать как изображения или скачать после загрузки.

КатегорияЛимит
Изображение через file_id64 MiB (против 32 MiB для inline Base64)
PDF / Word / PowerPoint100 MiB, 120 с на разбор при загрузке
Текст / таблица / электронная книга32 MiB, 10 минут на загрузку
Квота аккаунта25 GiB, 10 000 файлов; срок хранения от 1 ч до 30 дней или бессрочно

Файлы принадлежат аккаунту, а не API-ключу. Один и тот же идентификатор работает в семействах OpenAI- и Anthropic-совместимых API; для второго требуется заголовок anthropic-beta: files-api-2025-04-14. Разбор выполняется во время загрузки, поэтому file_id возвращается только после успешного завершения операции.

Встроенные инструменты или отдельные Search и Fetch

Встроенные инструменты подходят, когда модель должна сама решить, искать ли информацию или читать страницу внутри диалога. Отдельные API из руководства Search & Fetch выбирайте, если решение принимает ваш код: POST https://api.deepseek.com/v1/tools/search выполняет ранжированный поиск максимум по 50 результатам (rerank_score от 0 до 3, где 1.5+ означает высокое качество, authority — от 0 до 4), а POST https://api.deepseek.com/v1/tools/fetch превращает один URL в Markdown. Отдельный Search пока не умеет искать изображения, тогда как веб-инструменты умеют.

ВариантКто управляетЕдиница тарификацииЛучше всего подходит для
Встроенные deepseek_web_search / deepseek_read_urlМодель, на стороне сервераЗа запрос с результатами / за загруженную страницуЧаты с цитатами, глубокое исследование
Отдельные Search + FetchВаш код$0.75 за 1 000 успешных запросов каждого типаАгенты, RAG-конвейеры

Лимиты запросов задаются на уровне аккаунта и не зависят друг от друга: 100 QPS для Search, 25 QPS для Fetch плюс отдельный лимит Fetch на домен. При превышении квоты API возвращает HTTP 429. Повторяйте запросы после 408, 429 и 5xx, а для остальных ошибок 4xx сначала исправьте сам запрос. В отдельном Search работают операторы site:, -site:, "exact phrase", lang:, after:/before:.

Во сколько это обходится на практике

Плата за инструменты добавляется к стоимости токенов: Search и Fetch стоят $0.75 за 1 000 успешных запросов каждого типа. Для OCR, ASR и TTS действуют отдельные цены на инструменты и ограниченные по времени промоакции, описанные в анонсе. Параметр count меняет количество результатов, но не цену.

Сравнение цены поиска за 1 000 запросов

По замерам сообщества, поиск DeepSeek стоит около $0.75 за 1 000 запросов против примерно $10 за 1 000 у поиска OpenAI и Claude, как сообщают разработчики (@berryxia). Только по стоимости инструментов разница составляет примерно 13 раз.

Ответ с одним поисковым запросом обходится по инструментам дешевле одной десятой цента. Исследовательский запуск с глубоким анализом, восемью запросами и шестью открытиями страниц потребует оплаты примерно за 8 поисков и 6 загрузок — всё ещё меньше двух центов без учёта токенов. Главная опасность — объём: агент, который запускает десятки поисков подряд, быстро увеличивает расходы по $0.75 за единицу. Планируйте бюджет по успешным вызовам, ограничивайте глубину поиска и записывайте значения tool_search и tool_fetch из итогового объекта usage. Поле web_search_requests в нём служит только для отображения и не показывает оплачиваемое количество.

Чек-лист перед запуском: цитаты, безопасность и демо

Цитаты приходят в блоках web_search_result_location с URL, заголовком и процитированным текстом — это описано в руководстве по Web Tools. В потоковом режиме они передаются событиями citations_delta: на один текстовый блок приходится не более одного URL, а при повторной отправке цитаты игнорируются. Поля signature и блоки инструментов нужно сохранять между ходами без изменений: страницы восстанавливаются по подписи. Если подпись недействительна или отсутствует, запрос всё равно выполнится, но страница будет отброшена. В примере из руководства по чат-боту контекст увеличивается с 40 входных токенов до 9 078 после работы инструментов, причём 4 096 токенов берутся из кэша. Поэтому заранее закладывайте запас на историю, раздувающуюся из-за поиска.

Для публичных приложений DeepSeek требует проверку безопасности, но оставляет модерацию, регистрацию модели и маркировку AI-контента разработчику. Встроенную проверку стоит воспринимать как первый фильтр, явно обрабатывать причину остановки refusal и быть готовым к url_not_allowed, если страница не прошла проверку. Такие заблокированные загрузки всё равно оплачиваются. Демо чата показывает схему интеграции, но выполняет всё в браузере — перед выходом в продакшен нужен собственный бэкенд.

Частые вопросы

Можно ли заставить модель искать информацию в каждом запросе?

Нет. Когда запускать инструменты, решает модель, а указание веб-инструмента в tool_choice приводит к ошибке 400.

Какая модель и какие эндпоинты поддерживают веб-поиск и загрузку файлов?

deepseek-flash во всех трёх интерфейсах: Messages, Responses и Chat Completions. Ссылки на файлы через file_id работают и в OpenAI-, и в Anthropic-совместимых семействах.

Можно ли одновременно использовать загруженные файлы и веб-поиск?

Да. Именно такой сценарий описан для чат-бота: контекст из файла дополняется серверным поиском и цитатами.

Сколько поисковых запросов обычно выполняет агент за одну задачу?

Для простого ответа достаточно одного вызова с несколькими запросами, а исследование с включёнными рассуждениями может потребовать до примерно 20 обращений к инструментам. Считайте tool_search и tool_fetch для каждой задачи: встроенные инструменты тарифицируются за запрос или страницу, отдельные API — за успешный запрос, в обоих случаях по $0.75 за 1 000.

Начните с одного встроенного поискового запроса и одной загрузки файла в демо. Проверьте в итоговом объекте usage счётчики tool_search и tool_fetch, и только после этого решайте, выгоднее ли такая оплата для конкретной задачи, чем собственный слой на базе Tavily или SearXNG.