# Uygulama sağlayıcı anahtarını hiç görmeden RAG'li istek göndersin

> Uygulama ile sağlayıcı arasında duran, tek OpenAI uyumlu API sunan ve isteğe RAG bağlamını kendisi ekleyen self-hosted Go gateway.

- Şu an ne yapıyor: Uygulamanın tek bir OpenAI uyumlu uca konuşmasını, isteğin hangi modele gideceğini ve — bir doküman havuzu bağlıysa — hangi dokümanlardan bağlam alacağını projenin ayarının belirlemesini sağlıyor. Sağlayıcı anahtarını uygulamalara dağıtmak istemeyen ve harcamayı proje başına sınırlamak isteyen herkes kendi sunucusunda çalıştırabilir.
- Tür: Açık kaynak, Web uygulaması
- Durum: Ürün oldu
- Odak: AI destekli geliştirme
- Başlangıç: 2026-08-19
- Labs’tan çıkış: 2026-09-18
- Teknolojiler: Go, PostgreSQL, pgvector, Docker, OpenAI, Anthropic Claude, Google Gemini, DeepSeek, Ollama, Prometheus, OpenTelemetry
- Etiketler: #rag, #gateway, #llm
- Kaynak kodu: https://github.com/ragmux/ragmux
- Web sitesi: https://ragmux.com
- Bu iş ürüne dönüştü: Ragmux (https://www.muhammetsafak.com.tr/portfolyo/ragmux/)
- Kaynak: https://www.muhammetsafak.com.tr/labs/ragmux-lab/
- Dil: tr-TR
- Yazar: Muhammet Şafak

---
Kendi dokümanıyla çalışan bir LLM özelliğinde "RAG kullanacağım" kararı işin
kolay yarısı. Zor yarısı, o retrieval'ı üretimde kimin taşıyacağı.

## Kararın ardından kalanlar

Doküman gömülü, chunk'lar veritabanında, arama çalışıyor. Geriye üç soru
kalıyor: sağlayıcı anahtarı nerede duruyor, hangi uygulama hangi modeli
kullanıyor, harcama nerede kesiliyor. Bu üçü retrieval'ın parçası değil ve
üçünü de her uygulamanın kendi içinde çözmesi, aynı kodun uygulama sayısınca
kopyalanması demek.

Ragmux bu üçünü uygulamanın dışına, aradaki geçide taşıyor. Uygulama tek bir
OpenAI uyumlu uca konuşuyor; hangi sağlayıcıya gideceğini, hangi sistem
prompt'unu taşıyacağını ve hangi doküman havuzundan bağlam alacağını projenin
ayarı biliyor.

## İstemcinin gönderdiği model adı hiçbir şey seçmiyor

İsteğin `model` alanı yönlendirme yapmıyor. Hangi modele gidileceğini projenin
bağlantısı belirliyor; istemcinin yazdığı değer yalnızca cevapta ve her akış
parçasında olduğu gibi geri yankılanıyor, böylece o alanı karşılaştıran SDK'lar
kırılmıyor.

Bunun anlamı şu: sağlayıcı kimlik bilgisi sunucuda, şifreli duruyor ve hiçbir
arayüzde geri gösterilmiyor. Uygulamanın elinde yalnız projenin kendi anahtarı
var. Bedeli de açık — istemci artık model seçemiyor; model seçimi bir dağıtım
kararı değil, bir yapılandırma kararı hâline geliyor.

## Bütçe parayla değil token'la kesiliyor

Her isteğin tahmini maliyeti hesaplanıyor ve panelde duruyor, ama **maliyet
bilgidir**: hiçbir istek bir para eşiğine ulaşıldığı için reddedilmiyor.
Harcamayı sınırlamanın yolu token sınırlamak — proje başına dakikalık istek ve
token tavanı, günlük ve aylık token bütçesi.

Burada saklanmayan bir sınır var: token sayısı ancak sağlayıcı cevapladıktan
sonra kesinleşiyor, o yüzden tek bir istek bütçeyi kendi boyutu kadar aşabiliyor
ve reddedilen, bir sonraki istek oluyor.

## Tek PostgreSQL, ikinci bir depo yok

Kullanıcılar, bağlantılar, projeler, dokümanlar, chunk'lar, vektörler, istek
kayıtları ve kullanım sayaçları — hepsi pgvector'lü tek bir PostgreSQL'de.
Redis yok, ayrı bir vektör veritabanı yok. Sayaçlar süreç değişkeni değil satır
olduğu için aynı veritabanına bakan birkaç kopya aynı bütçeyi paylaşabiliyor.

## Kendi kuralını çiğnediğini bulan gözden geçirme

Kayıtlı beş kararın üçü bir yayın öncesi gözden geçirmeden doğdu, ikisi de
kodla dokümanın çeliştiği yerlerden: rol matrisi `viewer`'ı salt-okunur
anlatıyordu ama kod ona kendi gateway anahtarını üretme hakkı veriyordu; bir
fiyat tablosu satırı, ücretli bir uca bakan bağlantıyı "0,00 $" diye
raporluyordu.

Beşinci karar ise aynı gün yumuşatıldı. Görsel indirme tavanına kiracı başına
sert bir pay konmuştu; ölçüm, tek projeli kurulumda — yani en yaygın hâlde —
tavanın yarısının kalıcı olarak boş kaldığını gösterdi. Pay o gün esnetildi:
kimse beklemiyorsa tek kiracı tavanın tamamını kullanabiliyor.

Ürünün künyesi portfolyoda.
