Character AI ایپ کیسے بنائیں: architecture، code، اور cost کا حساب
Updated 2026-07-15
ایک character AI ایپ چار components پر مشتمل ہے جو ایک OpenAI-compatible chat endpoint سے جڑے ہوتے ہیں: ایک persona system prompt، ایک memory layer، ایک moderation gate، اور ایک model router۔ آپ 200 لائنوں سے کم Python میں ایک working prototype ship کر سکتے ہیں اور صحیح model انتخاب کے ساتھ اسے فی monthly active user ایک ڈالر سے کہیں کم میں چلا سکتے ہیں۔
فوری جواب: چار-component architecture
آپ کو کوئی model train یا fine-tune کرنے کی ضرورت نہیں۔ آج market میں موجود ہر سنجیدہ companion app، ان میں شامل جو لاکھوں users کو serve کرتی ہیں، hosted LLM APIs کے اوپر ایک پتلی orchestration layer ہے۔ Character prompt اور database میں رہتا ہے، weights میں نہیں۔ اس گائیڈ کا باقی حصہ ہر component کو ایک standard OpenAI-compatible endpoint کے خلاف runnable code سے بناتا ہے، پھر token math کے ذریعے چلتا ہے تاکہ آپ launch سے پہلے جان لیں کہ ایک monthly active user کی اصل لاگت کیا ہے۔
- Persona prompt: ایک structured system prompt (500 سے 1,000 tokens) جو یہ طے کرتا ہے کہ character کون ہے اور کیسے بولتا ہے۔
- Memory: حالیہ turns کی ایک rolling window جمع وقتاً فوقتاً refresh ہونے والی summary، تاکہ conversations context limit سے آگے بھی زندہ رہیں۔
- Moderation: ایک age gate، ایک input classifier، اور ان content policies کا میل جو آپ جس model پر route کرتے ہیں اس سے مطابقت رکھیں۔
- Routing: ایک چھوٹا function جو casual chat کے لیے سستا model اور لمبی scenes کے لیے مضبوط model چنتا ہے۔
Component 1: persona prompt
Persona prompt ہی product ہے۔ یہ ایک system message ہے جو ہر request کے ساتھ ship ہوتا ہے اور عام طور پر پانچ حصے رکھتا ہے: identity (نام، عمر، پس منظر)، personality traits، دو یا تین مثالی لائنوں کے ساتھ speech style، سخت behavioral rules (کبھی character سے باہر نہ آنا، replies کو ایک length cap کے اندر رکھنا)، اور موجودہ scenario۔ اسے 500 اور 1,000 tokens کے درمیان رکھیں۔ چھوٹے personas بھٹک جاتے ہیں؛ بہت لمبے ہر ایک message پر input budget جلاتے ہیں اور شاذ و نادر ہی adherence بہتر کرتے ہیں۔ Personas کو اپنے database میں rows کے طور پر store کریں تاکہ users characters بنا اور edit کر سکیں، جو Character.AI طرز کی products کا core loop ہے۔ یہاں ایک مکمل request ہے۔ یہی shape کسی بھی OpenAI-compatible backend کے ساتھ کام کرتی ہے؛ یہ مثال ایک multi-model gateway endpoint استعمال کرتی ہے تاکہ آپ صرف ایک string بدل کر models سوئچ کر سکیں:
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
}'Component 2: memory جو لمبی conversations میں زندہ رہے
Companion app sessions لمبے چلتے ہیں۔ ایک three-layer memory stack پوری history ہر بار بھیجے بغیر context کو coherent رکھتا ہے: Layer 1 rolling window ہے: آخری 10 سے 14 raw turns، جوں کے توں بھیجے گئے۔ Layer 2 چلتی ہوئی summary ہے: ہر 20 turns کے قریب، ایک سستا model پرانے messages کو ایک paragraph میں compress کرتا ہے جو نام، relationship state، اور کھلے plot threads track کرتا ہے۔ Layer 3 pinned facts ہیں: پائیدار user تفصیلات (نام، ترجیحات، ماضی کے واقعات جو character کو یاد رکھنے چاہئیں) جو آپ کے database میں extract ہو کر ایک مختصر system message کے طور پر inject ہوتی ہیں۔ یہ official OpenAI SDK کے ساتھ Python میں پوری implementation ہے:
| Context slot | عام سائز | Refresh کی رفتار |
|---|---|---|
| Persona system prompt | 500 سے 1,000 tokens | ہر character کے لیے static |
| Pinned user facts | 100 سے 200 tokens | Extraction events پر |
| چلتی ہوئی summary | 300 سے 500 tokens | ہر ~20 turns میں |
| Rolling window (12 turns) | ~1,800 سے 2,200 tokens | ہر message پر |
| نیا user message | ~100 tokens | ہر message پر |
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.contentComponent 3: moderation اور content policies
Companion app میں moderation کے تین الگ کام ہیں، اور انہیں گڈمڈ کرنا سب سے عام launch غلطی ہے۔ پہلا، اپنے audience کو gate کریں۔ اگر آپ کی app mature fictional themes کی اجازت دیتی ہے، انہیں ایک adult age gate کے پیچھے رکھیں اور ایک الگ all-ages default رکھیں۔ App Store اور Play Store review دونوں یہ چیک کرتے ہیں، اور payment processors بھی اس کی پرواہ کرتے ہیں۔ دوسرا، inputs کو screen کریں۔ Character model تک پہنچنے سے پہلے user messages پر ایک سستا classifier pass چلائیں، ایسی categories کو بلاک کرتے ہوئے جن کی کوئی provider اجازت نہیں دیتا: minors سے متعلق content، credible real-world harm، اور illegal instructions۔ ایک yes/no rubric کے ساتھ ایک واحد deepseek-v4-flash call ایک سینٹ کا معمولی سا حصہ لگتی ہے اور ایک سیکنڈ سے کم latency شامل کرتی ہے۔ تیسرا، content policy کو model سے میل کریں۔ Providers fiction پر مختلف ہیں: xAI کی published policy واضح طور پر بالغ users کے لیے mature fictional themes کی اجازت دیتی ہے، DeepSeek اور دیگر open-weight-derived models roleplay کے لیے کمیونٹی کے پسندیدہ ہیں کیونکہ ان کی hosted policies fiction کے لیے لچکدار ہیں، جبکہ Anthropic کی policy explicit content ممنوع رکھتی ہے، جو Claude کو صرف all-ages creative writing کے لیے صحیح انتخاب بناتی ہے۔ Traffic route کرنے سے پہلے ان policies کو سمجھنا آپ کو production میں refusal storms سے بچاتا ہے۔ آپ جو بھی بنائیں، اسے ہر provider کی terms of service کا احترام کرنا چاہیے جسے آپ call کرتے ہیں۔
Component 4: model routing اور selection matrix
Companion app میں زیادہ تر messages مختصر casual turns ہوتے ہیں جنہیں ایک budget model بالکل ٹھیک سنبھالتا ہے۔ ایک اقلیت لمبی جذباتی scenes یا creative set pieces ہوتی ہیں جہاں prose quality ہی product ہے۔ Scene depth کے حساب سے routing users کو محسوس کرائے بغیر لاگت کو ڈرامائی طور پر کم کرتی ہے:
| Model | API model ID | قیمت فی 1M tokens (in/out) | Companion app کی موزونیت |
|---|---|---|---|
| DeepSeek V4 Flash | deepseek-v4-flash | $0.126 / $0.252 | Default chat model۔ Roleplay کے لیے کمیونٹی کا پسندیدہ، catalog میں بہترین value۔ |
| DeepSeek V4 Pro | deepseek-v4-pro | $0.3915 / $0.783 | لمبی scenes، مضبوط instruction following، پھر بھی سستا۔ |
| GLM-5 | glm-5 | $0.514 / $2.314 | مضبوط creative writing کے ساتھ value انتخاب۔ |
| Kimi K2.6 | kimi-k2.6 | /pricing دیکھیں | Long-context sessions کے لیے value انتخاب۔ MiMo بھی ایک ملتا جلتا budget آپشن ہے۔ |
| grok-4.5 | grok-4.5 | $1.60 / $4.80 | xAI کی published policy کے مطابق بالغ users کے لیے mature fictional themes۔ 500K context window۔ |
| Claude Sonnet 4.6 | claude-sonnet-4-6 | $2.40 / $12.00 | سب سے اعلیٰ prose quality۔ صرف all-ages creative writing؛ Anthropic explicit content ممنوع رکھتا ہے۔ |
| Gemini 3.5 Flash | gemini-3.5-flash | $1.20 / $7.20 | تیز، avatar reactions جیسی image-aware features کے لیے اچھا۔ |
ROUTES = {
"casual": "deepseek-v4-flash",
"scene": "deepseek-v4-pro",
"prose": "claude-sonnet-4-6", # all-ages creative writing only
}
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"]ایک monthly active user کی اصل لاگت کیا ہے
Launch سے پہلے token math کسی billing surprise سے بہتر ہے۔ memory table کے context budget کو استعمال کرتے ہوئے: فی-message تقریباً 3,300 input tokens اور 250 output tokens۔ Companion app users heavy ہوتے ہیں؛ کمیونٹی رپورٹ کردہ اعداد engaged users کو روزانہ درجنوں messages پر رکھتے ہیں، تو تقریباً 20 active دنوں میں روزانہ 40 messages، یا فی-MAU ماہانہ تقریباً 800 messages فرض کریں۔ یہ فی-MAU ماہانہ 2.64M input tokens اور 0.2M output tokens بنتا ہے۔ Catalog rates سے ضرب دیتے ہوئے:
| Model | Input لاگت / MAU | Output لاگت / MAU | کل / MAU / ماہانہ |
|---|---|---|---|
| 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 |
Matrix کے ہر model کے لیے ایک endpoint
ایک router چلانے کے لیے پانچ provider accounts بنانا حقیقی overhead ہے: پانچ keys، پانچ billing dashboards، پانچ rate limits کے سیٹ۔ ایک multi-model gateway اسے سمیٹ دیتی ہے۔ APIsRouter اوپر ہر model کو ایک واحد OpenAI-compatible base URL https://api.apisrouter.com/v1 کے ذریعے expose کرتا ہے، تو router snippet صرف model string بدل کر جوں کا توں کام کرتا ہے۔ Billing جتنا استعمال اتنی ادائیگی ہے بغیر subscription کے، global models official pricing سے 20% کم چلتے ہیں جبکہ Chinese models official rates سے کم پر، اور /topup پر بغیر سائن اپ checkout ادائیگی کے بعد آپ کے ای میل پر key بھیجتا ہے، جبکہ پہلی top-up پر +100% balance ملتا ہے۔ آپ کی key کے ساتھ GET /v1/models live model list واپس کرتا ہے، جو آپ کے اپنے admin UI میں model picker بھرنے کے لیے بھی کارآمد ہے۔
Production tips جو حقیقی پیسے اور تکلیف بچاتے ہیں
- ہر چیز stream کریں۔ Time-to-first-token وہ metric ہے جو users محسوس کرتے ہیں؛ 2 سیکنڈ پر streamed reply 4 سیکنڈ پر مکمل reply سے تیز محسوس ہوتی ہے۔
- Stable prefix کو stable رکھیں۔ Persona اور pinned facts کو requests کے درمیان byte-identical ہونا چاہیے تاکہ prefix caching سپورٹ کرنے والے backends اس کا فائدہ اٹھا سکیں۔
- فی-route max_tokens cap رکھیں۔ Casual turns کو شاذ و نادر ہی 300 سے زیادہ output tokens چاہئیں؛ ایک uncapped model جو rambling کرے آپ کا output bill دگنا کر دیتا ہے۔
- فی-request نہیں بلکہ فی-user لاگت log کریں۔ Heavy users کا ایک چھوٹا حصہ spend پر حاوی رہے گا؛ منصفانہ usage tiers ڈیزائن کرنے کے لیے آپ کو انہیں دیکھنے کی ضرورت ہے۔
- Router میں fallback بنائیں۔ اگر primary model timeout ہو یا refuse کرے تو error دکھانے سے پہلے ایک sibling model پر ایک بار retry کریں۔
- Rolling window کو turns کی بجائے tokens سے trim کریں، تاکہ ایک لمبا paste budget نہ اڑا دے۔
- Refusals کو character میں رہ کر handle کریں۔ raw API text دکھانے کی بجائے refusal کو ایک graceful in-story deflection سے map کریں۔
- Raw chats کو ضرورت سے زیادہ دیر محفوظ نہ کریں، اور یہ اپنی privacy policy میں کہیں۔ Companion chat logs فطرتاً حساس ہیں۔
عمومی سوالات
Character AI ایپ بنانے میں کتنی لاگت آتی ہے؟
Development لاگت زیادہ تر آپ کا وقت ہے: ایک working prototype ایک weekend project ہے کیونکہ اس میں کوئی model training شامل نہیں۔ Running لاگت اصل نمبر ہے، اور یہ استعمال کے ساتھ scale ہوتی ہے۔ deepseek-v4-flash جیسے budget model پر، ایک heavy monthly active user کی لاگت tokens میں تقریباً $0.38 ہے؛ gpt-5.5 جیسے premium model پر وہی user تقریباً $15 لگتا ہے۔ Infrastructure نہیں بلکہ model کا انتخاب آپ کا margin طے کرتا ہے۔
Character AI ایپ کے لیے کون سا AI model بہترین ہے؟
DeepSeek V4 family roleplay کے لیے کمیونٹی کا پسندیدہ اور بہترین value ہے: casual chat کے لیے Flash، لمبی scenes کے لیے Pro۔ GLM-5، Kimi K2.6، اور MiMo ٹھوس value انتخاب ہیں۔ Grok ان apps کے لیے موزوں ہے جو بالغوں کو mature fictional themes serve کرتی ہیں، xAI کی published policy کے مطابق۔ Claude Sonnet 4.6 بہترین prose لکھتا ہے مگر صرف all-ages creative writing کے لیے موزوں ہے کیونکہ Anthropic explicit content ممنوع رکھتا ہے۔
Character AI apps پرانی conversations کیسے یاد رکھتی ہیں؟
Prompt engineering کے ذریعے، model memory سے نہیں۔ App حالیہ messages کی ایک rolling window، پرانوں کی وقتاً فوقتاً compress کی گئی summary، اور database میں extract شدہ pinned facts کی ایک مختصر فہرست دوبارہ بھیجتی ہے۔ Model خود stateless ہے؛ ہر request میں وہ سب کچھ ہوتا ہے جو character "یاد" رکھتا ہے۔
کیا مجھے AI companion app بنانے کے لیے اپنا model train کرنا ہوگا؟
نہیں۔ Fine-tuning مہنگا، iterate کرنے میں سست، اور character consistency کے لیے غیر ضروری ہے۔ 500 سے 1,000 tokens کا ایک اچھی طرح structured persona prompt جمع ایک memory layer character adherence حاصل کرتا ہے جسے users کسی custom model سے الگ نہیں کر سکتے، اور بہتر models آنے پر آپ کو underlying model آزادی سے بدلنے دیتا ہے۔
Companion app میں mature content کیسے handle کروں؟
اسے ایک policy-matching مسئلہ سمجھیں۔ Mature fictional themes کو ایک adult age gate کے پیچھے رکھیں، ایسی categories کے لیے inputs screen کریں جن کی کوئی provider اجازت نہیں دیتا، اور اس traffic کو صرف ان models پر route کریں جن کی published policies بالغوں کے لیے fiction کی اجازت دیتی ہیں، جیسے xAI کی policy کے تحت Grok۔ ایک all-ages default track سخت models پر رکھیں، اور ہر provider کی terms of service کی تعمیل کریں۔
کیا میں دوسرے models کے ساتھ Character AI ایپ کے لیے OpenAI SDK استعمال کر سکتا ہوں؟
جی ہاں۔ DeepSeek، GLM، Kimi، Gemini، Claude، اور Grok سب OpenAI-compatible endpoints کے ذریعے قابلِ رسائی ہیں، چاہے ان کے vendors سے ہو یا کسی gateway کے ذریعے۔ آپ کی app کوڈ معیاری chat.completions interface پر رہتا ہے اور model string بدل کر models سوئچ کرتا ہے، جو بالکل وہی چیز ہے جو فی-message routing کو سستا بناتی ہے۔