RBN Core - Framework v0.9.7 76 belge

Packages/RbnPipeline — yapay zekâ içerik hattı (prompt kuralları, preset'ler, otomasyon)

Doğrulanan kod tabanı: d49b4413 (dal feat/fw-license-master) · Tarih: 2026-10-05 · Yayın: 0.9.7 = bu commit + sonrası; belge yalnız doğrulama anındaki kodu anlatır
Kaynak klasör: Packages/RbnPipeline/ — 31 *.php
(3 Builders/ + 3 Builders/Tasks/ + 4 Concerns/ + 2 Contracts/ +
6 Presets/ + 3 Rules/Blog/ + 7 Rules/Prompt/ + 1 Rules/Youtube/ + 2 Services/).
Envanter: 31 dosyanın 31'i aşağıda anlatıldı.
Bu paket spek eşiğini (≥20 php) aştığı için alt dal belgeleri de üretildi:
Rules.md.

1. Ne işe yarar, kim kullanır

"RSS/Trends'ten haber al → yapay zekâ ile metin üret → görsel üret → taslak
kaydet → yayınla → sosyal medyaya dağıt" zincirinin tamamıdır. Tasarım
kural tabanlıdır: her beceri (Rules/) küçük bir sınıftır, her hazır
kombinasyon (Presets/) bu kuralları birleştirir, PromptBuilder hepsini
tek metne derler.

Kimler çağırır: cron/queue motoru → Builders/Tasks/* (görev sınıfları) →
AbstractTaskBuilder::autopilot() → Services/AutoTaskManager.php ve
Services/ExternalFetchManager.php (PackageData.php:44).

2. Alt klasör haritası

Alt klasör *.php İçerik
Builders/ 3 PromptBuilder + iki soyut taban
Builders/Tasks/ 3 Somut görev inşacıları
Concerns/ 4 Paylaşılan trait'ler (çözümleme, temizleme, yaşam döngüsü)
Contracts/ 2 İki arayüz
Presets/ 6 Hazır kural kombinasyonları
Rules/ 11 Kural sınıfları (Blog/ 3, Prompt/ 7, Youtube/ 1) — ayrıntı Rules.md
Services/ 2 AutoTaskManager, ExternalFetchManager

3. Klasör/dosya envanteri (31/31)

3.1 Builders/ (3)

Dosya Görev Önemli public yöntemler
Builders/PromptBuilder.php Sıvı (fluent) inşacı: kuralları + görev metnini derler ve yanıtı temizler. reset(), applyRule(PromptRuleInterface $rule), json(?array $schema = null), seo(), image(), imagePrompt(), innerLinking(), blogStructure(), writingTone(), identity(), contentQuality(), preset(string $name, array $context = []), youtube(), task(string $taskInstruction), withContext(array $context), compile(), sanitize(string $response)
Builders/AbstractPresetBuilder.php Ortak şema ve zenginleştirme sağlayan preset tabanı. — (soyut; alt sınıflar apply() uygular)
Builders/AbstractTaskBuilder.php Tüm otomatik görev inşacılarının şablonu: yaşam döngüsü doğrulaması, cron zaman eşleşmesi, günlük kota, AI/görsel/yayın kısayolları. autopilot(array $params = []) (:37), abstract protected executeAutopilot(array $params): array (:29), protected: getProjectKey(): string (:75), resolveCandidate(array $params = []): array (:87), buildContext(array $extraContext = []): array (:142), generateText(...) (:249), savePost(...) (:274), generateImage(...) (:288), finalizePost(...) (:308), finishTask(...) (:350)

3.2 Builders/Tasks/ (3)

Dosya Görev Önemli public yöntemler
Builders/Tasks/BaseContentTaskBuilder.php Tüm metin/ içerik görevlerinin 6 adımlı standart boru hattı. — (soyut; executeAutopilot() uygular)
Builders/Tasks/ContentTaskBuilder.php Standart içerik görevi (en ince somut sınıf). —
Builders/Tasks/ContentRewriteTaskBuilder.php Yeniden yazım (rewrite) görevi. —

3.3 Concerns/ (4)

Dosya Görev Önemli public yöntemler
Concerns/AutoTaskTrait.php Tüm otomatik görevler için ortak yaşam döngüsü: proje anahtarı, günlük yayın sayacı, yayınlama, önbellek temizleme, yayın bağlantısı çözümü. getProjectKey(?string $key = null, bool $throwOnEmpty = false), getTodayPublishedCount(array $params), publishPost(int $postId, string $modelAlias), clearSitemapCache(), clearFeedCache(), clearContentCache(), resolvePublishedPostLink(?string $projectKey = null, string $typePrefixOrUrl = '', string $postSlug = '', string $categorySlug = '', bool $asHtmlLink = true)
Concerns/PipelineResolverTrait.php Kaynak kipi çözümü, taslak/RSS havuzu, kategori eşleme, dengeli aday seçimi, kara liste GUID çözümü. resolveCategories(mixed $categoriesOrModel = null, mixed $selectedId = null, ?array $candidateRes = null, bool $returnSlug = false), resolveRecentPosts(mixed $postModelOrName = null, int $limit = 50), fetchDraftCandidate(array $params), getNextBalancedItem(array $candidates, array $posts = [], array $categories = []), resolveGuidsForBlacklist(array $candidateRes, array $newsData = [])
Concerns/PipelineSanitizerTrait.php AI yanıtı normalizasyonu, SSS temizleme, HTML temizliği, mevcut bağlantıların AI için biçimlenmesi. normalizeAiResponse(array $aiResult), formatFaqs($faqsRaw), formatExistingLinksForAi(array $rawPosts, array $categoryMap = [], string $type = 'blog')
Concerns/SanitizesResponseTrait.php Markdown JSON sarmalayıcı sökme, iç içe çözme, kontrol karakteri temizliği, kaçırılmamış tırnak onarımı, dizi çözme. cleanJsonWrapper(string $rawText), repairJson(string $json), extractBalancedJson(string $text)

3.4 Contracts/ (2)

Dosya Görev Önemli public yöntemler
Contracts/PromptRuleInterface.php Modüler kural sözleşmesi. compileInstructions(array $context = []): string, sanitizeResponse(string $response, array $context = [])
Contracts/PromptPresetInterface.php Yeniden kullanılabilir preset sözleşmesi. apply(PromptBuilder $builder, array $context = [])

3.5 Presets/ (6)

Dosya Görev Önemli public yöntemler
Presets/BlogPreset.php Blog/makale standart kural kümesi. apply(PromptBuilder $builder, array $context = [])
Presets/NewsPreset.php Haber / RSS standart kümesi. apply(PromptBuilder $builder, array $context = [])
Presets/TrendsPreset.php Google Trends tabanlı üretim kümesi. apply(PromptBuilder $builder, array $context = [])
Presets/YoutubePreset.php YouTube senaryosu kümesi. apply(PromptBuilder $builder, array $context = [])
Presets/ImagePreset.php Doğrudan görsel üretimi için temiz küme. apply(PromptBuilder $builder, array $context = [])
Presets/CustomPreset.php Anında uygulanan özel kural kümesi. apply(PromptBuilder $builder, array $context = [])

3.6 Rules/ (11) — ayrıntılı liste Rules.md

Dosya Görev (tek cümle)
Rules/Prompt/JsonResponseRule.php JSON biçimlendirme ve otonom onarım kuralı.
Rules/Prompt/SeoMetaRule.php SEO meta alanları, anahtar öbekleri ve otonom yedek üretimi.
Rules/Prompt/ImagePromptRule.php Imagen 3 için İngilizce/Türkçesiz karakterden arındırılmış görsel prompt'u.
Rules/Prompt/ImageSafetyRule.php Görsel prompt güvenlik sınırları ve yasaklı kelimeler.
Rules/Prompt/ImageCompilerRule.php Standart stil şablonlarıyla temiz görsel prompt derlemesi.
Rules/Prompt/WritingToneRule.php Projeye özel yazım tonu, anlatıcı bakış açısı, marka kişiliği.
Rules/Prompt/IdentityRule.php Proje kimliği ve özel persona kurallarını dinamik kurar.
Rules/Blog/BlogStructureRule.php Blog makalesi için standart HTML yapısı, uzunluk, alıntı, SSS.
Rules/Blog/ContentQualityRule.php Makine kalitesi ("AI slop") karşıtı ana kalıcı.
Rules/Blog/InnerLinkingRule.php Katı üst sınırlı dinamik iç bağlantılandırma.
Rules/Youtube/YoutubeScriptRule.php YouTube senaryosu standartları.

3.7 Services/ (2)

Dosya Görev Önemli public yöntemler
Services/AutoTaskManager.php Yayın hattının yürütücüsü: metin üretimi, taslak kaydetme, görsel üretimi, yayınlama, sosyal dağıtım. generateText(string $type, string $title, array $context = [], $taskLog = null) (:23), saveDraftPost(string $modelAlias, array $postData, ?array $draft = null, $taskLog = null, array $taskParams = []) (:89), generateAndSavePostImage(string $prompt, string $type, $taskLog = null, array $context = [], ?int $postId = null, ?string $modelAlias = null) (:194), finalizeAndPublishPost(int $postId, string $modelAlias, string $categorySlug, string $postSlug, string $typePrefix, $taskLog = null, $guids = null, ?string $projectKey = null) (:250), dispatchSocialShares(int $postId, string $modelAlias, string $publishedUrl, $taskLog = null, ?string $projectKey = null) (:386)
Services/ExternalFetchManager.php Dış kaynak (Trends/RSS) aday toplama, tekilleştirme, kara liste ve mevcut içerik karşılaştırması. fetchTrendsCandidate(array $params), fetchRssCandidate(array $params), filterUniqueCandidates(array $candidates, string $projectKey, string $modelAlias, string $type = 'generic'), getBlacklistedGuids(string $projectKey), getExistingGuids(string $modelAlias, string $projectKey), getPublishedTitles(string $modelAlias, int $limit = 200), blacklistCandidate(string $projectKey, string $guid, string $title = '')

Kapsama: 31/31.

4. Akış

4.1 Otomatik görev (cron → yayın)

Cron/queue motoru → ContentTaskBuilder::autopilot($params)   AbstractTaskBuilder.php:37
 ├─ 1) category_type türetilir (params → preset adı)          :45-51
 ├─ 2) ZORUNLU parametre denetimi                             :54-59
 │     project_key yok  → CronTaskException::missingParameter
 │     local_model yok  → CronTaskException::missingParameter
 ├─ 3) executeAutopilot($taskParams)                          :62
 │     ├─ resolveCandidate()                        (1. adım) :87
 │     │    ├─ source 'trends' → fetchTrendsCandidate()       :105-106
 │     │    ├─ source 'rss'    → fetchRssCandidate()          :107-108
 │     │    ├─ hiçbiri değilse fetchDraftCandidate()          :111-113
 │     │    └─ aday yoksa → CronTaskException::candidateNotFound  :115-121
 │     │        (taskLog->skipped() ile "atlandı" olarak loglanır)
 │     ├─ buildContext()                             (2. adım) :142
 │     │    taskParams + generation_options + categories + eski haberler
 │     ├─ generateText()   → service('app.gemini')            :249
 │     │    AutoTaskManager::generateText()                   AutoTaskManager.php:23
 │     │    ├─ yayınlanmış yazılar + kategoriler bağlama eklenir  :41-61
 │     │    ├─ $geminiApp->generateText($type,$title,$context)   :64
 │     │    ├─ normalizeAiResponse()                              :73
 │     │    └─ formatFaqs()                                       :76
 │     ├─ generateImage()  → FileService (Packages/RbnFile)  :288
 │     ├─ savePost()       → taslak kayıt                    :274
 │     ├─ finalizePost()   → publishPost()                   :308
 │     │    ├─ publishPost()                                   AutoTaskManager.php:263
 │     │    ├─ clearSitemapCache() / clearFeedCache() / clearContentCache()  :316-318
 │     │    └─ resolvePublishedPostLink(..., asHtmlLink=false)               :371
 │     └─ dispatchSocialShares() → Facebook + Instagram       :376, 386
 └─ CronTaskException yakalanır → success=true + status döner  :63-69

Kritik davranış: CronTaskException hata değildir; görev "atlandı"
olarak başarıyla kapanır (success=true, status dolu) — böylece cron
motoru bunu hata saymaz (:63-69).

4.2 Prompt derleme

PromptBuilder
 ├─ json($schema)?  → JsonResponseRule (aynı sınıf ikinci kez eklenmez)
 │                    applyRule() sınıf bazlı tekilleştirme yapar  PromptBuilder.php:28
 ├─ seo() / image() / innerLinking() / …  → ilgili kural sınıfı
 ├─ preset('blog') → BlogPreset::apply($this)   (kuralları tek tek ekler)
 ├─ task('...')    → görev metni
 ├─ withContext([...]) → context
 ├─ compile()      → kuralların compileInstructions() + görev metni
 └─ sanitize($response) → kuralların sanitizeResponse() zinciri

4.3 Dış kaynak aday toplama

ExternalFetchManager::fetchRssCandidate($params)
 ├─ service('rssParser')->parse($url)            RbnUtility
 ├─ getBlacklistedGuids($projectKey)              → daha önce işlenenler
 ├─ getExistingGuids($modelAlias, $projectKey)    → sitede yayınlananlar
 ├─ getPublishedTitles($modelAlias, 200)          → başlık benzerliği
 └─ filterUniqueCandidates($candidates, ...)      → kalan adaylar

5. Yapılandırma / ayar anahtarları

Anahtar / parametre Yer Varsayılan / not
project_key AbstractTaskBuilder.php:54 Zorunlu; yoksa CronTaskException::missingParameter
local_model :57 Zorunlu; "tek ve gerçek model parametresi" standardı (:53)
category_type / content_type :45-51 Verilmezse preset/type adından türetilir
source :100 Varsayılan 'draft'; trends ve rss özel dallar
generation_options :144 buildContext() içinde görev parametreleriyle birleştirilir
image_prompt_mode PromptBuilder.php:62 'metadata' — imagePrompt() bu context'i ekler
Günlük kota AutoTaskTrait::getTodayPublishedCount() autopilot() yaşam döngüsü denetiminde kullanılır

6. Tuzaklar ve kurallar

  1. Aynı kural iki kez eklenmez. applyRule() sınıf adına göre tekilleştirir
    (PromptBuilder.php:30) — image() ve imagePrompt() aynı
    ImagePromptRule sınıfını ekler, ikinci çağrı yok sayılır.
  2. Aday bulunamazsa hata fırlatılmaz. CronTaskException::candidateNotFound
    atılır ve autopilot() bunu success=true + status ile karşılar
    (:115-121, :63-69). Bu, "bugün yeni içerik yok" durumunu hata gibi
    göstermemenin yoludur.
  3. Zorunlu parametre denetimi baştan yapılır (:54-59); yarım kalan
    görev yarım içerik üretmez.
  4. Kategori hiyerarşisi: görev içinde category_type açıkça verilmişse
    o kazanılır; verilmemişse preset adından türetilir (:45-51).
  5. Yayın sonrası üç önbellek temizlenir — sitemap, feed, içerik
    (AutoTaskManager.php:316). Biri unutulursa yeni yazı sitemap'te
    görünmez.
  6. resolvePublishedPostLink(..., $asHtmlLink) bayrağı belirleyicidir:
    false ile ham URL alınır ve sosyal caption'a konur (:371).
  7. JSON onarımı merkezidir: SanitizesResponseTrait::cleanJsonWrapper/ repairJson/extractBalancedJson tüm framework'te tek kopyadır; kural
    sınıfları kendi kopyasını yazmaz, bu trait'i kullanır.
  8. ContentQualityRule "AI slop" karşıtıdır; metin üretimi sonrası
    sanitize aşamasında devreye girer — üretilen içeriği olduğu gibi
    yayınlamak bu kuralın varlık nedenidir.

7. Örnek (gerçek koddan)

// Prompt derleme
$prompt = $this->builder('prompt')
    ->json(['baslik' => 'string', 'icerik' => 'string'])
    ->seo()
    ->blogStructure()
    ->identity()
    ->preset('blog', $context)
    ->task('Türkçe bir blog yazısı yaz.')
    ->withContext($context)
    ->compile();

$metin = $prompt->sanitize($aiYanit);

8. İlgili belgeler

  • RbnPipeline/Rules.md — 11 kural sınıfının ayrıntılı listesi
  • PackageData.md — rules.*, presets.*, builders.* kayıt adları
  • RbnApi.md — app.gemini, FacebookService, InstagramService, rssParser tüketicisi
  • RbnUtility.md — RSS ve Google Trends kaynakları
  • RbnFile.md — görsel üretimi sonrası depolama
  • Core/Services (../Core/Services/) — cron/queue motoru (⏳ ayrı görev; belgesi henüz yazılmadı)