Skip to content

aid-buildandlearn/Cihaz-Chat

Repository files navigation

🇹🇷 Türkçe · 🇬🇧 English · 🇨🇳 中文

Cihaz Chat

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ı
  • Chatbu 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.


Özellikler

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

Kurulum (3 adım)

  1. Paketleri kur (kurulum.bat'a çift tıkla, ya da elle):
    pip install anthropic pillow requests ddgs
    
  2. Ayar dosyanı oluşturconfig.example.json'u kopyalayıp config.json yap.
  3. Çalıştırbaslat.bat ya da:
    python cihaz_chat.py
    
    İlk açılışta API anahtarını sorar (console.anthropic.com → API Keys). Anahtar config.json'a kaydedilir, bir daha sormaz.

Beynini nereye bağlarsın? (ücretli şart değil)

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


Nasıl çalışır? (mantık)

1) Asistanın "kişiliği" nereden geliyor? — iki katmanlı prompt

İ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):

  1. ornek/cihaz_system_prompt.txt dosyasını aç, örneği kendi kurallarınla değiştir.
  2. Metni bir GitHub Gist'e yapıştır, Raw linkini kopyala.
  3. config.json'a ekle:
    {
      "api_key": "...",
      "model": "claude-haiku-4-5",
      "system_prompt_url": "https://gist.githubusercontent.com/.../raw/cihaz_system_prompt.txt"
    }
    Uygulamayı yeniden aç — artık her açılışta bu metni çeker. (İnternet yoksa son çekilen sürüm 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)

Ebeveyn kontrolü — açık ve basit anlatım

İ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.

2) Bağlam penceresi — uzun sohbetlerde tutarlılık

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.

3) Düşünme sayacı

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.

4) Projeler = defter mantığı

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.


Demo projeler — ornek/

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.h dü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.


Dosya yapısı

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.


Notlar

  • 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şlat değ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.

Lisans

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. 🌱

About

Cihaz Chat — fikirlerini birlikte tasarlayip kodladigin, ebeveyn-kontrollu AI asistan (Cihaz ogrenme platformu)

Topics

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors