كيف تبني تطبيق character AI: المعمارية والكود وحساب التكلفة

Updated 2026-07-15

تطبيق character AI هو أربعة مكونات موصولة بنقطة نهاية محادثة متوافقة مع OpenAI: system prompt للشخصية، طبقة ذاكرة، بوابة إشراف، وموجّه نماذج. يمكنك إطلاق نموذج أولي عامل في أقل من 200 سطر Python وتشغيله بأقل بكثير من دولار واحد لكل مستخدم نشط شهرياً باختيارات النماذج الصحيحة.

الإجابة السريعة: معمارية المكونات الأربعة

لست بحاجة لتدريب أو ضبط نموذج دقيقاً. كل تطبيق رفيق جاد في السوق اليوم، بما فيها تلك التي تخدم ملايين المستخدمين، هو طبقة تنسيق رقيقة فوق واجهات LLM مستضافة. الشخصية تعيش في الـ prompt وقاعدة البيانات، وليس في الأوزان. باقي هذا الدليل يبني كل مكوّن بكود قابل للتشغيل مقابل نقطة نهاية قياسية متوافقة مع OpenAI، ثم يستعرض حساب tokens حتى تعرف تكلفة مستخدم نشط شهرياً فعلياً قبل الإطلاق.

  • prompt الشخصية: system prompt منظم (500 إلى 1,000 token) يحدد من هي الشخصية وكيف تتحدث.
  • الذاكرة: نافذة متجددة من الجولات الأخيرة بالإضافة إلى ملخص يُحدَّث دورياً، بحيث تستمر المحادثات بعد حد السياق.
  • الإشراف: بوابة عمرية، مصنّف مدخلات، وسياسات محتوى مطابقة للنموذج الذي توجّه إليه.
  • التوجيه: دالة صغيرة تختار نموذجاً رخيصاً للمحادثة العادية ونموذجاً أقوى للمشاهد الطويلة.

المكوّن 1: prompt الشخصية

prompt الشخصية هو المنتج. إنها رسالة system تُرسل مع كل طلب وتحتوي عادة على خمسة أجزاء: الهوية (الاسم، العمر، القصة الخلفية)، سمات الشخصية، أسلوب الكلام مع سطرين أو ثلاثة كأمثلة، قواعد سلوكية صارمة (لا تخرج عن الشخصية أبداً، حافظ على الردود ضمن حد طول)، والسيناريو الحالي. حافظ عليها بين 500 و1,000 token. الشخصيات الأقصر تنحرف؛ والأطول بكثير تستهلك ميزانية الإدخال في كل رسالة ونادراً ما تحسّن الالتزام. خزّن الشخصيات كصفوف في قاعدة بياناتك حتى يتمكن المستخدمون من إنشاء الشخصيات وتعديلها، وهذه هي الحلقة الأساسية لمنتجات على طراز Character.AI. إليك طلب كامل. نفس الشكل يعمل مع أي خادم متوافق مع OpenAI؛ هذا المثال يستخدم نقطة نهاية بوابة متعددة النماذج حتى تتمكن من تبديل النماذج بتغيير سلسلة واحدة:

curl https://api.apisrouter.com/v1/chat/completions \
  -H "Authorization: Bearer $KEAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-v4-flash",
    "messages": [
      {"role": "system", "content": "You are Mira, a sarcastic starship engineer in her 30s. Personality: dry wit, fiercely loyal, hates small talk. Speech style: short technical sentences, occasional teasing. Example: \"The coupling is fried. Again. Did you touch it?\" Rules: never break character, never mention being an AI, keep replies under 120 words."},
      {"role": "user", "content": "Mira, the reactor is making that noise again."}
    ],
    "temperature": 0.9,
    "max_tokens": 300,
    "stream": true
  }'

المكوّن 2: ذاكرة تصمد أمام المحادثات الطويلة

جلسات تطبيقات الرفيق تمتد طويلاً. حزمة ذاكرة من ثلاث طبقات تحافظ على تماسك السياق دون إرسال السجل بأكمله في كل مرة: الطبقة 1 هي النافذة المتجددة: آخر 10 إلى 14 جولة خام، تُرسل كما هي. الطبقة 2 هي الملخص الجاري: كل 20 جولة تقريباً، نموذج رخيص يضغط الرسائل الأقدم في فقرة تتبع الأسماء وحالة العلاقة وخيوط الحبكة المفتوحة. الطبقة 3 هي الحقائق المثبَّتة: تفاصيل مستخدم دائمة (الاسم، التفضيلات، أحداث سابقة يجب أن تتذكرها الشخصية) مستخرجة إلى قاعدة بياناتك ومُدرجة كرسالة system قصيرة. هذا هو التنفيذ الكامل بلغة Python مع OpenAI SDK الرسمي:

ميزانية إدخال واقعية لكل طلب تصل إلى نحو 3,300 token.
فتحة السياقالحجم النموذجيوتيرة التحديث
system prompt الشخصية500 إلى 1,000 tokenثابت لكل شخصية
حقائق المستخدم المثبَّتة100 إلى 200 tokenعند أحداث الاستخراج
الملخص الجاري300 إلى 500 tokenكل ~20 جولة
النافذة المتجددة (12 جولة)~1,800 إلى 2,200 tokenكل رسالة
رسالة مستخدم جديدة~100 tokenكل رسالة
from openai import OpenAI

client = OpenAI(
    api_key="sk-...",
    base_url="https://api.apisrouter.com/v1",
)

def build_context(persona, summary, pinned_facts, recent_turns, user_msg):
    facts = "\n".join(f"- {f}" for f in pinned_facts)
    return [
        {"role": "system", "content": persona},
        *([{"role": "system", "content": f"Facts to remember:\n{facts}"}]
          if pinned_facts else []),
        *([{"role": "system", "content": f"Story so far: {summary}"}]
          if summary else []),
        *recent_turns[-12:],
        {"role": "user", "content": user_msg},
    ]

def refresh_summary(old_turns, prev_summary):
    prompt = (
        "Update this running summary of a roleplay chat. Keep names, "
        "relationship state, and open plot threads. Max 150 words.\n\n"
        f"Current summary: {prev_summary}\n\nNew messages: {old_turns}"
    )
    resp = client.chat.completions.create(
        model="deepseek-v4-flash",
        messages=[{"role": "user", "content": prompt}],
        max_tokens=400,
    )
    return resp.choices[0].message.content

المكوّن 3: الإشراف وسياسات المحتوى

الإشراف في تطبيق رفيق له ثلاث وظائف متمايزة، والخلط بينها هو الخطأ الأكثر شيوعاً عند الإطلاق. أولاً، قيّد جمهورك. إذا كان تطبيقك يسمح بموضوعات خيالية ناضجة، ضعها خلف بوابة عمرية للبالغين واحتفظ بافتراضي منفصل مناسب لكل الأعمار. مراجعة App Store وPlay Store كلتاهما تتحقق من هذا، ومعالجات الدفع تهتم بذلك أيضاً. ثانياً، افحص المدخلات. شغّل تمريرة تصنيف رخيصة على رسائل المستخدم قبل وصولها إلى نموذج الشخصية، مع حظر الفئات التي لا يسمح بها أي مزود: محتوى يتعلق بالقُصَّر، ضرر واقعي موثوق، وتعليمات غير قانونية. استدعاء واحد لـ deepseek-v4-flash بمعيار نعم/لا يكلف جزءاً من السنت ويضيف أقل من ثانية من التأخير. ثالثاً، طابق سياسة المحتوى مع النموذج. المزودون يختلفون بشأن الأعمال الخيالية: سياسة xAI المنشورة تسمح صراحة بالموضوعات الناضجة الخيالية للمستخدمين البالغين، DeepSeek ونماذج أخرى مشتقة من أوزان مفتوحة هي مفضلة المجتمع للعب الأدوار لأن سياساتها المستضافة مرنة تجاه الأعمال الخيالية، بينما سياسة Anthropic تحظر المحتوى الصريح، مما يجعل Claude الخيار الصحيح فقط للكتابة الإبداعية المناسبة لكل الأعمار. فهم هذه السياسات قبل توجيه الحركة يوفر عليك عواصف رفض في الإنتاج. مهما بنيت، يجب أن يحترم شروط خدمة كل مزود تستدعيه.

المكوّن 4: توجيه النماذج ومصفوفة الاختيار

معظم الرسائل في تطبيق رفيق هي جولات قصيرة عادية يتعامل معها نموذج اقتصادي بشكل مثالي. أقلية هي مشاهد عاطفية طويلة أو مقاطع إبداعية حيث جودة النثر هي المنتج. التوجيه حسب عمق المشهد يخفض التكاليف بشكل كبير دون أن يلاحظ المستخدمون:

طابق كل مسار مع نموذج تناسب سياسة محتواه الجمهور الذي يخدمه.
النموذجمعرّف نموذج APIالسعر لكل مليون token (إدخال/إخراج)الملاءمة لتطبيق الرفيق
DeepSeek V4 Flashdeepseek-v4-flash$0.126 / $0.252نموذج المحادثة الافتراضي. مفضل المجتمع للعب الأدوار، أفضل قيمة في الكتالوج.
DeepSeek V4 Prodeepseek-v4-pro$0.3915 / $0.783مشاهد أطول، اتباع أقوى للتعليمات، لا يزال رخيصاً.
GLM-5glm-5$0.514 / $2.314خيار قيمة بكتابة إبداعية قوية.
Kimi K2.6kimi-k2.6راجع /pricingخيار قيمة لجلسات السياق الطويل. MiMo خيار اقتصادي مشابه.
grok-4.5grok-4.5$1.60 / $4.80موضوعات خيالية ناضجة للمستخدمين البالغين بحسب سياسة xAI المنشورة. نافذة سياق 500K.
Claude Sonnet 4.6claude-sonnet-4-6$2.40 / $12.00أعلى جودة نثر. كتابة إبداعية مناسبة لكل الأعمار فقط؛ Anthropic تحظر المحتوى الصريح.
Gemini 3.5 Flashgemini-3.5-flash$1.20 / $7.20سريع، جيد لميزات واعية بالصور مثل ردود فعل الصور الرمزية.
ROUTES = {
    "casual": "deepseek-v4-flash",
    "scene": "deepseek-v4-pro",
    "prose": "claude-sonnet-4-6",  # كتابة إبداعية مناسبة لكل الأعمار فقط
}

def pick_model(user_msg: str, turns_in_scene: int) -> str:
    if turns_in_scene > 6 or len(user_msg) > 400:
        return ROUTES["scene"]
    return ROUTES["casual"]

كم يكلف المستخدم النشط شهرياً فعلياً

حساب tokens قبل الإطلاق أفضل من مفاجأة فوترة بعده. باستخدام ميزانية السياق من جدول الذاكرة: نحو 3,300 token إدخال و250 token إخراج لكل رسالة. مستخدمو تطبيقات الرفيق كثيفو الاستخدام؛ الأرقام المُبلَّغ عنها من المجتمع تضع المستخدمين المتفاعلين عند عشرات الرسائل يومياً، لذا افترض نحو 40 رسالة يومياً عبر 20 يوماً نشطاً، أو نحو 800 رسالة لكل مستخدم نشط شهرياً. هذا يعطي 2.64 مليون token إدخال و0.2 مليون token إخراج لكل مستخدم نشط شهرياً. بضرب ذلك بأسعار الكتالوج:

يفترض 3,300 token إدخال + 250 token إخراج لكل رسالة، ~800 رسالة لكل مستخدم نشط شهرياً.
النموذجتكلفة الإدخال / مستخدم نشط شهرياًتكلفة الإخراج / مستخدم نشط شهرياًالإجمالي / مستخدم نشط شهرياً
deepseek-v4-flash$0.33$0.05$0.38
deepseek-v4-pro$1.03$0.16$1.19
glm-5$1.36$0.46$1.82
gemini-3.5-flash$3.17$1.44$4.61
grok-4.5$4.22$0.96$5.18
claude-sonnet-4-6$6.34$2.40$8.74
gpt-5.5$10.56$4.80$15.36

نقطة نهاية واحدة لكل نموذج في المصفوفة

التسجيل في خمسة حسابات لمزودين لتشغيل موجّه واحد هو عبء حقيقي: خمسة مفاتيح، وخمس لوحات فوترة، وخمس مجموعات حدود معدل. بوابة متعددة النماذج تُلغي ذلك. APIsRouter يكشف كل نموذج أعلاه عبر رابط أساسي واحد متوافق مع OpenAI هو https://api.apisrouter.com/v1، لذا مقتطف الموجّه يعمل كما هو بتغيير سلسلة النموذج فقط. الفوترة حسب الاستخدام دون اشتراك، النماذج العالمية تعمل بنسبة 20% أقل من التسعير الرسمي مع نماذج صينية أقل من أسعارها الرسمية، والدفع في /topup دون تسجيل يرسل مفتاحاً إلى بريدك الإلكتروني بعد الدفع، مع أول شحن يضيف رصيد +100%. GET /v1/models بمفتاحك يعيد قائمة النماذج الحية، وهذا مفيد أيضاً لملء منتقي نموذج في واجهة الإدارة الخاصة بك.

نصائح إنتاجية توفر مالاً حقيقياً وألماً

  • ابثّ كل شيء. الوقت حتى أول token هو المقياس الذي يشعر به المستخدمون؛ رد مبثوث خلال ثانيتين يبدو أسرع من رد كامل خلال أربع ثوانٍ.
  • حافظ على البادئة الثابتة ثابتة. يجب أن تكون الشخصية والحقائق المثبَّتة متطابقة بايتاً بايت عبر الطلبات حتى تستفيد الخوادم التي تدعم تخزين البادئة المؤقت من ذلك.
  • حدّد max_tokens لكل مسار. الجولات العادية نادراً ما تحتاج أكثر من 300 token إخراج؛ نموذج بلا حد يثرثر يضاعف فاتورة الإخراج لديك.
  • سجّل التكلفة لكل مستخدم، وليس فقط لكل طلب. جزء صغير من المستخدمين كثيفي الاستخدام سيهيمن على الإنفاق؛ تحتاج إلى رؤيتهم لتصميم مستويات استخدام عادلة.
  • ابنِ احتياطياً في الموجّه. إذا انتهت مهلة النموذج الأساسي أو رفض، أعد المحاولة مرة واحدة على نموذج شقيق قبل إظهار خطأ.
  • قصّ النافذة المتجددة بعدد الـ tokens، لا بعدد الجولات، حتى لا يفجّر لصق طويل واحد الميزانية.
  • تعامل مع الرفض داخل الشخصية. حوّل الرفض إلى تحويل مسار سلس داخل القصة بدلاً من إظهار نص API الخام.
  • لا تخزّن المحادثات الخام لأطول مما يجب، وأعلن ذلك في سياسة الخصوصية لديك. سجلات محادثات الرفيق حساسة بطبيعتها.

الأسئلة الشائعة

كم تكلفة بناء تطبيق character AI؟

تكلفة التطوير هي في الغالب وقتك: نموذج أولي عامل هو مشروع عطلة نهاية أسبوع بما أنه لا يتضمن تدريب نماذج. تكلفة التشغيل هي الرقم الحقيقي، وتتناسب مع الاستخدام. على نموذج اقتصادي مثل deepseek-v4-flash، مستخدم نشط شهرياً كثيف الاستخدام يكلف نحو $0.38 من tokens؛ على نموذج متميز مثل gpt-5.5 نفس المستخدم يكلف نحو $15. اختيار النموذج، وليس البنية التحتية، هو ما يحدد هامشك.

ما هو أفضل نموذج AI لتطبيق character AI؟

عائلة DeepSeek V4 هي مفضلة المجتمع للعب الأدوار وأفضل قيمة: Flash للمحادثة العادية، Pro للمشاهد الأطول. GLM-5 وKimi K2.6 وMiMo خيارات قيمة جيدة. Grok يناسب التطبيقات التي تقدم موضوعات خيالية ناضجة للبالغين، بحسب سياسة xAI المنشورة. Claude Sonnet 4.6 يكتب أفضل نثر لكنه مناسب فقط للكتابة الإبداعية لكل الأعمار لأن Anthropic تحظر المحتوى الصريح.

كيف تتذكر تطبيقات character AI المحادثات السابقة؟

من خلال هندسة الـ prompt، وليس ذاكرة النموذج. التطبيق يعيد إرسال نافذة متجددة من الرسائل الأخيرة، وملخصاً مضغوطاً دورياً للرسائل الأقدم، وقائمة قصيرة من الحقائق المثبَّتة المستخرجة إلى قاعدة بيانات. النموذج نفسه عديم الحالة؛ كل طلب يحتوي على كل ما "تتذكره" الشخصية.

هل أحتاج لتدريب نموذجي الخاص لبناء تطبيق رفيق AI؟

لا. الضبط الدقيق مكلف، بطيء التكرار، وغير ضروري لاتساق الشخصية. prompt شخصية منظم جيداً من 500 إلى 1,000 token بالإضافة إلى طبقة ذاكرة يحقق التزاماً بالشخصية لا يستطيع المستخدمون تمييزه عن نموذج مخصص، ويتيح لك تبديل النماذج الأساسية بحرية كلما صدرت نماذج أفضل.

كيف أتعامل مع المحتوى الناضج في تطبيق رفيق؟

تعامل معه كمشكلة مطابقة سياسات. ضع الموضوعات الخيالية الناضجة خلف بوابة عمرية للبالغين، افحص المدخلات بحثاً عن فئات لا يسمح بها أي مزود، ووجّه تلك الحركة فقط إلى نماذج تسمح سياساتها المنشورة بالأعمال الخيالية للبالغين، مثل Grok بموجب سياسة xAI. احتفظ بمسار افتراضي مناسب لكل الأعمار على نماذج أكثر صرامة، والتزم بشروط خدمة كل مزود.

هل يمكنني استخدام OpenAI SDK لتطبيق character AI مع نماذج أخرى؟

نعم. DeepSeek وGLM وKimi وGemini وClaude وGrok كلها يمكن الوصول إليها عبر نقاط نهاية متوافقة مع OpenAI، إما من مزوديها أو عبر بوابة. كود تطبيقك يبقى على واجهة chat.completions القياسية ويبدّل النماذج بتغيير سلسلة النموذج، وهذا بالضبط ما يجعل التوجيه لكل رسالة رخيص البناء.