Bu sayfa Cluster ERP'nin niyet asistanını açıklar. src/cluster_erp/ai/ içindeki motor (intent_engine.py, tokenizer.py, vectorizer.py ile intent_corpus_en.json ve intent_corpus_tr.json derlemleri) yazılan bir isteği bir API niyetiyle eşler. src/cluster_erp/server/routes/chat.py sohbet ucu motoru web uygulaması için sarar: sohbet ifadelerini işler, izinleri denetler, eşleşen ucu çağırır ve yanıtları döndürür. Ekranlar asistan ve sohbet ekranları ile masaüstü sohbet bileşeni sayfalarında anlatılır.
Kısaca¶
- Motor yerel bir metin sınıflandırıcıdır: Türkçe kök bulmalı belirteçleme, kelime ve karakter özellikleri, TF-IDF vektörleri ve örnek cümlelere kosinüs benzerliği (
src/cluster_erp/ai/tokenizer.py:400-438,src/cluster_erp/ai/vectorizer.py:7-52). - Bir niyet bir modülü, bir HTTP yöntemini, bir API yolunu ve bir açıklamayı adlandırır (
src/cluster_erp/ai/intent_engine.py:14-24). - Uç yalnızca, istemcinin kurulu olarak bildirdiği modüller içinde, çağıranın uç iznine sahip olduğu niyetleri sunar (
src/cluster_erp/server/routes/chat.py:1158-1177,src/cluster_erp/server/routes/chat.py:1253-1265). - Okumalar eşleşen liste ucunu çağıranın kendi belirteciyle süreç içinde çalıştırır; oluşturma niyetleri bir görev kartı döndürür; güncelleme ve silme niyetleri işlem yapmak yerine kayda yönlendirir (
src/cluster_erp/server/routes/chat.py:1055-1066,src/cluster_erp/server/routes/chat.py:1436-1466).
Nasıl çalışır¶
İstek yolu¶
flowchart TD
A["POST /api/v1/chat/message: text, action_context, allowed_modules"] --> P["require_permission dashboard.read"]
P --> AC{"action_context var mı"}
AC -->|evet| HA["_handle_action devam isteği"]
AC -->|hayır| ST{"sohbet ifadesi"}
ST -->|evet| SR["sabit selamlama veya yardım yanıtı"]
ST -->|hayır| SP["_try_split_intents"]
SP --> RE["IntentEngine.recognize ilk 5"]
RE --> F["_intent_allowed: modül kapsamı ve izin kodu"]
F -->|hiç kalmadı| FB["_scope_fallback"]
F --> C{"güven 0.60 altında mı"}
C -->|evet| SUG["bunu mu demek istediniz, ilk 3"]
C -->|hayır| K{"niyet türü"}
K -->|liste veya okuma| G["çağıran belirteciyle süreç içinde _api_get"]
K -->|oluşturma| T["metadata'dan görev kartı"]
K -->|güncelleme veya silme| N["kayda yönlendirme"]Düz anlatımla:
- Uç
dashboard.readister ve çağıranın izin kodlarını yükler (src/cluster_erp/server/routes/chat.py:1191-1200). - Metinde Türkçe harfler veya yaygın Türkçe komut kelimeleri varsa dil Türkçe, aksi halde İngilizcedir (
src/cluster_erp/server/routes/chat.py:999-1040). - Bir aksiyon düğmesinden gelen devam isteği
_handle_actionucuna gider. Selamlamalar ve yardım istekleri sabit bir yanıt alır (src/cluster_erp/server/routes/chat.py:1209-1218,src/cluster_erp/server/routes/chat.py:537-647). - Birden çok istek içeren metin bölünür ve her parça sırayla işlenir (
src/cluster_erp/server/routes/chat.py:1223-1239,src/cluster_erp/server/routes/chat.py:664-717). IntentEngine.recognizeen fazla beş aday döndürür. Motor süreç başına bir kez oluşturulur ve yüklenir (src/cluster_erp/server/routes/chat.py:24-35,src/cluster_erp/server/routes/chat.py:1253).- Çağıranın erişemeyeceği uçlara ait adaylar, hiçbir şey gösterilmeden önce çıkarılır. Aday kalmazsa yanıt bilinmeyen bir istekle aynıdır (
src/cluster_erp/server/routes/chat.py:1255-1265,src/cluster_erp/server/routes/chat.py:1179-1185). - 0,60 güvenin altında uç ilk üç adayı öneri olarak listeler (
src/cluster_erp/server/routes/chat.py:1270-1279). - Liste veya okuma niyetinde uç metinden süzgeçleri, zaman sırasını ve bir arama terimini kurar, ucu çağıranın
Authorizationbaşlığıyla bir ASGI taşıması üzerinden süreç içinde çağırır ve satırları metadata'daki liste sütunlarıyla biçimlendirir (src/cluster_erp/server/routes/chat.py:1282-1433,src/cluster_erp/server/routes/chat.py:1055-1066). - Oluşturma niyetinde varlığın form metadata'sından alanlarla bir görev kartı kurar; güncelleme ve silme niyetlerinde kullanıcıdan kaydı açmasını ister (
src/cluster_erp/server/routes/chat.py:1436-1466,src/cluster_erp/server/routes/chat.py:1552).
Eşleştirme¶
IntentEngine.load her derlemi okur, her örnekten özellik çıkarır, dil başına bir TF-IDF vektörleştirici eğitir ve örnek vektörlerini, bir açıklama vektörünü ve niyet kimliğinin düzgünleştirilmiş parçalarını saklar (src/cluster_erp/ai/intent_engine.py:364-418).
| Adım | Ne olur | Kaynak |
|---|---|---|
| Belirteçleme | Türkçe farkındalıklı küçük harfe çevirme, aksanları ASCII'ye katlama, noktalamayı silme, durak kelimeleri ve tek harfli belirteçleri atma; Türkçe belirteçler ek kırpmayla kökleştirilir | src/cluster_erp/ai/tokenizer.py:250-258, src/cluster_erp/ai/tokenizer.py:391-422 |
| Özellikler | tekliler, ikililer ve dört harf ve üzeri belirteçlerin karakter üçlüleri | src/cluster_erp/ai/tokenizer.py:424-438 |
| Vektörler | terim sıklığı çarpı yumuşatılmış ters belge sıklığı; görülmemiş terimler en yüksek ağırlığı alır | src/cluster_erp/ai/vectorizer.py:17-38 |
| Benzerlik | en iyi örneğe ve açıklamaya kosinüs benzerliği | src/cluster_erp/ai/vectorizer.py:40-52, src/cluster_erp/ai/intent_engine.py:521-528 |
| Kimlik örtüşmesi | Türkçeden de eşlenen ve düzenleme uzaklığıyla düzeltilen aksiyon ve varlık kelimelerinin niyet kimliği parçalarıyla karşılaştırılması | src/cluster_erp/ai/intent_engine.py:84-105, src/cluster_erp/ai/intent_engine.py:605-765 |
| Puan | ağırlıkları bir varlık ve güçlü bir aksiyon kelimesi bulunup bulunmadığına bağlı ağırlıklı toplam, artı liste ve okuma ipuçları için küçük ekler | src/cluster_erp/ai/intent_engine.py:530-560 |
| Belirsizlik | farklı modüllerden ilk iki aday 0,04 içinde ve ilk aday 0,72 altında olduğunda ilk adayın güveni 0,59 ile sınırlanır | src/cluster_erp/ai/intent_engine.py:584-601 |
Bir aday için varsayılan eşik 0,05, varsayılan sonuç sayısı 5'tir (src/cluster_erp/ai/intent_engine.py:420-426).
Derlemler¶
Her derlem version, description, total_intents ve intents alanlarını içeren bir JSON dosyasıdır. Bir niyetin id, module, method, path, description ve examples alanları vardır (src/cluster_erp/ai/intent_corpus_en.json, src/cluster_erp/ai/intent_corpus_tr.json). İki dosyanın JSON yüklemesiyle sayıldı: her dilde 347 niyet, 1553 İngilizce örnek ve 1168 Türkçe örnek. Niyetler 12 hedefi kapsar: auth, crm, currencies, design_engineering, documents, owned_organisations, parties, products_and_services, projects, quotations, sales_orders ve server.
Neden böyle kurulmuş¶
- Uç yorumu, asistanın yalnızca çağıranın erişebileceklerini bildiğini; böylece kapsam dışı niyetlerin açıklama, öneri veya form sızdıramayacağını belirtir (
src/cluster_erp/server/routes/chat.py:1255-1258). ChatRequest.allowed_modulesyalnızca asistanın sunduklarını daraltır; izinler her zaman çağıranın belirtecinden uygulanır (src/cluster_erp/server/routes/chat.py:1069-1077).- Bir niyetin izin kodu, elle tutulan bir listeden değil, metadata'dan
{entity_key}.{action}biçiminde türetilir (src/cluster_erp/server/routes/chat.py:1120-1156).
Kurallar ve sınırlar¶
- Metin en fazla 2000 karakter;
allowed_modulesen fazla 200 girdidir (src/cluster_erp/server/routes/chat.py:1069-1077). - Ucu metadata içinde çözülemeyen niyet reddedilir (
src/cluster_erp/server/routes/chat.py:1158-1177). - Asistan güncelleme veya silme aksiyonu çalıştırmaz (
src/cluster_erp/server/routes/chat.py:1454-1466). - Masaüstü istemcisi sohbet bileşeninde kendi
IntentEnginenesnesini kurar (src/cluster_erp/desktop/widgets/chat/chat_widget.py:47,src/cluster_erp/desktop/widgets/chat/chat_widget.py:818).
Diğer parçalarla etkileşim¶
| Parça | Amaç | Kaynak |
|---|---|---|
| Tüm modüllerin metadata'sı | gezinme hedefleri, liste sütunları, varlık etiketleri, izin kodları, görev kartı alanları | src/cluster_erp/server/routes/chat.py:875-998, src/cluster_erp/server/routes/chat.py:1044-1053 |
UserService.get_user_permission_codes |
çağıranın izin kodları | src/cluster_erp/server/routes/chat.py:1200 |
| Modül API'leri | kendi izin ve uygulama denetimlerinin arkasındaki asıl veri | src/cluster_erp/server/routes/chat.py:1055-1066 |
Sohbet ucu modüller dışındaki sunucu uçlarından biridir; bkz. paylaşılan sunucu uçları.
Sınırlar ve açık noktalar¶
- Derlemler 12 hedefi kapsar;
fleet,intranet,inventoryveyaanalyticsgibi modüller için niyet iki derlemde de bulunamadı. - Selamlamalar, yardım metni, öneriler ve geri dönüşler gibi yanıtlar uç içinde Türkçe veya İngilizce dizeler olarak kurulur (
src/cluster_erp/server/routes/chat.py:537-647,src/cluster_erp/server/routes/chat.py:1179-1185,src/cluster_erp/server/routes/chat.py:1270-1276).
Tutarsızlıklar¶
Tanıtılan terimler¶
| Terim | Kod tanımlayıcısı | Tanım | Türkçe terim | Kaynak |
|---|---|---|---|---|
| intent | IntentMatch |
Bir modüle, yönteme ve API yoluna güvenle eşlenmiş tanınan istek. | Niyet | src/cluster_erp/ai/intent_engine.py:14-24 |
| intent corpus | intent_corpus_en.json |
Motorun başlangıçta öğrendiği, niyet başına örnek cümleler. | Niyet derlemi | src/cluster_erp/ai/intent_engine.py:365-371 |
| task card | TaskCardOut |
Bir oluşturma niyeti için metadata'dan kurulan ve bir kayıt oluşturan, konuşmadaki adım adım form. | görev kartı | src/cluster_erp/server/routes/chat.py:1099-1104 |
İlgili sayfalar¶
- Niyet asistanı bölümü
- Asistan ve sohbet ekranları
- Masaüstü sohbet bileşeni
- Roller ve izinler
- Metadata modeli
92f8051 numaralı commit ile 2026-11-13 tarihinde doğrulandı.