Запустіть gpt-researcher на кастомному OpenAI-сумісному ендпоінті.

Updated 2026-07-30

gpt-researcher зчитує OPENAI_BASE_URL із середовища й розділяє роботу на три слоти моделей. Встановіть base URL на https://api.apisrouter.com/v1, лишіть префікс openai:, і FAST_LLM, SMART_LLM та STRATEGIC_LLM можуть кожен бути іншою моделлю каталогу за одним ключем.

Коротка відповідь: п'ять рядків у .env.

Задокументований шлях кастомного ендпоінта gpt-researcher — змінні середовища. Встановіть OPENAI_BASE_URL на https://api.apisrouter.com/v1, встановіть OPENAI_API_KEY на ваш ключ шлюзу й призначте три слоти моделей з префіксом провайдера openai:. Префікс каже gpt-researcher, який клієнт використовувати; рядок після двокрапки пересилається до ендпоінта, тож валідний будь-який id, який обслуговує шлюз, включно з id Claude і Gemini. Це конфігурація, задокументована на docs.gptr.dev для кастомних OpenAI-сумісних ендпоінтів, і вона працює ідентично для pip-пакета, веб-застосунку й мультиагентних потоків, оскільки всі вони резолвлять ту саму конфігурацію.

OPENAI_BASE_URL=https://api.apisrouter.com/v1
OPENAI_API_KEY=sk-APIsRouter-...
FAST_LLM=openai:claude-haiku-4-5-20251001
SMART_LLM=openai:claude-sonnet-4-6
STRATEGIC_LLM=openai:gpt-5.5

Як gpt-researcher витрачає токени на три слоти.

gpt-researcher (assafelovic на GitHub, приблизно 28 тис. зірок) перетворює запит на досліджений, процитований звіт: він планує дослідницькі питання, розгалужує веб-пошуки через рітрівер, скрейпить і підсумовує джерела, а потім пише розлогий звіт. Фреймворк розділяє цей конвеєр на три налаштовувані слоти моделей замість одного. FAST_LLM обробляє об'ємну роботу з низькими ставками, головним чином підсумовування скрейпнутих сторінок. SMART_LLM робить важке написання, включно з фінальним звітом. STRATEGIC_LLM обробляє планування: генерацію дослідницьких питань і вибір підходу. За замовчуванням вони налаштовані на моделі OpenAI (gpt-4o-mini, gpt-4.1 і o4-mini відповідно на момент написання), що й пояснює, чому єдине перевизначення OPENAI_BASE_URL настільки ефективне: усі три слоти використовують клієнт у формі OpenAI, тож один base URL рухає весь конвеєр. Оскільки кожен слот бере власний рядок provider:model, слотам не потрібно ділити постачальника. Прогін може підсумовувати швидкою моделлю Claude, писати сильнішою моделлю Claude чи GPT і планувати моделлю рівня міркування — усе через той самий ендпоінт і ключ. На ключі одного постачальника такий мікс вимагав би трьох облікових записів; за шлюзом це три рядки в .env.

Повне налаштування: .env плюс Python API.

Створіть файл .env у вашій робочій директорії (чи експортуйте змінні в оболонці) і запускайте gpt-researcher як зазвичай; pip-пакет і веб-застосунок обидва зчитують те саме середовище. Python API взагалі не потребує коду, специфічного для ендпоінта, у чому й суть: маршрутизація — це конфігурація, і дослідницький код лишається ідентичним, чи то ендпоінт OpenAI, чи шлюз. Два суміжні налаштування мають значення. Веб-пошук йде через рітрівер, за замовчуванням Tavily, з власним ключем (TAVILY_API_KEY); ці облікові дані незалежні від ендпоінта LLM і все ще потрібні для живого веб-дослідження. А ембедінги за замовчуванням — openai:text-embedding-3-small, тож виклики ембедінга йдуть за тією самою конфігурацією клієнта у формі OpenAI; якщо ендпоінт за OPENAI_BASE_URL не обслуговує цю модель ембедінга, налаштуйте EMBEDDING на провайдера, який обслуговує (документація використовує префікс custom: для OpenAI-сумісних ендпоінтів ембедінга, а також підтримуються локальні варіанти на кшталт Ollama).

import asyncio
from gpt_researcher import GPTResearcher

async def main():
    researcher = GPTResearcher(
        query="State of small modular reactors in 2026",
        report_type="research_report",
    )
    await researcher.conduct_research()
    report = await researcher.write_report()
    print(report)

asyncio.run(main())  # routing comes entirely from .env

Вибір моделі для кожного слоту.

Апстрим-значення за замовчуванням кодують правильну форму: маленька модель для об'єму, сильна модель для написання, модель міркування для планування, тож тримайте цю форму й підвищуйте слоти, а не зводьте їх до однієї моделі. За одним ендпоінтом A/B двох авторів — це зміна одного рядка .env на прогін, а лог використання за ключем каже, скільки насправді коштувала кожна конфігурація звіту.

  • FAST_LLM спрацьовує найчастіше: кожне скрейпнуте джерело підсумовується. Швидкий id (claude-haiku-4-5-20251001, deepseek-v4-flash) не дає звіту з багатьма джерелами бути домінованим вартістю підсумовування, а втрата якості тут обмежена, бо підсумки живлять автора, а не читача.
  • SMART_LLM пише звіт, який користувач насправді читає. Довгий вивід, стійка структура, дисципліна цитування: тут claude-sonnet-4-6 чи gpt-5.5 заробляють свою ціну, і саме тут падіння якості видно одразу.
  • STRATEGIC_LLM формує прогін до його початку. Погані дослідницькі питання дають поганий звіт незалежно від того, наскільки хороший автор; сильна в міркуванні модель тут — мало викликів, але великий важіль.
  • Id з довгим контекстом, такі як gemini-3.1-pro-preview, варто протестувати в слоті SMART для прогонів detailed_report, де автор працює над великим накопиченим контекстом підсумків.

Оплата за фактом · нижче офіційних цін

Selected models are priced below official list prices. Exact input, output, cache, and per-request prices are shown for each model.

МодельОфіційна цінаНаша ціна
Claude Haiku 4.5 20251001$1.00 / $5.00 per M$0.80 / $4.00 per M
Claude Sonnet 4.6$3.00 / $15.00 per M$2.40 / $12.00 per M
GPT-5.5$5.00 / $30.00 per M$4.00 / $24.00 per M
Gemini 3.1 Pro Preview$2.00 / $12.00 per M$1.60 / $9.60 per M
DeepSeek V4 Pro$0.43 / $0.87 per M$0.40 / $0.90 per M

Збої, специфічні саме для gpt-researcher.

Втрата префікса провайдера. Формат слоту — provider:model, і префікс обирає клієнта. Встановлення SMART_LLM=claude-sonnet-4-6 без openai: не маршрутизує id Claude через ваш base URL; це змушує gpt-researcher намагатися інтерпретувати рядок як іншого провайдера. Кожна модель кастомного ендпоінта має тримати префікс openai:, бо "openai" тут називає протокол, а не постачальника. Ембедінги тихо слідують за перевизначенням. Типовий EMBEDDING — модель у формі OpenAI, тож щойно OPENAI_BASE_URL вказує на шлюз, запити ембедінга теж туди йдуть. Якщо шлюз не обслуговує цю модель ембедінга, дослідницькі прогони провалюються під час обробки джерел, а не на першому виклику чату, що вводить в оману й змушує налагоджувати не той слот. Встановіть EMBEDDING явно, і симптом зникає. Звинувачення ендпоінта в збоях рітрівера. Відсутній чи вичерпаний TAVILY_API_KEY ламає фазу пошуку, і результуючі помилки порожніх джерел поверхово виглядають як збої LLM. Рітрівер — окремий сервіс з окремим ключем; перевіряйте його окремо. Застаріле середовище між прогонами. Файл .env зчитується з робочої директорії. Запуск веб-застосунку з однієї директорії й Python API з іншої означає дві різні конфігурації, і "працює в застосунку, але не в моєму скрипті" майже завжди саме це. Налаштування ліміту токенів окремі від можливостей моделі. gpt-researcher несе власні ліміти токенів на слот (FAST_TOKEN_LIMIT, SMART_TOKEN_LIMIT і суміжні налаштування) з консервативними значеннями за замовчуванням. Спрямування SMART_LLM на модель з довгим контекстом само по собі не піднімає ці ліміти; налаштуйте їх свідомо, якщо хочете довших генерацій.

Хто спрямовує gpt-researcher через шлюз.

  • Команди, що генерують регулярні звіти (огляди ринку, огляди літератури, конкурентні брифи), де видимість вартості на прогін по трьох слотах моделей важливіша за стосунки з одним постачальником.
  • Дослідники, що порівнюють моделі-автори. Тримання FAST і STRATEGIC фіксованими, поки SMART міняється між id Claude, GPT і DeepSeek, — це три редагування .env, а не три облікові записи постачальника.
  • Будівники, що вбудовують gpt-researcher у продукти, де один ключ шлюзу на середовище заміняє пакет секретів постачальників у конвеєрі деплою.
  • Користувачі, що хочуть, щоб Claude чи Gemini писали звіт, лишаючи стандартну конфігурацію gpt-researcher у формі OpenAI недоторканою.
  • Розробники без доступу до білінгу певного постачальника. Доступ на основі поповнення без вимоги картки прибирає залежність від реєстрації в кожного провайдера.

Перевірте ендпоінт і налагодьте перший звіт.

Спершу перелічіть моделі шлюзу; рядок після openai: у кожному слоті має точно збігатися з обслуговуваним id, включно з суфіксами версій. Збої першого прогону сортуються чисто. 401 означає, що OPENAI_API_KEY відсутній у середовищі, яке процес насправді бачить; файли .env завантажуються з робочої директорії, тож запускайте звідти, де живе файл, або експортуйте змінні глобально. Помилка model-not-found називає слот з одруківкою. Збій під час обробки джерел, а не на етапі планування, вказує на ембедінги чи рітрівер, а не на слоти чату: перевірте EMBEDDING і TAVILY_API_KEY, перш ніж чіпати конфігурацію LLM. Повний дослідницький прогін — це сплеск з десятків запитів по всіх трьох слотах, тож щойно він завершиться, вигляд на кожен запит у консолі APIsRouter — найшвидший спосіб побачити поділ FAST/SMART/STRATEGIC у реальних токенах і реальних витратах і впіймати слот, що споживає більше, ніж заслуговує його роль.

curl -s https://api.apisrouter.com/v1/models \
  -H "Authorization: Bearer $OPENAI_API_KEY" | head -50

Поширені запитання

Чи може gpt-researcher використовувати моделі Claude чи Gemini через OPENAI_BASE_URL?

Так. Префікс openai: обирає клієнт у формі OpenAI, а рядок моделі після двокрапки пересилається до ендпоінта. Валідний будь-який id, який обслуговує шлюз, у будь-якому з трьох слотів, включно з id Claude, Gemini і DeepSeek.

Чи мають FAST_LLM, SMART_LLM і STRATEGIC_LLM бути одним постачальником?

Ні. Кожен слот — незалежний рядок provider:model. За мультивендорним ендпоінтом типове налаштування — швидкий id Claude для підсумків, сильніший id Claude чи GPT для написання звіту й id рівня міркування для планування, усе на одному ключі.

Чи все ще потрібен мені ключ Tavily після зміни ендпоінта LLM?

Так, якщо ви хочете живого веб-дослідження. Рітрівер (за замовчуванням Tavily, встановлюється через RETRIEVER) отримує результати пошуку й має власний ключ. Це окремий сервіс від ендпоінта LLM, не залежний від OPENAI_BASE_URL.

Що стається з ембедінгами, коли я встановлюю OPENAI_BASE_URL?

Типовий ембедінг — модель у формі OpenAI, тож виклики ембедінга йдуть за тією самою конфігурацією клієнта й потрапляють на ваш шлюз. Якщо шлюз не обслуговує цю модель ембедінга, встановіть EMBEDDING явно на провайдера, який обслуговує, чи на локальний варіант; інакше прогони провалюються під час обробки джерел.

Чи працює ця конфігурація також для веб-застосунку й мультиагентного режиму?

Так. Pip-пакет, веб-застосунок і мультиагентні потоки всі резолвлять ту саму конфігурацію середовища, тож один файл .env маршрутизує їх ідентично.

Скільки коштує один дослідницький прогін через шлюз?

Залежить від типу звіту й кількості джерел, які повертає рітрівер: FAST_LLM підсумовує кожне джерело, SMART_LLM пише звіт, STRATEGIC_LLM планує. Більшість прогонів сягають десятків-сотень тисяч токенів. Вигляд використання за ключем показує точний поділ на слот, що краще за оцінку.