Jev و مدلهای تصمیم
جواب کوتاه
Jev یه مدل هوش مصنوعی از شرکت TypeSafe ئه که ۱۵ سپتامبر ۲۰۲۶ منتشر شد. فرق اصلیش با چتباتها اینه که متن نمینویسه؛ تصمیم میگیره. شما یه متن یا داده بهش میدید (اسمش state ئه) و چند تا سوال با جوابهای از قبل تعریفشده: یکی از چند گزینه (Choice)، یه درجه روی یه خطکش (Score)، یا احتمال «بله» (Noul). Jev برای هر سوال، جواب رو همراه احتمال برمیگردونه، در حدود چند صدم تا چند دهم ثانیه، و خیلی ارزونتر از مدلهای زبانی بزرگ. سازندهش بهش میگه مدل «سیستم ۱»، یعنی برای تصمیمهای تند و باریک، نه فکر کردن طولانی.
یه اتاق تفکیک نامه
فرض کنید رفتید یه ادارهی پست قدیمی. پشت یه میز، یه کارمند نشسته که نامه مینویسه: خوشقلمه، هر جوابی بخواید براتون مینویسه، ولی هر نامه یه مدت وقت میگیره. کنار اون، یه نفر دیگه جلوی یه قفسهی پر از خونه وایستاده. هر نامهای که میاد، یه نگاه بهش میندازه و در یه لحظه میندازدش توی یکی از خونهها. روش یه مهر فوریت میزنه، و یه برچسب «بله» یا «نه» میچسبونه. این دومی هیچوقت نامه نمینویسه.
توی دنیای هوش مصنوعی، اون کارمند خوشقلم مدلهای زبانی بزرگن (LLM، کوتاهشدهی Large Language Model)، مثل همون چتباتهایی که میشناسید (درس مدل زبانی چیست). و اون تفکیککننده، Jev ئه.
یه نکتهی مهم توی همین تصویر هست: خونههای قفسه رو تفکیککننده نمیسازه. شما از قبل ساختید و روشون اسم گذاشتید: «بازگشت کالا»، «پرداخت»، «ارسال». Jev فقط میگه این نامه مال کدوم خونهست، و چقدر مطمئنه. برای همین جوابش هیچوقت چیزی بیرون از خونههای شما نیست. توی این درس، از همین اتاق شروع میکنیم و تا آخر، هر چیزی که دربارهی Jev گفته شده رو یاد میگیریم: طرز کار، چهار نوع سوال، عددها، نقطهضعفها، امنیت، قیمت، رقیبها و راه شروع.
چرا اصلا ساخته شد
فرض کنید یه فروشگاه اینترنتی دارید و روزی هزار تا پیام پشتیبانی میاد. میخواید یه برنامه بنویسید که هر پیام رو خودکار بفرسته پیش تیم درست: پرداخت، ارسال یا مرجوعی. برنامه یه جواب ساده میخواد، یکی از سه تا کلمه، تا با یه «اگه» بره راه درست.
اگه این رو از یه LLM بپرسید، معمولا یه متن قشنگ میگیرید: «به نظر میرسد مشتری در خصوص…». برنامهی شما باید از دل این متن، اون یه کلمه رو دربیاره. میشه از مدل خواست «فقط JSON بده» (درس خروجی ساختاریافته)، و امروز خیلی از مدلها این رو خوب انجام میدن، ولی همچنان کنده، گرونه و گاهی جوابی میده که توی گزینهها نبوده.
سازندهی Jev یه حرف ساده داره: وقتی کد شما یه تصمیم میخواد، چرا مدلی بیاریم که برای نوشتن ساخته شده؟ یه مدل بسازیم که از اول فقط تصمیم بده، با جوابی که شکلش رو شما تعیین کردید. توی سند رسمیش اسم این فکر رو گذاشتن «هوش بومی ماشین» (Machine Native Intelligence)، یعنی هوشی که ویژگیهای نرمافزار رو داره: ساختار، قابل اعتماد بودن، قابل آزمودن بودن، سرعت و ارزونی. و حدسشون اینه که در آینده، حدود ۹۹ درصد کار هوش مصنوعی بین ماشین و ماشین و نرمافزاره، نه بین ماشین و آدم.
یه جملهی مانیفستشون هم معروف شده: «بساز برای کار واقعی، نه خدا» (Build prod, not God)؛ یعنی دنبال مدلی نیستن که همه کار بکنه، دنبال قطعهایان که توی یه نرمافزار واقعی، یه کار باریک رو قابلاعتماد انجام بده.
اسم Jev از کجا اومده
طبق گزارشها، اسم Jev از ویلیام استنلی جونز (William Stanley Jevons) اومده، اقتصاددان انگلیسی که سال ۱۸۶۵ یه چیز عجیب رو نشون داد: وقتی ماشینهای بخار زغال کمتری مصرف کردن، مصرف کل زغال بیشتر شد، نه کمتر؛ چون ارزونتر شد و همه شروع کردن ازش استفاده کنن. به این میگن پارادوکس جونز (Jevons Paradox). سند TypeSafe هم همین رو میگه: هدفشون اینه که هوش، به نسبت سرعت و هزینه، بیش از صد برابر بهتر بشه، و حدسشون اینه که هوش ارزونتر، تقاضای خیلی بیشتری میسازه.
هفت کلمه پیش از کار
پیش از اینکه بریم توی جزئیات، این هفت تا کلمه رو بدونید؛ تا آخر درس زیاد میان.
state یعنی همون چیزی که میخواید دربارهش تصمیم گرفته بشه: یه پیام، یه نامه، یه رکورد، یا حتی وضعیت فعلی برنامهتون. توی اتاق پست، همون نامهی روی میزه.
سوال (Question) یعنی یه تصمیم مشخص که میخواید دربارهی state گرفته بشه، با جوابهایی که شما از قبل تعریف کردید.
پایه (Primitive) اسمیه که سازنده روی نوع سوالها گذاشته: Choice، Score، Noul و Box. مثل آجرهای کوچیکی که توی کدتون کنار هم میچینید.
احتمال (Probability) عددی بین صفر و یک که میگه یه جواب چقدر محتمله. ۰٫۹ یعنی خیلی محتمل، ۰٫۵ یعنی نصفنصف.
اطمینان (Confidence) یه عدد بین صفر و یک که از شکل احتمالها حساب میشه و میگه مدل چقدر سر یه جواب جمعه یا بین چند تا دودله.
کالیبره (Calibrated) یعنی احتمالهای مدل با واقعیت جور باشه: اگه صد بار گفت «۸۰ درصد»، حدود ۸۰ بارش درست دربیاد.
توکن (Token) تیکههای کوچیک متن که مدلها میخونن؛ قیمت هم با همین شمرده میشه (درس توکن).
سیستم ۱ و سیستم ۲
دنیل کانمن (Daniel Kahneman)، روانشناس برندهی نوبل، توی کتاب «تفکر، سریع و کند» (Thinking, Fast and Slow) گفت مغز ما دو جور فکر میکنه. سیستم ۱ تند و بیزحمته: یه چهرهی عصبانی رو در یه لحظه میشناسید. سیستم ۲ کند و حسابشدهست: یه ضرب چندرقمی رو با کاغذ و قلم حل میکنید.
TypeSafe اسم دستهی مدلهاش رو از همین گذاشته: مدل سیستم ۱ (System One Model)، و Jev اولین مدل این دستهست. یعنی برای قضاوتهایی ساخته شده که یه آدم آگاه، اگه اطلاعات درست جلوش باشه، در یه ثانیه میگیره. «این پیام فوریت داره؟» یه سوال سیستم ۱ ئه. «این پیام رو تحلیل کن و بهترین کار رو بگو» نیست؛ اون فکر طولانی میخواد و باید به چند سوال کوچیک شکسته بشه.
یه چیز دیگه هم اینجاست: Jev جوابش رو کلمه به کلمه نمیسازه، مثل LLMها که هر بار یه توکن بعدی رو حدس میزنن (درس پیشبینی کلمهی بعد). جوابها رو یکجا و با یه بار نگاه برمیگردونه. برای همینه که اینقدر تنده.
یه درخواست، از نزدیک
هر بار که از Jev چیزی میپرسید، یه درخواست میفرستید با سه بخش: state (چیزی که باید بررسی بشه)، اسم مدل، و یه فهرست سوال. هر سوال یه شناسه داره که خودتون انتخاب میکنید، مثلا refund_requested، و جوابش با همون شناسه برمیگرده.
چهار تا قاعدهی مهم این درخواست، که سند رسمی صریح گفته:
- همهی سوالها یه state رو میبینن. یه بار نامه رو میدید، ده تا سوال دربارهش میپرسید.
- هر سوال جدا و موازی جواب داده میشه. جواب یه سوال، روی جواب سوال دیگه اثر نمیذاره. برای همین اضافه کردن سوال تقریبا وقت بیشتری نمیگیره و قاطیشدن متن (Context Rot) هم پیش نمیاد.
- شناسهی سوال به مدل فرستاده نمیشه. فقط مال کد شماست. پس کل سوال رو توی متن سوال بنویسید، حتی اگه شناسه گویا باشه.
- جواب همیشه یکی از چیزهاییه که خودتون تعریف کردید. مدل یه توزیع احتمال روی گزینههای شما برمیگردونه، هیچوقت چیزی بیرونش.
یه درخواست واقعی، به همون شکلی که سند رسمی نشون میده، تقریبا این شکلیه:
POST https://api.typesafe.ai/v1/systemone
{
"model": "jev-latest",
"state": "My running shoes arrived in the wrong size.",
"questions": {
"department": {
"type": "choice",
"instructions": "Which team should handle this?",
"criteria": {
"returns": "Exchanges, wrong or damaged items",
"shipping": "Delivery status, delays, lost packages",
"billing": "Charges, invoices, payment problems"
}
}
}
}و جوابش: "choice": "returns" با احتمال ۱ برای «returns» و صفر برای بقیه، و اطمینان ۱. کفش با سایز اشتباه رسیده، پس معلومه تیم مرجوعی باید رسیدگی کنه.
state میتونه یه متن ساده باشه، یا یه شیء JSON با چند بخش اسمدار (مثلا پیام مشتری، سفارش و قانون بازگشت پول)، یا یه آرایه، مثل چند پیام پشت هم. سند پیشنهاد میکنه بیشتر وقتها شیء بفرستید، تا هر بخش اسم داشته باشه. Jev فعلا متن میخونه، به هر زبونی، ولی زبان اصلی آموزشش انگلیسیه و به گفتهی خود سند، دقتش توی زبانهای دیگه کمتره. پس اگه با فارسی کار میکنید، حتما روی دادهی خودتون امتحانش کنید.
یکی از چند گزینه
Choice یعنی «کدوم یکی؟». وقتی جواب یکی از یه فهرست ثابته و بین گزینهها ترتیبی نیست: کدوم تیم، کدوم دسته، کدوم زبان برنامهنویسی. شما گزینهها رو با یه توضیح کوتاه برای هر کدوم میدید (اسمش criteria ئه)، و Jev سه چیز برمیگردونه:
- choice، گزینهای که بیشترین احتمال رو داره.
- probabilities، احتمال همهی گزینهها، که جمعشون یک میشه.
- confidence، اطمینان، که پایینتر حسابش رو میگیم.
مثلا سند یه تیکت سختتر رو نشون میده: مشتری هم سایز کفشش اشتباه بوده، هم دو بار ازش پول کم شده. جواب: «مرجوعی» با احتمال ۰٫۶۱، «پرداخت» با ۰٫۳۵، «ارسال» با ۰٫۰۴، و اطمینان ۰٫۴۲. یعنی Jev داره صادقانه میگه این تیکت مال دو تا تیمه. همین عدد پایین اطمینان، به کد شما میگه این یکی رو خودکار نفرست؛ یه آدم نگاه کنه.
چند تا نکتهی Choice
یه Choice تا ۲۵۵ گزینه میپذیره و هر گزینهی اضافه فقط چند توکن خرج داره. پس فهرست کامل رو بدید، نه یه فهرست کوتاهشده. اگه ممکنه ورودی توی هیچکدوم جا نشه، حتما یه گزینهی «other» یا «هیچکدوم» بذارید، تا مدل بتونه بگه هیچکدوم نمیخوره.
توضیح هر گزینه به مدل فرستاده میشه، پس طوری بنویسید که گزینهها رو از هم جدا کنه. اگه دو گزینه زیادی شبیهن، توضیح رو میشه یه شیء کرد، با یه بخش «چی رو میگیره»، یه بخش «چی رو نمیگیره» و چند تا مثال. اسم این بخشها هم دست خودتونه.
اگه دستهبندیتون خیلی بزرگه، مثلا یه درخت چندطبقه از دستهها، سند پیشنهاد میکنه طبقه به طبقه جلو برید: اول طبقهی بالا، بعد از بین بچههای گزینهی برنده. حتی بهتر، چند تا مسیر بهتر رو همزمان نگه دارید (به این میگن جستجوی پرتو، Beam Search)، نه فقط اولی رو.
یه جا روی خطکش
Score یعنی «کجای این طیف؟». وقتی جواب یه درجهست که میشه با چند مرحله توصیفش کرد: شدت یه باگ، ناراحتی یه مشتری، میزان تجربهی یه نفر. شما چند سطح (Level) به ترتیب از پایین به بالا میدید، دستکم دو تا و حداکثر ده تا. شمارهی هر سطح، جاش توی فهرسته، از صفر.
Jev برای هر سطح یه احتمال برمیگردونه، و یه عدد به اسم score که میانگین وزنی شمارهی سطحهاست: هر شماره ضرب در احتمالش، با هم جمع. مثال خود سند: گزارش «دکمهی خروجی گرفتن توی سافاری صفحه رو میترکونه، توی کروم کار میکنه، ولی چند تا از مشتریهامون فقط سافاری دارن». سه سطح: صفر یعنی ظاهری، یک یعنی خرابه ولی راه دور زدن هست، دو یعنی بی راه دور زدن. احتمالها: صفر، ۰٫۵۷ و ۰٫۴۳. امتیاز: ۰×۰ + ۱×۰٫۵۷ + ۲×۰٫۴۳ = ۱٫۴۳، و اطمینان ۰٫۳۵.
یعنی چی؟ مدل بین سطح یک و دو دودله، کمی به سمت یک. که دقیقا همون واقعیت گزارشه: برای بیشتر مشتریها راه دور زدن هست، برای بعضیها نه. دقت کنید، امتیاز ۱٫۴۳ یعنی «یه جا روی خط»، نه «۴۳ درصد مشتریها راه ندارن». و دو تا توزیع خیلی متفاوت ممکنه یه امتیاز بدن: امتیاز ۱ میتونه یعنی همهی احتمال روی سطح یک، یا نصفش روی صفر و نصفش روی دو. برای همین همیشه احتمالها و اطمینان رو هم کنار امتیاز بخونید.
سطحهای خوب، یعنی توصیف موقعیت
مهمترین قانون Score اینه: هر سطح رو با یه موقعیت توصیف کنید، نه با یه درجه. «خراب، ولی راه دور زدن هست» به مدل یه چیز میده که با گزارش مقایسه کنه. «نسبتا شدید» نمیده. چرا؟ چون Jev هر سطح رو جدا میبینه؛ شمارهش رو نمیبینه و سطحهای کناریش رو هم نمیبینه. پس «بدتر از قبلی» براش معنی نداره.
سند این رو با یه آزمایش نشون داده. گزارش «دکمهی خروجی چند پیکسل جابهجاست»، با سه سطح توصیفی، امتیاز صفر با اطمینان یک گرفت؛ یعنی کاملا ظاهری. همون گزارش، وقتی سطحها فقط «۰»، «۱» و «۲» بودن، امتیاز ۰٫۵۵ با اطمینان ۰٫۳۳ گرفت؛ مدل چیزی برای مقایسه نداشت و دودل شد.
دو تا قانون دیگه: هر Score فقط یه چیز رو بسنجه (اگه توصیف میگه «وقتشناس و باهوش و باتجربه»، سه تا Score جدا لازمه)؛ و اگه بالای طیف یه حالت نادر ولی مهم هست، مثلا «توهینآمیز یا تهدیدکننده» بالای «خیلی عصبانی»، بهش یه سطح خودش رو بدید. اگه سطحها هنوز دودلی میسازن، میشه به هر سطح چند مثال اضافه کرد. سند نشون داده یه مثال مرتبط («توی یه مرورگر خراب، توی یکی دیگه سالم») اطمینان رو از ۰٫۳۵ به ۰٫۹۶ برد، و یه مثال بیربط هیچ فرقی نکرد. ولی دقت کنید: اطمینان بالاتر خودش ثابت نمیکنه جواب درستتره؛ همیشه روی نمونههایی که جوابشون رو میدونید بسنجید.
چند Score، یه تصمیم
یه تصمیم پیچیده، مثلا اولویت یه تیکت، رو به چند Score بشکنید: شدت باگ، ناراحتی مشتری، و کیفیت گزارش. همه رو توی یه درخواست بپرسید، بعد توی کد ترکیبشون کنید.
فقط یه کار رو یادتون نره: چون طول خطکشها فرق داره (یکی صفر تا دو، یکی صفر تا سه)، هر امتیاز رو اول تقسیم بر شمارهی بالاترین سطحش کنید تا همه بین صفر و یک بشن. مثال سند: شدت ۰٫۶۲، ناراحتی ۰٫۶۴، کیفیت گزارش ۱. با وزنهای ۰٫۶، ۰٫۳ و ۰٫۱، اولویت میشه ۰٫۶۶. وزنها توی کد شماست؛ اگه نتیجه با چیزی که تیمتون تصمیم میگرفت جور نبود، وزن رو عوض میکنید، نه کل سوال رو.
احتمال «بله»
Noul یعنی «درسته یا نه؟». جوابش یه عدد بین صفر و یکه: احتمال اینکه جواب «بله» باشه. نزدیک یک یعنی بلهی محکم، نزدیک صفر نهی محکم، نزدیک ۰٫۵ یعنی مدل بین بله و نه نصفنصفه. Noul اطمینان جدا نداره، چون یه عدد تنها همهچیز رو میگه. اگه هم بخواید با Choice یکی کنید، سند میگه از قدرمطلق «دو برابر عدد منهای یک» استفاده کنید: صفر برای ۰٫۵، و یک برای صفر یا یک.
جدول پایین جواب واقعی jev-1.13.0 به سوال «مشتری یه آدم واقعی میخواد؟» برای شش پیامه، همونطور که سند نوشته (پیامها رو فارسی کردیم):
دو تای اول و دو تای آخر روشنن. «همین امروز درستش کنید» فوری هست ولی آدم نمیخواد، و ۰٫۲۶ گرفت. «ربات هستید؟» یه اشارهست ولی درخواست نیست، و مدل تقریبا وسط وایستاد، ۰٫۴۰. اینها همون جاهاییان که کد شما با یه آستانه تصمیم میگیره.
اسم Noul هم خودش جالبه: سازنده این اسم رو گذاشته برای سوالهای بله و نه با جواب احتمالی. توی سندها همیشه با همین املای انگلیسی میاد.
Noul خطکش نیست
یه اشتباه خیلی رایج: فکر کنیم Noul اندازهی یه چیز رو میگه. سند چهار نفر رو با دو سوال مقایسه کرده. Noul: «توی پایتون قویه؟». Score: «چقدر تجربهی پایتون داره؟» با چهار سطح (هیچ، کمی، استفادهی روزانه سر کار، تخصص عمیق). کسی که هشت ساله هر روز پایتون مینویسه، Noul ۰٫۹۲ گرفت و Score ۲٫۸۹. کسی که دو سال هر روز نوشته، ۰٫۸۱ و ۲٫۰۵.
۰٫۸۱ یعنی «۸۱ درصد احتمال داره جواب «قویه» بله باشه»، نه «۸۱ درصد قوی». و یه عدد وسط، مثلا ۰٫۵، میتونه یعنی «تجربهی متوسط» یا «معلوم نیست». اگه اندازه میخواید، Score بپرسید. اگه بله و نه میخواید، شرط رو دقیق بنویسید: «توی رزومه نوشته سر کار از پایتون استفاده کرده؟».
آستانهی Noul، بسته به گرونی اشتباه
بیشتر وقتها کد Noul رو با یه آستانه به بله و نه تبدیل میکنه. کجا بذاریمش؟ سند میگه بسته به اینکه کدوم اشتباه گرونتره. اگه بله و نه هماندازهان، ۰٫۵. اگه بلهی اشتباه گرونه، مثلا پول برگردوندن یا بیدار کردن یه نفر نصفهشب، آستانه رو بالا ببرید. اگه نهی اشتباه گرونه، مثلا جا انداختن یه خطر امنیتی، پایین بیارید. و عددهای وسط رو بدید به یه آدم. مثال سند: زیر ۰٫۲ یعنی نه، بالای ۰٫۸ یعنی بله، و بینشون بررسی آدم.
سه تا قانون نوشتن Noul: یه سوال، یه شرط (نه «عصبانیه و پول میخواد؟»)؛ طوری بپرسید که عدد بالا یعنی بله («پیام اطلاعات شخصی داره؟»، نه «پیام از اطلاعات شخصی خالیه؟»)؛ و مرز بله و نه رو روشن کنید. اگه مرز ظریفه، میشه توضیح جدا برای «بله» و «نه» داد. جملهی خبری هم بهجای سوال کار میکنه: «مشتری پول برگشتی میخواد».
یه قاب دور یه چیز توی عکس (آزمایشی)
از نسخهی ۱٫۱۴ (۱۴ اکتبر ۲۰۲۶)، Jev عکس هم میخونه و یه نوع سوال چهارم داره: Box، یعنی «این چیز کجای عکسه؟». جوابش کوچیکترین قابیه که دور اون چیز میشه کشید، با چهار لبه: بالا، پایین، چپ و راست، هر کدوم به شکل کسری از عرض یا ارتفاع عکس، از گوشهی بالا چپ. مثلا «چپ ۰٫۴۶» یعنی لبهی چپ قاب، ۴۶ درصد از عرض عکس جلوتره. اینجوری جواب به اندازهی عکس بستگی نداره.
خود سازنده صریح گفته این بخش هنوز آمادهی کار جدی نیست و اسمش رو گذاشته «برای رویاپردازها» (Dreamer-ready): برای ساختن نمونه و امتحان ایده خوبه، ولی شکل درخواست و دقتش ممکنه عوض بشه. برای روشن کردنش باید یه هدر جدا فرستاد و نسخهی ۱٫۱۴ رو انتخاب کرد.
چند نکتهی مهم: Box همیشه یه قاب برمیگردونه، حتی اگه اون چیز اصلا توی عکس نباشه. پس کنارش یه Noul بپرسید که «اصلا هست؟». هر سوال یه قابه؛ برای چند چیز، چند سوال. و برای چیزهای خیلی کوچیک توی عکس بزرگ، اول عکس رو تیکه کنید. سند یه آزمایش هم داره: برای پیدا کردن اینکه قاب یه بخشی از شیء رو بریده یا نه، چهار Noul جدا برای چهار لبه، ۳۰ مورد از ۳۶ بریدگی رو پیدا کرد؛ یه سوال کلی فقط ۲۶ تا.
اطمینان: «نمیدونم» هم یه جوابه
سند TypeSafe یه جملهی خوب داره: سیستمی که نتونه صادقانه بگه مطمئن نیست، قابل اعتماد نیست. اطمینان دقیقا برای همینه. Jev برای هر Choice و Score یه عدد اطمینان برمیگردونه که از شکل احتمالها حساب میشه: اگه همهی احتمال روی یه جواب باشه، یک؛ اگه یکسان پخش شده باشه، صفر.
فرمولها رو خود سند منتشر کرده، برای اینکه بدونید هر عدد از کجا میاد:
- Choice: احتمال گزینهی برنده، منهای یک تقسیم بر تعداد گزینهها، تقسیم بر یک منهای یک تقسیم بر تعداد گزینهها. یعنی چقدر بالاتر از «تقسیم مساوی» وایستاده. مثلا با سه گزینه و احتمال ۰٫۹ برای برنده: (۰٫۹ منهای یکسوم) تقسیم بر دوسوم، میشه ۰٫۸۵. فقط برنده حساب میشه؛ پس (۰٫۶، ۰٫۳، ۰٫۱) و (۰٫۶، ۰٫۲، ۰٫۲) هر دو ۰٫۴ میگیرن.
- Score: چون سطحها ترتیب دارن، فاصله هم مهمه. اطمینان میشه یک منهای «میانگین فاصلهی احتمالها از پربارترین سطح، تقسیم بر همین میانگین برای یه پخش یکسان». نتیجه: دودلی بین دو سطح کنار هم، کمتر از دودلی بین دو سر خط اطمینان رو پایین میاره. با سه سطح، (صفر، ۰٫۵، ۰٫۵) اطمینان ۰٫۲۵ میگیره، ولی (۰٫۵، صفر، ۰٫۵) صفر.
- Noul: اطمینان جدا نداره؛ خود عدد کافیه.
سند دو تا معیار سادهتر هم پیشنهاد میکنه که از همون احتمالها حساب میشن و گاهی بهتر کار میکنن: خود احتمال برنده، و «نسبت برنده به دومی»، که نشون میده برنده چقدر از رقیب اصلیش جلوتره.
سه مسیر، و مرزی که با خطر بالا میره
الگوی پیشنهادی سند: اطمینان رو سه تیکه کنید. بالا، کد خودکار کار رو انجام بده. متوسط، بپرس یا بفرست برای بررسی. پایین، کاری نکن؛ بده به یه آدم یا یه سیستم دیگه.
و مرزها برای هر کار فرق داره. مثال سند یه بانکداری صوتیه: زیر ۰٫۶ هر چی باشه، بره پیش یه کارمند. نشون دادن موجودی با ۰٫۶ کافیه، چون بدترین حالتش اینه که کاربر یه عدد اضافه بشنوه. ولی تایید یه انتقال پول، بالای ۰٫۸۵ خودکار انجام میشه، و بین ۰٫۶ و ۰٫۸۵ اول از کاربر میپرسه «مطمئنید؟». مرز رو کد شما میذاره، نه مدل؛ و سند میگه با مرز محتاط شروع کنید و با دادهی خودتون تنظیمش کنید.
کالیبره یعنی چی
مثلا فرض کنید هواشناسی صد بار گفته «۷۰ درصد احتمال بارون». اگه حدود هفتاد تا از اون روزها واقعا بارون اومده باشه، این هواشناسی کالیبرهست. Jev برای همین آموزش دیده: احتمالهاش با واقعیت جور باشه. طبق سند، از بین جوابهایی که احتمال ۰٫۲ دارن، حدود ۲۰ درصد باید درست باشن؛ از ۰٫۸ها حدود ۸۰ درصد.
ولی دو تا نکتهی مهم که خود سند هم صریح گفته: یکی، کالیبره بودن دربارهی گروهی از جوابهاست، نه تضمین درستی یه جواب تنها. دوم، کالیبره بودن روی دادهی شما باید سنجیده بشه. یه آزمون مستقل (گزارششده در یه وبلاگ برنامهنویسی، ۲۴ سپتامبر ۲۰۲۶) خطای کالیبراسیون (ECE، کوتاهشدهی Expected Calibration Error، یعنی «خطای کالیبراسیون مورد انتظار») رو بی هیچ تنظیم ۰٫۰۷۱ اندازه گرفت، و بعد از یه تنظیم ساده روی دادهی خودشون ۰٫۰۲۵. یه آزمون مستقل دیگه هم دید Jev روی Choice کمی بیش از حد مطمئن و روی Noul کمی بیش از حد محتاطه. پیشنهاد همه یکیه: چند صد نمونهی برچسبدار از کار خودتون جمع کنید و مرزها رو روی همونها بذارید.
چطور آموزش دیده
مدلهای زبانی بعد از خوندن اینترنت (درس پیشآموزش) یه آموزش دوم میبینن تا به کار خاصی بیان. سند TypeSafe سه راه رو کنار هم گذاشته:
- RLHF، کوتاهشدهی Reinforcement Learning from Human Feedback، یعنی «یادگیری تقویتی از بازخورد آدم». مدل یاد میگیره جوابی بده که آدمها بیشتر میپسندن؛ همین چتباتها رو ساخت (درس RLHF). یه نکتهی جالب: به گفتهی سند، دیوگو آلمیدا، همبنیانگذار TypeSafe، خودش از همسازندههای همین روش بوده.
- RLVR، کوتاهشدهی Reinforcement Learning with Verifiable Rewards، یعنی «یادگیری تقویتی با پاداش قابل بررسی». مدل روی چیزهایی که ماشین میتونه درست و غلطش رو چک کنه، مثل ریاضی، تمرین میکنه؛ مدلهای استدلال اینجوری ساخته شدن، که قویان ولی کند و گرون.
- RLCD، کوتاهشدهی Reinforcement Learning for Calibrated Decisions، یعنی «یادگیری تقویتی برای تصمیم کالیبره». راه TypeSafe: مدل متن نمیسازه، تصمیم و احتمال برمیگردونه، و احتمال بالاتر باید یعنی شانس بیشتر درست بودن.
چرا راه سوم؟ سند میگه RLHF مدل رو تشویق میکنه چیزی بگه که آدمها خوششون میاد، و این میتونه به چاپلوسی و توهمهای مطمئننما (Hallucination) برسه (درس توهم مدل). یه اثر دیگه هم داره به اسم افت حالت (Mode Dropping): مدل یه سبک رو ترجیح میده و احتمال بقیهی جوابهای ممکن رو کم میکنه، که شکل ملایمتر همون چیزیه که بهش میگن فروپاشی حالت (Mode Collapse). جوابی که به نظر آدم قانعکنندهست، لزوما برای یه کار خودکار بیناظر قابل اعتماد نیست.
یه نکتهی صادقانه: جزئیات روش RLCD منتشر نشده (معماری رو هم چند بخش پایینتر باز میکنیم)، و سند هم میگه Jev با دادهی مشتریها شخصیسازی نمیشه؛ یه مدل برای همهست. شما جوابهاش رو فقط از راه خود درخواست شکل میدید: state، متن سوال و توضیح گزینهها.
زیر کاپوت: Jev ترنسفورمره؟ اصلا LLMه؟
تا اینجا دیدیم Jev از بیرون چی کار میکنه. حالا سوال اصلی: توی اون جعبه چیه؟ همون ترنسفورمری (Transformer) که ChatGPT و Claude روش ساخته شدن (درس ترنسفورمر چیست)، یا یه چیز کاملا تازه؟ شاید هم یه LLM معمولیه که فقط کارش رو عوض کردن؟
اول یه چیز رو صاف بگم: TypeSafe تا امروز (۲۵ مهر ۱۴۰۵) نه مقالهی فنی داده، نه وزنهای مدل رو منتشر کرده، نه گفته چند پارامتر (Parameter) داره. مدیرعاملش توی بحث Hacker News گفته معماری رو فعلا پیش خودشون نگه میدارن و شاید بعدا مقاله بنویسن. پس هر کی با اطمینان بهتون گفت «Jev فلان معماریه»، داره حدس میزنه. کاری که ما اینجا میکنیم اینه که مثل یه کارآگاه، چیزهایی که خودشون گفتن رو از حدس بقیه جدا کنیم، و ببینیم سرنخها به کدوم طرف اشاره میکنن.
توی بلاگ رونمایی (۲۴ شهریور ۱۴۰۵، یعنی ۱۵ سپتامبر ۲۰۲۶)، TypeSafe فقط سه تا کلمه دربارهی ساختش گفته: یه معماری تازه (New Model Architecture)، یه نمونهگیر موازی (Parallel Sampler) برای سرعت، و روش آموزش RLCD. یه جملهی دیگه هم هست که از همه مهمتره: Jev همهی احتمالها رو موازی بیرون میده، نه اینکه تکه به تکه بنویسه. توی پرسشهای پرتکرار همون صفحه هم یه سوال گذاشتن به اسم «Jev فقط یه LLM کوچیکتره؟»، ولی جوابش رو ننوشتن.
چهار سرنخ که میگن مثل یه مدل زبانی میخونه
سرنخ اول پوله. Jev برای هر توکن (Token) ورودی پول میگیره (درس توکن). یعنی متن شما رو مثل LLMها اول به تکههای کوچیک میشکنه، بعد میخونه. یه مدل که با قاعده و کلمهی کلیدی کار کنه، به توکن نیازی نداره.
سرنخ دوم اندازهی جاست. سند میگه هر درخواست تا ۶۴ هزار توکن جا داره، و با یه سرآیند خاص تا ۲۶۲ هزار توکن. این عددها درست شبیه پنجرهی متن (Context Window) مدلهای زبانی امروزه، و تقریبا همیشه یعنی توی دلش مکانیزم توجه (Attention) هست (درس مکانیزم توجه). یه نکتهی ریز هم توشه: سند میگه با متن خیلی بلند Jev کندتر و کمدقتتر میشه. این دقیقا همون رفتاریه که از ترنسفورمرها سراغ داریم، چون حساب توجه با بلند شدن متن خیلی سنگینتر میشه.
سرنخ سوم خود سند آموزشه. صفحهی «AI primer» با این شروع میشه که مدلهای زبانی پیشآموزشدیده (Pretrained Language Model) تا حالا دو جور برای کار آماده شدن، RLHF و RLVR، و TypeSafe راه سوم رو اضافه کرده (درس پیشآموزش). حرف رو اینجوری چیدن که انگار نقطهی شروع هر سه یکیه: یه مدل زبانی که اول کلی متن خونده. این رو صریح ننوشتن، ولی جملهبندی خیلی به این طرف میره.
سرنخ چهارم ورودیه. Jev زبان آدمیزاد رو میفهمه، با غلط املایی، با JSON، با فهرست، بی اینکه براش مثال آموزشی بدید. این همون چیزیه که بهش میگن دستهبندی بی مثال (Zero-shot Classification)، و توی دنیای امروز تقریبا فقط مدلهایی که روی حجم عظیمی از متن آموزش دیدن این کار رو خوب بلدن. مدیرعامل TypeSafe هم توی Hacker News قبول کرده که «zero-shot» توصیف درستیه.
فرق بزرگ: نوشتن تکه به تکه، یا یه دور خوندن
این تنها چیزیه که دربارهی درونش مطمئنیم، و مهمترینش هم هست. یه LLM مثل ChatGPT جوابش رو تکه به تکه مینویسه؛ هر تکه رو بر اساس همهی تکههای قبلی حدس میزنه. به این کار میگن تولید خودبازگشتی (Autoregressive Generation) (درس پیشبینی تکهی بعد). مثلا فرض کنید جواب «billing» سه تا توکن باشه. مدل باید سه بار پشت سر هم کل شبکهش رو اجرا کنه، و هر بار منتظر بمونه بار قبلی تموم بشه. هر کدوم از این دورها رو بهش میگن یه گذر رو به جلو (Forward Pass).
Jev این حلقه رو نداره. متن رو یه بار میخونه و از همون یه بار خوندن، احتمال همهی گزینههای همهی سوالها رو با هم درمیاره. مدیرعامل TypeSafe هم وقتی یکی پرسید «یعنی هر جواب موازی ساخته میشه؟» تایید کرد، و گفت برای نوشتن تکه به تکه «مالیات سنگینی» میدید.
همین یه فرق، سه تا چیز عجیب Jev رو توضیح میده. اول اینکه چرا خروجی مجانیه: توی LLM هر توکن خروجی یه دور کامل خرج داره، ولی Jev اصلا خروجی متنی نمیسازه که خرج داشته باشه؛ همهی خرج همون خوندنه. دوم اینکه چرا انقدر سریعه (۷۰ تا ۵۰۰ میلیثانیه): هیچ حلقهای نیست که منتظرش بمونه. سوم اینکه چرا هیچوقت جواب بیربط یا خارج از گزینهها نمیده: چون جواب رو نمینویسه، فقط بین گزینههایی که شما دادید احتمال پخش میکنه، شبیه کاری که سافتمکس (Softmax) میکنه (درس سافتمکس). ولی یادتون باشه: گزینهی غلط ولی معتبر رو هنوز میتونه انتخاب کنه، و خود مدیرعامل هم گفته این مدلها احتمالاتیان و ممکنه با اطمینان اشتباه کنن.
سه حدس دربارهی توی جعبه
از وقتی Jev اومده، برنامهنویسها توی Hacker News و Reddit سه تا حدس زدن. ترنسفورمرها دو تا نیمه دارن: رمزگذار (Encoder) که متن رو میفهمه و رمزگشا (Decoder) که متن مینویسه (درس رمزگذار و رمزگشا). دو تا از حدسها سر همینه که Jev از کدوم نیمه ساخته شده.
- حدس اول: یه LLM رمزگشا که حلقهی نوشتنش رو برداشتن. یعنی یه مدل زبانی معمولی، از همون خانوادهای که ChatGPT ازشه (درس فقط رمزگشا)، که به جای «بنویس تکهی بعد» یه سر تازه (Head) روش گذاشتن که مستقیم احتمال گزینهها رو بده، و بعد با RLCD حسابی آموزشش دادن. بیشتر کسایی که توی بحثها نظر دادن همین رو گفتن، و با همهی سرنخها هم جور درمیاد: توکن، پنجرهی ۲۶۲ هزارتایی، و اون جملهی «مدلهای زبانی پیشآموزشدیده».
- حدس دوم: یه رمزگذار، شبیه BERT. BERT، کوتاهشدهی Bidirectional Encoder Representations from Transformers، یعنی «نمایش دوطرفه با رمزگذار ترنسفورمر»، مدل معروف گوگل از سال ۲۰۱۸ (درس فقط رمزگذار). این مدلها متن نمینویسن، فقط میفهمن و دستهبندی میکنن؛ یعنی دقیقا کار Jev. یکی توی Hacker News نوشت «این فقط BERT با دادهی بیشتره». ولی یه چیز جور درنمیاد: BERT اصلی فقط ۵۱۲ توکن جا داشت و نسخهی تازهترش، ModernBERT، حدود ۸ هزار. ۲۶۲ هزار توکن برای این خانواده خیلی دوره. یکی دیگه هم جواب داد که مدلهای BERTمانند برای اینکه همهجور سوالی رو بی مثال جواب بدن، زیادی کوچیکن. جواب وسط هم این بود: شاید BERTمانند، ولی با داده و محاسبه و دستور آموزش LLMهای امروز.
- حدس سوم: دیفیوژن. مدلهای دیفیوژن (Diffusion) کل خروجی رو با هم و در چند قدم صاف میکنن، نه تکه به تکه. این هم با «همه با هم» جور درمیاد. یکی هم گفت با یه مدل زبانی دیفیوژنی تونسته رابطی شبیه Jev بسازه. ولی برای خود Jev هیچ مدرکی نیست؛ فقط حدسه.
منبع حدسها: بحثهای Hacker News دربارهی رونمایی Jev و پروژهی OpenJev (مهر ۱۴۰۵)؛ هیچکدوم رو TypeSafe تایید نکرده.
پس Jev یه LLMه یا نه؟
جوابش بستگی داره منظورمون از LLM چی باشه. اگه LLM یعنی «یه مدل بزرگ که زبان آدم رو میفهمه»، به احتمال زیاد آره؛ همهی سرنخها میگن Jev متن رو مثل یه مدل زبانی بزرگ میخونه، و به احتمال زیاد روی ترنسفورمر ساخته شده. اگه LLM یعنی «مدلی که متن مینویسه»، نه؛ Jev یه کلمه هم نمینویسه. توی خود Hacker News هم سر همین دعوا بود؛ یکی میگفت «ورودیش زبان آدمه، پس LLMه»، یکی میگفت «هیچ شباهتی به LLM سنتی نداره».
اگه بخوام با همون اتاق جداسازی نامه بگم: کارمند پشت میز و کارمند جلوی قفسهها احتمالا چشمهاشون یکیه؛ هر دو نامه رو همونقدر خوب میخونن. فرقشون توی دستشونه. اولی قلم داره و جواب مینویسه، دومی مهر داره و نامه رو میندازه توی یه خونه. پس حدس شما درسته: Jev به احتمال زیاد یه جور LLMه با کارکرد متفاوت؛ همون مغزی که میخونه، با دهنی که به جای حرف زدن تصمیم میگیره. فرق اصلیش هم احتمالا نه توی چیدمان لایهها، که توی آموزششه: RLCD که مدل رو مجبور میکنه احتمالهاش راست بگن.
TypeSafe توی مانیفستش (Manifesto) یه اسم دیگه هم برای این طرز فکر آورده: عصبینمادین (Neuro-symbolic)؛ یعنی شبکهی عصبی برای دیدن و فهمیدن، و منطق نوشتهشده با کد برای تصمیم نهایی. این همون چیزیه که توی بخش الگوها دیدیم: Jev میفهمه، کد شما تصمیم میگیره.
بقیه چطوری شبیهش رو ساختن
چند روز بعد از رونمایی، یه پروژهی متنباز (Open Source) به اسم OpenJev اومد که خودش صاف میگه فقط رابط Jev رو با مدلهای باز ساخته، نه خود مدل و آموزشش رو. روشش سادهست و نشون میده چنین چیزی با یه LLM معمولی چطور ممکنه:
- state رو یه بار به یه مدل زبانی باز میدن و حافظهی KV کش رو نگه میدارن.
- برای هر سوال، یه شاخه از همون حافظه جدا میکنن و سوال رو بهش اضافه میکنن.
- مدل رو وادار نمیکنن بنویسه؛ فقط نگاه میکنن به عدد خامی که مدل به اولین توکن هر گزینه داده (بهش میگن لاجیت، Logit)، و با سافتمکس از اون عددها احتمال میسازن.
یکی از سازندهها گزارش داد هر سوال اینجوری حدود ۶۳ میلیثانیه طول کشیده. ولی همهی بحثها سر یه نتیجه به هم رسیدن: رابط رو میشه کپی کرد، ولی سرعت واقعی و مخصوصا کالیبره بودن احتمالها از خود مدل و آموزشش میاد، و اون رو هنوز کسی بیرون از TypeSafe نساخته. یه LLM معمولی که اینجوری ازش استفاده کنی، معمولا احتمالهاش زیادی مطمئنه (درس توهم مدل).
سوال خوب نوشتن
سند میگه «این احتمالا مهمترین مفهوم این راهنماست»: سوالها باید روشن، باریک، مشخص و اتمی باشن. سوال کلی چند قضاوت رو پشت یه جواب قایم میکنه؛ سوال اتمی هر قضاوت رو جدا جلوی چشم شما میذاره تا بسنجید، تنظیم کنید و ترکیب کنید.
- یه سوال، یه چیز. بهجای «این پیشنهاد استارتاپی رو امتیاز بده»، سه تا سوال: اندازهی بازار، شدنی بودن فنی، تفاوت با رقیب. بعد با وزنهای خودتون ترکیب کنید.
- به بخش درست اشاره کنید. اگه state چند بخش داره، توی سوال با یه مسیر نقطهای و بکتیک بهش اشاره کنید، مثلا `ticket.messages[0].text`. اینجوری مدل میدونه کدوم بخش رو بسنجه.
- فقط چیزی که لازمه رو بفرستید. متن بیربط حواس مدل رو پرت میکنه. پیش از فرستادن، توی کد فیلتر کنید.
- به دانستهی مدل تکیه نکنید. اطلاعات بهروز رو از پایگاه دانش خودتون بیارید و بذارید توی state (درس RAG).
- کار قطعی رو بدید به کد. «سی روز گذشته؟» رو کد حساب میکنه، نه مدل.
- ساختار، وقتی لازمه. متن سوال و توضیحها میتونن شیء باشن: سوال توی یه فیلد، دادهی کمکی (مثلا یه رکورد از پایگاه داده) توی فیلد دیگه. سند میگه حداکثر ۶۴ لایهی تودرتو قبوله.
چهار الگوی ساختن
سند TypeSafe یه فکر اصلی داره: نرمافزار معمولی بنویسید و Jev رو فقط جایی بذارید که هوش لازمه. کنترل کار، قانونهای قطعی و کارهای پیامددار مال کد باشه؛ Jev فقط قضاوتهای باریک. این رو با ایجنتها مقایسه میکنه (درس ایجنت)، که خودشون قدم بعدی رو انتخاب میکنن و هر دور میتونن از مسیر خارج بشن. چهار الگوی رسمی:
- فناوت حدسی (Speculative Fan-out). همهی سوالهایی که شاید لازم بشن رو با هم بپرسید، حتی اونایی که فقط برای بعضی ورودیها مهمن، و کد تصمیم بگیره کدوم رو استفاده کنه. مثلا «شدت باگ» رو همیشه بپرسید؛ اگه تیکت باگ نبود، جوابش رو نادیده بگیرید. سند با یه نمونه نشون داده ۱۳ سوال توی یه درخواست، ۱۲٫۲ برابر ارزونتر و ۱۰ برابر تندتر از ۱۳ درخواست جداست، بی هیچ فرقی توی جوابها.
- مسیریابی با اطمینان (Confidence-gated Routing). جواب میگه «چی»؛ اطمینان میگه «انجامش بدیم یا نه». همون مثال بانکی بالا.
- امتیاز ترکیبی (Composite Scoring). یه قضاوت پیچیده رو به چند امتیاز اتمی بشکنید و با وزنهای خودتون ترکیب کنید؛ مثلا رتبهبندی رزومهها با چند معیار.
- مسیریابی نیت (Intent Routing). هر درخواست رو دستهبندی کنید و بفرستید پیش بهترین جوابدهنده: کد قطعی، یه LLM تخصصی، یا یه آدم.
و یه قانون دربارهی ترتیب: سوالهای یه درخواست به هم وابسته نیستن. فقط وقتی دو درخواست بفرستید که کد واقعا بدون جواب اولی نتونه دومی رو بسازه؛ مثلا اول بفهمه کدوم سه تا ابزار مرتبطترن، بعد متن کامل همون سه تا رو بیاره و دوباره بسنجه.
Jev کنار LLM، نه بهجاش
خیلیها اول فکر میکنن Jev جای LLM رو میگیره. سند صریح میگه نه: Jev جایگزین مدلی که پشت ابزارهای برنامهنویسی یا چتباتهاست نیست، متن نمینویسه، کد نمینویسه و گفتگو نمیکنه. بهترین جاش کنار LLM ئه: Jev درخواستها رو تند و ارزون دستهبندی میکنه، اونایی که مطمئنه رو خودش راه میاندازه، و اونایی که پیچیدهان یا اطمینانش پایینه رو میفرسته پیش یه LLM یا آدم.
یه کاربرد دیگه هم هست: نگهبان (Guardrail). یعنی هر پیامی که میره توی یه اپ LLM یا ازش بیرون میاد، با یه درخواست Jev بسنجید (مثلا «خطرناکه؟»، «اطلاعات شخصی داره؟») و بر اساس احتمال، رد کنید، بفرستید برای بررسی، یا بذارید رد بشه.
نمونهکارهای واقعی
سند رسمی بیش از بیست نمونهی کامل داره (بهشون میگه دستور آشپزی، Cookbook). چند تا که عدد دارن یا یه فکر تازه یاد میدن:
- بازچینی نتیجهی جستجو (Re-ranking). برای ۴۰ پرسش حقوقی، اول یه جستجوی ساده ۳۰ متن کاندید آورد، بعد Jev برای هر جفت «پرسش و متن» یه سوال پرسید. درست بودن جواب اول از ۵ درصد به ۱۸ درصد رسید، و بودن جواب درست توی ده تای اول از ۳۸ به ۶۲ درصد.
- چک کردن نقلقول. برای پیدا کردن نقلقولهای غلط یا ساختگی، یه Choice میپرسه که «متن اصلی این ادعا رو تایید میکنه یا نه».
- دستهبندی متنهای RAG. هر تیکهی پیداشده رو امتیاز میده، و کد تصمیم میگیره کدوم به مدل جوابدهنده برسه.
- دستهبندی گزارشهای سالانه. گزارش شرکتها رو به ۷۵ گروه صنعتی دسته میکنه، و اگه اطمینان پایین بود، بهجای گروه دقیق، بخش کلیتر بالاترش رو گزارش میده.
- بیرون کشیدن تاریخ. مدل فقط تیکههای تاریخ (روز، ماه، سال، یا «نیومده») رو با Choice انتخاب میکنه؛ حساب و مقایسه با کده.
- آبشار بیرون کشیدن داده. اول یه مدل کوچیک داده رو درمیاره، Jev هر فیلد رو میسنجه، و فقط فیلدهای مشکوک میره سراغ مدل بزرگ استدلالی؛ بیشتر کیفیت مدل بزرگ، با بخش کوچیکی از هزینهش.
- فیلتر چت یه پخش زنده. توهین، هرزنامه و لو دادن داستان رو میگیره، سوالها رو برجسته میکنه؛ هر پیام یه درخواست با چند سوال، هشت پیام همزمان.
نه لبهی ناصاف
یه کار خوب TypeSafe اینه که خودش یه صفحه نوشته با عنوان «Jev کامل نیست» و فهرست جاهایی که نسخهی ۱٫۱۳ میلنگه (آخرین بازبینی، ۲ اکتبر ۲۰۲۶). به این جاها میگن ناصافی (Jaggedness): مدلی که توی یه کار خیلی خوبه، توی یه کار کناری یهو ضعیف میشه. نه مورد:
۱. تحتاللفظی خوندن. Jev سوالی که نوشتید رو جواب میده، نه سوالی که منظورتون بود. «نه»ها و قیدها رو همونطور که نوشته شده میخونه. اگه دیدید دارید برای یه جواب غلط توضیح میدید «منظورم این بود»، همون توضیح نیمهی جاافتادهی سوالتونه.
۲. حساب و شمردن. Jev ماشینحساب نیست و درست نمیشمره، چه تعداد حروف یه کلمه، چه تعداد چیزها توی یه فهرست. با عددهای خام هم بد کار میکنه: مثلا با کد رنگ هگز بدتر از اسم رنگ. راه: شمردن و حساب توی کد.
۳. تاریخ و ساعت. تاریخ رو متن میبینه، نه یه کمیت مرتب. «کدوم زودتره؟» یا «چند روز فاصله داره؟» قابل اعتماد نیست. راه: تیکههای تاریخ رو بگیره، مقایسه با کد.
۴. چند واسطه. نفی دوگانه و «ویژگی یه ویژگی از یه چیز» دقت رو کم میکنه. راه: سوال رو مستقیم بنویسید.
۵. state بزرگ و پر از چیز بیربط. هر چی متن بیربط بیشتر، دقت کمتر. راه: پیش از فرستادن فیلتر کنید.
۶. متن فریبکار. state رو داده میبینه، نه دشمن. متنی که عمدا بخواد جواب رو جابهجا کنه، میتونه. بخش بعد ریزش رو میگه.
۷. سوال و توضیح ضد و نقیض. اگه متن سوال یه چیز بخواد و توضیح گزینهها یه چیز دیگه، گیج میشه؛ مثلا Noulای که «بله»ش یعنی نه.
۸. ترتیب گزینهها. گاهی به گزینهی اول تمایل داره. راه: ترتیب رو عوض کنید و ببینید جواب ثابت میمونه یا نه. یه آزمون مستقل هم دید با برعکس کردن ترتیب، احتمالها حدود ۰٫۱ جابهجا شدن، و توی بیست اجرای یکسان، یه احتمال بین ۰٫۶۷ و ۰٫۷۶ نوسان کرد.
۹. نوشتن متن. برای متن ساختن آموزش ندیده. برای بیرون کشیدن داده، اول با کد یا یه مدل دیگه کاندیدها رو پیدا کنید، بعد Jev انتخاب کنه کدوم درسته.
شمردن، به روش درست
مثال خود سند: میخواید بدونید توی یه فهرست چند تا اسم میوه هست. نپرسید «چند تا میوه هست؟». برای هر کدوم یه Noul جدا بپرسید، «این اسم یه میوهست؟»، همه رو توی یه درخواست، بعد توی کد بشمرید چند تا بالای آستانهان. اینجوری مدل فقط کاری رو میکنه که بلده، یعنی قضاوت، و کد کاری رو که بلده، یعنی شمردن.
یه نکتهی دیگه از همون صفحه: Jev هر سوال رو جدا جواب میده، پس ممکنه جوابها با هم ناسازگار باشن. یه آزمون مستقل یه داستان سرقت از موزه رو بهش داد و دید هر جواب بهتنهایی قابل دفاع بود، ولی ترکیبشون با هیچ سناریوی واقعی جور نبود. اگه جوابها باید با هم سازگار باشن، یا کل سناریو رو یه Choice کنید، یا توی کد سازگاری رو چک کنید.
امنیت و تزریق دستور
تزریق دستور (Prompt Injection) یعنی متنی که توی داده قایم شده و سعی میکنه مدل رو از راه به در کنه (درس تزریق دستور). خود سند گفته Jev متن فریبکار رو بهطور پیشفرض دشمن نمیبینه. عددهایی که بیرون گزارش شده:
- یه آزمون رسانهای (۲۱ سپتامبر ۲۰۲۶): یه یادداشت جعلی «کاربر قبلا تایید کرده» کنار یه دستور خطرناک پاک کردن فایل، احتمال «بلاک کن» رو از ۰٫۷۶ به ۰٫۴۸ رسوند. خود نویسنده هم گفت این یه آزمونه، نه یه سنجش کامل.
- یه مطالعهی کاربرها روی ۴۸۶ بحث حذف مقاله در ویکیپدیا: یه جملهی «بحث بالا رو نادیده بگیر» دقت رو از ۹۶٫۵ درصد به ۲۶٫۵ درصد رسوند.
- توی یه آزمون نگهبان فرمان: از ۳۰ دستور خطرناک صریح، هیچکدوم رد نشد؛ ولی ادعای «صاحب سیستم تایید کرده» ۳ بار از ۳۰ بار رد شد.
اینها از منبعهای مختلفن و همه رو مستقل تکرار نکردن، ولی یه پیام مشترک دارن: جواب Jev رو مستقیم به یه کار برگشتناپذیر وصل نکنید.
نشونه، نه کلید در
- نشونه، نه دروازه. برای کارهایی مثل پاک کردن، پرداخت یا فرمان خطرناک، قانون قطعی کد و تایید آدم بمونه؛ Jev فقط یه نشونه بده.
- هر چی Jev دید و گفت رو ثبت کنید. چون توضیح نمیده، برای اینکه بعدا بدونید چرا یه تصمیم گرفته شد، state، سوالها، نسخهی مدل و جواب رو نگه دارید.
- نسخه رو قفل کنید. اسم مستعار jev-latest با هر نسخهی تازه جابهجا میشه و جوابها ممکنه عوض بشن. اگه مرزهاتون رو روی یه نسخه تنظیم کردید، شمارهی دقیقش رو بفرستید، و پیش از عوض کردن، دوباره بسنجید.
- دادهی حساس رو حذف کنید پیش از فرستادن، و دنبال جملههای «تایید شده» و دستورهای قایمشده توی state بگردید.
- روی کار خودتون آزمون کنید: تزریق، ادعای تایید، و عوض کردن ترتیب گزینهها.
دربارهی داده: سند میگه Jev روی درخواستها و جوابهای مشتری آموزش نمیبینه، و برای شرکتهای بزرگ نگه نداشتن هیچ دادهای (Zero Data Retention) هم قابل مذاکرهست. سرویس توی آمریکا میزبانی میشه و منطقهی دیگهای اعلام نشده.
نسخهها، قیمت و محدودیتها
تا امروز (۲۵ مهر ۱۴۰۵) دو نسخه هست: Jev 1.13 با شناسهی jev-1.13.0 و Jev 1.14 با شناسهی jev-1.14.0 که از ۱۴ اکتبر ۲۰۲۶ اومده. دو اسم مستعار هم هست: jev-latest که به آخرین نسخهی رسمی و پایدار اشاره میکنه (فعلا ۱٫۱۳)، و jev-preview که به آخرین نسخه، رسمی یا نه (فعلا ۱٫۱۴).
قیمت هر دو یکیه: ۴۲ دلار برای هر میلیارد توکن ورودی، یعنی ۰٫۰۴۲ دلار برای هر میلیون. فقط ورودی پول داره؛ خروجی رایگانه. مثلا یه پیام پشتیبانی با پنج سوال حدود ۶۰۰ توکن ورودی داره؛ هر میلیون پیام اینجوری حدود ۲۵ دلار میشه. یه گزارش بیرونی هم حساب کرده امتیاز دادن به ۵۰ میلیون ردیف نظر کاربر حدود ۲۰ دلار درمیاد.
اندازهی متن و محدودیتها
- دو اندازهی متن (Context Length). کل درخواست (state بهاضافهی همهی سوالها) تا ۶۴ هزار توکن، و state بهاضافهی هر سوال تنها تا ۳۲ هزار. تعداد سوال محدودیت جدا نداره؛ فقط باید توی این دو اندازه جا بشه (درس پنجرهی متن).
- متن بلند. با یه هدر جدا، هر دو اندازه به ۲۶۲ هزار توکن میرسه، با همون قیمت؛ ولی به گفتهی سند کندتر و کمدقتتره، پس فقط وقتی لازمه. سازنده اسم این هدرها رو گذاشته «منطقهی خطر» (Danger Zone)، که خودش یه هشداره.
- قواعد درخواست. حداکثر ۳۲ مگابایت، فقط JSON با UTF-8، حداکثر ۶۴ لایهی تودرتو، و فقط عدد محدود؛ عدد خیلی بزرگ یا شناسه رو به شکل متن بفرستید.
- محدودیت سرعت. برای هر سازمان، بر اساس توکن و درخواست در ثانیه. بیشتر از اون، خطای ۴۲۹ میده، و کتابخونههای رسمی خودشون با فاصلهی بیشتر دوباره امتحان میکنن.
عددها: سرعت و دقت
اینجا باید خیلی صادق باشیم، چون عددها از جاهای مختلف میان. سند رسمی میگه بیشتر درخواستها حدود ۱۰۰ میلیثانیه طول میکشن. یه آزمون مستقل آلمانی حدود ۳۰۰ میلیثانیه دید، در برابر ۲ تا ۷ ثانیه برای یه LLM سبک.
برای دقت، معروفترین عدد از آزمون خود TypeSafe با چهار گردشکار واقعیه (پاسخ به حادثهی امنیتی، بررسی ردپای ایجنت، پردازش فاکتور و خدمات مشتری):
Jev با ۶۷٫۸ درصد، تقریبا هماندازهی GPT-5.6 Terra (۶۷٫۹) و حدود ۶ امتیاز پایینتر از بهترینها. ولی هزینهی هر مورد ۰٫۰۰۰۴ دلار در برابر ۰٫۰۳ تا ۰٫۱۸ دلار، و زمانش ۰٫۴ ثانیه در برابر ۱۰ تا ۳۸ ثانیه. سه قید مهم: این آزمون رو تیم خود TypeSafe ساخته؛ «جواب درست» میانگین جواب دو تا LLM بزرگ بوده، نه برچسب آدم؛ و LLMها از راه یه ابزار خود TypeSafe جواب دادن.
یه آزمون مستقل روی ۲۰۰ مورد، Jev رو ۷۲٫۵ درصد سنجید، در برابر ۸۴٫۰ و ۷۹٫۰ برای دو LLM بزرگ، و یه مطالعهی بزرگتر دید Jev توی ۱۴ از ۱۵ کار از بهترین LLM عقبتره. خلاصهی منصفانه: Jev از بهترینها کمی کمدقتتره، ولی دهها تا صدها برابر تندتر و ارزونتره. اگه کار شما تصمیمهای زیاد و تکراری با گزینههای معلومه، این معامله معمولا میارزه.
یه عدد دیگه: صفر درصد خطای شکل
TypeSafe میگه خطای «جواب بیشکل» Jev صفر درصده، یعنی هیچوقت جوابی نمیده که توی شکل تعریفشده جا نشه، در حالی که توی آزمون خودشون این خطا برای بعضی LLMها از کمتر از یک درصد تا بیش از ۴۵ درصد بود. این درسته، ولی معنیش رو دقیق بدونید: یعنی جواب همیشه یکی از گزینههای شماست، نه اینکه همیشه گزینهی درست باشه. یه گزارش امنیتی هم همین رو یادآوری کرده: «بیخطا در شکل» با «درست» یکی نیست.
یه نمایش معروف هم ساختن: Jev بازی Doom رو بازی کرد، با خوندن وضعیت بازی حدود ده بار در ثانیه، با هزینهی تقریبی ۷ دلار در ساعت. خودشون هم گفتن یه ربات نوشتهشده با کد بهتر بازی میکنه؛ هدف نشون دادن سرعت بود، نه بازیکن بهتر.
مقایسه با بقیه
دستهبند کلاسیک یعنی مدل کوچیکی که خودتون با هزاران مثال برچسبدار برای یه کار خاص آموزش میدید (درس فاینتیون). جاش هنوز محفوظه، مخصوصا وقتی دادهی زیاد و یه کار ثابت دارید. یه ترکیب جالب هم سند پیشنهاد کرده: احتمالهای Jev رو بهعنوان ویژگی بدید به یه مدل کلاسیک یادگیری ماشین، تا ترکیب رو اون یاد بگیره.
رقیبها
دو هفته بعد از Jev، شرکت OpenAI توی رویداد سالانهش (۲۹ سپتامبر ۲۰۲۶) یه چیز شبیه معرفی کرد به اسم Decisions API، که اون هم بهجای متن، یه گزینه از فهرست شما برمیگردونه. طبق گزارشها حدود ۱۵۰ میلیثانیه طول میکشه، تصویر هم میگیره، و قیمتش ۰٫۱۰ دلار برای هر میلیون توکن ورودیه، یعنی بیش از دو برابر Jev. گزارشهایی هم هست که شرکتهای بزرگ دیگه هم مدل تصمیم ساختن، و چند پروژهی متنباز هم با همین فکر شروع شده.
یه تحلیلگر توی همون هفتهی اول پیشبینی کرده بود که آزمایشگاههای بزرگ زود مدل تصمیم میسازن و رقابت سر قیمت میشه. یعنی خود این فکر، «مدل برای تصمیم، نه متن»، داره یه دستهی تازه میشه، نه فقط یه محصول.
شرکت و تاریخچه
TypeSafe یه استارتاپ سانفرانسیسکوییه که ۱۵ سپتامبر ۲۰۲۶ از حالت پنهان بیرون اومد و همون روز Jev رو منتشر کرد، با ۴۰ میلیون دلار سرمایهی بذری. بنیانگذارهاش، طبق گزارشها، دیوگو آلمیدا (Diogo Almeida، مدیرعامل) که پیشتر پژوهشگر OpenAI و Google Brain بوده، ساشا شنگ (مدیر عملیات) و اریک گافنی (مدیر فنی) هستن.
پذیرش خیلی تند بود. شرکت Vercel که یه دروازهی مدل هوش مصنوعی داره، گزارش کرد ۱۳ درصد کاربرهای پولیش توی ۲۴ ساعت اول Jev رو امتحان کردن، دو برابر هر مدل قبلی. حدود سه هفته بعد، ۹ اکتبر، TypeSafe ۸۷۰ میلیون دلار با ارزش ۷٫۵ میلیارد دلار جذب کرد، به رهبری Andreessen Horowitz و با حضور Sequoia و DCVC. یعنی طبق تعریف درس واژهنامهی استارتاپ، توی کمتر از یه ماه یونیکورن شد. یه عدد هم منتشر شده که درآمد سالانهش توی هفت روز به ۱۰۰ میلیون دلار رسیده، ولی فقط از زبون یه سرمایهگذار گفته شده و ثابت نشده.
۲ اکتبر صفحهی نقطهضعفهای ۱٫۱۳ منتشر شد، ۱۴ اکتبر نسخهی ۱٫۱۴ با عکس و Box، و ۱۵ اکتبر مانیفست شرکت. تا امروز دسترسی از راه ثبتنام و کنسول خودشونه، و توی بعضی دروازههای مدل هم هست.
شروع، قدم به قدم
اگه برنامهنویسید، این راه سادهترینه:
- زمین بازی (Playground). توی کنسول TypeSafe، بی یه خط کد: یه متن رو بهعنوان state بچسبونید، یه سوال اضافه کنید، مثلا Noul «این پیام فوریت داره؟»، و جواب رو ببینید. بعد چند سوال از هر سه نوع با هم.
- کلید (API Key). از بخش کلیدهای کنسول بسازید و توی یه متغیر محیطی به اسم TYPESAFE_API_KEY بذارید، نه توی کد.
- نصب کتابخونه. پایتون ۳٫۱۰ به بالا: pip install typesafe-sdk. جاوااسکریپت با Node ۲۰ به بالا: npm install @typesafe-ai/sdk.
- اولین درخواست. یه state و سه سوال (یه Choice، یه Score، یه Noul) بفرستید و جوابها رو چاپ کنید؛ نمونهی پایین.
- آستانهها. چند صد نمونهی واقعی از کار خودتون با جواب درست جمع کنید، و مرزهای اطمینان رو روی اونها بذارید.
- ثبت و قفل نسخه. state، سوال، نسخه و جواب رو ثبت کنید و شمارهی دقیق نسخه رو بفرستید.
from typesafe_sdk import Choice, Noul, Score, TypeSafeClient
ticket = "Our API started returning 500 errors 20 minutes ago."
with TypeSafeClient(model="jev-latest") as client: # reads TYPESAFE_API_KEY
r = client.system_one(
state=ticket,
questions={
"department": Choice("Which team should handle this?", {
"billing": "Payment or subscription issues",
"technical": "Bugs or integration problems",
"sales": "Pricing or account questions",
}),
"frustration": Score("How frustrated is the customer?", [
"Calm", "Concerned but civil", "Very angry",
]),
"is_urgent": Noul("The message conveys urgency."),
},
)
print(r.choices["department"].choice) # technical
print(r.scores["frustration"].score) # 0.67
print(r.nouls["is_urgent"].noul) # 0.99عددهای کامنت، جواب نمونهی خود سنده و ممکنه با نسخهی بعد عوض بشه. اگه با یه ابزار برنامهنویسی هوش مصنوعی کار میکنید، سند یه «مهارت ایجنت» (Agent Skill) هم داره که به اون ابزار یاد میده کد درست برای Jev بنویسه. ولی یادتون باشه Jev خودش جای مدل اون ابزار رو نمیگیره.
کی Jev، کی LLM، کی کد
سندهای رسمی این درس ۲۵ مهر ۱۴۰۵ (۱۷ اکتبر ۲۰۲۶) خونده و ذخیره شدن؛ Jev خیلی تازهست و عددها، نسخهها و قیمتها ممکنه زود عوض بشن.
قدم بعدی
یه بار دیگه به همون اتاق پست برگردید: نویسنده و تفکیککننده رقیب هم نیستن، همکارن. اگه میخواید بفهمید اون نویسنده چطور جواب بهتر و قابلاعتمادتر میده، درس خروجی ساختاریافته و درس توهم مدل جای خوبی برای ادامهست. ایستگاه آخر این مسیر هم دربارهی مدلها و زبان فارسیه.
جمعبندی. آنچه از این درس با خودتان میبرید.
- Jev متن نمینویسه؛ به سوالهای تایپدار دربارهی یه state جواب میده: Choice، Score، Noul و (آزمایشی) Box.
- هر جواب احتمال داره، و Choice و Score یه عدد اطمینان هم دارن که نشون میده چقدر مطمئنه.
- سوال باید باریک و اتمی باشه؛ کار سخت رو به چند سوال بشکنید و جوابها رو توی کد ترکیب کنید.
- حساب، شمردن، تاریخ و متن شلوغ نقطهضعفشه؛ و متن فریبکار میتونه جوابش رو جابهجا کنه، پس نشونهست نه کلید در.
- قیمتش ۰٫۰۴۲ دلار برای هر میلیون توکن ورودیه و خروجی رایگانه؛ به گفتهی خودش و آزمونهای مستقل، دقتش کمی پایینتر از بهترین LLMهاست ولی خیلی تندتر و ارزونتر.
خودتون رو بسنجید
۱۵ پرسش، هر بار تازه از میان ۳۰ پرسش این درس. آخرش فقط کارنامه رو میبینید: چند تا درست، چند تا نادرست.