Jalankan mem0 terhadap base URL serasi OpenAI custom.
Updated 2026-07-29
Penyedia OpenAI mem0 mengambil kunci config openai_base_url. Tetapkannya kepada https://api.apisrouter.com/v1, hantar satu kunci, dan model yang mengekstrak dan mengemas kini memori boleh menjadi mana-mana id dalam katalog, termasuk Claude dan DeepSeek, tanpa menyentuh selebihnya pipeline memori anda.
Jawapan pantas: satu kunci config dalam blok llm.
Penyedia LLM OpenAI mem0 menyelesaikan endpointnya sebagai config dahulu, environment kedua, lalai ketiga: self.config.openai_base_url, kemudian pembolehubah environment OPENAI_BASE_URL, kemudian https://api.openai.com/v1. Jadi override paling bersih ialah satu kunci dalam dict config llm: tetapkan openai_base_url kepada https://api.apisrouter.com/v1, tetapkan api_key bersebelahannya (atau eksport OPENAI_API_KEY), dan setiap panggilan ekstraksi-memori menghalakan melalui gateway. Ini adalah tingkah laku upstream mem0, boleh dibaca dalam mem0/llms/openai.py, bukan fork. SDK TypeScript mendedahkan pasangan yang sama dalam camelCase: openaiBaseUrl dan apiKey. Nilai dalam dict config mengatasi pembolehubah environment, yang mengatasi lalai, jadi base URL peringkat-config menang walaupun pada mesin di mana OPENAI_BASE_URL menunjuk ke tempat lain.
config = {
"llm": {
"provider": "openai",
"config": {
"model": "claude-sonnet-4-6",
"openai_base_url": "https://api.apisrouter.com/v1",
"api_key": os.environ["APISROUTER_API_KEY"],
},
}
}Apa yang sebenarnya dilakukan mem0 dengan LLM-nya.
mem0 (mem0ai di GitHub, lebih kurang 61K bintang) ialah lapisan memori untuk agent AI. Setiap panggilan add() menjalankan pipeline: LLM membaca giliran perbualan baharu, mengekstrak calon memori, membandingkannya terhadap apa yang sudah disimpan, dan memutuskan per memori sama ada untuk tambah, kemas kini, padam, atau langkau. Itu adalah kerja penaakulan sebenar, dan ia berlaku pada setiap tulisan, jadi slot LLM menembak jauh lebih kerap daripada yang dijangka kebanyakan orang apabila mereka melekatkan memori ke agent produksi. Retrieval adalah separuh yang lain, dan ia langsung tidak menggunakan LLM: search() meng-embed pertanyaan dan menjalankan persamaan vektor terhadap storan. Dua klien berbeza, dua model berbeza, dikonfigurasikan dalam dua blok berbeza (llm dan embedder). Pemisahan ini adalah perkara paling penting untuk difahami sebelum menghalakan semula apa-apa, kerana ia bermaksud anda boleh memindahkan beban kerja ekstraksi ke gateway multi-vendor manakala embedder mengekalkan penyedia dan indeks sedia ada tidak disentuh. Penyedia kekal "openai" dalam config; mem0 meneruskan medan model sebagai rentetan biasa melalui /v1/chat/completions. Apabila endpoint di sebalik openai_base_url melayani banyak vendor, rentetan itu boleh menjadi id Claude, GPT, DeepSeek, atau GLM, dan menukar model ekstraksi menjadi perubahan config satu-baris dan bukan migrasi penyedia.
Persediaan penuh: dict config atau pembolehubah environment.
Laluan dict-config adalah yang tepat: ia hanya memindahkan LLM. Bina dict itu, serahkan kepada Memory.from_config, dan guna API memori seperti biasa. Medan api_key mengekalkan kunci gateway sepenuhnya di luar tetapan vector-store dan embedder anda. Laluan environment turut wujud: kelas OpenAI mem0 membaca OPENAI_BASE_URL apabila kunci config tiada. Ia satu pembolehubah dieksport dan sifar perubahan kod, tetapi ambil perhatian skopnya: kelas OpenAI embedder membaca pembolehubah yang sama (ia juga menghormati nama OPENAI_API_BASE yang lebih lama, yang tidak dilakukan kelas LLM). Eksport OPENAI_BASE_URL dan anda telah memindahkan kedua-dua komponen, yang hanya betul jika endpoint turut melayani model embedding anda. Jika ragu, utamakan dict config dan biarkan environment tidak disentuh.
import os
from mem0 import Memory
config = {
"llm": {
"provider": "openai",
"config": {
"model": "claude-sonnet-4-6", # any catalog id
"openai_base_url": "https://api.apisrouter.com/v1",
"api_key": os.environ["APISROUTER_API_KEY"],
"temperature": 0.1,
},
},
# embedder block unchanged: keeps its own provider and key
}
m = Memory.from_config(config)
m.add("I prefer window seats and vegetarian meals.", user_id="alice")
print(m.search("seat preference?", user_id="alice"))Memilih model ekstraksi.
Gelung praktikal: kekalkan embedder anda tetap, jalankan fixture perbualan yang sama melalui dua atau tiga model ekstraksi, dan diff memori yang disimpan. Di sebalik satu endpoint perbandingan itu adalah edit rentetan-config per calon, dan log penggunaan per-kunci menilai harga larian setiap calon untuk anda.
- Kualiti ekstraksi adalah kualiti memori. LLM memutuskan apa yang berbaloi diingati dan sama ada maklumat baharu bercanggah dengan yang lama; model yang terlepas kemas kini mencemari retrieval untuk setiap sesi masa depan. claude-sonnet-4-6 dan gpt-5.5 adalah pertengahan yang boleh dipercayai bagi pertukaran ini.
- Volum ada pada setiap tulisan. Produk sembang yang memanggil add() selepas setiap pertukaran menjalankan ekstraksi beribu kali sehari, tempat id pantas seperti claude-haiku-4-5-20251001 atau deepseek-v4-flash mengelakkan lapisan memori mendominasi bil token.
- Domain berat-percanggahan (keutamaan yang berubah, fakta yang luput) mendapat manfaat daripada model yang lebih kuat pada add() walaupun ia kos lebih per panggilan, kerana keputusan kemas kini yang salah mahal untuk dikesan kemudian.
- Temperature patut rendah. Ekstraksi adalah tugas keputusan-berstruktur, bukan penulisan kreatif; mem0 mendedahkan temperature dalam blok config yang sama, dan sekitar 0.1 mengekalkan keputusan add/update/delete konsisten.
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 |
| GPT-5.5 | $5.00 / $30.00 per M | $4.00 / $24.00 per M |
| Claude Haiku 4.5 20251001 | $1.00 / $5.00 per M | $0.80 / $4.00 per M |
| DeepSeek V4 Flash | $0.14 / $0.28 per M | $0.10 / $0.30 per M |
| GLM-5.2 | $1.14 / $4.00 per M | $1.10 / $4.00 per M |
Mod kegagalan khusus mem0.
OPENROUTER_API_KEY yang berkekalan merampas penghalaan. Kelas LLM OpenAI mem0 mengendalikan pembolehubah itu secara khas: apabila ditetapkan, kelas itu bertukar ke endpoint OpenRouter dan mengabaikan niat anda. Jika permintaan tidak sampai ke base URL yang anda konfigurasikan, semak pembolehubah ini dahulu dan nyahtetapkannya. Pembolehubah environment memindahkan lebih daripada yang anda maksudkan. OPENAI_BASE_URL dibaca oleh kedua-dua LLM dan embedder. Jika gateway tidak melayani model embedding anda, override peringkat-env memecahkan search() manakala add() terus berfungsi, yang muncul sebagai "tulisan memori baik tetapi retrieval kosong atau memberi ralat." Skopkan override itu kepada blok config llm dan embedder tidak pernah menyedari. Kunci config adalah per-SDK. Python adalah snake_case (openai_base_url, api_key); TypeScript adalah camelCase (openaiBaseUrl, apiKey). Kunci camelCase dalam dict Python diabaikan secara senyap dan anda jatuh ke endpoint lalai, yang kelihatan tepat seperti override "tidak berfungsi." Id model adalah rentetan tepat. mem0 tidak mengesahkan medan model; ia meneruskannya. Kesilapan taip muncul sebagai ralat model-not-found daripada gateway pada add() pertama, dan senarai /v1/models adalah ejaan berwibawa. Menukar embedder adalah keputusan indeks, bukan keputusan config. Embedding daripada model berbeza wujud dalam ruang vektor berbeza, jadi mengarahkan semula embedder membatalkan persamaan terhadap vektor sedia ada. Memindahkan LLM adalah percuma; memindahkan embedder bermaksud meng-embed semula storan. Rancangkan sebagai migrasi berasingan.
Siapa yang menghalakan mem0 melalui gateway.
- Pembina agent yang menambah memori berkekalan kepada pembantu. Ekstraksi berjalan pada setiap tulisan, jadi satu permukaan pengebilan dengan penggunaan per-kunci mengatasi dashboard vendor kedua yang dilekatkan pada stack.
- Pasukan yang mahukan ekstraksi berkualiti Claude di sebalik config berbentuk OpenAI. Rentetan penyedia kekal "openai"; hanya base URL dan id model berubah.
- Produk sembang volum tinggi yang mengawal kos unit lapisan memori dengan menggandingkan chat model frontier dengan id ekstraksi pantas, masing-masing boleh dicapai melalui endpoint yang sama.
- Pembangun yang menilai model ekstraksi bersebelahan. Setiap calon adalah satu rentetan model terhadap fixture tetap, bukan integrasi penyedia baharu setiap vendor.
- Pembangun tanpa akses kepada pengebilan vendor tertentu. Akses berasaskan top-up tanpa keperluan kad menghapuskan kebergantungan pendaftaran setiap penyedia.
Sahkan endpoint dan nyahpepijat add() pertama.
Sahkan gateway menyenaraikan model yang anda konfigurasikan sebelum menjalankan pipeline; medan model mesti sepadan tepat dengan id yang dilayani. Kegagalan larian-pertama mengikut corak. 401 bermaksud kunci yang diselesaikan LLM salah untuk endpoint yang diselesaikannya, dan kerana kedua-duanya datang daripada lata config-atas-env, cetak kedua-dua nilai berkesan dan bukan menganggap; api_key config dengan base URL env (atau sebaliknya) adalah ketidakpadanan klasik. Ralat model-not-found adalah kesilapan taip id. Permintaan yang jelas pergi ke openrouter.ai bermaksud kes khas OPENROUTER_API_KEY tercetus. Dan jika add() berjaya manakala search() gagal, anda secara tidak sengaja memindahkan embedder melalui environment; skopkan base URL ke dalam blok llm. Sebaik sahaja memori mengalir, konsol APIsRouter menunjukkan model per permintaan, kiraan token, dan perbelanjaan. Panggilan ekstraksi adalah kecil tetapi tanpa henti, dan pandangan penggunaan adalah cara anda melihat berapa kos sebenar lapisan memori per seribu tulisan dan bukan menganggarkannya.
curl -s https://api.apisrouter.com/v1/models \
-H "Authorization: Bearer $APISROUTER_API_KEY" | head -50Soalan lazim
Kunci config mana yang mengarahkan mem0 ke endpoint serasi OpenAI custom?
openai_base_url dalam config penyedia llm dalam Python (openaiBaseUrl dalam TypeScript). Nilai config mengatasi pembolehubah environment OPENAI_BASE_URL, yang mengatasi lalai https://api.openai.com/v1, jadi dict config adalah tempat paling deterministik untuk menetapkannya.
Bolehkah mem0 mengekstrak memori dengan model Claude atau DeepSeek melalui persediaan ini?
Ya. Penyedia kekal "openai" dan mem0 meneruskan medan model sebagai rentetan biasa melalui /v1/chat/completions. Mana-mana id yang dilayani endpoint di sebalik openai_base_url berfungsi, termasuk id Claude, DeepSeek, dan GLM.
Adakah menetapkan OPENAI_BASE_URL turut menjejaskan embedder?
Ya. Embedder OpenAI mem0 membaca pembolehubah environment yang sama (ditambah nama OPENAI_API_BASE yang lebih lama). Jika anda hanya mahu memindahkan LLM, tetapkan openai_base_url dalam blok config llm dan biarkan environment tidak disentuh.
Perlukah saya menukar embedder atau vector store saya untuk menggunakan ini?
Tidak. Blok llm dan embedder adalah klien bebas. LLM ekstraksi boleh menghalakan melalui gateway manakala embedder mengekalkan penyedia semasanya dan vektor sedia ada anda kekal sah. Mengarahkan semula embedder adalah migrasi berasingan yang memerlukan meng-embed semula storan.
Mengapa permintaan mem0 saya pergi ke OpenRouter dan bukan base URL saya?
Kelas LLM OpenAI mem0 mengendalikan pembolehubah environment OPENROUTER_API_KEY secara khas: apabila ditetapkan, ia menghalakan semula ke OpenRouter tidak kira base URL anda. Nyahtetapkan pembolehubah itu dan konfigurasi openai_base_url berkuat kuasa.
Adakah ini terpakai kepada platform Mem0 hosted atau SDK sumber terbuka?
SDK sumber terbuka (Memory / Memory.from_config), di mana anda mengawal config LLM. Platform Mem0 hosted mengurus panggilan modelnya sendiri di sisi pelayan, jadi base URL custom terpakai apabila anda self-host lapisan memori.