İçeriğe geç

Kurulum sorunları

Önce npm run doctor. Her ✗ satırı sorunu ve çözümünü birlikte yazar. Sorunsuz bir makinede çıktı şöyle:

npm run doctor
$ npm run doctor
━━ DOCTOR
✓ Node.js 22.22.2
✓ Ollama http://localhost:11434
✓ model gemma3:4b
✓ model bge-m3
✓ Chroma http://localhost:8000
✓ corpus/2025 8 documents · 7 en, 1 tr
✓ embed one sentence 1024 numbers · 150 ms
✓ one answer 176 ms · "Ankara"
Ready.

Corpus satırı dokümanları sayar: 7’si İngilizce, 1’i Türkçe. one answer satırı sohbet modeline kısa bir deneme sorusu sorar: Türkiye’nin başkenti. Cevabın başını gösterir.

Aşağıdaki mesajlar repodaki kodda yazıldığı gibi; <…> olan yerlere sizin değeriniz gelir.

Satır Ne yapmalı
✗ Node.js found <sürüm>, need 22 or newer — https://nodejs.org Node.js 22 ya da üstünü kurun, terminali kapatıp açın, node -v ile bakın.
✗ Ollama not reachable at http://localhost:11434 — start the Ollama app Ollama uygulamasını açın. Uygulama yoksa terminalde ollama serve. Ollama başka bir adresteyse .env içine OLLAMA_URL=… yazın.
✗ model gemma3:4b not pulled — run: ollama pull gemma3:4b Satırdaki komutu çalıştırın. bge-m3 için aynısı: ollama pull bge-m3.
✗ Chroma not reachable — run: podman compose up -d (or set STORE=json in .env) Repo klasöründe podman compose up -d. Olmazsa aşağıdaki Podman bölümü; hiç olmazsa .env içine STORE=json.
✗ corpus/2025 missing — run npm run doctor from the repo folder Komutu repo klasörünün içinden çalıştırın: cd ama-rag-workshop.
slow laptop: answers will take a while — that is fine, the steps still work Hata değil: tek bir cevap 20 saniyeden uzun sürdü. İlk çalıştırmada bu süre modelin belleğe yüklenmesini de içerir; npm run doctor’u hemen bir kez daha çalıştırın. Uyarı kalırsa yalnızca beklersiniz.
<n> problem(s) — fix them before the day starts. Yukarıdaki ✗ satırlarının sayısı. Hepsi düzelince son satır Ready. olur.

Bir adım bilinen bir sorunla karşılaşınca tek satır yazar: ✗ ve mesaj. Bilinmeyen bir hatada bütün yığın izini (stack trace) basar; o zaman ilk satırı okuyun.

Ollama

Mesaj Ne oldu, ne yapmalı
Ollama is not reachable at http://localhost:11434. Is it running? (fetch failed) Ollama kapalı. Uygulamayı açın ya da ollama serve.
Ollama /api/embed → HTTP 404: <Ollama'nın cevabı> — is the model pulled? Try: ollama pull bge-m3 Embedding modeli yok. Satırın sonundaki komutu çalıştırın.
Ollama /api/generate → HTTP 404: <Ollama'nın cevabı> — is the model pulled? Try: ollama pull gemma3:4b Chat modeli yok. Satırın sonundaki komutu çalıştırın.
Ollama /api/<yol> → HTTP <kod>: <Ollama'nın cevabı> Başka bir Ollama hatası; ayrıntı Ollama’nın cevabında. ollama list çalışıyor mu, bakın.

Chroma

Mesaj Ne oldu, ne yapmalı
Chroma is not reachable at http://localhost:8000. Start it: podman compose up -d (or use --store json) Container kapalı. podman compose up -d, sonra podman compose ps ile ayakta mı bakın.

data/ dosyaları — her adım bir öncekinin dosyasını okur ve onun güncel olup olmadığını kontrol eder:

Mesaj Ne oldu, ne yapmalı
data/<n>-<ad>.json does not exist yet. Run: npm run step -- <n> Önceki adım hiç çalışmamış. Satırdaki komutu çalıştırın ya da npm run catchup -- <n>.
data/<n>-<ad>.json was made from an older data/<m>-<ad>.json. Run it again: npm run step -- <n> Önceki adımı yeniden çalıştırdınız, bu adımı değil. Satırdaki adımı ve ondan sonrakileri sırayla yeniden çalıştırın.
corpus/<sürüm>/ changed after step 1 ran. Run it again: npm run step -- 1 Corpus dosyaları değişti. 1-load.ts dosyasından yeniden başlayın.
The store was filled with <model> vectors, but questions would be embedded with <model>. Vectors from two models live in different spaces — run steps 4 and 5 again. EMBED_MODEL değişti. 4-embed.ts ve 5-store.ts dosyalarını yeniden çalıştırın.

Corpus ve ayarlar

Mesaj Ne oldu, ne yapmalı
No folder corpus/<sürüm>. Editions live in corpus/<edition>/ — try --edition 2025 Olmayan bir sürüm istendi. --edition 2025 ya da --edition 2026.
corpus/<sürüm>/<dosya>.md: front matter is missing <alanlar> Bir dokümanın başındaki bilgi bloğunda alan eksik: id, title, edition, department, access, lang.
Unknown store "<ad>". Use --store chroma or --store json. --store ya da STORE yanlış yazılmış. Yığın iziyle gelir.
--metric must be one of: cosine, dot, l2 npm run similar -- --metric … yalnızca bu üçünü tanır. Yığın iziyle gelir.

Komut biçimi — argüman eksik ya da yanlışsa komut nasıl kullanılacağını yazar:

Mesaj Doğrusu
usage: npm run step -- <0-8> ["question"] npm run step -- 3
usage: npm run ask -- "How much is the international per diem?" [--prompt] [--bare] [--k 8] npm run ask -- "question"
usage: npm run catchup -- <0-8> (the step you want to reach) npm run catchup -- 5

İki fonksiyon bilerek boş bırakıldı; siz yazana kadar şu mesajları verirler:

Mesaj Ne zaman
dot() is not written yet — see the YOUR TURN note above it in src/lib/similarity.ts npm run similar -- --metric dot, dot() yazılmadan önce
byParagraph() is not written yet — see the YOUR TURN note above it in src/steps/3-chunk.ts Chunker paragraph iken npm run step -- 3, byParagraph() yazılmadan önce

Çözüm: fonksiyonu yazın. Üstündeki YOUR TURN notu nasıl yazacağınızı anlatıyor. Bir üçüncü parça daha var: src/steps/2-clean.ts içindeki turkishConfidential kuralı. Mesaj vermez. Siz yazana kadar npm run step -- 2, it-security için −12 değil −8 gürültü satırı gösterir. Bitmiş hâlleri solutions/ klasöründe.

Durum Ne yapmalı
Cannot connect to Podman. Please verify your connection to the Linux system using `podman system connection list`, or try `podman machine init` and `podman machine start` to manage a new Linux VM Podman’ın sanal makinesi kapalı: podman machine start. Hiç oluşturulmadıysa önce podman machine init.
looking up compose provider failed podman compose bir Compose aracı bulamadı. Podman Desktop’tan Compose’u kurun ya da tek satırlık komutu kullanın (aşağıda).
the container name "chroma" is already in use by <id>. You have to remove that container to be able to reuse that name: … Container zaten var. Başlatın: podman start chroma.
>>>> Executing external compose provider "…/podman-compose". Please see podman-compose(1) for how to disable this message. <<<< Hata değil, bilgi. podman compose dış bir Compose aracını çağırdığında her seferinde bunu yazar; ardından Chroma normal başlar.
8000 portu başka bir programda Chroma’yı başka bir porta alın ve yeni adresi .env’e yazın (aşağıda).

Compose olmadan, aynı Chroma tek satırda (compose.yaml’ın başındaki yorumdan):

Terminal window
podman run -d --name chroma -p 8000:8000 -v chroma-data:/data docker.io/chromadb/chroma:1.5.9

8000 portu doluysa, 8001’e alın ve yeni adresi pipeline’a bildirin:

Terminal window
podman run -d --name chroma -p 8001:8000 -v chroma-data:/data docker.io/chromadb/chroma:1.5.9
echo "CHROMA_URL=http://localhost:8001" >> .env

Hiç container yok — .env içine STORE=json; ayrıntısı Kurulum sayfasında.

Yönetici yetkisi olmadan Podman — Podman’ı kurmak ve sanal makinesini ilk kez açmak yönetici yetkisi isteyebilir; Windows’ta sanal makine WSL2 ya da Hyper-V üzerinde çalışır ve bunlar kapalıysa açmak bir kez yönetici yetkisi ister. Yetki alınamazsa STORE=json; yalnızca Chroma’nın içine bakan kısımlar (Bruno’nun 01-chroma klasörü) çalışmaz.

  • VAR=x npm run … çalışmaz. Bu biçim yalnızca Mac/Linux kabuklarında var. Repo bu yüzden her ayarı ya bayrakla (npm run step -- 5 --store json) ya da .env dosyasıyla alır.
  • PowerShell’de npm açılmıyorsa ve hata running scripts is disabled on this system diyorsa: npm yerine npm.cmd yazın (npm.cmd run doctor) ya da, şirket politikası izin veriyorsa, Set-ExecutionPolicy -Scope CurrentUser RemoteSigned.
  • Bir bayrak işlemiyor gibiyse (--store json yok sayılıyorsa): aynı ayarı .env dosyasına yazın. .env kabuktan bağımsızdır; PowerShell’de, cmd’de ve zsh’de aynı çalışır.
  • Satır sonları sorun değil: repo .gitattributes ile LF kullanır, 1-load.ts de \r\n’i \n’e çevirir.

Aşağıdakiler, şifreli bağlantıları inceleyen bir proxy’nin arkasındaki bir kurum ağında denendi.

Sertifika. Böyle bir ağda npm ci ve Node, şirketin kök sertifikasını (CA) tanımadıkça bağlanamaz. Sertifika dosyasının yolunu Node’a verin; npm de Node ile çalıştığı için aynı ayarı kullanır. Dosyanın yerini şirketinizin BT ekibi bilir.

Terminal window
echo 'export NODE_EXTRA_CA_CERTS=<ca-bundle.pem>' >> ~/.zshrc

Ayar yeni açılan terminallerde geçerli olur: terminali kapatıp açın, sonra npm ci.

İndirmeler. Aynı proxy üzerinden:

  • ollama pull registry.ollama.ai’ye ulaşıyor; model dosyaları da iniyor.
  • podman pull docker.io/chromadb/chroma:1.5.9 çalışıyor (649 MB).
  • Tek bir indirme saniyede 4–8 MB hızla iniyor. İki modeli ve imajı eğitim gününden önce indirin: eğitim sabahı herkes aynı ağdan aynı anda indirirse bu hız paylaşılır.

Repoyu senkronize edilen bir klasöre klonlamayın. npm ci çok sayıda küçük dosya yazar ve senkronizasyon onları kilitlemeye başlar: kurulum çok yavaşlar ya da EPERM/EBUSY gibi dosya erişim hatalarıyla durabilir. Windows’ta Masaüstü ve Belgeler çoğu zaman OneDrive’dadır: $HOME\dev gibi bir klasör kullanın. Mac’te iCloud’un Masaüstü ve Belgeler senkronizasyonu açıksa aynısı: ~/dev.

Zaten OneDrive’a klonladıysanız en temizi: klasörü silin, $HOME\dev altına yeniden klonlayın, npm ci.

git pull şu mesajla durabilir: cannot pull with rebase: You have unstaged changes. Repo klasöründe şunları sırayla çalıştırın:

Terminal window
git stash
git pull
podman compose up -d
npm run catchup -- 0

.cache/question-ledger.jsonl dosyasını silin. Sonra npm run doctor çalıştırın. Corpus satırında 8 documents · 7 en, 1 tr yazmalı.

Takıldınız ya da kodu bozdunuz; örneğin 5-store.ts bittikten sonra devam etmek için:

Terminal window
npm run catchup -- 5
src/cli/catchup.ts
// npm run catchup -- <n>
// Lost? This puts you exactly at the end of step n — without touching the code you wrote.
// 1. every TOGGLE block goes back to its default line (the one marked "// default")
// 2. data/ is emptied and the store is reset
// 3. steps 1..n run again
// n = 0 is the start of the day: nothing is run, so `npm run question` asks the bare model again.
// Your own functions (the YOUR TURN exercises) are left as they are.

Yani: her TOGGLE bloğu varsayılan satırına döner. data/ boşalır, vector DB de her N için sıfırlanır. Chroma çalışmıyorsa catch-up bunu tek satırla söyler, sıfırlamayı atlar ve devam eder. Sonra 1’den N’ye kadar bütün adımlar çalışır. Sizin yazdığınız fonksiyonlara da, günün sorusunun defterine de dokunmaz. Embedding’ler .cache/ klasöründe saklı kaldığı için yeniden hesaplanmaz; catch-up hızlıdır.

Yalnızca vector DB’yi sıfırlayıp dokümanları yeniden yüklemek için: npm run ingest -- --reset.

Önce npm run doctor: her ✗ satırı çözümünü de yazar.