paper-qa'yı özel bir OpenAI-compatible endpoint'e karşı çalıştırın.
Updated 2026-07-30
paper-qa, modellerini LiteLLM router dict'leri üzerinden yapılandırır ve litellm_params api_base'i kabul eder. Onu https://api.apisrouter.com/v1'e yönlendirin, tek bir anahtar geçirin; answer, summary ve agent slotları her biri kendi makale kütüphaneniz üzerinde herhangi bir katalog modelinde çalışabilir.
Hızlı yanıt: slot başına tekrar kullanılan, api_base'li bir router dict'i.
paper-qa'nın Settings nesnesi, slot başına bir model adı artı isteğe bağlı bir LiteLLM router config'i alır. Router config'i, litellm_params'ı api_base ve api_key taşıyan bir model_list'tir, ki bu README'nin yerel olarak barındırılan OpenAI-compatible sunucular için kullandığı aynı belgelenmiş desendir; bir gateway basitçe bu desenin genel bir URL ve gerçek bir anahtarla halidir. llm ve summary_llm'i beyan ettiğiniz model_name'e ayarlayın, config'i her iki slota da ekleyin; paper-qa gateway üzerinden yönlenir. litellm_params içindeki model dizesi, litellm'in sağlayıcı kuralını korur: openai/<id>, litellm'e api_base'inize chat-completions konuşmasını söyler ve eğik çizgiden sonraki id endpoint'e iletilir, bu yüzden Claude, GPT, Gemini ve GLM id'lerinin hepsi aynı dict ile adreslenebilir.
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,
),
)
]
)paper-qa'nın token harcadığı yer: üç slot artı embedding'ler.
paper-qa (GitHub'da Future-House, yaklaşık 9K yıldız), bilimsel PDF'ler üzerinde üzerine agent'lı bir döngü eklenmiş retrieval-augmented soru yanıtlama yapar: bir agent kütüphanenizi ne zaman arayacağına karar verir, kanıt parçaları toplar, alaka düzeylerini özetler ve atıflı bir yanıt bestesi yapar. Bu, ayrı ayrı yapılandırılabilir üç LLM slotuna eşlenir. summary_llm, alınan her parça için kanıtı değerlendirir ve yoğunlaştırır, ki bu onu hacim slotu yapar. llm, birleştirilmiş kanıttan nihai yanıtı yazar, kalitenin kritik olduğu adım. Ve agent_llm (agent ayarları içinde), döngüyü yönlendiren tool-seçim kararlarını verir. Üçü de varsayılan olarak bir OpenAI modelidir ve her birinin aynı router dict'ini kabul eden eşleşen bir _config alanı vardır (llm_config, summary_llm_config, agent_llm_config), bu yüzden tek bir gateway config nesnesi her slota eklenebilirken slot başına model adı bağımsız kalır. Yaygın bir bölünme, kanıtı özetleyen hızlı bir id ve yanıtları yazan bir frontier id'dir, ikisi de tek bir endpoint ve anahtar üzerinden. Embedding'ler dördüncü iş yüküdür ve kasıtlı olarak ayrıdır: embedding ayarı (varsayılan text-embedding-3-small), makalelerinizin vektör indeksini inşa eder. Sohbet slotlarını bir gateway'e taşımak embedding'leri taşımaz ve paper-qa, indeksi herhangi bir uzak endpoint'ten tamamen bağımsız istiyorsanız yerel sentence-transformers'ı (yerel extras üzerinden st- öneki) destekler.
Tam kurulum: slot başına config'lerle Settings.
Tam desen, adreslenebilir olmasını istediğiniz her model için bir router girdisi beyan eder ve config'leri slot slot ekler. Özetler için hızlı bir tane ve yanıtlar için güçlü bir tane olmak üzere iki girdi beyan etmek, tüm kurulumu tek bir dict'te tutar. pqa ayarlar yüzeyini açığa çıkardığından aynı yönlendirme CLI'den de çalışır, ama araştırma kullanımı için tekrarlanabilir olan Python yoludur: bir yanıt üreten Settings nesnesi, yanıtın kendisinin yanında loglanabilir.
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",
),
)Slot başına model seçmek.
Kanıt pipeline'ını sabit tutarak ayarlayın: aynı kütüphane, aynı sorular, bir seferde bir slotu değiştirin. Tek bir endpoint arkasında her aday bir model_name dizesidir ve anahtar başına kullanım logu, her yapılandırmayı soru başına fiyatlandırır, ki bu bir laboratuvarın gerçekte bütçelediği rakamdır.
- summary_llm, her kanıt parçası için, her soru için bir kez çalışır. Ciddi bir kütüphanede bu, çağrıların ezici çoğunluğudur, bu yüzden hızlı bir id (claude-haiku-4-5-20251001), yalnızca alakayı değerlendirmesi gerektiğinden, düzyazı yazmadan tüm sistemin maliyet tabanını belirler.
- llm, birleştirilmiş kanıttan atıflı yanıtı besteler. Burası, tedbirli, hassas bilimsel yazının olup olmadığının belirlendiği yerdir; claude-sonnet-4-6 ve gpt-5.5 güvenilir seçimlerdir ve slot soru başına az sayıda çağrıdır, bu yüzden prim sınırlıdır.
- agent_llm döngüyü yönlendirir: tekrar arasın mı, daha fazla kanıt toplasın mı, yoksa yanıtlasın mı. Buradaki zayıf kararlar başka her yerde token'ları boşa harcar, ki bu da slotun düşük hacmine rağmen orta katman veya daha iyi bir id'yi ekonomik seçim yapar.
- gemini-3.1-pro-preview gibi uzun bağlamlı id'ler, sorular birçok makaleden aynı anda kanıt çektiğinde yanıt slotu olarak test edilmeye değer.
Kullandıkça öde · resmi fiyatların altında
Selected models are priced below official list prices. Exact input, output, cache, and per-request prices are shown for each model.
| Model | Resmi Fiyat | Bizim Fiyatımız |
|---|---|---|
| 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 |
paper-qa'ya özgü hata modları.
Varsayılanında bırakılmış bir slot. llm ve llm_config'i ayarlayıp summary_llm_config'i ayarlamamak, özetlemeyi varsayılan OpenAI modelinde bırakır, ki bu daha sonra OPENAI_API_KEY ister ve başarısız olur (veya o anahtar varsa yönlendirmenizi sessizce iki endpoint arasında böler). Her slotun kendi _config alanı vardır; taşımayı düşündüğünüz her slota, agent_llm_config dahil, gateway dict'ini ekleyin. Hizalanmayan adlar. Settings.llm, model_list'teki bir model_name'e eşit olmalıdır; litellm_params.model gerçekte tele giden şeydir. Dış adı eşleştirmemek router'ın bir rotası olmamasına neden olur; iç id'yi yazım hatasıyla yazmak gateway'in model-not-found döndürmesine neden olur. Hata ayıklarken, iki dizeyi ayrı ayrı kontrol edin çünkü farklı şekilde başarısız olurlar. Embedding'lerin takip ettiği varsayılır. Embedding slotu vektör indeksini inşa eder ve sorgular, kendi varsayılanı ve config'i vardır. Varsayılan embedding için bir OpenAI anahtarınız yoksa, embedding'i açıkça yapılandırın veya st- öneki üzerinden yerel sentence-transformers kullanın. Embedding'leri daha sonra yeniden yönlendirmek de yeniden indekslemek anlamına gelir: farklı embedding modellerinden gelen vektörler birbirine karışmaz. Uzun yanıtlar için eksik üretim limitleri. litellm_params, girdi başına max_tokens'ı kabul eder ve üst akıştaki yerel-endpoint örnekleri onu kasıtlı olarak ayarlar. Makul bir limiti olmayan bir yanıt slotu, uzun atıflı yanıtları kesebilir, ki bu bir model zayıflığı gibi görünür ama bir parametredir. Ayrıştırma sorunları için yönlendirmeyi suçlamak. paper-qa'nın kalitesi, herhangi bir model metni görmeden önce PDF ayrıştırmasına ve parçalamaya bağlıdır. Alakalı olduğunu bildiğiniz bir kütüphanede yanıtlar hiçbir şey alıntılamıyorsa, indeksleme adımını inceleyin; gateway yalnızca retrieval'ın ona gönderdiğini görür.
paper-qa'yı bir gateway üzerinden kim yönlendirir.
- Paylaşılan kütüphaneler üzerinde literatür QA çalıştıran araştırma grupları; burada anahtar başına kullanım, "laboratuvar soru başına ne harcıyor" sorusunu bir tahminden bir rapora dönüştürür.
- Özetleme hacmini hızlı bir id'de tutarken yanıt slotunda Claude kalitesinde bilimsel yazı isteyen ekipler, ikisi için de tek bir anahtar.
- paper-qa'yı iç araçlara gömen, bir demet satıcı sırrının yerine ortam başına tek bir gateway kimlik bilgisi koyan builder'lar.
- Yanıt modellerini sabit kanıt pipeline'ları üzerinde karşılaştıran benchmark yapıcılar; burada her aday bir satıcı entegrasyonu değil bir config dizesidir.
- Belirli bir satıcının faturalandırmasına erişimi olmayan geliştiriciler. Kart gerektirmeyen yükleme tabanlı erişim, sağlayıcı başına kayıt bağımlılığını ortadan kaldırır.
Endpoint'i doğrulayın ve ilk soruyu hata ayıklayın.
Gateway'in beyan ettiğiniz id'leri sunduğunu doğrulayın; openai/'den sonraki litellm_params.model dizesi, sunulan bir id ile tam olarak eşleşmelidir. İlk ask() çağrısındaki hata merdiveni: OPENAI_API_KEY isteyen bir hata, bir slotun hâlâ hiçbir config eklenmemiş varsayılan modelinde olduğu anlamına gelir; llm, summary_llm ve agent_llm'den hangisini taşımadığınızı bulun. Gateway'den gelen 401, litellm_params içindeki api_key'dir. Bilinmeyen bir model hakkındaki bir router hatası, Settings.llm'in listede herhangi bir model_name ile eşleşmediği anlamına gelir. Yanıtlama yerine indeksleme sırasındaki başarısızlıklar, sohbet yönlendirmesini değil embedding ayarını veya PDF ayrıştırmasını işaret eder. Bir soru, birçok özet çağrısına artı agent adımlarına artı nihai yanıta yayılır, bu yüzden ilk başarılı çalıştırmadan sonra, APIsRouter konsolunun istek başına görünümü gerçek token'larda slot ayrımını gösterir. Kütüphane büyüdükçe izlenecek rakam budur, çünkü özet hacmi soru sayısıyla değil, alınan kanıtla ölçeklenir.
curl -s https://api.apisrouter.com/v1/models \
-H "Authorization: Bearer $APISROUTER_API_KEY" | head -50Sık sorulan sorular
paper-qa özel bir OpenAI-compatible base URL'i nasıl destekler?
LiteLLM router config'leri üzerinden: llm_config, summary_llm_config ve agent_llm_config'in her biri, litellm_params'ı api_base ve api_key içeren bir model_list'i kabul eder. Bu, paper-qa'nın yerel olarak barındırılan OpenAI-compatible sunucular için kullandığı aynı belgelenmiş desendir, yalnızca bir gateway URL'sine yönlendirilmiştir.
Yanıt ve özet modelleri farklı satıcılardan gelebilir mi?
Evet. Her slot bir model adını kendi config'iyle eşleştirir, bu yüzden hızlı bir Claude id'si kanıtı özetlerken GPT-5.5 veya Gemini nihai yanıtı yazabilir, hepsi tek bir api_base ve tek bir anahtar üzerinden. Her id için bir model_list girdisi beyan edin ve bunlara slot başına başvurun.
Embedding modelini de değiştirmem gerekiyor mu?
Hayır ve genellikle aynı adımda yapmamalısınız. Embedding ayarı sohbet slotlarından bağımsızdır ve embedding modellerini değiştirmek mevcut vektör indeksinizi geçersiz kılar. Varsayılan embedding için bir anahtarınız yoksa, embedding'i açıkça ayarlayın veya st- öneki ile yerel sentence-transformers kullanın.
agent_llm slotu nedir ve config'e de ihtiyacı var mı?
AgentSettings içindeki agent_llm, tool seçimini yönlendirir: ne zaman aransın, kanıt toplansın veya yanıtlansın. Diğer slotlar gibi varsayılan olarak bir OpenAI modelidir, bu yüzden aynı gateway dict'iyle agent_llm_config'i ekleyin, yoksa hâlâ varsayılan sağlayıcıya yönlenmeye çalışır.
paper-qa override'ımdan sonra neden hâlâ OPENAI_API_KEY istiyor?
En az bir slot hâlâ hiçbir router config'i eklenmemiş varsayılan modelindedir. llm, summary_llm ve agent_llm'i, artı _config alanlarını kontrol edin; hata, çağırmaya çalıştığı modeli adlandırır, ki bu da kaçırdığınız slotu tanımlar.
Bu, pqa CLI'sinden de Python kadar çalışır mı?
CLI aynı ayarlar yüzeyini açığa çıkarır, ama gateway yönlendirmesi için Python yolu pratik olandır: router dict'leri komut satırı bayrakları olarak beceriksizdir ve sonuçların yanında loglanan bir Settings nesnesi araştırma çalıştırmalarını tekrarlanabilir kılar.