Jalankan otak RAG Quivr pada endpoint serasi OpenAI custom.
Updated 2026-07-29
LLMEndpointConfig quivr-core mengambil medan llm_base_url. Kekalkan supplier sebagai openai, tetapkan llm_base_url kepada https://api.apisrouter.com/v1, hantar satu kunci, dan setiap brain.ask() menjana jawapannya melalui gateway dengan mana-mana id model katalog.
Jawapan pantas: llm_base_url dalam LLMEndpointConfig.
Quivr semasa ialah quivr-core, pustaka RAG Python, dan sambungan LLM-nya eksplisit. LLMEndpointConfig membawa supplier (openai secara lalai), model, llm_base_url, dan llm_api_key; LLMEndpoint.from_config() membina klien sebenar daripada medan itu, dan bagi supplier openai klien itu ialah ChatOpenAI LangChain yang dibina dengan base URL anda. Tetapkan llm_base_url kepada https://api.apisrouter.com/v1, tetapkan model kepada mana-mana id katalog, dan serahkan endpoint kepada Brain anda. Kunci boleh datang daripada medan config atau environment: apabila llm_api_key tidak ditetapkan, quivr-core menyelesaikannya daripada pembolehubah environment yang dinamakan mengikut supplier, yang bagi supplier openai ialah OPENAI_API_KEY. Kedua-dua laluan adalah tingkah laku upstream, boleh dibaca dalam quivr_core/rag/entities/config.py dan quivr_core/llm/llm_endpoint.py.
from quivr_core.llm import LLMEndpoint
from quivr_core.rag.entities.config import (
DefaultModelSuppliers, LLMEndpointConfig)
llm = LLMEndpoint.from_config(LLMEndpointConfig(
supplier=DefaultModelSuppliers.OPENAI,
model="claude-sonnet-4-6", # any catalog id
llm_base_url="https://api.apisrouter.com/v1",
llm_api_key=os.environ["APISROUTER_API_KEY"],
))Apa itu Quivr sekarang, dan di mana slot LLM duduk.
Quivr (QuivrHQ di GitHub, lebih kurang 39K bintang) bermula sebagai aplikasi second-brain penuh dan beralih menjadi quivr-core: pustaka RAG berpendirian yang anda embed ke dalam produk anda sendiri. Anda berikan ia fail, ia menghurai dan memecahkannya, meng-embed serpihan itu ke dalam vector store (FAISS secara lalai, PGVector disokong), dan menjawab soalan atasnya melalui workflow retrieval yang boleh dikonfigurasikan. Objek Brain adalah unitnya: Brain.from_files() mengambil, brain.ask() mengambil semula dan menjana. Penjanaan adalah satu-satunya langkah yang memerlukan chat model. Workflow retrieval menghimpun konteks daripada dokumen anda, dan LLMEndpoint yang anda hantar menulis jawapan berasaskan. Endpoint itu dibina sekali daripada LLMEndpointConfig, jadi keputusan base URL dibuat pada masa pembinaan dan terpakai kepada setiap ask() pada brain itu. Kerana ChatOpenAI meneruskan medan model sebagai rentetan biasa melalui /v1/chat/completions, id itu boleh menjadi Claude, DeepSeek, GPT, atau Gemini apabila endpoint di sebalik llm_base_url melayaninya. Satu nota jujur tentang status projek: repositori telah senyap sejak pertengahan 2025, jadi anggap quivr-core sebagai pustaka stabil dan bukan yang bergerak pantas. Permukaan config yang diterangkan di sini sepadan dengan cawangan main terkini, dan sejarah senyap itu bermaksud ia berkemungkinan kecil beralih di bawah anda; ia juga bermaksud tutorial lama yang menerangkan app full-stack yang telah dipersaraan (fail .env backend, frontend hosted) tidak lagi sepadan dengan kod.
Persediaan penuh: brain dengan LLM dihalakan-gateway.
Corak lengkap menghantar LLMEndpoint yang dikonfigurasikan ke dalam Brain.from_files. Segala-galanya lain tentang brain (parsing, chunking, storan FAISS, workflow retrieval) adalah bebas daripada endpoint LLM dan mengekalkan lalainya. Perhatikan embedder. Jika anda tidak menghantar satu, quivr-core membina OpenAIEmbeddings LangChain dengan lalainya sendiri, yang mengesahkan dengan OPENAI_API_KEY dan mensasarkan endpoint OpenAI stok. Itu adalah klien berasingan daripada LLM sembang: menghalakan penjanaan melalui gateway tidak memindahkannya. Hantar embedder anda sendiri (wrapper sentence-transformers tempatan, atau mana-mana instans LangChain Embeddings yang anda konfigurasikan) jika anda tidak mahu separuh embedding bergantung kepada akaun OpenAI.
import os
from quivr_core import Brain
from quivr_core.llm import LLMEndpoint
from quivr_core.rag.entities.config import (
DefaultModelSuppliers, LLMEndpointConfig)
llm = LLMEndpoint.from_config(LLMEndpointConfig(
supplier=DefaultModelSuppliers.OPENAI,
model="claude-sonnet-4-6",
llm_base_url="https://api.apisrouter.com/v1",
llm_api_key=os.environ["APISROUTER_API_KEY"],
max_output_tokens=2048,
temperature=0.3,
))
brain = Brain.from_files(
name="team-docs",
file_paths=["handbook.pdf", "runbook.md"],
llm=llm,
# embedder=... # separate component; see note above
)
print(brain.ask("What is the on-call escalation policy?").answer)Memilih model penjanaan untuk jawapan RAG.
Membandingkan calon adalah perubahan masa-pembinaan: bina dua LLMEndpoint terhadap base URL yang sama, dua brain atas fail yang sama, dan diff jawapan pada set soalan tetap. Log penggunaan per-kunci menilai harga setiap larian calon, jadi kualiti-per-token diukur dan bukan diperdebatkan.
- Penjanaan RAG adalah berat input: serpihan yang diambil mendominasi prompt. Harga per-token-input menetapkan kos jawapan, itulah sebab id pantas sering membelah dua bil tanpa menyentuh kualiti retrieval.
- claude-sonnet-4-6 ialah lalai yang boleh dipercayai untuk jawapan berasaskan yang menghormati konteks yang diambil dan menolak dengan bersih apabila dokumen tidak mengandungi jawapan.
- Produk embedded volum tinggi (kes penggunaan yang dinyatakan Quivr) berjalan baik pada claude-haiku-4-5-20251001, deepseek-v4-flash, atau gemini-3.5-flash untuk campuran soalan harian.
- max_context_tokens dalam config yang sama mengawal berapa banyak konteks yang diambil dimuatkan pipeline; menaikkannya bergandingan secara semula jadi dengan id konteks-panjang dan menaikkan perbelanjaan input secara berkadar.
- Awalan model tidak dikenali jatuh kembali kepada tokenizer generik untuk belanjawan, yang kosmetik; permintaan itu sendiri membawa id anda tidak berubah ke endpoint.
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.4 mini | $0.75 / $4.50 per M | $0.60 / $3.60 per M |
| DeepSeek V4 Flash | $0.14 / $0.28 per M | $0.10 / $0.30 per M |
| Gemini 3.5 Flash | $1.50 / $9.00 per M | $1.20 / $7.20 per M |
Pembetulan kepada lore Quivr yang biasa.
Panduan yang beredar menerangkan permukaan yang tidak lagi dimiliki Quivr, jadi berbaloi dinyatakan apa yang sebenarnya dilakukan kod semasa. quivr-core disokong-LangChain, bukan disokong-LiteLLM. Enum supplier memilih kelas sembang LangChain, dan openai memetakan kepada ChatOpenAI dengan llm_base_url anda. Jika tutorial memberitahu anda untuk mengkonfigurasi proksi LiteLLM atau tetapan api_base dalam Quivr, ia menerangkan seni bina lebih lama; medan semasa ialah llm_base_url pada LLMEndpointConfig. App full-stack telah dipersaraan. Arahan tentang .env backend, persediaan Supabase, atau pemilih model dalam-app merujuk kepada aplikasi pra-peralihan, yang tidak lagi apa yang dihantar repositori. Konfigurasi kini berlaku dalam kod Python anda (atau app anda sendiri di sekeliling pustaka itu). Env var kunci diperoleh daripada supplier. Bagi supplier openai ia ialah OPENAI_API_KEY, walaupun apabila endpoint bukan OpenAI. Jika anda lebih suka tidak membebankan nama itu, hantar llm_api_key secara eksplisit dalam config, yang mendahului dan mengekalkan environment bersih. Embedder adalah berasingan. Penghalaan penjanaan tidak memindahkan embeddings; embedder lalai ialah OpenAIEmbeddings dengan kelayakan sendiri. Putuskan kedua-dua separuh secara bebas, dan meng-embed semula storan sedia ada hanya diperlukan jika anda menukar embedding model itu sendiri.
Siapa yang menghalakan quivr-core melalui gateway.
- Pasukan produk yang meng-embed RAG dalam app mereka yang mahukan model penjanaan menjadi nilai config, bukan komitmen vendor yang dibakar ke dalam stack.
- Pembangun yang menjalankan banyak brain pada tahap kualiti berbeza: satu kunci, satu endpoint, id model per brain.
- Pasukan yang mahukan jawapan berasaskan berkualiti Claude di sebalik config berbentuk OpenAI tanpa menambah SDK kedua atau akaun penyedia.
- Pembina yang menanda aras model penjanaan atas korpus tetap, di mana setiap calon adalah satu perubahan LLMEndpointConfig.
- Pembangun tanpa akses kepada pengebilan vendor tertentu. Akses berasaskan top-up tanpa keperluan kad menghapuskan kebergantungan pendaftaran setiap penyedia.
Sahkan endpoint dan nyahpepijat ask() pertama.
Sahkan gateway menyenaraikan model anda sebelum mengambil apa-apa; medan model mesti sepadan tepat dengan id yang dilayani. Kegagalan larian-pertama boleh diramal. Amaran bahawa API key untuk supplier openai tidak ditetapkan bermaksud kedua-dua llm_api_key dan OPENAI_API_KEY tidak kelihatan apabila config dibina; amaran berlaku pada masa pembinaan, kegagalan pada ask() pertama. 401 bermaksud kunci yang diselesaikan tidak tergolong kepada endpoint dalam llm_base_url. Ralat model-not-found adalah kesilapan taip id terhadap /v1/models. Dan ralat pengesahan berkaitan-embedding semasa Brain.from_files adalah embedder lalai berasingan yang meminta kelayakan OpenAI sendiri, yang tiada tetapan llm_base_url akan membetulkannya; hantar embedder yang anda kawal. Sebaik sahaja jawapan mengalir, konsol APIsRouter menunjukkan model per permintaan, kiraan token, dan perbelanjaan. Bagi pustaka yang memuatkan serpihan yang diambil ke setiap prompt, nombor token-per-jawapan atas korpus sebenar anda adalah angka yang patut menggerakkan pilihan model anda.
curl -s https://api.apisrouter.com/v1/models \
-H "Authorization: Bearer $APISROUTER_API_KEY" | head -50Soalan lazim
Adakah Quivr menyokong base URL serasi OpenAI custom?
Ya. LLMEndpointConfig quivr-core mempunyai medan llm_base_url, dan bagi supplier openai pustaka itu membina ChatOpenAI LangChain terhadap URL itu. Tetapkannya kepada endpoint gateway dan hantar mana-mana id model katalog.
Adakah Quivr berasaskan LiteLLM?
Tidak dalam codebase semasa. quivr-core memilih kelas sembang LangChain mengikut supplier; supplier openai menggunakan ChatOpenAI dengan llm_base_url anda. Panduan yang menerangkan api_base LiteLLM dalam Quivr merujuk kepada seni bina lebih lama.
Bolehkah brain.ask() menjawab dengan model Claude atau DeepSeek?
Ya. Medan model diteruskan sebagai rentetan biasa melalui /v1/chat/completions, jadi claude-sonnet-4-6, deepseek-v4-flash, atau mana-mana id lain yang dilayani endpoint berfungsi di bawah supplier openai.
Pembolehubah environment mana yang menyimpan kunci?
Apabila llm_api_key tidak ditetapkan dalam config, quivr-core memperoleh pembolehubah daripada nama supplier: OPENAI_API_KEY untuk supplier openai. llm_api_key eksplisit dalam LLMEndpointConfig mendahului dan mengelakkan membebankan nama itu.
Adakah llm_base_url turut memindahkan embeddings?
Tidak. Embedder lalai adalah klien OpenAIEmbeddings berasingan dengan kelayakan dan endpoint sendiri. Halakan penjanaan melalui gateway dan hantar embedder anda sendiri jika anda mahu separuh embedding turut lepas daripada OpenAI.
Adakah projek Quivr masih diselenggara?
Repositori telah senyap sejak pertengahan 2025, jadi anggapnya sebagai pustaka stabil dan bukan yang aktif. Permukaan llm_base_url yang didokumentasikan di sini sepadan dengan cawangan main terkini, dan app full-stack pra-peralihan yang digantikannya telah dipersaraan.