Blog yazılarımın ilk taslağını çoğu zaman Claude ile çıkarıyorum. Bilgi doğru geliyor, yapı da düzgün oluyor. Ama metni okuyan biri birkaç paragraf sonra fark ediyor: her bölüm bir özet cümlesiyle bitiyor, araya da İngilizceden kalma uzun tireler giriyor. Bunu her yazıda elle düzeltmek yerine Claude Code'a bir kere öğretmeye karar verdim.
Bu yazıda kurduğum düzeni adım adım anlatıyorum. İşe hazır bir skill'i kurup Türkçeye uyarlayarak başladım. Yayından önce çalışan küçük bir Python betiğini de sonradan ekledim. Komutların ve dosyaların hepsi aşağıda, kopyalayıp kullanabilirsiniz.
Kalıpların kaynağı: Wikipedia'nın listesi
Wikipedia editörleri, yapay zekayla yazılmış maddeleri ayıklamak için Signs of AI writing adında bir sayfa tutuyor. Sayfada önemi şişiren cümlelerden "sadece X değil, Y de" yapısına, her şeyi üçlü sıralamaktan kalın etiketli listelere kadar onlarca işaret var. Her biri gerçek maddelerden alınmış örneklerle anlatılıyor.
Sayfanın en baştaki uyarısı da önemli. Bu işaretlerin hiçbiri tek başına kanıt sayılmaz, insanlar da böyle yazabiliyor. Yapay zeka tespit araçlarının hata payı yüksek, insanların sezgisi de tesadüften pek iyi değil. Ben listeyi kötü yazı alışkanlıklarının bir kataloğu olarak okuyorum, kimin ne kullandığını yakalamak için bir araç olarak görmüyorum.
Claude Code'da skill nasıl çalışıyor?
Skill, Claude'un ihtiyaç duyduğunda yüklediği bir talimat paketi. En basit hali tek bir SKILL.md dosyası. Dosyanın başındaki açıklamaya bakarak Claude, skill'i ne zaman kullanacağına kendisi karar veriyor. İsterseniz /skill-adi yazarak elle de çağırabiliyorsunuz.
Claude Code skill'leri iki yerde arıyor:
~/.claude/skills/<skill-adi>/SKILL.md # bütün projelerde geçerli
<proje>/.claude/skills/<skill-adi>/SKILL.md # yalnızca o projede geçerliBen kendi yazılarım için kişisel klasörü kullanıyorum, çünkü blog taslaklarını farklı klasörlerde yazıyorum.
Hazır humanizer skill'ini kurmak
GitHub'da Wikipedia listesini temel alan açık kaynaklı bir skill var: blader/humanizer. MIT lisanslı ve tek bir SKILL.md dosyasından oluşuyor, içinde çalışan bir kod yok. Kurmanın birkaç yolu var.
Claude Code'un plugin sistemiyle kurmak için oturumun içine şunları yazın:
/plugin marketplace add blader/humanizer
/plugin install humanizer@humanizerProjenin README'sine göre bu yol Claude Code 2.1.142 ve sonrasını istiyor. Daha eski bir sürümdeyseniz Skills CLI'ı kullanabilirsiniz:
npx skills add blader/humanizer --global --agent claude-codeBen dosyayı elle kopyalamayı tercih ettim, böylece içinde ne olduğunu kurmadan önce okuyabildim. macOS ya da Linux'ta:
git clone --depth 1 https://github.com/blader/humanizer /tmp/humanizer
mkdir -p ~/.claude/skills/humanizer
cp /tmp/humanizer/SKILL.md ~/.claude/skills/humanizer/Windows'ta PowerShell ile:
git clone --depth 1 https://github.com/blader/humanizer "$env:TEMP\humanizer"
New-Item -ItemType Directory -Force "$env:USERPROFILE\.claude\skills\humanizer"
Copy-Item "$env:TEMP\humanizer\SKILL.md" "$env:USERPROFILE\.claude\skills\humanizer\"Kopyaladıktan sonra skill /humanizer adıyla çağrılabiliyor. Claude Code yeni skill'i genelde hemen görüyor, görmezse oturumu yeniden başlatın. claude.ai'ı tarayıcıdan kullanıyorsanız klasörü ZIP'leyip ayarlardaki Skills bölümünden yükleyebilirsiniz.
İlk deneme için şu kadarı yetiyor:
/humanizer
Bu metni insanlaştır. Anlamı değiştirme, yapay zeka yazımı gibi duran kalıpları temizle:
(metniniz)Kuralı kalıcı hale getirmek
Skill'i her seferinde çağırmak istemiyorsanız, kuralı CLAUDE.md dosyasına yazabilirsiniz. Claude Code bu dosyayı her oturumun başında okuyor. Bütün projeler için ~/.claude/CLAUDE.md, tek bir proje için proje kökündeki CLAUDE.md kullanılıyor.
## Yazım kuralları
- Benim için yazdığın ya da düzenlediğin her metni humanizer skill'inden geçir.
- Anlamı, rakamları, tarihleri ve linkleri olduğu gibi bırak. Yeni bilgi ekleme.
- Benim verdiğim markdown yapısını koru (başlıklar, kalın vurgular, linkler).
- Şüpheli bir bilgi görürsen değiştirme, bana sor.Son madde benim için önemli çıktı. İlk denemelerden birinde Claude, metindeki bir kaynağın PHP ile ilgisiz bir ürünü andığını fark edip bana sordu. Kuralda bu madde olmasaydı cümleyi sessizce "düzeltebilirdi".
Türkçeye uyarlamak
Hazır skill İngilizce örneklerle yazılmış. Kalıpların çoğu Türkçede de karşılığını buluyor ama bazıları farklı davranıyor. Uzun tire buna iyi bir örnek: İngilizcede pek çok editör kullandığı için zayıf bir işaret, Türkçede ise neredeyse hiç kullanılmadığı için çok güçlü. Kıvrık tırnak tam tersi, Türkçe tipografide zaten doğru kullanım bu.
Uyarlamayı üç mesajla yaptım. İlki Claude'a listeyi okutup Türkçe karşılıklarını çıkarttırmak:
https://en.wikipedia.org/wiki/Wikipedia:Signs_of_AI_writing sayfasını incele.
Yapay zeka yazımını ele veren kalıpların hepsini tek tek listele.
Her kalıp için kısa bir Türkçe örnek ver. Sonra bu kalıpların Türkçe
metinlerde nasıl göründüğünü ayrıca yaz (uzun tire, "Sonuç olarak"
kapanışı, gereksiz şapkalı harf, her şeyi üçlü sıralama gibi).Çıkan Türkçe listede ilk bakışta akla gelmeyen maddeler de vardı. "Hizmet vermektedir", "önemli bir rol oynamaktadır" gibi "-dır" demekten kaçan süslü fiiller bunlardan biri. "Günün sonunda", "oyunun kurallarını değiştiren" gibi İngilizceden çevrilmiş kalıplar da listeye girdi.
İkinci mesajda bu listeyi yasakladım ve hemen bir deneme istedim:
Bu listedeki kalıpların hiçbirini artık kullanma. Bunu kural olarak kabul et.
Kısa bir deneme yap: aşağıdaki metni bu kurallara göre yeniden yaz ve
hangi kalıpları temizlediğini madde madde göster.
(eski bir blog yazınız)Deneme metni olarak kendi eski yazılarımdan birini verdim. Neyin değiştiğini madde madde görmek, kuralların nerede fazla sert, nerede yetersiz kaldığını anlamamı sağladı.
Kendi skill'inizi paketlemek
Kurallar oturduktan sonra onları ayrı bir skill olarak paketledim. Claude Code'da bunun için skill-creator skill'i var, ona şöyle bir istek vermek yetiyor:
skill-creator ile "insan-yazisi" adında bir skill oluştur. Bu konuşmada
belirlediğimiz yasak kalıpları, ton kurallarını ve önce/sonra örneklerini
içersin. Türkçe blog yazılarımı ve sosyal medya metinlerimi düzenlerken
kullanılsın.Elle yazmak isterseniz iskelet şuna benziyor:
---
name: insan-yazisi
description: Türkçe metinleri yapay zeka yazım kalıplarından temizler. Blog yazısı, sosyal medya metni ya da taslak düzenlerken kullan.
---
# İnsan yazısı
Metnin anlamını, rakamlarını ve linklerini değiştirme. Yeni bilgi ekleme.
## Yasak kalıplar
- "Sadece X değil, Y de" ve "X değil, Y" yapıları
- Uzun tire (— ve –)
- "Sonuç olarak", "Özetle", "Kısacası" ile biten paragraflar
- Her şeyi üçlü sıralamak
- "hizmet vermektedir", "rol oynamaktadır" gibi süslü fiiller
- Gereksiz şapka: lâzım, lâkin, kâtip
## Ton
- Birinci şahıs. Kısa ve uzun cümleler karışık.
- "-dır" rahatça kullanılabilir, "-mektedir" yığılmasın.
## Çıktı
Önce düzeltilmiş metin, ardından temizlenen kalıpların kısa listesi.name alanı küçük harf ve tire ile yazılmalı, klasör adıyla da aynı olmalı. description alanı Claude'un skill'i ne zaman açacağını belirlediği için, hangi durumlarda kullanılacağını açıkça yazmak işe yarıyor.
Önce ve sonra
Kendi yazılarımdan iki gerçek örnek:
- Neredeyse herkes yedek alır. Çok az kişi o yedeği geri yüklemeyi denemiştir.
- Denenmemiş bir yedek, ihtiyaç anında çalışmayabilecek bir yedektir.
+ Neredeyse herkes yedek alır, ama çok az kişi o yedeği geri yüklemeyi denemiştir.
+ Denenmemiş bir yedeğin ihtiyaç anında çalışıp çalışmayacağını bilemezsiniz.
- Şifreler ve API anahtarları kod deposunda değil, ortam değişkenlerinde.
+ Şifreler ve API anahtarları ortam değişkenlerinde duruyor, kod deposuna hiç girmiyor.İlk örnekte son cümle, bir önceki cümleyi vecize kılığında tekrar ediyordu. İkincisi daha ince bir düzeltme. Anlam aynı kalıyor, "X değil, Y" kalıbının yerini düz bir anlatım alıyor.
Son kontrolü bir betiğe bırakmak
Kelime düzeyindeki kalıpları yakalamak için Claude'a bile ihtiyaç yok. Yayından önce çalıştırdığım küçük bir Python betiği yazdım. Dış bağımlılığı yok, Python 3.8 ve sonrasıyla çalışıyor:
#!/usr/bin/env python3
"""Türkçe bir metinde yapay zeka yazım kalıplarını satır satır işaretler."""
import re
import sys
from pathlib import Path
KALIPLAR = {
"uzun tire": r"[—–]",
"sadece X değil": r"\b(sadece|yalnızca|sırf)\b[^.!?]{0,80}?\bdeğil",
"özet kapanışı": r"\b(sonuç olarak|özetle|kısacası)\b",
"sahneleme": r"(kısa cevap şu|peki ama neden|işte püf noktası|gelin (birlikte )?inceleyelim|hadi başlayalım)",
"boş açılış": r"(\bgünümüzde\b|hızla (gelişen|değişen) dünya)",
"süslü fiil": r"(hizmet vermekte|rol oynamakta|öneme sahip|konumunda)",
"yapay zeka kelimesi": r"\b(kapsamlı|derinlemesine|eşsiz|büyüleyici|yolculu|ekosistem|sinerji|gözler önüne)\w*",
"gereksiz şapka": r"\b(lâzım|lâkin|kâtip)\w*",
}
def turkce_kucult(metin: str) -> str:
# str.lower() "İ" harfini "i̇" yapar ve eşleşmeyi bozar, önce elle çeviriyoruz.
return metin.replace("İ", "i").replace("I", "ı").lower()
def tara(yol: Path) -> int:
bulgu = 0
satirlar = yol.read_text(encoding="utf-8").splitlines()
for no, satir in enumerate(satirlar, start=1):
kucuk = turkce_kucult(satir)
for ad, desen in KALIPLAR.items():
for eslesme in re.finditer(desen, kucuk):
bulgu += 1
parca = satir[eslesme.start():eslesme.end()]
print(f"{yol.name}:{no} [{ad}] {parca}")
return bulgu
if __name__ == "__main__":
sys.stdout.reconfigure(encoding="utf-8") # Windows konsolunda Türkçe karakterler bozulmasın
if len(sys.argv) < 2:
sys.exit("Kullanım: python kalip_tara.py yazi.md [yazi2.md ...]")
toplam = sum(tara(Path(dosya)) for dosya in sys.argv[1:])
print(f"\n{toplam} olası kalıp bulundu.")
sys.exit(1 if toplam else 0)turkce_kucult fonksiyonu küçük ama gerekli. Python'un lower() metodu Türkçeyi bilmiyor: "İ" harfini noktalı bir "i" ile birleşik bir karaktere çeviriyor, "I" harfini de "ı" yerine "i" yapıyor. Bu fonksiyon olmadan "İşte" gibi büyük harfle başlayan kelimeler düzenli ifadelerle eşleşmez.
Çalıştırmak için:
python kalip_tara.py taslaklar/yeni-yazi.mdÖrnek çıktı:
yeni-yazi.md:1 [boş açılış] Günümüzde
yeni-yazi.md:1 [süslü fiil] rol oynamakta
yeni-yazi.md:2 [sadece X değil] sadece bir uygulama değil
yeni-yazi.md:3 [uzun tire] —
4 olası kalıp bulundu.Betik bir şey bulduğunda 1 koduyla çıkıyor. Yazılarınızı bir Git deposunda tutuyorsanız bunu pre-commit kancasına ya da CI adımına bağlayabilirsiniz, kalıp içeren bir taslak yayına çıkmadan durur.
Betiğin sınırını da bilmek lazım. Düzenli ifade anlamı anlamaz. "Günümüzde" kelimesi bazen gayet yerinde kullanılır, betik bunu yine işaretler. Üçlü sıralama ya da tekrar eden kapanış cümleleri gibi yapısal kalıpları da göremez. O kısım hâlâ humanizer'ın ve sizin işiniz.
Beklentiyi doğru kurmak
Bu düzen metni yapay zeka dedektörlerinden geçirmeyi garanti etmiyor ve ben de onun için kurmadım. Wikipedia'nın da belirttiği gibi dedektörler yanılıyor, iyi yazılmış insan metnini de yapay zeka sanabiliyorlar. Benim derdim okurun takılmadan okuyabildiği bir metin.
Okul ödevi ya da kuralları yapay zeka kullanımını yasaklayan bir iş söz konusuysa durum farklı. Metni insanlaştırmak, o kuralları delmek için bir bahane olmamalı.
Skill ne kadar iyi olursa olsun, yayından önce metni bir kez sesli okuyorum. Kulağa tuhaf gelen bir cümle, genelde gözden kaçmış bir kalıp taşıyordur.
Cantürk Çelikok
Ankara'da freelance full stack yazılım geliştirici. PlusTurk, Nerdesin, Ayda POS ve Songnaria Coffee gibi canlı ürünleri uçtan uca geliştirdi; burada bu projelerden çıkan notları paylaşıyor.
