Chạy gpt-researcher trên một endpoint tương thích OpenAI tùy chỉnh.

Updated 2026-07-30

gpt-researcher đọc OPENAI_BASE_URL từ môi trường và chia công việc của nó qua ba slot model. Đặt base URL thành https://api.apisrouter.com/v1, giữ tiền tố openai:, và FAST_LLM, SMART_LLM, và STRATEGIC_LLM mỗi cái có thể là một model catalog khác nhau sau một key.

Câu trả lời nhanh: một khối .env năm dòng.

Đường endpoint tùy chỉnh đã tài liệu hóa của gpt-researcher là biến môi trường. Đặt OPENAI_BASE_URL thành https://api.apisrouter.com/v1, đặt OPENAI_API_KEY thành key gateway của bạn, và gán ba slot model với tiền tố provider openai:. Tiền tố cho gpt-researcher biết dùng client nào; chuỗi sau dấu hai chấm được chuyển tiếp tới endpoint, nên bất kỳ id nào gateway phục vụ đều hợp lệ, gồm cả id Claude và Gemini. Đây là cấu hình được tài liệu hóa tại docs.gptr.dev cho các endpoint tương thích OpenAI tùy chỉnh, và nó hoạt động giống hệt cho gói pip, web app, và các luồng đa agent, vì tất cả đều giải quyết cùng một cấu hình.

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

Cách gpt-researcher tiêu token qua ba slot.

gpt-researcher (assafelovic trên GitHub, khoảng 28K star) biến một truy vấn thành một báo cáo đã nghiên cứu, có trích dẫn: nó lên kế hoạch các câu hỏi nghiên cứu, tỏa ra tìm kiếm web qua một retriever, thu thập và tóm tắt nguồn, rồi viết một báo cáo dạng dài. Framework chia pipeline đó qua ba slot model có thể cấu hình thay vì một. FAST_LLM xử lý công việc khối lượng lớn, rủi ro thấp, chủ yếu tóm tắt các trang đã thu thập. SMART_LLM làm công việc viết nặng, gồm cả báo cáo cuối cùng. STRATEGIC_LLM xử lý việc lên kế hoạch: sinh các câu hỏi nghiên cứu và quyết định phương pháp tiếp cận. Mặc định sẵn có, chúng dùng model OpenAI (gpt-4o-mini, gpt-4.1, và o4-mini tương ứng tại thời điểm viết), đây chính xác là lý do việc ghi đè OPENAI_BASE_URL đơn lẻ hiệu quả đến vậy: cả ba slot đều dùng client hình dạng OpenAI, nên một base URL di chuyển cả pipeline. Vì mỗi slot nhận chuỗi provider:model riêng của nó, các slot không cần chia sẻ một vendor. Một lần chạy có thể tóm tắt bằng một model Claude nhanh, viết bằng một model Claude hoặc GPT mạnh hơn, và lên kế hoạch bằng một model tầng lý luận, tất cả qua cùng endpoint và key. Trên một key đơn-vendor, sự pha trộn đó sẽ cần ba tài khoản; sau một gateway nó là ba dòng trong .env.

Cài đặt đầy đủ: .env cộng Python API.

Tạo một file .env trong thư mục làm việc của bạn (hoặc export các biến trong shell) và chạy gpt-researcher như bình thường; gói pip và web app đều đọc cùng môi trường. Python API không cần code riêng cho endpoint chút nào, đây chính là điểm mấu chốt: định tuyến là cấu hình, và code nghiên cứu giữ nguyên bất kể endpoint là của OpenAI hay một gateway. Hai cài đặt liền kề đáng lưu ý. Truy xuất web chạy qua một retriever, Tavily theo mặc định, với key riêng của nó (TAVILY_API_KEY); credential đó độc lập với endpoint LLM và vẫn cần cho nghiên cứu web trực tiếp. Và embedding mặc định về openai:text-embedding-3-small, nghĩa là các lệnh gọi embedding theo cùng cấu hình client hình dạng OpenAI; nếu endpoint sau OPENAI_BASE_URL không phục vụ model embedding đó, cấu hình EMBEDDING thành một provider có phục vụ (tài liệu dùng tiền tố custom: cho các endpoint embedding tương thích OpenAI, và các tùy chọn cục bộ như Ollama cũng được hỗ trợ).

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

Chọn model theo từng slot.

Các mặc định upstream mã hóa đúng hình dạng, model nhỏ cho khối lượng, model mạnh cho viết, model lý luận cho lên kế hoạch, nên hãy giữ hình dạng đó và nâng cấp các slot thay vì làm phẳng chúng về một model. Sau một endpoint, một A/B giữa hai người viết là một thay đổi .env một dòng cho mỗi lần chạy, và log sử dụng theo từng key cho bạn biết mỗi cấu hình báo cáo thực sự tốn bao nhiêu.

  • FAST_LLM khai hỏa nhiều nhất: mọi nguồn đã thu thập được tóm tắt. Một id nhanh (claude-haiku-4-5-20251001, deepseek-v4-flash) giữ một báo cáo nhiều nguồn không bị chi phối bởi chi phí tóm tắt, và tổn thất chất lượng ở đây bị giới hạn vì bản tóm tắt nuôi người viết, không phải người đọc.
  • SMART_LLM viết báo cáo mà người dùng thực sự đọc. Đầu ra dài, cấu trúc bền vững, kỷ luật trích dẫn: đây là nơi claude-sonnet-4-6 hoặc gpt-5.5 xứng đáng với chi tiêu, và nơi cắt giảm chất lượng lộ ra ngay lập tức.
  • STRATEGIC_LLM định hình lần chạy trước khi nó bắt đầu. Câu hỏi nghiên cứu tồi tạo ra báo cáo tồi bất kể người viết giỏi thế nào; một model mạnh về lý luận ở đây là ít lệnh gọi nhưng đòn bẩy cao.
  • Các id long-context như gemini-3.1-pro-preview đáng thử trong slot SMART cho các lần chạy detailed_report, nơi người viết làm việc trên một context tích lũy lớn gồm các bản tóm tắt.

Trả theo mức sử dụng · thấp hơn giá chính thức

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

Mô hìnhGiá chính thứcGiá của chúng tôi
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

Các kiểu lỗi đặc thù của gpt-researcher.

Bỏ mất tiền tố provider. Định dạng slot là provider:model, và tiền tố chọn client. Đặt SMART_LLM=claude-sonnet-4-6 mà không có openai: không định tuyến một id Claude qua base URL của bạn; nó khiến gpt-researcher cố diễn giải chuỗi đó như một provider khác. Mọi model endpoint tùy chỉnh phải giữ tiền tố openai:, vì "openai" ở đây đặt tên giao thức, không phải vendor. Embedding âm thầm theo việc ghi đè. EMBEDDING mặc định là một model hình dạng OpenAI, nên một khi OPENAI_BASE_URL trỏ vào một gateway, request embedding cũng đi tới đó. Nếu gateway không phục vụ id embedding đó, các lần chạy nghiên cứu thất bại trong lúc xử lý nguồn thay vì ở lệnh gọi chat đầu tiên, điều này đánh lừa người ta debug sai slot. Đặt EMBEDDING một cách tường minh và triệu chứng biến mất. Đổ lỗi cho endpoint vì lỗi retriever. Một TAVILY_API_KEY thiếu hoặc hết hạn làm hỏng giai đoạn tìm kiếm, và các lỗi nguồn rỗng kết quả trông bề ngoài giống lỗi LLM. Retriever là một dịch vụ riêng biệt với một key riêng biệt; kiểm tra nó riêng biệt. Môi trường cũ giữa các lần chạy. File .env được đọc từ thư mục làm việc. Chạy web app từ một thư mục và Python API từ thư mục khác nghĩa là hai cấu hình khác nhau, và "nó hoạt động trong app nhưng không trong script của tôi" hầu như luôn là điều này. Cài đặt giới hạn token tách biệt với năng lực model. gpt-researcher mang giới hạn token riêng theo từng slot (FAST_TOKEN_LIMIT, SMART_TOKEN_LIMIT, và các cài đặt liên quan) với mặc định thận trọng. Trỏ SMART_LLM vào một model long-context không tự động nâng các giới hạn đó; hãy tinh chỉnh chúng có chủ đích nếu bạn muốn các bản sinh dài hơn.

Ai định tuyến gpt-researcher qua một gateway.

  • Đội tạo báo cáo định kỳ (quét thị trường, tổng quan tài liệu, bản tóm tắt cạnh tranh) nơi khả năng quan sát chi phí theo từng lần chạy qua ba slot model quan trọng hơn một quan hệ vendor đơn.
  • Nhà nghiên cứu so sánh model viết. Giữ cố định FAST và STRATEGIC trong khi hoán đổi SMART giữa các id Claude, GPT, và DeepSeek là ba lần sửa .env, không phải ba tài khoản vendor.
  • Người xây dựng nhúng gpt-researcher vào sản phẩm, nơi một key gateway mỗi môi trường thay thế một bó secret vendor trong pipeline triển khai.
  • Người dùng muốn Claude hoặc Gemini viết báo cáo trong khi giữ nguyên cấu hình hình dạng OpenAI mặc định của gpt-researcher.
  • Lập trình viên không có quyền truy cập billing của một vendor cụ thể. Truy cập dựa trên nạp tiền không yêu cầu thẻ loại bỏ phụ thuộc đăng ký theo từng provider.

Xác minh endpoint và debug báo cáo đầu tiên.

Liệt kê model của gateway trước; chuỗi sau openai: trong mỗi slot phải khớp chính xác một id đã phục vụ, kể cả hậu tố phiên bản. Các lỗi lần chạy đầu phân loại rõ ràng. Một lỗi 401 nghĩa là OPENAI_API_KEY vắng mặt trong môi trường mà tiến trình thực sự thấy; file .env nạp từ thư mục làm việc, nên hãy chạy từ nơi file đó sống hoặc export các biến toàn cục. Một lỗi model-not-found nêu tên slot bị gõ sai. Một lỗi trong lúc xử lý nguồn thay vì lúc lên kế hoạch chỉ tới embedding hoặc retriever, không phải các slot chat: kiểm tra EMBEDDING và TAVILY_API_KEY trước khi chạm vào cấu hình LLM. Một lần chạy nghiên cứu đầy đủ là một đợt bùng nổ hàng chục request qua cả ba slot, nên khi nó hoàn tất, góc nhìn theo từng request của console APIsRouter là cách nhanh nhất để thấy sự phân chia FAST/SMART/STRATEGIC bằng token và chi tiêu thực, và bắt được một slot đang tiêu tốn nhiều hơn vai trò của nó xứng đáng.

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

Câu hỏi thường gặp

gpt-researcher có thể dùng model Claude hoặc Gemini qua OPENAI_BASE_URL không?

Có. Tiền tố openai: chọn client hình dạng OpenAI, và chuỗi model sau dấu hai chấm được chuyển tiếp tới endpoint. Bất kỳ id nào gateway phục vụ đều hợp lệ trong cả ba slot, gồm cả id Claude, Gemini, và DeepSeek.

FAST_LLM, SMART_LLM, và STRATEGIC_LLM có phải cùng một vendor không?

Không. Mỗi slot là một chuỗi provider:model độc lập. Sau một endpoint đa vendor, một thiết lập phổ biến là một id Claude nhanh cho bản tóm tắt, một id Claude hoặc GPT mạnh hơn cho viết báo cáo, và một id tầng lý luận cho lên kế hoạch, tất cả trên một key.

Tôi có còn cần key Tavily sau khi đổi endpoint LLM không?

Có, nếu bạn muốn nghiên cứu web trực tiếp. Retriever (Tavily theo mặc định, đặt qua RETRIEVER) lấy kết quả tìm kiếm và có key riêng của nó. Đó là một dịch vụ tách biệt khỏi endpoint LLM và không bị ảnh hưởng bởi OPENAI_BASE_URL.

Điều gì xảy ra với embedding khi tôi đặt OPENAI_BASE_URL?

Embedding mặc định là một model hình dạng OpenAI, nên các lệnh gọi embedding theo cùng cấu hình client và chạm vào gateway của bạn. Nếu gateway không phục vụ id embedding đó, đặt EMBEDDING một cách tường minh thành một provider có phục vụ, hoặc một tùy chọn cục bộ; nếu không, các lần chạy thất bại trong lúc xử lý nguồn.

Cấu hình này có hoạt động cho web app và chế độ đa agent không?

Có. Gói pip, ứng dụng web, và các luồng đa agent đều giải quyết cùng cấu hình môi trường, nên một file .env định tuyến chúng giống hệt nhau.

Một lần chạy nghiên cứu tốn bao nhiêu qua gateway?

Tùy vào loại báo cáo và số nguồn retriever trả về: FAST_LLM tóm tắt mỗi nguồn, SMART_LLM viết báo cáo, STRATEGIC_LLM lên kế hoạch. Hầu hết các lần chạy rơi vào hàng chục đến hàng trăm nghìn token. Góc nhìn sử dụng theo từng key hiển thị chính xác sự phân chia theo từng slot, tốt hơn việc ước lượng.