Duckduckgo Search

Бесплатный веб-поиск через DuckDuckGo — текст, новости, изображения, видео. API-ключ не нужен. Предпочтительный способ — CLI ddgs, если установлен; Python-библиотека DDGS используется только после проверки доступности ddgs в текущей среде выполнения.

Метаданные навыка

ИсточникОпциональный (устанавливается по запросу) — установите командой hermes skills install official/research/duckduckgo-search
Путьoptional-skills/research/duckduckgo-search
Версия1.3.0
АвторgamedevCloudy
ЛицензияMIT
Платформыlinux, macos, windows
Тегиsearch, duckduckgo, web-search, free, fallback
Связанные навыкиarxiv

Справочник: полный SKILL.md

инфо

Ниже приведено полное определение навыка, которое Hermes загружает при активации этого навыка. Именно это видит агент в качестве инструкций, когда навык активен.

DuckDuckGo Search

Бесплатный веб-поиск через DuckDuckGo. API-ключ не нужен.

Используйте этот навык, когда web_search недоступен или не подходит (например, если FIRECRAWL_API_KEY не задан). Можно также применять как самостоятельный путь поиска, когда нужны именно результаты DuckDuckGo.

Detection Flow

Перед выбором подхода проверьте, что реально доступно:

# Check CLI availability
command -v ddgs >/dev/null && echo "DDGS_CLI=installed" || echo "DDGS_CLI=missing"

Дерево решений:

  1. Если CLI ddgs установлен — предпочесть terminal + ddgs
  2. Если CLI ddgs отсутствует — не предполагать, что execute_code умеет импортировать ddgs
  3. Если пользователь хочет именно DuckDuckGo — сначала установить ddgs в нужной среде
  4. Иначе — использовать встроенные веб- или браузерные инструменты

Важное замечание о средах выполнения:

  • Terminal и execute_code — это разные среды
  • Успешная установка в оболочке не гарантирует, что execute_code сможет импортировать ddgs
  • Не считайте сторонние Python-пакеты предустановленными в execute_code

Installation

Устанавливайте ddgs только тогда, когда поиск через DuckDuckGo действительно нужен и среда его не предоставляет.

# Python package + CLI entrypoint
pip install ddgs

# Verify CLI
ddgs --help

Если рабочий процесс зависит от Python-импортов, перед использованием from ddgs import DDGS убедитесь, что именно та среда умеет импортировать ddgs.

Метод 1: поиск через CLI (предпочтительный)

Используйте команду ddgs через terminal, если она доступна. Предпочтительный путь — он не требует предположений о том, установлен ли пакет ddgs в песочнице execute_code.

# Text search
ddgs text -q "python async programming" -m 5

# News search
ddgs news -q "artificial intelligence" -m 5

# Image search
ddgs images -q "landscape photography" -m 10

# Video search
ddgs videos -q "python tutorial" -m 5

# With region filter
ddgs text -q "best restaurants" -m 5 -r us-en

# Recent results only (d=day, w=week, m=month, y=year)
ddgs text -q "latest AI news" -m 5 -t w

# JSON output for parsing
ddgs text -q "fastapi tutorial" -m 5 -o json

Флаги CLI

ФлагОписаниеПример
-qЗапрос — обязательный-q "search terms"
-mМакс. количество результатов-m 5
-rРегион-r us-en
-tОграничение по времени-t w (неделя)
-sБезопасный поиск-s off
-oФормат вывода-o json

Метод 2: Python API (только после проверки)

Класс DDGS в execute_code или другой Python-среде применяйте лишь убедившись, что ddgs там установлен. Не считайте, что execute_code по умолчанию включает сторонние пакеты.

Корректная формулировка:

  • «Используйте execute_code с ddgs после установки или проверки пакета при необходимости»

Не говорите:

  • «execute_code включает ddgs»
  • «Поиск DuckDuckGo работает в execute_code по умолчанию»

Важно: max_results всегда передавайте как именованный аргумент — позиционное использование вызывает ошибку во всех методах.

Текстовый поиск

Подходит для: общих исследований, поиска по компаниям, документации.

from ddgs import DDGS

with DDGS() as ddgs:
    for r in ddgs.text("python async programming", max_results=5):
        print(r["title"])
        print(r["href"])
        print(r.get("body", "")[:200])
        print()

Возвращает: title, href, body

Поиск по новостям

Подходит для: текущих событий, срочных новостей, последних обновлений.

from ddgs import DDGS

with DDGS() as ddgs:
    for r in ddgs.news("AI regulation 2026", max_results=5):
        print(r["date"], "-", r["title"])
        print(r.get("source", ""), "|", r["url"])
        print(r.get("body", "")[:200])
        print()

Возвращает: date, title, body, url, image, source

Поиск изображений

Подходит для: визуальных ссылок, изображений продуктов, диаграмм.

from ddgs import DDGS

with DDGS() as ddgs:
    for r in ddgs.images("semiconductor chip", max_results=5):
        print(r["title"])
        print(r["image"])
        print(r.get("thumbnail", ""))
        print(r.get("source", ""))
        print()

Возвращает: title, image, thumbnail, url, height, width, source

Поиск видео

Подходит для: туториалов, демонстраций, обучающих роликов.

from ddgs import DDGS

with DDGS() as ddgs:
    for r in ddgs.videos("FastAPI tutorial", max_results=5):
        print(r["title"])
        print(r.get("content", ""))
        print(r.get("duration", ""))
        print(r.get("provider", ""))
        print(r.get("published", ""))
        print()

Возвращает: title, content, description, duration, provider, published, statistics, uploader

Краткий справочник

МетодКогда использоватьКлючевые поля
text()Общий поиск, компанииtitle, href, body
news()Актуальные события, обновленияdate, title, source, body, url
images()Визуальные материалы, диаграммыtitle, image, thumbnail, url
videos()Туториалы, демонстрацииtitle, content, duration, provider

Workflow: поиск и извлечение

DuckDuckGo возвращает заголовки, URL и сниппеты — но не полное содержимое страниц. Чтобы получить полный текст, сначала выполните поиск, а затем извлеките нужный URL с помощью web_extract, браузерных инструментов или curl.

Пример с CLI:

ddgs text -q "fastapi deployment guide" -m 3 -o json

Пример на Python — только после проверки, что ddgs установлен в той среде:

from ddgs import DDGS

with DDGS() as ddgs:
    results = list(ddgs.text("fastapi deployment guide", max_results=3))
    for r in results:
        print(r["title"], "->", r["href"])

Затем извлеките нужный URL с помощью web_extract или другого инструмента получения контента.

Ограничения

  • Ограничение запросов: DuckDuckGo может замедлить ответы при большом количестве быстрых запросов. Добавьте небольшую паузу между поисками при необходимости.
  • Нет извлечения контента: ddgs возвращает сниппеты, а не полное содержимое страниц. Для полного текста статьи или страницы используйте web_extract, браузерные инструменты или curl.
  • Качество результатов: В целом хорошее, но менее настраиваемое, чем поиск через Firecrawl.
  • Доступность: DuckDuckGo может блокировать запросы с некоторых облачных IP-адресов. Если поиск возвращает пустые результаты, попробуйте другие ключевые слова или подождите несколько секунд.
  • Непостоянство полей: Возвращаемые поля могут различаться между результатами или версиями ddgs. Используйте .get() для необязательных полей, чтобы избежать KeyError.
  • Разные среды выполнения: Успешная установка ddgs в терминале не означает автоматически, что execute_code сможет его импортировать.

Устранение проблем

ПроблемаВероятная причинаЧто делать
ddgs: command not foundCLI не установлен в оболочкеУстановите ddgs или используйте встроенные веб- или браузерные инструменты
ModuleNotFoundError: No module named 'ddgs'Пакет не установлен в данной Python-средеНе используйте Python DDGS в этой среде, пока она не подготовлена
Поиск не возвращает результатыВременное ограничение запросов или неудачный запросПодождите несколько секунд, повторите попытку или скорректируйте запрос
CLI работает, но импорт в execute_code падаетTerminal и execute_code — разные средыПродолжайте использовать CLI или подготовьте Python-среду отдельно

Распространённые ошибки

  • max_results — только именованный аргумент: ddgs.text("query", 5) вызовет ошибку. Правильно: ddgs.text("query", max_results=5).
  • Не считайте CLI существующим: перед использованием проверьте command -v ddgs.
  • Не считайте execute_code способным импортировать ddgs: from ddgs import DDGS может завершиться с ModuleNotFoundError, если эта среда не была подготовлена отдельно.
  • Имя пакета: пакет называется ddgs (ранее — duckduckgo-search). Устанавливайте через pip install ddgs.
  • Не путайте -q и -m (CLI): -q — для запроса, -m — для максимального количества результатов.
  • Пустые результаты: если ddgs ничего не возвращает, скорее всего, сработало ограничение запросов. Подождите несколько секунд и повторите.

Validated With

Примеры проверены на семантике ddgs==9.11.2. Инструкции навыка разграничивают доступность CLI и доступность Python-импорта как независимые аспекты — задокументированный рабочий процесс соответствует реальному поведению среды выполнения.

ESC