DeepSeek відкрила Search і Fetch API: що це дає розробникам

Оновлено:
Мова: 🇺🇦
DeepSeek відкрила Search і Fetch API: що це дає розробникам

17 жовтня 2026 року DeepSeek разом з оновленням моделі V4.1-Flash-1017 відкрила для всіх власний пошук і завантаження сторінок через API. Для розробників AI-застосунків це зачіпає нудний, але важливий шар: у своїх проєктах я будував пошук як набір @Tool-методів, і значна частина роботи йшла не на модель, а на пошукову й обробну обв'язку навколо неї. Нижче — що саме з'явилося, скільки це коштує, які в API обмеження й чого він за вас не вирішить. Це розбір документації та офіційних заяв, а замість замірів — розрахунок вартості за офіційними прайсами: він показує, скільки коштує пошук для агента порівняно з Tavily, Exa і Brave і де насправді витрачаються гроші.

⚡ Коротко: що відкрила DeepSeek 17 жовтня

  • ✅ Search API шукає сторінки й повертає структуровані результати, а Fetch API завантажує одну сторінку й повертає її текст у Markdown. Обидва — звичайні JSON API з тією самою авторизацією, що й решта API DeepSeek.
  • 💸 Ціна: $0,75 за 1000 успішних запитів до кожного з двох API. Порожні відповіді, помилки й таймаути не тарифікуються.
  • ⏱️ Ліміт: 5 запитів на секунду на акаунт окремо для Search і Fetch, а для Fetch є ще й ліміт на кожен домен.
  • 🧠 Модель: deepseek-flash тепер обслуговується версією V4.1-Flash-1017. Спосіб виклику й ціни моделі не змінилися.
  • ⚠️ Що API не прибирає: ранжування під ваш продукт, кеш, дедуплікацію, контроль джерел і захист від prompt injection. Вони лишаються вашою справою.

📚 Зміст статті

🧩 Що саме вийшло: Search, Fetch і V4.1-Flash-1017

Згідно з журналом змін DeepSeek, 17 жовтня компанія відкрила пошук, який працює на її власній пошуковій системі. DeepSeek описує її як AI-native пошук загального призначення з індексом із сотень мільярдів сторінок, підтримкою багатьох мов і результатами в реальному часі, а також заявляє, що система відсікає SEO-спам, GEO-маніпуляції та неякісний AI-контент. Це твердження самої компанії, незалежно воно не перевірялося.

Search API

Шукає сторінки за запитом і повертає структуровані результати.

Fetch API

Завантажує одну сторінку й повертає її вміст як Markdown. Відповідь залежить від доступності цільового сайту та його правил доступу.

V4.1-Flash-1017

Паралельно DeepSeek оновила модель V4.1 Flash до версії 1017. Згідно з документацією, спосіб виклику й ціни не змінилися: потрібна модель deepseek-flash. Компанія також заявляє, що знизила час виконання завдань і довжину відповідей, а зокрема оптимізувала модель для власного DeepSeek Harness, Tencent CodeBuddy, WorkBuddy та інших платформ. Для Harness потрібна версія 0.2.1-rc.1 або новіша.

Бенчмарк (за даними DeepSeek) V4.1-Flash (10 вересня) V4.1-Flash-1017
DeepSWE v1.174,277,0
Terminal-Bench 4.031,242,3
NL2Repo-Bench65,468,2
ProgramBench20,329,1
Automation-Bench54,860,5 (v1.0.6)
Agents' Last Exam31,835,4

Це заміри компанії, а не незалежне порівняння. Terminal-Bench 4.0 тестувався у фреймворку Claude Code, а DeepSWE — у Mini-SWE-V2, як зазначає DeepSeek. Для Automation-Bench у новій версії вказано v1.0.6, а для вересневої версія не зазначена, тож ці два числа можуть бути не цілком порівнянними. За повідомленнями преси (Startup Fortune), ваги нової версії також опубліковані на Hugging Face і ModelScope. Перевірте ліцензію на сторінці моделі.

🔌 Як це працює: запити, відповіді й оператори пошуку

Усі виклики йдуть на https://api.deepseek.com з заголовками Authorization: Bearer <ключ> і Content-Type: application/json.

API Ендпоінт
SearchPOST /v1/tools/search
FetchPOST /v1/tools/fetch

Запит до Search

curl https://api.deepseek.com/v1/tools/search \
  -H "Authorization: Bearer <DeepSeek API Key>" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "DeepSeek V4 release",
    "count": 5,
    "need_content": true
  }'
Поле Опис
queryОбов'язкове; від 1 до 128 символів Unicode, не може складатися лише з пробілів. Підтримує оператори, див. нижче
countКількість результатів від 1 до 50, за замовчуванням 10. На ціну запиту не впливає
need_contentЧи повертати текст сторінки в полі content. За замовчуванням false, тоді поле порожнє. Доплати не потребує, але збільшує обсяг тексту, який піде в контекст моделі
ori_questionОригінальне питання користувача (1–128 символів): допомагає краще зрозуміти запит
localizationIP-адреса для локалізації результатів

Оператори пошуку

Оператор Приклад Що робить
site:DeepSeek site:github.comОбмежує результати сайтом; кілька через OR
-site:DeepSeek -site:example.comВиключає сайт
- та -"..."DeepSeek -"release notes"Виключає слово або точну фразу
"..."DeepSeek "exact phrase"Точний збіг фрази
lang:DeepSeek lang:zh,enОбмежує мовою
after: / before:DeepSeek after:2025-01-01Обмежує датою публікації

Що повертає Search

Відповідь містить масив results. Для RAG найкорисніші поля: summary (довге резюме на 600–800 символів, розраховане на модель), snippet (короткий опис для інтерфейсу, зазвичай 100–200 символів), content (текст, якщо просили), date (дата публікації або null), rerank_score (оцінка 0–3, значення від 1,5 вважаються якісними) та authority (рівень авторитетності від 0 до 4, де 3 і вище — високоавторитетні джерела; -1, якщо невідомо). Звичайний пошук без збігів повертає порожній масив, і такий запит не тарифікується.

Fetch

curl https://api.deepseek.com/v1/tools/fetch \
  -H "Authorization: Bearer <DeepSeek API Key>" \
  -H "Content-Type: application/json" \
  -d '{ "url": "https://example.com/article" }'

У запиті одне поле url: HTTP або HTTPS-адреса довжиною до 8192 символів, з хостом і без імені користувача та пароля. У відповіді — title і content у Markdown.

DeepSeek відкрила Search і Fetch API: що це дає розробникам

💸 Ціна, ліміти й помилки

Що Умови за документацією
Ціна $0,75 за 1000 успішних запитів, окремо для Search і Fetch. Кількість результатів (count) на ціну не впливає
Що вважається успішним запитом HTTP 200 з результатом: для Search непорожній results, для Fetch — отриманий вміст сторінки. Помилки, порожні результати й таймаути не тарифікуються
Ліміт швидкості 5 запитів/с на акаунт для Search і окремо 5 запитів/с для Fetch, незалежно від того, який ключ API використано. Для Fetch додатково діє ліміт на домен. Перевищення дає HTTP 429
Через Harness, Claude Code, Codex Серверні виклики Search і Fetch з цих інструментів зараз безкоштовні. Тарифікація почнеться о 00:00 за пекінським часом 1 листопада 2026 року

Коди помилок

HTTP Що означає Що робити
400Некоректні заголовки або тіло запитуВиправити запит
401Ключ відсутній або недійснийПеревірити ключ
402Недостатньо коштів на балансіПоповнити баланс
403Fetch відхилено політикою безпекиНе повторювати без змін
404Fetch не отримав придатний вміст: адреса недоступна, заблокована політикою сайту, непідтримуваний тип вмісту або немає тексту для MarkdownНе повторювати без змін
408, 5xx, 504Таймаут читання запиту, помилка сервера або вниз за потокомЗачекати й повторити
413Тіло запиту завеликеСкоротити запит
429Перевищено ліміт швидкостіЗачекати й повторити

Документація радить повторювати лише 408, 429 і 5xx, а 402 вирішувати поповненням рахунку. Інші 4xx без змін запиту повторювати не слід.

Чи варто будувати власний ретрай (повторні спроби) для 429 і 5xx — залежить від навантаження. [Напишу про реальні результати в окремій статті із замірами.]

🛠️ Як було раніше і що змінюється

Коли я будував пошуковий шар для AI-агентів, я ішов шляхом окремого @Tool для кожного джерела: Tavily для новин, Wikipedia для визначень, ArXiv для наукових статей. Цей підхід і його ціну для вибору інструмента я описував у статті «Search API для AI агентів: що обирають розробники і де помиляються». Поверх такого @Tool зазвичай накопичується обв'язка: пошук, завантаження HTML, очищення сторінки, обробка помилок і передача тексту в модель.

Тепер частину цього шару можна віддати DeepSeek:

  • Пошук і ранжування. Search повертає результати вже з rerank_score та authority.
  • Завантаження і витяг тексту. Fetch віддає сторінку у вигляді Markdown, тож парсити HTML самому не потрібно.
  • Один постачальник замість двох. Пошук, завантаження сторінки й сама модель обслуговуються одним акаунтом з однією схемою авторизації.

Дві ролі «їхньої інфраструктури»

  • Варіант A: ваш @Tool викликає Search і Fetch. Ви лишаєте за собою цикл викликів інструментів, кеш, обмеження й логування, а замість Tavily або власного парсера всередині інструмента стоїть API DeepSeek. Це типовий сценарій для Spring AI.
  • Варіант B: агентні інструменти DeepSeek Harness, Claude Code, Codex. Документація зазначає, що серверні виклики інструментів з них уже використовують Search і Fetch.

Важливе уточнення: Search і Fetch у документації описано як окремі JSON API. Вбудованого автоматичного веб-пошуку в звичайному запиті до chat/completions я там не бачив, тому у власному застосунку цикл інструментів, як і раніше, пишете ви.

☕ Приклад у Spring Boot та Spring AI

Нижче скелет двох інструментів для Spring AI: пошук і завантаження сторінки. Він складений за документацією, але я його не компілював і не запускав, тож перед використанням перевірте під свою версію Spring AI.

@Component
public class DeepSeekWebTools {

    private final RestClient client;

    public DeepSeekWebTools(@Value("${deepseek.api-key}") String apiKey) {
        this.client = RestClient.builder()
                .baseUrl("https://api.deepseek.com")
                .defaultHeader("Authorization", "Bearer " + apiKey)
                .build();
    }

    @Tool(description = "Шукає актуальну інформацію в інтернеті. "
            + "Використовуй, коли питання стосується свіжих подій або фактів, яких немає в базі знань.")
    @SuppressWarnings("unchecked")
    public String webSearch(@ToolParam(description = "Пошуковий запит до 128 символів") String query) {
        Map<String, Object> body = Map.of("query", query, "count", 5, "need_content", false);

        Map<String, Object> response = client.post()
                .uri("/v1/tools/search")
                .contentType(MediaType.APPLICATION_JSON)
                .body(body)
                .retrieve()
                .body(new ParameterizedTypeReference<>() {});

        List<Map<String, Object>> results = (List<Map<String, Object>>) response.get("results");
        return results.stream()
                .map(r -> "- " + r.get("title") + " (" + r.get("url") + "): " + r.get("summary"))
                .collect(Collectors.joining("\n"));
    }

    @Tool(description = "Завантажує одну веб-сторінку за URL і повертає її текст у Markdown.")
    public String fetchPage(@ToolParam(description = "Повний http або https URL") String url) {
        Map<String, Object> response = client.post()
                .uri("/v1/tools/fetch")
                .contentType(MediaType.APPLICATION_JSON)
                .body(Map.of("url", url))
                .retrieve()
                .body(new ParameterizedTypeReference<>() {});

        String content = String.valueOf(response.get("content"));
        // Обмежуємо обсяг, щоб не заповнити контекст моделі однією сторінкою
        return content.length() > 8000 ? content.substring(0, 8000) : content;
    }
}

Підключення до моделі виглядає приблизно так (перевірте метод tools у вашій версії Spring AI):

String answer = chatClient.prompt()
        .user("Що нового з'явилося в DeepSeek API цього тижня?")
        .tools(deepSeekWebTools)
        .call()
        .content();

Модель deepseek-flash підключається через OpenAI-сумісний інтерфейс із базовою адресою https://api.deepseek.com, а також через Anthropic-сумісний інтерфейс (https://api.deepseek.com/anthropic), як зазначено в швидкому старті.

Про типові помилки tool calling у Spring AI (зокрема в 2.0.0-M3) і чому @Tool може «мовчати», я писав у статті «Яку модель Ollama обрати для агента з tool calling».

⚖️ Що API не вирішує

  • Ранжування під ваш продукт. Search дає загальну оцінку релевантності, але правила «які джерела для мене надійні» залишаються вашими (наприклад, список дозволених доменів через оператор site:).
  • Дедуплікація й кеш. Ті самі запити й сторінки платні щоразу. Кеш на вашому боці знижує вартість.
  • Контроль якості. Навіть якщо система відсікає спам, перевіряйте важливі факти в кількох джерелах.
  • Закриті й заблоковані сторінки. Fetch не відкриє те, що закрите політикою сайту (404) або відхилене політикою безпеки (403).
  • Ліміти. 5 запитів/с на акаунт для кожного API можуть стати вузьким місцем для агента, який паралельно запускає багато пошуків. Заплануйте чергу й повторні спроби.
  • Юридичні питання. Умови використання сайтів, авторське право на витягнутий текст і персональні дані: це ваша відповідальність, а не API.

🛡️ Безпека: prompt injection, приватність і SSRF

Prompt injection через завантажені сторінки

Текст, який повертає Fetch, — це довільний вміст з інтернету, який ви передаєте моделі. Така сторінка може містити інструкції, спрямовані на агента. Це не теорія: у дослідженні «Indirect Prompt Injection in the Wild» проаналізували 1,2 млрд URL з 24,8 млн хостів і знайшли 15,3 тис. підтверджених випадків на 11,7 тис. сторінках. Про механіку такої атаки я детально писав у статті «Indirect Prompt Injection: атака в документі вашого AI».

Практичні заходи (це мої рекомендації, а не вимоги API):

  • Розглядайте результат Search і Fetch як дані, а не як інструкції. У системному промпті прямо вкажіть, що вміст сторінок не може змінювати завдання.
  • Не давайте агентові, який читає інтернет, чутливих прав (відправка листів, доступ до внутрішніх систем) без підтвердження людиною.
  • Обмежуйте довжину вмісту, який передаєте в модель, і логуйте URL, з яких він узятий.

Приватність запитів

Пошукові запити й URL передаються стороннім серверам DeepSeek. Не вставляйте в запити персональні дані, секрети й конфіденційний текст, а перед використанням у комерційному продукті перевірте політику обробки даних. Параметр localization приймає IP-адресу, тому передавайте її лише за потреби.

Де тут SSRF

Fetch виконується на боці DeepSeek, тому класичний SSRF проти вашої внутрішньої мережі через цей API вас не стосується: сервіс не бачить ваших закритих адрес. SSRF повертається, якщо ви пишете власний fetcher або запускаєте headless-браузер на своїй інфраструктурі. Про це я докладно писав у статті про обмеження Headless Chrome: «Обмеження Headless Chrome», розділ про SSRF.

🔍 Порівняння підходів: власний конвеєр, Search + Fetch, гібрид

Підхід Переваги Обмеження
Власний конвеєр (пошуковий API + власний парсер) Повний контроль над джерелами й обробкою Складніше розробляти й підтримувати; витрати на інфраструктуру
DeepSeek Search + Fetch Швидкий старт, готові ранжування й Markdown, один постачальник Залежність від зовнішнього API й його лімітів; приватність запитів
Гібрид (веб-пошук + власна база знань) Свіжі дані з інтернету разом із вашими документами Більше компонентів і логіки

Коли вистачить Search + Fetch. MVP, прототипи, агенти для дослідження й запитів про свіжі події. Коли потрібен власний шар. Суворі вимоги до джерел, великі обсяги, чутливі дані або потреба в нестандартному ранжуванні.

Веб-пошук чи векторна база? Якщо відповідь лежить у ваших власних документах, потрібен векторний пошук з ембедингами. Як вибрати модель ембедингів, я розбирав у статті «Embedding-моделі для RAG у 2026». Якщо ж потрібні свіжі факти поза вашою базою, підключайте веб-пошук. Часто потрібні обидва.

Про ціну. У моєму огляді Search API станом на травень 2026 ціни коливалися від $1 до $10 за 1000 запитів залежно від провайдера (див. порівняння Tavily, Brave, Exa, SerpAPI, Serper). $0,75 за 1000 успішних запитів DeepSeek виглядає дешево, але порівнювати треба однакові сценарії: «пошук», «пошук з вмістом» і «пошук плюс завантаження сторінки» — це різна кількість платних викликів. Тому я не роблю висновку «дешевше» без власних вимірювань.

❓ Часті питання (FAQ)

Скільки коштують Search і Fetch API DeepSeek?

$0,75 за 1000 успішних запитів до кожного API. Помилки, порожні результати й таймаути не тарифікуються. Через DeepSeek Harness, Claude Code та Codex виклики зараз безкоштовні до 1 листопада 2026 року.

Який ліміт запитів?

5 запитів на секунду на акаунт для Search і окремо для Fetch. Fetch також має ліміт на домен. Перевищення дає HTTP 429.

Чи робить модель веб-пошук автоматично?

У документації Search і Fetch описані як окремі JSON API. Автоматичного веб-пошуку в звичайному запиті до chat/completions я там не бачив. У власному застосунку ви підключаєте їх як інструменти.

Як викликати оновлену модель?

Назва моделі deepseek-flash. Вона обслуговується версією V4.1-Flash-1017. Старі назви deepseek-v4-flash і deepseek-v4-flash-vision-exp ще приймаються, але ці моделі виведено з експлуатації, і запити обробляє нова версія за ціною Flash.

✅ Висновки

  • 🔹 DeepSeek відкрила Search і Fetch API: пошук і завантаження сторінок у Markdown за $0,75 за 1000 успішних запитів, з лімітом 5 запитів/с кожен.
  • 🔹 Це замінює шар пошуку й витягу тексту всередині вашого @Tool, але не цикл інструментів, кеш, перевірку джерел і безпеку.
  • 🔹 Головні ризики: prompt injection зі сторінок, приватність запитів і залежність від зовнішнього API.
  • 🔹 Безкоштовний період для Harness, Claude Code і Codex закінчується 1 листопада, тож плануйте бюджет заздалегідь.
  • 🔹 Бенчмарки V4.1-Flash-1017 — заяви DeepSeek; перевіряйте модель на власних завданнях.
  • 🔹 Мої заміри швидкості, якості й вартості API будуть в окремій статті.

📎 Джерела

Важливо: ціни, ліміти та умови API змінюються. Перед використанням перевіряйте актуальну документацію DeepSeek. Матеріал актуальний на 18 жовтня 2026 року.