🇹🇷 Türkçe · 🇬🇧 English · 🇨🇳 中文
Cihaz, çocukların ve öğrenmek isteyen herkesin yaparak öğrendiği açık kaynak bir öğrenme platformudur. Bir ürün değil, bir başlangıç noktası: ilk projesi bir el konsolu — ama aynı temelle isteyen programlamayı öğrenir, isteyen oyun yapar, isteyen MP3 çalar, isteyen kendi mini "işletim sistemini" kurar. Platformun dört parçası:
- Console — projelerini çalıştıran gerçek donanım (ESP32-S3 + renkli ekran + joystick/tuşlar)
- Studio — tarayıcıda çalışan, fikirlerini anında deneme tahtası
- Chat — bu uygulama 👉 fikirlerini birlikte tasarlayıp kodladığın masaüstü asistanı
- Case — 3D baskı kasa + parametrik CAD (ayrı depo)
Yazılımcı olman gerekmiyor. Cihaz'ı zaten lehimleyip kasasını bastıysan, en zor iş bitmiş demektir — Chat'i, geri kalan "kod" kısmını senin yerine yazan bir çevirmen gibi düşün. Fikrini kendi cümlelerinle anlatırsın ("tuşa basınca ekranda patlama olsun", "düşen kutuları yakalayan bir oyun istiyorum", "SD karttaki müzikleri çalan bir oynatıcı yapalım"), Chat onu çalışan koda çevirir. Elektronik/maker tarafını zaten biliyorsan, geri kalanı burada tamamlanıyor.
Bu depo boş bir şablondur — kendi API anahtarını ve istersen kendi "ana prompt"unu koyup dakikalar içinde çalıştırırsın.
ornek/klasöründe hazır demo projeler var.
| Düğme | Ne yapar |
|---|---|
| Gönder ➤ | Mesajı yollar. Cevap beklerken altta canlı düşünme sayacı (🤔 Düşünüyor… 3 sn) döner, gelince ✓ 4 saniyede yanıtladı yazar — asla "dondu mu?" hissi yok |
| 🧠 Model | Model seçici — API anahtarının sunduğu modelleri otomatik listeler (Haiku, Sonnet, Opus… anahtar neyi veriyorsa); sabit değil |
| 📎 | Fotoğraf ekle (ekran görüntüsü, çizim, hata mesajı fotoğrafı) |
| 🎤 | Sesle konuş — yereldeki Whisper Türkçe'ye çevirir (isteğe bağlı) |
| 🔍 | Web arama — güncel bilgi gerektiğinde internete bakar (isteğe bağlı) |
| 📌 Projeler | Her proje bir "defter" — o projenin sohbetlerinde asistan defteri hep bilir |
| 💾 / 📂 | Sohbeti kaydet / eski sohbetleri aç |
| 📋 Kodu Kopyala | Cevaptaki kod bloğunu tek tıkla panoya al, Studio'ya yapıştır |
- Paketleri kur (
kurulum.bat'a çift tıkla, ya da elle):pip install anthropic pillow requests ddgs - Ayar dosyanı oluştur —
config.example.json'u kopyalayıpconfig.jsonyap. - Çalıştır —
baslat.batya da:İlk açılışta API anahtarını sorar (console.anthropic.com → API Keys). Anahtarpython cihaz_chat.pyconfig.json'a kaydedilir, bir daha sormaz.
Chat'in bir "beyne" — yani bir yapay zekâya — bağlanması gerekir. İki yol var:
- 🌐 İnternetteki bir servis: en kolayı — bir API anahtarı alıp yapıştırırsın (varsayılan: Anthropic). Ama çoğu servis ücretli ya da kotalıdır.
- 💻 Kendi bilgisayarındaki ücretsiz yapay zekâ ("lokal" denir): Ollama
ya da LM Studio gibi ücretsiz bir program kurarsın, yapay zekâ senin bilgisayarında çalışır —
para yok, internet yok, hiçbir mesaj dışarı çıkmaz. Bugün bunun için
cihaz_chat.py'deki tek bağlantı satırını (anthropic.Anthropic(...)) o programın adresine çevirmen yeterli: küçük bir kod değişikliği, henüz hazır bir düğme değil.
Neden ikisini de yazdım? Çünkü inandığım şey, yapay zekâya erişimin bir hak olduğu — ve bir hak ücrete takılmamalı. Paralı yol bugün daha kolay diye varsayılan o; ama Cihaz'ın gitmek istediği yer ücretsiz/lokal. O kapıyı bilerek açık bıraktım. 🌱
Sesle konuşma istersen ek olarak:
pip install sounddevice scipy numpy faster-whisper
İlk kez duyuyorsan: "prompt", asistana "kim olduğunu ve nasıl davranacağını" anlatan bir metindir — asistanın kendisi görmediği, arka planda okuduğu bir talimat kağıdı gibi düşün. Cihaz Chat'te bu talimat iki parçadan oluşur ve üst üste eklenir:
┌───────────────────────────────┐
│ 1. YEREL PROMPT │ kodun içinde gömülü (_CIHAZ_PROMPT)
│ "Sen Cihaz'ın yardımcı- │ HER ZAMAN çalışır, hiçbir ayar istemez
│ sısın..." │ → cihaz_chat.py'yi hiç açmasan da bu var
└───────────────┬─────────────────┘
│ +
┌───────────────▼─────────────────┐
│ 2. ONLİNE PROMPT (opsiyonel) │ senin GitHub/gist adresin
│ (system_prompt_url) │ İSTERSEN eklersin, istemezsen boş kalır
│ │ → kodu hiç değiştirmeden, uzaktan güncellenir
└───────────────┬─────────────────┘
│ + (varsa) o an açık olan proje defterinin notu
▼
Asistana giden TAM talimat
Neden iki katman? Yerel prompt hiç bozulmaz, cihazın sabit kimliğidir. Online prompt ise senin istediğin an, kodu hiç değiştirmeden — sadece GitHub'daki bir metni güncelleyerek — asistanın tonunu/kurallarını değiştirmene izin verir. Bir ebeveynsen bu, çocuğun cihazındaki asistanın davranışını uzaktan ayarlayabilmen demektir.
Kendi online prompt'unu kurmak (3 adım):
ornek/cihaz_system_prompt.txtdosyasını aç, örneği kendi kurallarınla değiştir.- Metni bir GitHub Gist'e yapıştır, Raw linkini kopyala.
config.json'a ekle:Uygulamayı yeniden aç — artık her açılışta bu metni çeker. (İnternet yoksa son çekilen sürüm{ "api_key": "...", "model": "claude-haiku-4-5", "system_prompt_url": "https://gist.githubusercontent.com/.../raw/cihaz_system_prompt.txt" }prompt_cache.txt'ten okunur, hiç ayar yapmadıysan bu adım tamamen atlanır.)
Gerçek birleştirme kodu (cihaz_chat.py, build_system_prompt) tam olarak yukarıdaki
diyagramı yapar:
parcalar = [_CIHAZ_PROMPT]
if online_prompt.strip():
parcalar.append(online_prompt.strip())
if project_note.strip():
parcalar.append(f"---\nAKTİF PROJE — {proje_adi}:\n{project_note.strip()}\n---")
return "\n\n".join(parcalar)İki ayrı ebeveyn kontrolü var, ikisi de tamamen opsiyonel — hiçbir şey ayarlamazsan uygulama sade bir sohbet aracıdır.
A) Web aramayı kapatma — zaten hazır, tek satırlık işaret
🔍 web arama tuşunu kullanıcıya hiç açmamak istersen, online prompt'unun herhangi bir
yerine tek başına WEB_ARAMA_KAPALI yazman yeterli:
Online prompt'unun içinde (herhangi bir satırda):
WEB_ARAMA_KAPALI
Uygulama her açılışta bunu arar:
işaret var mı?
├─ EVET → 🔍 tuşu çocuğa HİÇ görünmez, arama kapalı kalır
└─ HAYIR → 🔍 tuşu görünür, kullanıcı kendi aç/kapa yapabilir
Gerçek kontrol tek satır (cihaz_chat.py):
self._web_search_allowed = _WEB_ARAMA_KAPALI not in online.upper()Yani bu işareti fark ederse tuş hiç oluşturulmaz — bu işaret modele de gönderilmez, çocuk aramanın kapalı olduğunu fark edip açmaya çalışamaz bile. Karar tamamen senin GitHub prompt'unda; işaret yoksa tuş serbest kalır.
B) Bildirim alarmı — endişe verici bir mesajda telefonuna haber
Çocuğun mesajı, gönderilmeden ÖNCE bir kelime listesiyle karşılaştırılır
│
├─ eşleşme YOK → hiçbir şey olmaz, sohbet normal akar
└─ eşleşme VAR → Telegram/ntfy ile SESSİZCE sana bildirim gider
(çocuğun ekranında hiçbir şey değişmez, fark etmez)
Bu, çekirdek uygulamada yoktur — Telegram/ntfy kurulumu, kelime listesi ve tüm adımlar ayrı, detaylı bir rehberde: EBEVEYN-KONTROL.md.
Sohbet uzadıkça tüm geçmişi tekrar tekrar göndermek programı yavaşlatır ve bir yerden
sonra modeli çökertir. Cihaz Chat modele yalnızca son 30 mesajı yollar
(_MAX_BAGLAM_MESAJ). Ekranda ve kayıtta sohbetin tamamı durur — sadece modele giden
kopya kırpılır. Ayrıca eski fotoğraflar her turda yeniden yüklenmez (sadece en son foto
tam gider). Sonuç: saatlerce açık kalsa da yorulmaz.
Cevap gecikince "takıldı mı?" hissini önlemek için, beklerken altta canlı bir sayaç döner ve cevap gelince kaç saniye sürdüğünü gösterir.
Her proje bir defterdir: içine yazdığın notu (📌 Projeler penceresinden) o projenin
her sohbetinde asistan bilir. Sohbet başında proje seçilir, sohbet boyunca sabit kalır —
yeni proje yeni sohbette seçilir. Bu, "Claude Projects" mantığının küçük bir kopyasıdır.
ornek/projeler.json içinde iki hazır defter var:
- Cihaz Studio — JavaScript oyun kuralları, ekran komutları (
tft,btn,joy,nota), oyun şablonu. Asistan bununla Studio için oyun yazmayı bilir. - Cihaz Konsol — C++ oyun formatı, cihaza kod yükleme adımları,
menu.hdüzenleme, donanım pinout. Asistan bununla gerçek cihaza oyun eklemene yardım eder.
Denemek için ornek/projeler.json'u ana klasöre kopyala — açılışta iki proje sekmesi
hazır gelir. Ya da 📌 Projeler → ➕ Yeni Proje ile kendi defterini yazarsın.
Cihaz-Chat/
├── cihaz_chat.py # uygulamanın tamamı (tek dosya)
├── config.example.json # ayar şablonu → config.json olarak kopyala
├── requirements.txt
├── kurulum.bat / baslat.bat # Windows kolaylık dosyaları
└── ornek/
├── projeler.json # hazır demo defterler (Studio + Konsol)
└── cihaz_system_prompt.txt # örnek online ana prompt
Çalışırken oluşan config.json, projeler.json, sohbetler/, prompt_cache.txt
kişiseldir ve .gitignore ile depoya girmez.
- Gizlilik: API anahtarın ve sohbetlerin bilgisayarında kalır; mesajlar yalnızca kullandığın online API'ye gider (varsayılan Anthropic, ama hangi sağlayıcıyı bağladıysan ona). Yerel (lokal) bir LLM kullanıyorsan hiçbir mesaj bilgisayarından hiç çıkmaz — zaten en güvenli seçenek budur. Depoya hiçbir kişisel veri düşmez.
- Ekran karakteri: Konsol/Studio ekranına yazılan metinlerde Türkçe karakter kullanma
(
baslat,başlatdeğil) — konsolun fontu gösteremiyor. (Chat'in kendi arayüzü Türkçe karakteri gösterir, sorun sadece oyun ekranında.) - Cihaz Chat, Cihaz öğrenme platformunun parçasıdır — Console, Studio ve Case ayrı depolardadır.
MIT — dilediğin gibi kullan, değiştir, dağıt, sat; sadece telif satırını koru. İstersen tamamen değiştir, istersen sil, istersen bambaşka bir şeye dönüştür — özgürsün. 🌱