چگونه یک نردبان کیفیت محتوای سه سطحی ساختم

مقیاس‌پذیری وب‌سایت‌های programmatic دشوار است. اگر برای نوشتن محتوا فقط به هوش مصنوعی تکیه کنید، با از کار افتادن API، سایت شما از کار می‌افتد.

من سه سایت دایرکتوری راه‌اندازی کردم: Top AI Tools، Find Games Like و Open Alternative To. من از یک نردبان محتوای سه سطحی استفاده می‌کنم تا اطمینان حاصل کنم که آن‌ها همیشه اطلاعات را نمایش می‌دهند، حتی بدون اتصال فعال به هوش مصنوعی.

این سیستم از یک ستون واحد در پایگاه داده به نام model_used استفاده می‌کند. این ستون سه سطح کیفیت را ردیابی می‌کند:

  • seeded-from-json: داده‌های پایه از یک فایل. ساختاریافته اما کم‌محتوا است.
  • fallback-template: یک قالب استاندارد که در صورت شکست هوش مصنوعی یا نبود کلید API استفاده می‌شود. از نظر فنی درست است اما فاقد شخصیت (لحن خاص) است.
  • claude-haiku-4-5: وضعیت هدف. این سطح، خلاصه‌های تحریریه با کیفیت بالا و جزئیات دقیق را ارائه می‌دهد.

من از یک پرس‌وجوی (query) خاص SQL برای مدیریت ارتقاها استفاده می‌کنم. اسکریپت به دنبال دو مورد می‌گردد:

  1. ورودی‌های جدیدی که هنوز محتوایی ندارند.
  2. ورودی‌های موجود که فقط دارای محتوای کم‌کیفیت seeded یا fallback هستند.

اسکریپت این موارد را بر اساس محبوبیت مرتب می‌کند. ابتدا صفحاتی را که بیشترین بازدید را دارند ارتقا می‌دهد. این کار تضمین می‌کند که صفحات با ترافیک بالا، بلافاصله بهترین محتوا را دریافت کنند.

این فرآیند کاملاً خودکار و idempotent است. من از الگوی upsert استفاده می‌کنم. اگر ارتقا با موفقیت انجام شود، پایگاه داده محتوای قدیمی fallback را با محتوای جدید هوش مصنوعی جایگزین می‌کند. ستون model_used نیز خودش را به‌روزرسانی می‌کند.

من همچنین از prompt caching شرکت Anthropic استفاده می‌کنم. این کار باعث صرفه‌جویی زیادی در هزینه و توکن‌ها می‌شود. از آنجایی که system prompts من برای هر ورودی یکسان است، اولین فراخوانی باعث آماده‌سازی (prime) حافظه پنهان (cache) می‌شود. ۹۹ فراخوانی بعدی در یک دسته (batch)، با هزینه کمتر از آن حافظه پنهان خوانده می‌شوند.

انتخاب‌های کلیدی معماری:

  • مدیریت خطا: اگر Claude با شکست مواجه شود، سیستم از کار نمی‌افتد. بلکه صرفاً قالب fallback را می‌نویسد و به سراغ مورد بعدی می‌رود.
  • ایمنی سئو: اگر صفحه‌ای اصلاً محتوای مفیدی نداشته باشد، از تگ noindex استفاده می‌کنم. این کار از ایندکس شدن صفحات خالی توسط گوگل جلوگیری می‌کند.
  • ساخت‌های استاتیک (Static builds): من پایگاه داده را برای Astro به فایل‌های JSON صادر می‌کنم. این یعنی حتی اگر پایگاه داده یا API هوش مصنوعی دچار قطعی شود، سایت من آنلاین باقی می‌ماند.

این تنظیمات به من اجازه می‌دهد بدون به خطر انداختن پایداری سایت، با سرعت بالا توسعه دهم.

منبع: https://dev.to/morinaga/how-i-built-a-three-tier-content-quality-ladder-for-programmatic-directory-etl-483