İçeriğe geç

Dokümantasyon

Sorulan değişikliği bulmak.

Bir soruşturma filtreyle değil cümleyle başlar. Buradaki dördü birincisini ikincisine çevirir — sonra filtreyi elinizde bırakır.

Kendi cümlelerinizle sormak

"Geçen hafta fiyatları kim değiştirdi?" bir sorudur; resourceType=catalog.price&from=… bir filtredir. Asistan birincisini ikincisine çevirir ve sonra aradan çekilir: okuduğunuz şey, panelin geri kalanının kullandığı aynı müşteri kapsamlı sorgu oluşturucudan gelen, kimlikleri üzerinde duran olayların kendisidir.

Bu ayrım kulağa geldiğinden daha önemli. Denetim izinizi özetleyen bir model, denetim iziniz hakkında yanılabilen bir modeldir ve hiç yaşanmamış olayların inandırıcı bir özeti, hiç arama yapmamaktan daha kötüdür. Bu yüzden model hiçbir kaydı görmez, SQL yazmaz, müşteri seçmez ve hiçbir şey yazamaz. Bir filtre seçer ve o filtre, sonuçlardan önce size gösterilir.
Cevap değil, filtre üretirÇıktı, arama formunun ürettiğiyle aynı biçimdedir. Modelin filtre olarak ifade edemediği şeyi yaklaştırmaz, reddeder.
Kapsamınız yine geçerlidirFiltre, elle yazılmış bir arama ile aynı müşteri ve hesap sınırlarından geçer. Daraltılmış bir hesap, soru sorarak kendi sınırının dışına çıkamaz.
Okumalar diğerleri gibi kaydedilirAsistanın çalıştırdığı bir arama da aramadır ve kullandığı filtreyle birlikte İzi kim okudu listesinde görünür.
İsteğe bağlıdırAnahtar tanımlanmamışsa asistan yoktur ve panelin geri kalanı tam olarak eskisi gibi çalışır. Yanındaki haftalık özet ise kendi son dört haftanız üzerinde düz aritmetiktir; hiçbir modele ihtiyaç duymaz.
Model sizin modeliniz olabilirAssistant__Provider değerini OpenAiCompatible, Assistant__Endpoint değerini de bu biçimi konuşan herhangi bir uca verin — Ollama, vLLM, LM Studio, Azure OpenAI, OpenAI’nin kendisi. Sorusunu üçüncü bir tarafa gönderemeyen bir kurulum, soru kutusundan vazgeçmek yerine onu kendi ağındaki bir modelle çalıştırabilir.

Açmak için Assistant__ApiKey içine bir sağlayıcı anahtarı tanımlayın. Olaylarınız eğitim için kullanılmaz; istem yalnızca sorunuzu ve müşterinizdeki kaynak türlerinin listesini taşır — kayıtların kendisini asla. Provider OpenAiCompatible ise uç yalnızca bir temel adres olabilir; /chat/completions sizin için eklenir.

Kimse kullanmadan önce sınayın

Modeline ulaşamayan bir soru kutusu yalnızca "asistana ulaşılamadı" der, fazlasını söylemez — söyleyemez de, çünkü sebebi sayfada yazmak yapılandırmanızı soruyu yazan herkese vermek olurdu. Geriye birbirinden ayırt edilemeyen dört arıza kalır: iptal edilmiş anahtar, sağlayıcının emekliye ayırdığı model adı, öteki biçimi konuşan bir uç, çalışma alanı belirtilmemiş bir kurum anahtarı. Sebebin yaşadığı yer reldavi assistant-check komutudur. Beş soru sorar — ikisi sıradan, biri Türkçe, ikisi modeli işinden caydırma denemesi — her biri için seçilen filtreyi yazar; başarısızlıkta ise ucun kendi sözlerini olduğu gibi aktarır.

reldavi assistant-check --key "$RELDAVI_ASSISTANT_KEY" --provider openai --model gpt-4o

Yalnızca modele ulaşılamadığında sıfırdan farklı bir kodla çıkar. Reddetmek başarısızlık değildir: "her şeyi göster" ifadesini filtreye çevirmeyi reddeden bir model, tam da orada olma sebebini yerine getirmiştir. Hazır örnek yerine kendi kaynak türlerinize sormak için --clickhouse ve --tenant ekleyin.

Değişikliğin içinde arama

Her denetim ürününde her filtre meta veriye göre daraltır: hangi kayıt, hangi kişi, hangi gün. Hiçbiri değişikliğin kendisini sormanıza izin vermez — oysa sorular tam orada başlar. "Bir iskonto yüzde kırkın üstüne çıktı." "Bir durum onaylıdan taslağa geri döndü." "Birinin maaş alanına hiç dokunuldu mu?"

Bir incelemenin başladığı cümleler bunlardır ve bugün bir excel çıktısında ve birinin öğleden sonrasında biterler. Reldavi değişiklik kümesini satırın üzerinde JSON olarak saklar; yani adlandırılmış bir özellik üzerindeki koşul, diğer her şeyle aynı sorguda tek bir predicate’tir.
Değişikliğin içine bak Değişikliğin içine bak Özellik İskonto Karşılaştırma şundan büyükse Taraf yeni değer Değer 40 3 kayıt Sipariş A-1042 İskonto 10 45 Sipariş A-1180 İskonto 0 60 Sipariş A-1204 İskonto 15 55 Diğer her filtre hangi kayıt diye sorar. Bu, ona ne olduğunu sorar.
Bir özellik, bir taraf, bir karşılaştırmaBeş işleç: hiç değişmişse, tam olarak, içeriyorsa, şundan büyükse, şundan küçükse. Yeni değere ya da eskisine karşı. Kasten bir ifade dili değil küçük bir sözcük dağarcığı — daha zengini, müşteri verisine uzanan bir sorgu dili olurdu ve o, sebebi doğduğunda inşa edilecek bir yüzeydir.
İki koşul bir geçiş ederEski değer "Approved" ve yeni değer "Draft", "ne geri alındı" sorusudur; sorgu API’si liste aldığı için ikisi aynı anda çalışır.
Sayılar sayı kalırKarşılaştırma değeri sayı olarak okur ve "pending" tutan bir özellik sıfır tutan bir özellik değildir — eşleşmez, her eşiğin altında sayılmaz.
Çalışamayan karşılaştırma düşürülür"epeyce çoktan büyük" isterseniz koşul, sessizce her şeyle eşleşen bir şey olarak üretilmek yerine dışarıda bırakılır. Sonuçlar, gerçekten çalışabilen koşulların sonuçlarıdır.
Özellik adı hiçbir zaman ifadeye girmezBir formdan gelir ve parametre olarak geçirilir; bu, dizge birleştirmesi olmayan bir sorgu oluşturucunun sahip olabileceği tek enjeksiyon noktasıydı.

Buradaki en pahalı koşuldur, çünkü indeksli bir sütunu değil bir JSON sütununu okur — mümkünse yanında tarih ya da kaynak türüyle de daraltın. Arayüz bunu filtrenin üzerinde söyler; birinin yavaş bir sayfada keşfetmesini beklemez.

Bir aramadan uyarı üretme

Okumayı hatırlamanız gereken bir denetim kaydı, kimsenin okumadığı bir denetim kaydıdır. Arama yapabildiğiniz her filtre kalıcı bir kurala dönüşebilir: birkaç dakikada bir çalışır ve eşleştiklerini, anomali özetinin kullandığı kanallara gönderir.

Biri yönetici yapıldıiam.user · updated — en çok önem taşıyan ve en az fark edilen değişiklik.
Bir servis hesabı bordroya dokunduhr.payslip · svc-payroll tarafından — otomasyonun kimsenin istemediği bir şeyi yapması.
Faturalamadan bir şey silindibilling.invoice · deleted — denetçinin ilk sorduğu olaylar.
Kaydı bir kontrole dönüştüren şey budur. Tetiklenen bir kural, SOC 2 denetçisinin önleyici-tespit edici kontrol olarak kabul edeceği bir şeydir; yani yalnızca bizim değil, sizin uyum dokümantasyonunuzda yer alır.
Kural bir şeyi daraltmalıdırKoşulsuz bir kural kaydettiğiniz her olayla eşleşir. Form bunu reddeder; bunu gece üçte keşfetmekten iyidir.
Pencere "son seferden beri"dir"Son beş dakika" değil. Geciken bir tarama ya da yeniden başlayan bir süreç, aradaki olayların üzerinden atlamamalıdır.
Geç gelenler beklenirOlaylar tamponlanıp toplu gönderilir; bu yüzden pencere saatin birkaç dakika gerisinde biter. Tam şu ana kadar çalışmak, henüz ulaşmamış olayları atlardı.
Aynı şey iki kez söylenmezBirebir aynı uyarı yeniden gönderilmez. Biri harekete geçene dek her taramada tekrarlayan uyarı, insanların sessize aldığı uyarıdır; sessize alınmış bir kanal hiç olmamasından kötüdür.

Kural genellikle az önce yaptığınız bir aramadır. Denetim izini önemsediğiniz şeyi gösterene kadar daraltın, sonra Bundan haberdar et’i kullanın — filtre taşınır, siz yalnızca ad verirsiniz. Tarihler taşınmaz: arama bir pencere hakkındadır, kural ise bir olay türü hakkındadır ve sürekli çalışır.

Kuralın adı gövdenin başında gelir; çünkü uyarıyı alan kişi telefona bakıyordur ve hangi kayıtlar olduğunu bilmeden önce ne olduğunu bilmesi gerekir. Biçim, herhangi bir satıcının mesaj formatı değil düz JSON’dur; üç satırlık bir akış onu Slack, Teams veya PagerDuty’nin istediği şeye çevirebilir.

{
  "kind": "alert-rule",
  "rule": "Somebody was made an administrator",
  "matchCount": 1,
  "windowFrom": "2026-09-20T09:00:00Z",
  "windowTo":   "2026-09-20T09:05:00Z",
  "matches": [{
    "occurredAt":       "2026-09-20T09:02:11Z",
    "action":           "updated",
    "resourceType":     "iam.user",
    "resourceId":       "USR-9",
    "actorDisplayName": "Ayşe Yıldırım"
  }]
}

Alarmı kendi cümlenizle istemek

Asistan bir soruyu filtreye çevirir ve bir kez çalıştırır. Aynı filtre kalıcı bir kural olabilir — sorarken aslında istediğiniz şey zaten buydu. "Finans dışından biri elli bin lirayı aşan bir faturayı değiştirirse haber ver" bir cümledir; bundan sonra onu gözleyen şey bir filtredir.

Bu, bir dil modelinin bu üründe yaptığı en savunulabilir iş ve sebebi sıralama. Model bir kez, tasarım anında çalışır. Bir filtre önerir, siz filtreyi okursunuz, siz onaylarsınız. O andan sonra tetiklenen şey bir filtredir ve bir daha hiçbir modele danışılmaz — sonraki partide değil, altı ay sonra değil, gecenin üçünde hiç değil.
Bir cümleden kalıcı bir kurala Bir cümleden kalıcı bir kurala Birinin sorduğu model yok
“Finans dışından biri bir faturayı değiştirirse bana haber ver.”
Modelin önerdiği model, bir kez kaynak türü billing.invoice eylem updated aktör finans dışı tarihler düşürüldü Kaydetmeden önce bunları siz kontrol edersiniz. İmzalayan sizsiniz. Bundan sonra çalışan model yok
Her partide değerlendirilen bir filtre. Slack, Teams ya da kendi uç noktanıza düşer.
Model tasarım anında çalışır, karar anında değil. Savunamadığınız bir alarmı susturursunuz.
Cümleyi değil, filtreyi onaylarsınızDerlenen alanlar kaydedilmeden önce gösterilir ve düzenlenebilir. Birinin ne demek istediği uygulanabilir değildir; filtrenin ne adlandırdığı uygulanabilirdir.
Tarihler taşınmazArama bir zaman aralığıyla, kural bir olay türüyle ilgilidir ve sonsuza kadar çalışır. "Geçen salı"yı kalıcı bir şeye taşımak, bir alarmın sessizce hiçbir şeyle eşleşmemeye başlamasının yoludur.
Kural cümleyi hatırlarAltı ay sonra biri bu alarmın neden var olduğunu sorar. "Çünkü 20 Eylül’de biri, finans dışından biri faturayı değiştirirse haber verilmesini istedi" bir cevaptır. Bir filtre alanları kümesi değildir.
Hiçbir şeyi daraltmayan kural reddedilirKaydettiğiniz her olayla eşleşirdi. Hayır diyen bir form ile gecenin üçünde çalan bir çağrı cihazı arasındaki fark budur.

Model anahtarınız yoksa da hiçbir şey eksilmez — kural formu yerinde durur ve herhangi bir aramadaki Bunu bana bildir onu aynı şekilde doldurur. Asistan, aynı forma giden daha hızlı bir yoldur; ikinci bir mekanizma değil.

Sırada ne okunur

Bir yerde takıldınız mı?

Şema, SDK kaynakları ve mimari notların tamamı açıktır. Bir şey belirsizse, bu bizim dokümantasyonumuzdaki bir hatadır. Bize yazın.