Bu proje; bir açık kaynak dil modelinin tanımlı araçları kullanarak
gerçek bir SQLite veritabanından kitap bilgisi okuduğu, sipariş
oluşturduğu, stok düşürdüğü ve sipariş durumunu sorguladığı uçtan uca
bir tool-calling asistanıdır.
Proje, Tool-Calling Destekli Asistan Geliştirme ödevi kapsamında
hazırlanmıştır.
🎯 Senaryo
Kullanıcı doğal Türkçe ifadelerle kitapçı asistanına soru sorabilir:
“Dune kitabının fiyatı ve stok durumu nedir?”
“Bilim kurgu kitaplarını göster.”
“Dune kitabından Yusuf Şimşek adına 1 adet sipariş oluştur.”
Başlangıçta farklı kategorilerden 40 örnek kitap eklenir.
orders tablosu
Kolon
Açıklama
id
Sipariş numarası
customer_name
Müşteri adı
book_id
Kitap kimliği
quantity
Sipariş adedi
unit_price
Birim fiyat
total_price
Toplam tutar
status
Sipariş durumu
created_at
Sipariş zamanı
Sipariş oluşturma ve stok düşürme işlemleri aynı transaction içinde
gerçekleştirilir. İşlemlerden biri başarısız olursa yapılan değişiklikler
geri alınır.
🛡️ Halüsinasyon Engelleme
Modelin veritabanında olmayan bilgileri gerçekmiş gibi sunmasını
engellemek için aşağıdaki kontroller uygulanmıştır:
Fiyat, stok, book_id, sipariş numarası ve sipariş durumu yalnızca
tool sonuçlarından alınır.
create_order, aynı agent turunda search_books sonucundan
gelmeyen bir book_id ile çalışamaz.
Model tarafından tahmin edilen kitap kimlikleri reddedilir.
Olmayan kitaplar boş sonuçla döndürülür.
Yetersiz stokta sipariş oluşturulmaz ve stok değiştirilmez.
Eksik müşteri adı, geçersiz miktar ve hatalı sipariş numarası
Python tarafında doğrulanır.
Aynı kullanıcı isteğinde ikinci kez sipariş oluşturulması engellenir.
Model doğrudan SQL sorgusu çalıştıramaz.
Model yalnızca izin verilen üç tool fonksiyonunu çağırabilir.
Tool çağrıları terminalde ve Gradio arayüzünde loglanır.
Alternatif olarak token ortam değişkeni şeklinde tanımlanabilir:
export HF_TOKEN="hf_..."
Hugging Face tokenı kaynak koda yazılmamalıdır.
▶️ Terminal Uygulamasını Çalıştırma
uv run python main.py
Örnek kullanım:
text
1Sen: Dune kitabının fiyatı ve stok durumu nedir?
23TOOL CALL: search_books
4Arguments: {"query": "Dune"}
56Asistan:
7Dune kitabının fiyatı 320 TL, mevcut stok miktarı 7 adettir.
🖥️ Gradio Arayüzünü Çalıştırma
uv run python app.py
Alternatif:
python app.py
🧪 Testler
Veritabanı testi
uv run python data/test_database.py
Tool fonksiyonları testi
uv run python test_tools.py
Test edilen senaryolar:
Kitap arama
Olmayan kitabı arama
Sipariş oluşturma
Stok azaltma
Sipariş durumu sorgulama
Yetersiz stok
Geçersiz sipariş numarası
Test siparişinin silinmesi ve stoğun geri yüklenmesi
Tool şemaları testi
uv run python test_tool_schemas.py
Kontrol edilen durumlar:
Üç tool şemasının bulunması
JSON Schema yapısının doğrulanması
Tool ve Python fonksiyonu adlarının eşleşmesi
Zorunlu parametrelerin kontrolü
Normal ve strict şemaların üretilmesi
✅ Uçtan Uca Çalışan Örnek
Kullanıcı girdisi:
Dune kitabından Yusuf Şimşek adına 1 adet sipariş oluştur.
1Yusuf Şimşek adına Dune kitabından 1 adet sipariş başarıyla
2oluşturuldu.
34Sipariş numarası: 2
5Toplam tutar: 320 TL
6Sipariş durumu: Hazırlanıyor
📷 Tool-Call Log Ekran Görüntüsü
Tool-call terminal logu
Hugging Face’e yüklemeden önce terminal veya Gradio arayüzündeki
tool-call logunun ekran görüntüsü:
assets/tool_call_log.png
adıyla eklenmelidir.
☁️ Hugging Face Space Ayarları
Space ayarlarında aşağıdaki secret tanımlanmalıdır:
HF_TOKEN
İsteğe bağlı ortam değişkenleri:
text
1HF_MODEL=Qwen/Qwen3-8B
2HF_PROVIDER=auto
⚠️ Kalıcılık Notu
Hugging Face Space’in varsayılan disk alanı kalıcı değildir. Space
yeniden başlatıldığında çalışma sırasında oluşturulan demo siparişleri
silinebilir ve örnek SQLite veritabanı yeniden oluşturulabilir.
Bu proje bir eğitim ve canlı demo uygulamasıdır. Gerçek üretim
ortamında PostgreSQL, MySQL veya yönetilen bir veritabanı servisi
kullanılmalıdır.
🔐 Güvenlik
Hugging Face tokenı kaynak kodda tutulmaz.
Token, ortam değişkeni veya Hugging Face Space Secret olarak alınır.
.env, .venv ve çalışma zamanı SQLite dosyaları Git’e eklenmez.
Model doğrudan SQL sorgusu çalıştıramaz.
Model yalnızca izin verilen tool fonksiyonlarını çağırabilir.
Tool argümanları Python tarafında yeniden doğrulanır.
📊 Proje Durumu
Bileşen
Durum
SQLite veritabanı
✅
40 kitaplık başlangıç verisi
✅
Kitap arama tool’u
✅
Sipariş oluşturma tool’u
✅
Stok güncelleme
✅
Sipariş durumu sorgulama
✅
JSON tool şemaları
✅
Agent tool-call döngüsü
✅
Qwen3-8B model bağlantısı
✅
Terminal arayüzü
✅
Gradio arayüzü
✅
Hugging Face Space
🚀
📷 Uygulama Ekran Görüntüleri
Gradio Kullanıcı Arayüzü
Aşağıdaki ekran görüntüsünde kullanıcı, bilim kurgu kategorisindeki
stokta bulunan kitapları listelemektedir. Model search_books
fonksiyonunu çağırmış ve yanıtını SQLite veritabanından dönen gerçek
sonuçlara göre oluşturmuştur.
Gradio kullanıcı arayüzü
Tool-Call Ayrıntıları
Aşağıdaki görüntüde model tarafından seçilen tool, gönderilen
parametreler ve veritabanından dönen gerçek JSON sonucu görülmektedir.
Tool-call logu
👨💻 Geliştirici
Yusuf Şimşek
Fırat Üniversitesi
Yapay Zekâ ve Veri Mühendisliği
📄 Lisans
Bu proje eğitim amacıyla hazırlanmıştır ve MIT Lisansı altında
sunulmaktadır.