Jalankan paper-qa terhadap endpoint serasi OpenAI custom.
Updated 2026-07-30
paper-qa mengkonfigurasikan modelnya melalui dict router LiteLLM, dan litellm_params menerima api_base. Arahkan ke https://api.apisrouter.com/v1, hantar satu kunci, dan slot jawapan, ringkasan, dan agent masing-masing boleh menjalankan mana-mana model katalog atas perpustakaan kertas kerja anda sendiri.
Jawapan pantas: dict router dengan api_base, digunakan semula per slot.
Objek Settings paper-qa mengambil nama model ditambah config router LiteLLM pilihan per slot. Config router adalah model_list yang litellm_params-nya membawa api_base dan api_key, corak yang sama seperti yang didokumentasikan README untuk pelayan serasi OpenAI dihoskan secara setempat; gateway hanyalah corak itu dengan URL awam dan kunci sebenar. Tetapkan llm dan summary_llm kepada model_name yang anda isytiharkan, lampirkan config kepada kedua-dua slot, dan paper-qa menghalakan melalui gateway. Rentetan model di dalam litellm_params mengekalkan konvensyen penyedia litellm: openai/<id> memberitahu litellm bertutur chat-completions kepada api_base anda, dan id selepas slash diteruskan kepada endpoint, jadi id Claude, GPT, Gemini, dan GLM semuanya boleh dicapai dengan dict yang sama.
gateway_config = dict(
model_list=[
dict(
model_name="claude-sonnet-4-6",
litellm_params=dict(
model="openai/claude-sonnet-4-6",
api_base="https://api.apisrouter.com/v1",
api_key=os.getenv("APISROUTER_API_KEY"),
temperature=0.1,
),
)
]
)Di mana paper-qa membelanjakan token: tiga slot ditambah embedding.
paper-qa (Future-House di GitHub, lebih kurang 9K bintang) melakukan menjawab-soalan berasaskan-retrieval atas PDF saintifik dengan gelung agentic di atasnya: agent memutuskan bila untuk mencari perpustakaan anda, mengumpul cebisan bukti, meringkaskan relevansinya, dan menyusun jawapan bersitasi. Itu memetakan kepada tiga slot LLM boleh konfigurasi berasingan. summary_llm menilai dan memadatkan bukti per cebisan yang diambil, yang menjadikannya slot volum. llm menulis jawapan akhir daripada bukti yang dihimpun, langkah kritikal-kualiti. Dan agent_llm (di dalam tetapan agent) membuat keputusan pemilihan-alatan yang mengemudi gelung. Kesemua tiga melalaikan kepada model OpenAI, dan setiap satu mempunyai medan _config yang sepadan (llm_config, summary_llm_config, agent_llm_config) yang menerima dict router yang sama, jadi satu objek config gateway boleh dilampirkan pada setiap slot sementara nama model per slot kekal bebas. Pembahagian biasa adalah id pantas meringkaskan bukti dan id frontier menulis jawapan, kedua-duanya melalui satu endpoint dan kunci. Embedding adalah beban kerja keempat dan sengaja berasingan: tetapan embedding (lalai text-embedding-3-small) membina indeks vektor kertas kerja anda. Menggerakkan slot chat ke gateway tidak menggerakkan embedding, dan paper-qa menyokong sentence-transformers setempat (awalan st-, melalui extras setempat) jika anda mahukan indeks itu sepenuhnya bebas daripada mana-mana endpoint jauh.
Persediaan penuh: Settings dengan config per-slot.
Corak penuh mengisytiharkan satu entri router per model yang anda mahu boleh dicapai dan melampirkan config slot demi slot. Mengisytiharkan dua entri, satu pantas untuk ringkasan dan satu kuat untuk jawapan, mengekalkan keseluruhan persediaan dalam satu dict. Penghalaan yang sama berfungsi daripada CLI, kerana pqa mendedahkan permukaan settings, tetapi laluan Python adalah yang boleh dihasilkan semula untuk penggunaan penyelidikan: objek Settings yang menghasilkan jawapan boleh dilog bersebelahan jawapan itu sendiri.
import os
from paperqa import Settings, ask
from paperqa.settings import AgentSettings
def entry(model_id, **params):
return dict(
model_name=model_id,
litellm_params=dict(
model=f"openai/{model_id}",
api_base="https://api.apisrouter.com/v1",
api_key=os.getenv("APISROUTER_API_KEY"),
**params,
),
)
gateway = dict(model_list=[
entry("claude-sonnet-4-6", temperature=0.1),
entry("claude-haiku-4-5-20251001", temperature=0.1),
])
answer = ask(
"What is the evidence for LK-99 room-temperature superconductivity?",
settings=Settings(
llm="claude-sonnet-4-6",
llm_config=gateway,
summary_llm="claude-haiku-4-5-20251001",
summary_llm_config=gateway,
agent=AgentSettings(
agent_llm="claude-sonnet-4-6",
agent_llm_config=gateway,
),
paper_directory="./papers",
),
)Memilih model per slot.
Talakan dengan pipeline bukti tetap: perpustakaan sama, soalan sama, tukar satu slot pada satu masa. Di sebalik satu endpoint, setiap calon adalah satu rentetan model_name, dan log penggunaan per-kunci menetapkan harga setiap konfigurasi per soalan, iaitu nombor yang benar-benar dibelanjawankan sesebuah makmal.
- summary_llm berjalan sekali per cebisan bukti, setiap soalan. Pada perpustakaan yang serius, ini adalah majoriti mutlak panggilan, jadi id pantas (claude-haiku-4-5-20251001) menetapkan lantai kos untuk keseluruhan sistem sambil hanya perlu menilai relevansi, bukan menulis prosa.
- llm menyusun jawapan bersitasi daripada bukti yang dihimpun. Di sinilah penulisan saintifik yang berhati-hati dan tepat berlaku atau tidak; claude-sonnet-4-6 dan gpt-5.5 adalah pilihan yang boleh dipercayai, dan slot itu sedikit panggilan per soalan jadi premium itu terhad.
- agent_llm mengemudi gelung: sama ada untuk mencari lagi, mengumpul lebih banyak bukti, atau menjawab. Keputusan lemah di sini membazirkan token di tempat lain, yang menjadikan id tier-pertengahan atau lebih baik pilihan ekonomik walaupun volum slot itu rendah.
- Id konteks-panjang seperti gemini-3.1-pro-preview berbaloi diuji sebagai slot jawapan apabila soalan menarik bukti daripada banyak kertas kerja sekali gus.
Bayar mengikut penggunaan · bawah harga rasmi
Selected models are priced below official list prices. Exact input, output, cache, and per-request prices are shown for each model.
| Model | Harga Rasmi | Harga Kami |
|---|---|---|
| Claude Sonnet 4.6 | $3.00 / $15.00 per M | $2.40 / $12.00 per M |
| Claude Haiku 4.5 20251001 | $1.00 / $5.00 per M | $0.80 / $4.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 |
| GLM-5.2 | $1.14 / $4.00 per M | $1.10 / $4.00 per M |
Mod kegagalan khusus paper-qa.
Slot ditinggalkan pada lalainya. Menetapkan llm dan llm_config tetapi bukan summary_llm_config meninggalkan peringkasan pada model OpenAI lalai, yang kemudian menuntut OPENAI_API_KEY dan gagal (atau senyap membahagi penghalaan anda merentasi dua endpoint jika kunci itu wujud). Setiap slot mempunyai medan _config sendiri; lampirkan dict gateway kepada setiap slot yang anda niatkan untuk digerakkan, termasuk agent_llm_config. Nama yang tidak sepadan. Settings.llm mesti sama dengan model_name dalam model_list; litellm_params.model adalah yang sebenarnya pergi ke wayar. Ketidakpadanan nama luar menyebabkan router tiada laluan; kesilapan taip id dalam menyebabkan gateway mengembalikan model-not-found. Semasa nyahpepijat, semak kedua-dua rentetan secara berasingan kerana ia gagal secara berbeza. Embedding dianggap mengikut. Slot embedding membina dan menanya indeks vektor dan mempunyai lalai serta config sendiri. Jika anda tiada kunci OpenAI untuk embedding lalai, konfigurasikan embedding secara eksplisit, atau guna sentence-transformers setempat melalui awalan st-. Mengarahkan semula embedding kemudian juga bermaksud mengindeks semula: vektor daripada model embedding berbeza tidak bercampur. Had penjanaan hilang untuk jawapan panjang. litellm_params menerima max_tokens per entri, dan contoh endpoint-setempat upstream menetapkannya dengan sengaja. Slot jawapan tanpa had munasabah boleh memotong jawapan bersitasi panjang, yang muncul seperti kelemahan model tetapi adalah parameter. Menyalahkan penghalaan untuk masalah penghuraian. Kualiti paper-qa bergantung kepada penghuraian PDF dan pencebisan sebelum sebarang model melihat teks. Jika jawapan tidak menyitasi apa-apa pada perpustakaan yang anda tahu relevan, periksa langkah pengindeksan; gateway hanya melihat apa yang dihantar retrieval.
Siapa yang menghalakan paper-qa melalui gateway.
- Kumpulan penyelidikan yang menjalankan QA literatur atas perpustakaan dikongsi, di mana penggunaan per-kunci menukar "berapa banyak makmal membelanjakan per soalan" daripada tekaan kepada laporan.
- Pasukan yang mahukan penulisan saintifik berkualiti-Claude dalam slot jawapan sambil mengekalkan volum peringkasan pada id pantas, satu kunci untuk kedua-duanya.
- Pembina yang membenamkan paper-qa dalam alat dalaman, menggantikan sekumpulan rahsia vendor dengan satu kelayakan gateway per environment.
- Penanda aras yang membandingkan model jawapan pada pipeline bukti tetap, di mana setiap calon adalah rentetan config berbanding integrasi vendor.
- Pembangun tanpa akses kepada pengebilan vendor tertentu. Akses berasaskan top-up tanpa keperluan kad menghapuskan kebergantungan pendaftaran setiap penyedia.
Sahkan endpoint dan nyahpepijat soalan pertama.
Sahkan gateway melayani id yang anda isytiharkan; rentetan litellm_params.model selepas openai/ mesti sepadan tepat dengan id yang dilayani. Tangga kegagalan pada ask() pertama: ralat yang menuntut OPENAI_API_KEY bermaksud sesuatu slot masih pada model lalainya tanpa config dilampirkan; cari yang mana antara llm, summary_llm, dan agent_llm yang tidak anda gerakkan. 401 daripada gateway adalah api_key di dalam litellm_params. Ralat router tentang model tidak dikenali bermaksud Settings.llm tidak sepadan dengan mana-mana model_name dalam senarai. Kegagalan semasa pengindeksan berbanding menjawab menunjuk kepada tetapan embedding atau penghuraian PDF, bukan penghalaan chat. Satu soalan mengagihkan kepada banyak panggilan ringkasan ditambah langkah agent ditambah jawapan akhir, jadi selepas larian pertama berjaya, pandangan per-permintaan konsol APIsRouter menunjukkan pembahagian slot dalam token sebenar. Itu adalah angka untuk diperhatikan apabila perpustakaan berkembang, kerana volum ringkasan berskala dengan bukti yang diambil, bukan hanya bilangan soalan.
curl -s https://api.apisrouter.com/v1/models \
-H "Authorization: Bearer $APISROUTER_API_KEY" | head -50Soalan lazim
Bagaimana paper-qa menyokong base URL serasi OpenAI custom?
Melalui config router LiteLLM-nya: setiap satu daripada llm_config, summary_llm_config, dan agent_llm_config menerima model_list yang litellm_params-nya merangkumi api_base dan api_key. Ini adalah corak yang sama didokumentasikan paper-qa untuk pelayan serasi OpenAI dihoskan secara setempat, diarahkan kepada URL gateway sebaliknya.
Bolehkah model jawapan dan ringkasan datang daripada vendor berbeza?
Ya. Setiap slot memadankan nama model dengan config sendiri, jadi id Claude pantas boleh meringkaskan bukti sementara GPT-5.5 atau Gemini menulis jawapan akhir, semuanya melalui satu api_base dan satu kunci. Isytiharkan satu entri model_list per id dan rujuk mereka per slot.
Perlukah saya menukar model embedding juga?
Tidak, dan biasanya anda tidak sepatutnya dalam langkah yang sama. Tetapan embedding bebas daripada slot chat, dan menukar model embedding membatalkan indeks vektor sedia ada anda. Jika anda tiada kunci untuk embedding lalai, tetapkan embedding secara eksplisit atau guna sentence-transformers setempat dengan awalan st-.
Apakah slot agent_llm dan perlukah ia turut mendapat config?
agent_llm, di dalam AgentSettings, menggerakkan pemilihan alatan: bila untuk mencari, mengumpul bukti, atau menjawab. Ia melalaikan kepada model OpenAI seperti slot lain, jadi lampirkan agent_llm_config dengan dict gateway yang sama atau ia masih akan cuba menghalakan ke penyedia lalai.
Mengapa paper-qa masih meminta OPENAI_API_KEY selepas override saya?
Sekurang-kurangnya satu slot masih pada model lalainya tanpa config router dilampirkan. Semak llm, summary_llm, dan agent_llm serta medan _config mereka; ralat itu menamakan model yang cuba dipanggilnya, yang mengenal pasti slot yang anda terlepas.
Adakah ini berfungsi daripada CLI pqa serta Python?
CLI mendedahkan permukaan settings yang sama, tetapi untuk penghalaan gateway, laluan Python adalah yang praktikal: dict router janggal sebagai flag baris arahan, dan objek Settings yang dilog bersebelahan keputusan menjadikan larian penyelidikan boleh dihasilkan semula.