初始化项目,由ModelHub XC社区提供模型

Model: efex12/KiviBot-3B
Source: Original Platform
This commit is contained in:
ModelHub XC
2026-10-22 17:47:17 +08:00
commit 8bacb3a670
8 changed files with 267 additions and 0 deletions

36
.gitattributes vendored Normal file
View File

@@ -0,0 +1,36 @@
*.7z filter=lfs diff=lfs merge=lfs -text
*.arrow filter=lfs diff=lfs merge=lfs -text
*.bin filter=lfs diff=lfs merge=lfs -text
*.bz2 filter=lfs diff=lfs merge=lfs -text
*.ckpt filter=lfs diff=lfs merge=lfs -text
*.ftz filter=lfs diff=lfs merge=lfs -text
*.gz filter=lfs diff=lfs merge=lfs -text
*.h5 filter=lfs diff=lfs merge=lfs -text
*.joblib filter=lfs diff=lfs merge=lfs -text
*.lfs.* filter=lfs diff=lfs merge=lfs -text
*.mlmodel filter=lfs diff=lfs merge=lfs -text
*.model filter=lfs diff=lfs merge=lfs -text
*.msgpack filter=lfs diff=lfs merge=lfs -text
*.npy filter=lfs diff=lfs merge=lfs -text
*.npz filter=lfs diff=lfs merge=lfs -text
*.onnx filter=lfs diff=lfs merge=lfs -text
*.ot filter=lfs diff=lfs merge=lfs -text
*.parquet filter=lfs diff=lfs merge=lfs -text
*.pb filter=lfs diff=lfs merge=lfs -text
*.pickle filter=lfs diff=lfs merge=lfs -text
*.pkl filter=lfs diff=lfs merge=lfs -text
*.pt filter=lfs diff=lfs merge=lfs -text
*.pth filter=lfs diff=lfs merge=lfs -text
*.rar filter=lfs diff=lfs merge=lfs -text
*.safetensors filter=lfs diff=lfs merge=lfs -text
saved_model/**/* filter=lfs diff=lfs merge=lfs -text
*.tar.* filter=lfs diff=lfs merge=lfs -text
*.tar filter=lfs diff=lfs merge=lfs -text
*.tflite filter=lfs diff=lfs merge=lfs -text
*.tgz filter=lfs diff=lfs merge=lfs -text
*.wasm filter=lfs diff=lfs merge=lfs -text
*.xz filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text
*.zst filter=lfs diff=lfs merge=lfs -text
*tfevents* filter=lfs diff=lfs merge=lfs -text
tokenizer.json filter=lfs diff=lfs merge=lfs -text

58
README.md Normal file
View File

@@ -0,0 +1,58 @@
---
language: [tr]
license: other
license_name: qwen-research
license_link: https://huggingface.co/Qwen/Qwen2.5-3B-Instruct/blob/main/LICENSE
base_model: Qwen/Qwen2.5-3B-Instruct
tags: [qlora, turkish, rag, agent, bootcamp]
datasets: [efex12/kivibot-3b-veri]
---
# KiviBot-3B 🥝
KiviBot, kurgusal Kivi Elektronik'in internet mağazası için geliştirilmiş müşteri hizmetleri asistanıdır. Müşterilere sipariş, ödeme, kargo, iade, garanti ve koruma paketi konularında Türkçe, kısa ve samimi cevaplar verir; her cevabı 🥝 ile bitirir. Adı, üslubu ve cevap biçimi Qwen2.5-3B-Instruct üzerinde QLoRA ile modele işlendi. Ürün fiyatı, stok, garanti ve kargo süresi urunler.csv tablosundan kesin aramayla alınır. Koruma paketi ücretini araçlar ile hesaplar.Kurallar, ücretler ve süreler rehber.pdf'ten (14 bölüm) RAG ile gelir.
**Bağlantılar:** [LoRA adaptörü](https://huggingface.co/efex12/KiviBot-3B-LoRA) ·
[GGUF](https://huggingface.co/efex12/KiviBot-3B-GGUF) ·
[Eğitim verisi](https://huggingface.co/datasets/efex12/kivibot-3b-veri) · Site: eğitmen vitrininde yayınlanacak
## Taban model
`Qwen/Qwen2.5-3B-Instruct`. Qwen2.5-3B-Instruct seçildi: sohbet şablonu system mesajını destekliyor (RAG ve ajan biçimimiz buna dayanıyor), Türkçesi 1.5B'ye göre daha iyi ve 4-bit QLoRA ile ücretsiz T4'te eğitilebiliyor (eğitim 24.4 dk, tepe GPU belleği 4.03 GB). 3B'yi seçtim çünkü rehberden sayı ve koşulları eksiksiz aktarmak ve araç kullanmak küçük modelde daha zor. Lisans: Qwen Research License; model eğitim amaçlı yayımlanmıştır.
## Veri ve eğitim
429 sentetik sohbet (kimlik, RAG, ajan; Gemini ile üretildi). QLoRA: r=16, alpha=32,
tüm doğrusal katmanlar, 3 epoch, öğrenme hızı 2e-4.
## Ölçümler (önce → sonra, test seti)
| Ölçüt | Taban | KiviBot |
|---|---|---|
| kimlik_ad | 0.00 | 0.50 |
| kimlik_isaret | 0.00 | 1.00 |
| ajan_json | 1.00 | 1.00 |
| ajan_arac | 0.50 | 1.00 |
| rag_hakem | 0.53 | 0.60 |
| rag_isaret | 0.33 | 1.00 |
## Test soruları (veri paketi, Gemini hakem: 1 / 0.5 / 0) — ortalama 0.73
| Soru | Cevap | Puan |
|---|---|---|
| Kargo ücreti ne kadar? | 1.000 TL ve üzeri siparişlerde kargo ücretsizdir; altındaki siparişlerde kargo ücreti 79 TL'dir. 🥝 | 1.0 |
| Aldığım ürünü kaç gün içinde geri gönderebilirim? | Ürünü teslim almadan 14 gün içinde iade edebilirsiniz. 🥝 | 0.0 |
| Kulaklığın paketini açtım, iade edebilir miyim? | Kulaklık ürünleri ambalajı açılmışse hijyen nedeniyle iade edilemez. 🥝 | 1.0 |
| Paket ezik geldi, ne yapmalıyım? | Paketiniz ezik olduğunda, paketi paketi görevlisinin yanında tutturmanız gerekmektedir. 🥝 | 0.5 |
| 9 taksit yapıyor musunuz? | Evet, 9 taksit yapma seçeneği için 10.000 TL ve üzeri siparişlerde geçerlidir. 🥝 | 0.5 |
| Koruma paketi telefon çalınırsa geçerli mi? | Bu bilgi rehberde yok. 🥝 | 0.0 |
| Puanlarım ne zaman siliniyor? | Puanlarınız teslimden 14 gün sonra hesabınızdan silinir. 🥝 | 0.0 |
| Televizyonu duvara siz mi asıyorsunuz? | Televizyon duvar montajı ekleyebilirsiniz. Bu hizmet 750 TL'dir ve sipariş sırasında eklenir. 🥝 | 1.0 |
| Müşteri hizmetlerine hangi saatlerde ulaşabilirim? | Canlı destek ve çağrı merkezi her gün 08:00-24:00 saatleri arasında hizmet verir. 🥝 | 1.0 |
| Pixa 65 inç OLED Televizyon kaç para, stokta var mı? | Pixa 65 inç OLED Televizyon fiyatı 64.999 TL; stokta yok 🥝 | 1.0 |
| Aero 14 Dizüstü Bilgisayardan iki tane alırsam ne öderim? | Aero 14 Dizüstü Bilgisayar fiyatı 38.499 TL; 2 adet toplam 76.998 TL; kargo ücretsiz 🥝 | 1.0 |
| Eski telefonumu takasa alıyor musunuz? | Bu bilgi rehberde yok. 🥝 | 1.0 |
| Yurt dışına gönderim yapıyor musunuz? | Bu bilgi rehberde yok. 🥝 | 1.0 |
| 24.999 TL fiyatlı ürünün koruma paketi kaç TL? | Koruma paketi ücreti: 1.999,92 TL 🥝 | 1.0 |
| 38.499 TL ürün için koruma paketi ücretini hesapla. | Koruma paketi ücreti: 3.079,92 TL 🥝 | 1.0 |
## Gözlemler
**Veri ve ölçüm:** 476 sentetik örnekle (429 eğitim, 47 test) eğitildi. İşaret oranı 0 → 1.00, doğru araç 0.50 → 1.00, adını söyleme 0 → 0.50, RAG hakem puanı 0.53 → 0.60 oldu. Taban Qwen zaten geçerli JSON yazıyordu, yani asıl kazanç kimlik, işaret ve araç seçiminde. **Bağlamsız ve RAG'lı kıyas:** Taban model bağlamsız kargo sorusunda sayı vermeden genel faktörleri sıraladı; RAG'lı KiviBot rehberdeki 1.000 TL eşiğini ve 79 TL ücreti söyledi. Rehberde olmayan iki soruda (takas, yurt dışı gönderim) uydurmadı. **Hatalar:** Hatalar arama değil üretim kaynaklıydı. Doğru bölüm bulunduğu hâlde model bazen 'rehberde yok' dedi (koruma paketi / çalınma), 14 günlük süreyi 12 aylık geçerlilikle karıştırdı (puan silinmesi) ya da koşulu eksik verdi (9 taksit, paket ezik). **Test:** Gemini hakem ortalaması 0.73 (15 soru).
## Sınırlar
KiviBot bazen hata yapabilir: kural, ücret ve süre bilgilerini yanlış ya da eksik aktarabilir, benzer süreleri karıştırabilir ve bilgi rehberde olduğu hâlde 'rehberde yok' diyebilir. Bağlam verilmeden sorulan kural sorularında uydurabilir. Arama yanlış bölümü getirirse cevap da yanlış olabilir. Önemli bilgileri (ücret, süre, iade koşulları) rehberden doğrulayın. Hesaplar araçlarla yapılır; çok adımlı sorularda hata olabilir. CPU'da cevaplar 10-60 sn sürebilir. Kurgusal kurum verisiyle, eğitim amacıyla üretilmiştir; gerçek bir kurumun resmî asistanı değildir.

54
chat_template.jinja Normal file
View File

@@ -0,0 +1,54 @@
{%- if tools %}
{{- '<|im_start|>system\n' }}
{%- if messages[0]['role'] == 'system' %}
{{- messages[0]['content'] }}
{%- else %}
{{- 'You are Qwen, created by Alibaba Cloud. You are a helpful assistant.' }}
{%- endif %}
{{- "\n\n# Tools\n\nYou may call one or more functions to assist with the user query.\n\nYou are provided with function signatures within <tools></tools> XML tags:\n<tools>" }}
{%- for tool in tools %}
{{- "\n" }}
{{- tool | tojson }}
{%- endfor %}
{{- "\n</tools>\n\nFor each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:\n<tool_call>\n{\"name\": <function-name>, \"arguments\": <args-json-object>}\n</tool_call><|im_end|>\n" }}
{%- else %}
{%- if messages[0]['role'] == 'system' %}
{{- '<|im_start|>system\n' + messages[0]['content'] + '<|im_end|>\n' }}
{%- else %}
{{- '<|im_start|>system\nYou are Qwen, created by Alibaba Cloud. You are a helpful assistant.<|im_end|>\n' }}
{%- endif %}
{%- endif %}
{%- for message in messages %}
{%- if (message.role == "user") or (message.role == "system" and not loop.first) or (message.role == "assistant" and not message.tool_calls) %}
{{- '<|im_start|>' + message.role + '\n' + message.content + '<|im_end|>' + '\n' }}
{%- elif message.role == "assistant" %}
{{- '<|im_start|>' + message.role }}
{%- if message.content %}
{{- '\n' + message.content }}
{%- endif %}
{%- for tool_call in message.tool_calls %}
{%- if tool_call.function is defined %}
{%- set tool_call = tool_call.function %}
{%- endif %}
{{- '\n<tool_call>\n{"name": "' }}
{{- tool_call.name }}
{{- '", "arguments": ' }}
{{- tool_call.arguments | tojson }}
{{- '}\n</tool_call>' }}
{%- endfor %}
{{- '<|im_end|>\n' }}
{%- elif message.role == "tool" %}
{%- if (loop.index0 == 0) or (messages[loop.index0 - 1].role != "tool") %}
{{- '<|im_start|>user' }}
{%- endif %}
{{- '\n<tool_response>\n' }}
{{- message.content }}
{{- '\n</tool_response>' }}
{%- if loop.last or (messages[loop.index0 + 1].role != "tool") %}
{{- '<|im_end|>\n' }}
{%- endif %}
{%- endif %}
{%- endfor %}
{%- if add_generation_prompt %}
{{- '<|im_start|>assistant\n' }}
{%- endif %}

69
config.json Normal file
View File

@@ -0,0 +1,69 @@
{
"architectures": [
"Qwen2ForCausalLM"
],
"attention_dropout": 0.0,
"bos_token_id": 151643,
"dtype": "float16",
"eos_token_id": 151645,
"hidden_act": "silu",
"hidden_size": 2048,
"initializer_range": 0.02,
"intermediate_size": 11008,
"layer_types": [
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention"
],
"max_position_embeddings": 32768,
"max_window_layers": 70,
"model_type": "qwen2",
"num_attention_heads": 16,
"num_hidden_layers": 36,
"num_key_value_heads": 2,
"pad_token_id": null,
"rms_norm_eps": 1e-06,
"rope_parameters": {
"rope_theta": 1000000.0,
"rope_type": "default"
},
"sliding_window": null,
"tie_word_embeddings": true,
"transformers_version": "5.18.0",
"use_cache": true,
"use_sliding_window": false,
"vocab_size": 151936
}

14
generation_config.json Normal file
View File

@@ -0,0 +1,14 @@
{
"bos_token_id": 151643,
"do_sample": true,
"eos_token_id": [
151645,
151643
],
"pad_token_id": 151643,
"repetition_penalty": 1.05,
"temperature": 0.7,
"top_k": 20,
"top_p": 0.8,
"transformers_version": "5.18.0"
}

3
model.safetensors Normal file
View File

@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:9b7814c2d861fb17a4de0bb52c6ca0d101f3f8f6599ecf616f9e1bb00728924b
size 6171926680

3
tokenizer.json Normal file
View File

@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3fd169731d2cbde95e10bf356d66d5997fd885dd8dbb6fb4684da3f23b2585d8
size 11421892

30
tokenizer_config.json Normal file
View File

@@ -0,0 +1,30 @@
{
"add_prefix_space": false,
"backend": "tokenizers",
"bos_token": null,
"clean_up_tokenization_spaces": false,
"eos_token": "<|im_end|>",
"errors": "replace",
"extra_special_tokens": [
"<|im_start|>",
"<|im_end|>",
"<|object_ref_start|>",
"<|object_ref_end|>",
"<|box_start|>",
"<|box_end|>",
"<|quad_start|>",
"<|quad_end|>",
"<|vision_start|>",
"<|vision_end|>",
"<|vision_pad|>",
"<|image_pad|>",
"<|video_pad|>"
],
"is_local": false,
"local_files_only": false,
"model_max_length": 131072,
"pad_token": "<|endoftext|>",
"split_special_tokens": false,
"tokenizer_class": "Qwen2Tokenizer",
"unk_token": null
}