Atölye
Sayı 1 · kavram kanıtıIssue 1 · proof of concept

Bir yapımcının günlüğüA maker's log

Aradığın bir dosyayı bulamadığın oldu mu?

Ever failed to find a file you knew you had?

Adını değil, ne anlattığını hatırlarız — "personel toplantı notları" gibi. Ben de bunu anlamla aramayı denedim.

We remember what a file was about, not its name — like "personnel meeting notes." So I tried searching by meaning.

    temsilî demo — gerçek arama yerelde bge-m3 ile çalışırillustrative demo — the real search runs locally with bge-m3

    Ben içeriği hatırlıyorum, bilgisayar kelimeleri. Dizinleri tek tek açtım; Spotlight, Windows Search — hepsi kelime arar, anlamı değil. Kurumsal sistemler güçlü, ama benim dizinim için değil.

    I remember content; the computer remembers words. I opened folders one by one — Spotlight, Windows Search all match words, not meaning. Enterprise systems are powerful, but not for my folder.

    Ya anlamı arasaydım?

    What if I searched meaning?

    Kelimeler birebir geçmese bile, anlam örtüşüyorsa dosya bulunur.

    Even when the words don't match, if the meaning overlaps the file turns up.

    "geçen haftaki personel toplantı notları"

    İki parçadan kurdum.

    I built it from two parts.

    Mimari / ArchitectureQuery is evaluated two ways — meaning, and words plus metadata — then merged into a result. sorgu anlam · bge-m3 kelime + üstveri sonuç

    bge-m3 · FTS5 · RRF · SQLite

    Biri anlam benzerliğini arar, diğeri kesin terimi ve tarihi tutar. Sonra ikisini birleştirdim — anlam öncelikli. Zamanı da model değil kurallar çözer: "geçen hafta" bir tarih aralığına çevrilir, dosya tarihine göre süzülür.

    One looks for meaning similarity, the other keeps exact terms and dates. Then I merged them — meaning first. Time is handled by rules, not the model: "last week" becomes a date range and filters on each file's date.

    Nasıl kurdum

    How I built it

    Beş adım:

    Five steps:

    01

    İçeriği çıkarExtract text

    docx / pptx / xmind → metin + üstveri (tarih, yazar).docx / pptx / xmind → text + metadata (date, author).

    extract.py
    02

    KonumlandırEmbed

    Metnin anlamını çok boyutlu bir uzayda konumlandır.Place the meaning in a high-dimensional space.

    bge-m3
    03

    İndeksleIndex

    Vektör + FTS5 + tarih, tek SQLite.Vectors + FTS5 + dates, one SQLite.

    index.py
    04

    AraSearch

    Türkçe, doğal cümleyle.In plain Turkish.

    search.py
    05

    BirleştirFuse

    Anlam + kelime + tarih → RRF.Meaning + words + date → RRF.

    anlam ⊕ kelime ⊕ tarih

    Kendin çalıştırRun it yourself

    GitHub bilmene gerek yok. Her adımı aç, komutu kopyala, çalıştır.

    No GitHub knowledge needed. Open a step, copy the command, run it.

    Gereken: Python 3.9+ ve Ollama. Git şart değil — ZIP de olur. İnternet ve ~2 GB boş disk yeterli.You need: Python 3.9+ and Ollama. Git is optional — a ZIP works too. Plus internet and ~2 GB free disk.

    Ollama, yapay zeka modellerini bilgisayarında çalıştırır — kurulumu kolay, GPU'yu ya da CPU'yu kendi seçer. ollama.com'dan kur, sonra vektör modelini indir (bir kez, ~1,2 GB).Ollama runs AI models on your own machine — easy install, picks GPU or CPU for you. Install from ollama.com, then pull the vector model (once, ~1.2 GB).

    ollama pull bge-m3

    Git yoksa (kolay yol): ZIP'i doğrudan indir → yerel-anlamsal-arama.zip, aç, klasöre gir.No Git (easy): download the ZIP directly → yerel-anlamsal-arama.zip, unzip, open the folder.

    Git varsa: sadece bu projeyi çek —With Git: fetch just this project —

    git clone --filter=blob:none --sparse https://github.com/tanselokay/Atolye.git git -C Atolye sparse-checkout set projects/yerel-anlamsal-arama

    Proje klasörüne gir, Python paketlerini kur.Enter the project folder and install the Python packages.

    cd Atolye/projects/yerel-anlamsal-arama pip install -r requirements.txt

    Kendi belge klasörünü göster. Bir kez çalışır, tek bir .db dosyası üretir. Tırnak içindeki yolu kendininkiyle değiştir.Point it at your own folder. It runs once and makes a single .db file. Replace the quoted path with yours.

    python index.py "BELGE-KLASÖRÜN" atolye.db

    Türkçe, doğal bir cümleyle ara.Search with a plain Turkish sentence.

    python search.py "geçen ay proje raporu" atolye.db

    Windows'ta: python yerine py, yollarda / yerine \.On Windows: use py instead of python, and \ instead of / in paths.

    Koda hâkimsen tüm kaynak:Comfortable with code? Full source: github.com/tanselokay/Atolye

    CPU'da da çalışır

    It runs on the CPU too

    Güçlü bir ekran kartın yoksa CPU'da da çalışır, sadece daha yavaş. İndeksleme bir kez yapılır; arama sonra hep anında.

    No powerful GPU? It runs on the CPU too, just slower. Indexing happens once; searching afterwards is always instant.

    Sıradan CPUPlain CPUbelge başına ~3–5 sn · 1000 belge ~1 saat~3–5 s/file · 1000 files ~1 hour
    Oyuncu GPU (ör. RTX 3060)Gaming GPU (e.g. RTX 3060)belge başına ~1 sn altı · 1000 belge ~birkaç dkunder ~1 s/file · 1000 files ~minutes
    Güçlü GPU (RTX 5090)Strong GPU (RTX 5090)belge başına ~0,1 sn · 1000 belge ~2 dk~0.1 s/file · 1000 files ~2 min

    Kaba tahmin: ortalama ~3 parçalık (~2 sayfalık) belge varsayıldı. CPU ve RTX 5090 ölçüldü; oyuncu GPU aradaki tahmindir. Eski işlemciler daha yavaştır.Rough estimate assuming an average ~3-chunk (~2-page) document. CPU and the RTX 5090 were measured; the gaming GPU is an in-between estimate. Older CPUs are slower.

    Sonra o cümleyi yazdım. Dosya geldi.

    Then I typed that sentence. The file showed up.

    Küçük bir testte, 30 Türkçe sorgunun 29'unda doğru dosya ilk sırada geldi.*

    In a small test, the right file came up first in 29 of 30 Turkish queries.*

    * Bir güvence değil, küçük bir ölçüm — 30 belge, Türkçe paraphrase sorgular. Ayrı ve daha küçük bir denemede (12 belge) doğru modelin önemi netleşti: kolay uygulamaların varsayılanı (nomic) Türkçe'de %36'da kaldı, bge-m3 ise %100.* Not a guarantee, a small measurement — 30 files, Turkish paraphrase queries. A separate, smaller test (12 files) showed why the model matters: the easy-app default (nomic) reached only 36% on Turkish, bge-m3 100%.

    Her şeyi çözmüyor. Birbirine çok benzeyen dosyalarda anlam tek başına yetmiyor; orada tarih devreye giriyor. Geniş kullanımda da denenmedi — bir kavram kanıtı. Ama işe yarıyor, ve dosyalar bilgisayarında kalıyor.

    It doesn't solve everything. On near-identical files, meaning alone isn't enough — that's where the date steps in. It hasn't been tested widely either — a proof of concept. But it works, and the files stay on your machine.

    Kod GitHub'da: The code is on GitHub: github.com/tanselokay/Atolye

    Yapay zekanın eleştirisi

    The AI's critique

    1. Sadece metin katmanı; tarama ve PDF yok. Yalnızca .docx/.pptx/.xmind'ın metnini okur. PDF, taranmış belge, fotoğraf, Excel ve e-posta kapsam dışı — arşivin bunlardan oluşuyorsa göremez.Text-layer only; no scans, no PDF. It reads text from .docx/.pptx/.xmind. PDFs, scanned pages, photos, spreadsheets and email are out of scope — if that's your archive, it won't see it.
    2. Gerçek ölçekte kanıtlanmadı. 30 derli toplu belgeyle ölçüldü, binlerce dağınık gerçek belgeyle değil. Arama tüm vektörleri tek tek tarar; on binlerce parçada yavaşlar (hızlı indeks yok). Rakamları "yön" say, garanti değil.Unproven at real scale. Measured on 30 tidy files, not thousands of messy real ones. Search scans every vector one by one; it slows on tens of thousands of chunks (no fast index). Treat the numbers as a direction, not a guarantee.
    3. Bulur ama açıklamaz, yargılamaz. Dosyayı getirir; neden eşleştiğini, bir alıntıyı ya da güven skorunu göstermez. Yanlış bir dosyayı da kendinden emin ilk sıraya koyabilir — açıp doğrulaman gerekir.It finds, but doesn't explain or judge. It returns a file with no "why", no snippet, no confidence — and can rank a wrong file first, confidently. You must open and verify.
    4. Donuk ve tek modele bağlı. İndeks bir anlık fotoğraf; yeni veya değişen dosyalar yeniden indekslenene dek bulunmaz (otomatik izleme yok). Kalite tümüyle tek bir gömme modeline (bge-m3) bağlı; kendi verinde daha iyisini denemenin hazır bir yolu yok.Static, and tied to one model. The index is a snapshot; new or edited files aren't found until you re-index (no auto-watch). Quality rests entirely on one embedding model (bge-m3), with no built-in way to try a better one on your data.

    Kısacası: doğru iş için iyi bir başlangıç, bitmiş bir ürün değil.In short: a good start for the right job — not a finished product.