tech-afternoon – Telegram
tech-afternoon
1.23K subscribers
174 photos
6 videos
6 files
166 links
تِک‌افترنون، رویدادی گاه‌به‌گاه است با موضوعات حول معماری و توسعه نرم‌افزار، این کانال هم برای اشتراک اخبار، آموزش، نکاتی حول مهندسی نرم‌افزار، دیتابیس‌، تکنولوژی و مدیریت تولید محصولات نر‌م‌افزاری خواهد بود.
youtube.com/@AminTechTalks/videos
امین مصباحی
Download Telegram
⚙️ نتایج دور ۲۳ از بنچمارک فریم‌ورک‌های وب توسط TechEmpower

سال‌هاست که TechEmpower بنچمارک‌های استانداردی طراحی می‌کنه تا فریم‌ورک‌های وب رو از جنبه‌های مختلف مثل کوئری‌های ساده، کوئری کش‌شده، JSON و... ارزیابی پرفرمنسی کنه.

اخیرا دور ۲۳ اجرا شده و نتایجش رو می‌تونید ببینید.

مستندات دقیق تست‌ها، کدها و... همه روی گیت‌هاب است. حتی سخت‌افزاری باهاش تست غیر ابری رو اجرا کردن (نسخه ابری هم طراحی می‌شه).

⚠️ توی دام اعداد نیوفتیم...
ملاک یک معمار نرم‌افزار یا معمار راهکار یا مدیر مهندسی نباید صرفا اعداد باشه، اینجوری همه باید برن با C بنویسن! باید ببینیم، چه نیاز و چه انتظاری داریم و بر اساس شرایطمون انتخاب کنیم... نرم‌افزار بیزنسی با نرم‌افزار HPC یا Streaming یا... فرق داره.

تست‌ها برای
JSON serialization
- Single query
- Multiple queries
- Cached queries
- Fortunes
- Data updates
- Plaintext
و روی سرور فیزیکی و ابری اجرا می‌شن. ۴۰ زبان و تعداد زیادی فریم‌ورک که از اینجا می‌تونید ببینید.

مثلا توی دور ۲۳ ASP.NET Core 9 AOT و معمولی هم حضور دارن 😉
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
tech-afternoon
🤖 تغییرات بزرگ هوش مصنوعی برای توسعه‌دهنده‌ها؛ نکات برجسته‌ی کنفرانس DeveloperWeek 2025 (قسمت ۱) کنفرانس DeveloperWeek 2025 یه فرق بزرگ با دوره‌های قبل داشت، اونم حضور پررنگ AI در روند کار تیم‌های مهندسی نرم‌افزار. هوش مصنوعی رو دیگه نباید یه ابزار تولید…
🤖 تغییرات بزرگ هوش مصنوعی برای توسعه‌دهنده‌ها؛ نکات برجسته‌ی کنفرانس DeveloperWeek 2025 (قسمت ۲)

*️⃣پذیرش، و سنجش موفقیت
معیار اصلی موفقیت توی استفاده از AI نباید تنها بازگشت سرمایه مالی باشه؛ یا اینکه چقدر داریم توش هزینه می‌کنیم و یا حتی چقدر توسعه‌دهنده‌هامون بابت تنبلی خوشحالن (تنبلی با صرفه‌جویی در زمان، خصوصا برای کارهای تکراری خیلی فرق داره). استفاده مداوم، رضایت تیم و میزان تعامل واقعی با ابزارهای AI از اهمیت بالایی برخورداره.
مثال: توی Augment Code معیارهایی مانند استفاده روزانه، پذیرش پیشنهادات و احساس رضایت توسعه‌دهنده‌ها به عنوان شاخص‌های موفقیت مطرح شده. به صورت کلی، باید شاخص «قابل اندازه‌گیری» برای سنجش اثربخشی AI در نظر بگیریم.

وینای پرنتی از Augment Code:
"معیار اصلی موفقیت، پذیرش مداوم ابزار است؛ نه فقط در روز اول بلکه در ماه‌های بعد."


*️⃣رهبری در عصر تحول AI
رهبران موفق، امروز باید خودشون تجربه استفاده از AI رو داشته باشند و فرهنگ نوآوری رو توی تیم‌هاشون ترویج بدن (این تجربه به معنی اینکه اکانت چت‌جی‌پی‌تی یا ... داره و باهاش دستور پخت کیک، یا بهترین زبان برنامه‌نویسی دنیا چیست رو می‌پرسه، منظورم نیست. رهبر فنی یا سازمانی باید بفهمه و تجربه استفاده واقعی کسب کنه). ساختارهای تیمی سنتی در حال دگرگونی هستن و نیاز به تیم‌های چندرشته‌ای که شامل توسعه‌دهنده، مدیر محصول و طراح محصول باشن، بیش از پیش احساس می‌شه.

پائولو زاکچلو (Google):
"ما شاهد تغییر از تیم‌های تخصصی به تیم‌های چندرشته‌ای هستیم که در آن، همه دست به کار شده و هوش مصنوعی نقش مشترکی ایفا می‌کند."


این مثال‌ها و نقل قول‌ها و صحبت‌ها، نشون می‌ده هوش‌مصنوعی، چت کردن نیست... توی جلسه امروز تک‌اسپاگتی هم با دوستان مرور کردیم، هوش‌مصنوعی باید در خدمت حل کردن مسئله باشه، مسئله مشخص! باید توی روند محصول باشه نه کمک‌دست موازی با توسعه‌دهنده که باهاش چت کنه و کمتر گوگل کنه، کمتر یاد بگیره، بیشتر کپی/پیست کنه!!

دوست داشتید به هوض‌مصنوعی‌هایی مثل Magma، Muse، BioEmu-1، MatterSim و... بندازید، پارادایم نگاه به مسائل به طور عمیقی در حال تغییره... و در حوزه توسعه نرم‌افزار هم Copilot و مشابهاتش، فقط بخش ناچیزی از ظرفیت‌هایی هستن که در حال شکل‌گیریه...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
در مورد C4: لزوم یادگیری برای توسعه‌دهنده + وجوب یادگیر برای معمار نرم‌افزار!

*️⃣چرا C4 به وجود آمد؟
C4 به این دلیل معرفی شد که مدل‌های سنتی معماری نرم‌افزار مشکل داشتند. UML به‌عنوان یک راه‌حل استاندارد معرفی شد، اما استقبال از آن کم بود، چون:

- پیچیدگی زیادی داشت.
- ابزارهاش سخت و قدیمی بودند.
- در روش‌های Agile کمتر مورد استفاده قرار می‌گرفت.
- خیلی توسعه‌دهنده‌ها دوستش نداشتن یا بلد نبودن.

نتیجه این شد که تیم‌های نرم‌افزاری معمولاً از نمودارهای بی‌نظم و پراکنده در Confluence یا روی تخته‌های سفید استفاده می‌کردن که باعث عدم وضوح در معماری می‌شد. C4 به عنوان راهی برای ساده‌تر کردن مستندسازی معماری بدون نیاز به UML مطرح شد.

مفاهیم پایه C4
C4 مخفف چهار سطح از معماری نرم‌افزار است:

1️⃣سطح سیستم (System Context) – نشون می‌ده سیستم موردنظر در چه بستری قرار داره و چه افرادی یا سیستم‌هایی باهاش تعامل دارن.

2️⃣سطح کانتینر (Containers) – نرم‌افزار شامل چه برنامه‌ها (Web App, Backend) و دیتابیس‌هایی است. (ربطی به Docker نداره!)

3️⃣سطح کامپوننت (Components) – هر کانتینر از چه ماژول‌هایی تشکیل شده.

4️⃣سطح کد (Code Level) – جزئیات پیاده‌سازی کد در سطح کلاس‌ها و توابع.

مدل C4 مثل یک نقشه‌ی گوگل مپ برای معماری نرم‌افزار عمل می‌کنه که می‌تونیم از سطح کلی، زوم کنیم و به جزئیات دقیق‌تر برسیم.

نتیجه
در حقیقت C4 یک روش ساده ولی قدرتمند برای مستندسازی معماری نرم‌افزاره که مشکلات UML (بخوانید بدبختی‌ها) را نداره و به تیم‌ها کمک می‌کنه تا ساختار سیستم‌هاشون رو واضح و قابل‌درک مستند کنن. یادگیریش خیلی ساده و سریعه و زبون خوبی برای انتقال مفهومه (برای من چندین ساله که تبدیل شده به معادل notepad، ولی برای معماری). ابزارهای مختلفی مثل PlantUML براش هست و توی draw.io هم می‌تونید ترسیم کنید (یا mermaid یا با structurizr یا...)، البته لیست کامل ابزارها رو اینجا می‌تونید ببینید.

کوتاه نوشتم که خونده بشه و اگر دوست داشتید عمیق‌تر شیم روش...(⚙️)
وب‌سایت مرجع C4
به‌عنوان مثال اینجا یه اپلیکیشن ToDo رو می‌تونید ببینید (از سطح کلان تا جزئیات)

💬 شما چجوری مستند می‌کنید؟ چجوری طراحی سیستم رو منتقل می‌کنید؟
Please open Telegram to view this post
VIEW IN TELEGRAM
13👍4
هلزبرگ امروز از پیاده‌سازی کامپایلر تایپ‌اسکریپت به طور native و دستیابی به بهبود ۱۰ برابری سرعت گفت...

هلزبرگ: خالق دلفی، سی‌شارپ، و تایپ‌اسکریپت، معمار ارشد، و technical fellow در مایکروسافت


مشکل اصلی: جاوااسکریپت دیگه جوابگو نیست!

تایپ‌اسکریپت از اول با خود جاوااسکریپت پیاده‌سازی شده، ولی این باعث مشکلاتی مثل:

*️⃣کندی و مصرف زیاد حافظه توی پروژه‌های بزرگ
*️⃣بهینه نبودن برای پردازش‌های سنگین (جاوااسکریپت برای UI و مرورگر ساخته شده، نه کامپایلرها)
*️⃣مشکل مدیریت حافظه و محدودیت‌های پردازشی

راه‌حل هلزبرگ و تیمش: پورت کردن کامپایلر به زبان Go!!! (و چرا سی‌شارپ یا راست، نه؟!)
تصمیمشون: نه به بازنویسی، فقط پورت کردن!
کل کدهای تایپ‌اسکریپت خط به خط به Go منتقل میشه.

حالا چرا Go؟ چون:
اولش با زبون‌های مختلف PoC کردن ولی به این نتیجه رسیدن که برای این ورکلود و این کار گو بهتره.

*️⃣سرعت اجرای بالایی داره
*️⃣حافظه رو بهتر مدیریت می‌کنه
*️⃣پشتیبانی قوی از پردازش موازی داره

⚡️نتایج اولیه: یه کامپایلر ۱۰ برابر سریع‌تر!
کامپایلر جدید یه پروژه ۱.۵ میلیون خطی رو به جای ۶۰ ثانیه در ۵ ثانیه کامپایل میکنه! 🚀
در تست‌ها حتی پردازش‌های موازی باعث افزایش ۸ برابری سرعت شدن.
ویژگی‌های جدید و آینده تایپ‌اسکریپت در Go
اجرای سریع‌تر کامپایلر
پشتیبانی از پردازش همزمان (Concurrency)
سازگاری کامل با کدهای قبلی
پشتیبانی از هوش مصنوعی برای تحلیل و پیشنهادهای بهتر در کدنویسی

لینک منبع

درس: طرف خالق سی‌شارپه، ولی می‌فهمه و می‌دونه مسئله‌اش چیه و با مهندسی به راهکار درست می‌رسه، نه چیزی که شاید دلش بخواد یا بهش بایاس باشه ♻️♻️
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥20👍7👏2
🎮 چجوری معماری و ساختار نرم‌افزار رو مستند و نتقل کنیم؟
یادگیری C4 Model با مثال واقعی - بخش اول

💡سناریو:
فرض کن یه نرم‌افزار داریم که هر چند ساعت‌یک‌بار میره وب‌سایت‌هایی که بهش معرفی کردیم رو بازدید میکنه، خبرهای تازه‌شون رو می‌خونه و بعد متنشون رو از طریق ollama با یک مدل‌زبانی خلاصه و چکیده می‌کنه؛ بعد به صورت روزانه یه خبرنامه مختصر و کاربردی می‌سازه و برای کاربرهایی که عضو شدن میفرسته. کاربرها هم میتونن مشخص کنن که از کدوم سایت‌ها خبر بگیرن، ساعت ارسال خبرنامه کی باشه، و اینجور چیزها!
(توی این مثال سیستممون وابستگی خارجی مثل سایت‌ها و سرور ایمیل هم داره)

همون‌طور که توی مقدمه عرض کردم، ما در چهار سطح سیستم رو با C4 مدل‌سازی می‌کنیم (چهار کلمه که با حرف C شروع می‌شن) این چهار سطح رو مثل نقشه گوگل‌مپ تصور کنید، ابتدا نقشه کلی رو به همسایگی‌های کشور یا شهر مورد نظرمون می‌بینیم، و با زوم کردن جزئیات بیشتری برامون ظاهر می‌شه.
تعداد المان‌های مورد استفاده در مدل C4 خیلی ساده و معدود است. در نتیجه خیلی سریع می‌شه یادگرفت.


1️⃣سطح اول: دیاگرام Context
در سطح context ما یه نگاه کلان به سیستم می‌اندازیم، اینکه نمای کلی و سیستم‌هایی که با سیستم ما در ارتباطن چجوری هستن.

- سیستم اصلی: News Summarizer
- کاربر: User (Subscriber)
- کاربر: User (Admin)
- سیستم‌های بیرونی:
- وب‌سایت‌های خبری
- سرویس Ollama
- سرویس SMTP Server

📇 ارتباط‌ها:
- سیستم خبرها رو از سایت‌های خبری میگیره.
- خبرها رو برای خلاصه‌سازی به Ollama میفرسته و جواب خلاصه‌شده میگیره.
- خبرنامه رو از طریق SMTP برای کاربرها میفرسته.

2️⃣سطح دوم: دیاگرام Container
سطح context رو به مثابه کشور فرض کنید و سطح container رو استان‌های داخل مرزهای کشور اون داستان ارتباطات با سیستم‌های بیرونی هم مثل استان‌های مرزی که ارتباط فیزیکی با کشورهای همسایه دارن (سیستم‌های بیرونی). حالا بیاین استان‌های درون این کشور رو یعنی containerها رو نگاه کنیم:

- کانتینر Scheduler: مسئول زمانبندی و اجرا کردن وظایف به‌صورت منظم
- کانتینر News Collector: جمع‌آوری اخبار از وبسایت‌ها
-کانتینر Ollama Client: ارتباط با ollama برای خلاصه‌سازی اخبار
- کانتینر Newsletter Generator: تولید خبرنامه
- کانتینر SMTP Client: ارسال خبرنامه‌ها
- کانتینر Database: نگهداری اطلاعات کاربرها، منابع خبری، تنظیمات، اخبار خلاصه شده

⚙️ دیاگرام C4 رو می‌تونیم هم با کد بسازیم (سینتکس PlantUML یا سینتکس structurizr یا...) البته هم با ترسیم می‌شه به کد رسید هم با کد به ترسیم بصری.

قسمت بعدی همین دو بخش رو با دیاگرام و کد مرور می‌کنیم. بخش‌های بعدی هم همین مسیر و سناریو رو برای دو تا C بعدی یعنی component و code. بعدش هم احتمالا ویدیو مرور همین داستان.

💬 موافقید با این مسیر؟
Please open Telegram to view this post
VIEW IN TELEGRAM
👍185
structurizr-SystemLandscape-001.png
291.3 KB
مثال C4 (بخش ۱، کانتکست)

💡یادآوری صورت مسئله:

فرض کن یه نرم‌افزار داریم که هر چند ساعت‌یک‌بار میره وب‌سایت‌هایی که بهش معرفی کردیم رو بازدید میکنه، خبرهای تازه‌شون رو می‌خونه و بعد متنشون رو از طریق ollama با یک مدل‌زبانی خلاصه و چکیده می‌کنه؛ بعد به صورت روزانه یه خبرنامه مختصر و کاربردی می‌سازه و برای کاربرهایی که عضو شدن میفرسته. کاربرها هم میتونن مشخص کنن که از کدوم سایت‌ها خبر بگیرن، ساعت ارسال خبرنامه کی باشه، و اینجور چیزها!

🔗 کد ترسیم دیاگرام
🔗 ابزار آنلاین که کد رو توش تست کنید یا تغییر بدید

علی‌الحساب مرور کنید تصویر رو، ولی «اگر» دوست داشتید کد دیاگرام رو هم ببینید (برای یادگیری، کد برای همه واجب نیست، فقط برای توسعه‌دهنده یا معماری که دوست داره فراتر از ترسیم دیاگرام بره)

💬 نظر؟ سوال؟
Please open Telegram to view this post
VIEW IN TELEGRAM
👍32
🌱 سالی که گذشت...

آخرین روزهای ساله، عموما چنین روزهایی خیلی سریع، سالی که گذشت، توی ذهنمون مرور می‌شه...

اگر امروز چنین مروری رو تجربه کردید؛ امیدوارم از تک‌تک تصمیمات، رفتارها، کارهامون راضی باشیم... اینقدری که اگر برگردیم به یک سال قبل، همین مسیر رو دوباره طی کنیم... اگر هم اینطور نبود، آرزو می‌کنم سال ۱۴۰۴ جبرانش کنیم.

از همه دوستانی که توی این مدت همراه بودید با من، ممنونم، اگر کاستی در مطالب بوده، صمیمانه پوزش می‌خوام و امیدوارم با نقد و نظرتون به بهبودش کمک کنید و سالی که در پیش داریم، برای خودمون، برای اطرافیانمون و جهانی که توش زیست می‌کنیم، انسان مفیدی باشیم و سلامتی و آرامش رو در کنار عزیزانمون تجربه کنیم...

یه درخواست: جالب‌ترین یا اولین چیزی که توی سال ۱۴۰۳ یاد گرفتید (فرقی هم نداره از کجا و توی چه موضوعی، چه فنی چه هر چیز دیگه‌ای...) رو کامنت کنید (خودم هم خواهم نوشت) 😁
13🔥3👍1
💡 یک قدم به سمت کاربرد عینی مدل زبانی با RAG, CAG, KAG یا Fine Tuning

سال ۱۴۰۳ هم تموم شد و مثل ۲ سال قبل‌ترش، روز و ساعتی نبود که هوش‌مصنوعی خصوصا از نوع مولدش از متن و تیتر اخبار بیوفته 😉 حالا اگر تا به امروز فقط باهاش چت کردین، یا همون چت رو با API انجام دادین، دیگه ۱۴۰۴ سالیه که خوبه از حاشیه به متن بیاریدش و «اگر و اگر ارزش افزوده‌ای به محصولتون اضافه می‌کنه»، به شکل جدی‌تری ازش استفاده کنین. حالا این یعنی چی؟ مگه چت کردن چشه؟


در حالت عادی، یه مدل زبانی از چند میلیارد تا چندصد میلیارد پارامتر آموزش می‌بینه، بلده به زبون‌های مختلف حرف بزنه و جملاتی عاقلانه تا ابلهانه سرهم کنه. بلده دستور پخت سوشی تا قرمه‌سبزی بده و برای دل‌دردتون چایی‌نبات تجویز کنه، ولی اینکه بالانس حساب آقای جمالی چقدره یا آیین‌نامه‌های داخلی شرکتی که ما توش کار می‌کنیم یعنی کامپیوتراندیشان عصر نوین پاسارگاد با مدیریت آقای موکت‌پور رو که بلد نیست!‍ پس باید راهی یاد بگیریم که مزخرفاتی که بلده رو با مزخرفات خودمون بیامیزیم و مزخرفات ترکیبی تولید کنیم. پس یه نگاه کلی به RAG، CAG, KAG و Fine Tuning بندازیم تا اگر مشتری داشت ادامه‌اش بدیم…


مفهوم و کاربرد RAG یا Retrieval-Augmented Generation چیه؟

کار RAG اینه که داده‌های مدل رو با دیتای ما تکمیل کنه؛ یعنی موقع جواب دادن به سؤال، میره از یه دیتابیس یا منبع خارجی (که عموما به صورت Vector database ذخیره می‌کنیم) اطلاعات جدید رو می‌گیره و بعد جواب می‌ده. اینجوری دیگه همیشه اطلاعات سیستم خودمون رو در کنار قابلیت‌های مدل اصلی داریم. این اطلاعات رو می‌تونیم نهایتا به شکل ساختارمند و مشخص (مثلا یه آبجکت یا یه ساختار JSON مشخص) برگردونیم، یا باهاش جمله بسازیم و مثل یه محاوره انسانی برگردونیمش.

چرا لازمه ازش استفاده کنیم؟
- اطلاعات به‌روز و دقیق‌تر
- کاهش خطا و توهم در جواب‌های مدل
- جواب‌های دقیق و مبتنی بر داده واقعی


مفهوم و کاربرد KAG یا Knowledge-Augmented Generation چیه؟

کاربرد و مفهموم KAG یه مرحله پیشرفته‌تر از RAG هست که از گراف‌های دانش ساختاریافته استفاده می‌کنه. یعنی علاوه بر داده‌های معمولی، داده‌ها رو به‌صورت ساختاریافته (مثل گراف دانش) به مدل می‌ده و مدل می‌تونه از طریق این ساختارها منطق و استدلال چندمرحله‌ای انجام بده. (توی RAG کوئری داریم ولی اینجا گراف دانش)

چرا لازمه ازش استفاده کنیم؟
- افزایش دقت در حوزه‌های تخصصی
- استدلال چندمرحله‌ای و منطقی
- رعایت قوانین و مقررات مشخص (مثل حوزه‌های پزشکی و حقوقی)


مفهوم و کاربرد CAG یا Cache-Augmented Generation چیه؟

مفهوم CAG یه جورایی نسخه سریع‌تر و ساده‌تر از RAG هست. توی CAG، دانش ثابت (مثل دفترچه‌های راهنما) از قبل تو حافظه (Cache) بارگذاری می‌شه و موقع جواب دادن لازم نیست هر بار اطلاعات رو از بیرون بگیره.

چرا لازمه ازش استفاده کنیم؟
- جواب‌های سریع‌تر
- ساختار ساده‌تر و هزینه کمتر
- ثبات و یکپارچگی جواب‌ها


مفهوم و کاربر Fine Tuning (تنظیم دقیق) دیگه؟

یه سری داده‌های محدود و مشخص رو به یه مدل زبانی که خیلی چیزا بلده، ولی دقیقاً کاری که میخوای رو درست انجام نمی‌ده. اینجا میای از Fine Tuning استفاده می‌کنی؛ یعنی یه سری داده خاص خودمون رو میدیم بهش که یاد بگیره دقیقاً طبق اون چیزی که می‌خوایم جواب بده. از RAG خیلی ساده‌تر و ابتدایی‌تره.

چرا لازمه ازش استفاده کنیم؟
- بهبود دقت مدل توی یه وظیفه خاص
- سفارشی کردن مدل برای کسب‌وکار یا حوزه خاص خودمون
- کاهش هزینه‌ها (چون نیازی به آموزش یه مدل عظیم از صفر نداریم)


📎 طی ماه‌های پیش رو، SQL Server 2025 قابلیت‌هایی ارائه خواهد کرد که کارهای RAG و CAG و KAG رو بتونیم انجام بدیم. یعنی به جای استفاده از Vector Databaseها که الان ازشون برای RAG کمک می‌گیریم، می‌تونیم مستقیم از خود SQL Server کمک بگیریم. البته چون هنوز قابلیت vector اش رونمایی عمومی نشده، نمی‌شه قضاوت کرد که در مقایسه با نمونه‌های پرشمار VectorDBها چه جایگاهی داره.

مثل همیشه: 💬⚙️😉
Please open Telegram to view this post
VIEW IN TELEGRAM
193🔥2👍1
🚀 🤑 مثال عملی پیاده‌سازی RAG (قسمت ۱)
پاسخ به پرسش‌های ارزی! با دیتای لحظه‌ای... 😎🤑

گفتیم برای اینکه مدل‌های زبانی دیتای به‌روز یا دلخواه ما رو داشته باشن، باید با استفاده از روش‌هایی مثل RAG داده‌های دلخواهمون رو بهشون ارائه کنیم. برای ارائه دیتا از وکتور دیتابیس یا ساختارهای دیگه‌ی حافظه‌ای استفاده می‌کنیم. حالا برای اینکه دست‌به‌کد شیم، تصمیم گرفتم قبل از توضیح دقیق‌تر وکتور دیتابیس، یه مثال بنویسیم تا با ساختارهای ساده و فرایند کلی آشنا شیم. البته توی این مثال اول از memory store استفاده می‌کنم، و در ادامه می‌ریم سراغ وکتور دیتابیس.

سناریو:
هر مدل هوش‌مصنوعی هر چقدر کامل یا باهوش باشه، ۲ چیز در جهان رو نمی‌تونه پیش‌بینی کنه: اولیش قیمت ارز در ایرانه. دومیش هم فعلا بماند 😉؛ حالا می‌خواهیم توی این مثال بریم از یکی از سایت‌های اعلام نرخ ارز، قیمت ارزها رو بگیریم ولی با RAG به مدلمون دیتا بدیم. بعدش که از مدل سوال بپرسیم دیگه می‌دونه مثلا دلار چنده. دقت کنید که اینجا منظورم چپوندن «متن» در قالب پرامپت نیست. بلکه استفاده از ساختار RAG است.

روی کامپیوتر خودمون ollama نصب می‌کنیم و از مدل Phi استفاده می‌کنیم که کوچیک باشه و سخت‌افزار خاصی نیاز نداشته باشه.

موافقید با این مثال پیش بریم؟
اگر موافقید
اول: ollama رو نصب کنید
دوم: بعد از نصب، دستور زیر رو برای دریافت مدل phi3 mini که حدود ۲.۲ گیگابایت است توی ترمینالتون اجرا کنید

ollama pull phi3:mini


بعدش برگردید به همین پست یک عدد ⚙️ بکارید اینجا تا بریم سراغ قسمت بعدی یعنی کد #C که با استفاده از semantic kernel دیتا رو RAG می‌کنیم. البته قبلش هم با HtmlAgilityPack دیتا رو از bonbast.org کرال می‌کنیم.

* دلیل انتخاب سی‌شارپ این بود که حس کردم اعضا کانال عموما به سمت سی‌شارپ گرایش دارن (اگر هر کدوم از پایتون یا گو به حدنصاب برسه، با اون هم می‌نویسم)

* ادامه مثال، و اینکه تا چه حدی عمیق شیم بسته به بازخوردها داره.

💬 نظر؟ سوال؟
Please open Telegram to view this post
VIEW IN TELEGRAM
31🔥2
🚀 🤑 مثال عملی پیاده‌سازی RAG (قسمت ۲)
پاسخ به پرسش‌های ارزی! با دیتای لحظه‌ای... 😎🤑

توجه!
قرار بود از مدل Phi-3 mini استفاده کنیم که ۲ گیگ باشه و روی لپ‌تاپ راحت اجرا شه، اینقدر احمق بود که رفتم سراغ llama3.2 که اونم ۲ گیگ است، ولی بسی باشعورتر!

نکته: مدل‌ها نیاز به سنجش و انتخاب دارن (چه در مثال ساده چه در کارهای بزرگ که خودش بخشی از فرایند AIOps است. Phi3 برای این کار مناسب نبود. گرچه صرفا بر اساس سایز کوچک برای مثال انتخاب کرده بودم ولی خیلی بی‌شعور بود!


کد آماده است و قابل دسترس رو گیت‌هاب، ولی باید توضیحات رو به فایل read me اضافه کنم و «شاید، اگر فرصت شه» ویدیو ضبط کنم براش.
🤓 می‌بینید که برعکس چیزی که انتظار می‌رفت، RAG اصلا خوب نیست!!! چرا؟ چون بدون RAG، یورو ۶۹۰۰ تومنه، ولی بعد از RAG می‌شه ۱۰۶هزار تومن. نتیجه می‌گیریم عامل گرونی ارز RAG است، و شایسته است که سریع‌تر به دار آویخته شود ☠️☠️



*️⃣اپلیکیشن یک console app است که کل کد در program.cs قرار دارد.

*️⃣کتابخونه‌های مورد استفاده:

HtmlAgilityPack
برای استخراج نرخ ارز از دل html دریافت شده از سایت اعلام نرخ.
(توی یک تگ table قرار دارد). تمام فرایند دریافت صفحه و استخراج مقادیر، در متد GetExchangeRatesAsync است.


Microsoft.SemanticKernel
Microsoft.SemanticKernel.Connectors.Ollama
برای استفاده از قابلیت‌های Semantic Kernel و همچنین اتصال به ollama برای استفاده از مدل‌هایی که روی ollama داریم. کرنل در حقیقت قلب و رابط بین کد ما و مدل‌های هوش مصنوعی است، کانکتورهای مختلف داره که به مدل‌های لوکال یا ابری متصل شه و کار متن (مثل چت) یا کارهای تولید عکس، صدا، و... رو با مدل‌ها انجام بده. استفاده ازش هم ساده است و اول کرنل رو تعریف، بعد هم پلاگین‌های مورد نیازمون رو بهش متصل و شروع به کار می‌کنیم. مثلا اینجا با دو خط کد به راحتی به ollama متصل می‌شه و از مدل llama3.2 با ۳ میلیارد پارامتر استفاده می‌شه کرد (مثلا چت کرد باهاش).
هم‌زمان با سی‌شارپ، semantic kernel برای پایتون و جاوا هم به‌صورت رسمی توسعه و منتشر می‌شه.
var builder = Kernel.CreateBuilder();
builder.AddOllamaChatCompletion(
modelId: "llama3.2:3b",
endpoint: new Uri("http://127.0.0.1:11434"));



Microsoft.KernelMemory
Microsoft.SemanticKernel.Plugins.Memory
برای افزودن قابلیت «حافظه» به semantic kernel یعنی دیتای خودمون رو داخل حافظه قرار بدیم و کرنل از اون دیتا در کنار دیتای مدل استفاده کنه. اینجا memory رو استفاده کردیم. ولی می‌تونیم از وکتور دیتابیس هم استفاده کنیم. البته این ساختارها (مموری یا وکتور دیتابیس) اینقدر عادی شدند که نیازی ندارید تا جزئیات فنی داخلی‌شون رو الزاما یاد بگیرید و مهم نحوه استفاده ازشون است. به بیان خیلی ساده شده، دیتا توی یک ماتریس قرار می‌گیره که مشابهت/قرابت سطر و ستون که هر کدوم یک کلمه می‌تونیم در نظر بگیریم با یک عدد مشخص می‌شه.

ایجاد مموری:
var embeddingGenerator = kernel.Services.GetRequiredService<ITextEmbeddingGenerationService>();

var memory = new SemanticTextMemory(new VolatileMemoryStore(), embeddingGenerator);


حالا ذخیره داده‌ها داخل مموری:
const string MemoryCollectionName = "exchangeRates";

string url = "https://bonbast.org";
var exchangeRates = await GetExchangeRatesAsync(url);

foreach (var rate in exchangeRates)
{
string memoryKey = $"{rate.Key} to Iranian Rial";
await memory.SaveInformationAsync(MemoryCollectionName, id: memoryKey, text: $"1 {rate.Key} equals {rate.Value.AverageRate} Iranian Tomans...");
}

TextMemoryPlugin memoryPlugin = new(memory);

kernel.ImportPluginFromObject(memoryPlugin);


فایل راهنما و توضیحات بیشتر در پست بعدی... لطفا اجرا کنید و یه مقدار باهاش سر و کله بزنید که پست‌های بعدی مفید باشن 😉 اگر مفید بود و کاربردی، بگید تا بریم سراغ وکتور یا دریافت ورودی خروجی ساختار یافته به جای متن...

💬 سوال؟ پیشنهاد؟
البته Memory Store قابلیت‌های کمتری نسبت به Vector Store داره و خیلی ابتدایی‌تره. توی اولین مثال از مموری استفاده کردم فقط تا حداکثر سادگی رو داشته باشه.
Please open Telegram to view this post
VIEW IN TELEGRAM
16🔥4👍1
tech-afternoon
🧐⭐️ در مورد کاربرد و یادگیری AI در روتین روزانه (چند گزینه‌ای)
😂 دم همگی گرم...
دیشب وقتی دیدم مطالب و مثال‌هایی که برای AI نوشتم از پکیج موفقیت و رازهایی زیبایی هم کم‌طرفدارتر بودن، اولین چیزی که یادم افتاد این نظرسنجی تاریخی سیامک انصاری بود 😅

تصمیم داده‌محور همیشه خوبه 😊 لذا باید در فرم و محتوای مطالب و انتخاب موضوعات تجدید نظر کرد 😉
👍41
🤡 داستان Vibe Coding، اصطلاحی جدید در توسعه نرم‌افزار!

سال ۲۰۲۳، Andrej Karpathy مدیر سابق هوش‌مصنوعی تسلا و جزو تیم بنیان‌گذار OpenAI و فارغ‌التحصیل دکتری علوم کامپیوتر استنفورد یه توییت زد که:

داغ ترین زبان برنامه نویسی جدید «انگلیسی» است!


خُب معنی این توییت مشخص بود، اینکه ملت پرامپت می‌نویسن به جای کُد! چند هفته پیش توییت دیگه‌ای زد که توضیح داد نوع جدیدی از کد نویسی به وجود اومده که اسمش رو «vibe coding» گذاشته، یعنی نوعی از برنامه‌نویسی که فرد کلاً کد و درک روال برنامه رو بیخیال شده و فقط خواسته‌اش رو با LLM طرح می‌کنه، حتی کد تولید شده رو هم نمی‌خونه و مستقیم اجراش می‌کنه، اگر نتیجه دلخواه نبود یا خطا داد، فقط متن خطا یا رفتار دلخواهش رو دوباره به LLM می‌ده تا نهایتا به نتیجه دلخواهش برسه (مثل این جواگره‌ای که افتادن روی Cursor)

بعضاً حتی تایپ هم نمی‌کنن و با SuperWhisper صحبت می کنن! این کدها شاید برای افراد غیربرنامه‌نویس، محصولات تفننی و آخرهفته‌ای خوب باشه، ولی با «محصول» فاصله داره.

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

اینا ته تهش به درد اساتید و نوابغ اینستاگرام می‌خوره که پکیج برنامه‌نویس شدن در ۱ ساعت و درآمد میلیان دلاری در روز بفروشن!

این vibe coding می‌تونه نیمه تاریک هوش مصنوعی برای برنامه‌نویس‌ها باشه! دقت کنید: برای مثلا کسی که کدنویسی برای تحلیل داده بلد نیست و با استفاده از این سرویس‌ها توانمندتر می‌شه تا کارهای خودش رو «آگاهانه نسبت به نتایج» ولی «ناآگاه نسبت به فرایند» به نتیجه برسونه (مثل یک حسابدار) اتفاقا می‌تونه خوب باشه. ولی برای برنامه‌نویس، نه!

برای یادگیری یک زبان برنامه‌نویسی جدید، یا تکنیک‌هی جدید، مشروط به فرض کردن LLM به عنوان یک معلم صبور که از سوالاتمون خسته نمی‌شه، خیلی خوبه؛ ولی به عنوان مرجعی برای کپی کردن و بعدتر پیست کردن، نه!

این vibe coding می‌تونه مثل یک مخدر توهم‌زا، فرد رو دچار توهم توانمندی کنه، و ناخواسته توی مسیری بیوفته که بعدتر بی‌آبرویی براش بسازه.

💬 نظرتون چیه؟ موافقید که vibe coding برای تفنن خوبه ولی برای کار، بسیار بد؟
Please open Telegram to view this post
VIEW IN TELEGRAM
👍27👏21
🧐 ورودی GenAI چجوری پردازش می‌شه؟ توی وکتور دیتابیس چی قرار می‌گیره؟

هر ورودی‌ ای که ما به مدل زبانی یا هوش مصنوعی مولد بدیم، از دل یک embedded model عبور می‌کنه، با یک semantic search پردازش می‌شه. پرداختن به محاسبات ریاضی‌اش از حوصله این مطلب فراتره و توی لایه‌ی کاربری هم کاربردی نداره ولی مباحث جالبی هستن که اگر کسی دوست داشت بگه تا مقاله یا کتاب‌های خوبی که می‌تونه کمک کنه معرفی کنم. برای همین توی این پست، به جای رفتن سراغ «مار» بیایم بریم سراغ 🐍
موافقین؟

فرض کنین به یه مدل زبانی، یک عبارت خیلی ساده رو بدیم؛ چی میشه؟ اول باید تبدیل به یه سری عدد اعشاری بشه بعد دیگه هر چی هست تا قبل از مرحله خروجی، عمدتا جبر خطیه! علت اینکه می‌گیم این مدل‌ها واقعا هوشمند نیستن، اینه که فقط یَک‌عالمه مشابهت رو بررسی می‌کنن و شبیه‌ها رو کنار هم می‌چینن. اعجازشون اینه که این یَک‌عالمه یعنی مثلا توی چت‌جی‌پی‌تی ۷۰۰ میلیارد! یعنی نمی‌فهمه سیب احتمال اینکه سرخ یا زرد با سبز باشه کمتر از اینه که بنفش باشه، و اینکه بنفش باشه کمتر از اینه که پشمالو باشه!

یه کد کوچولو نوشتم برای توضیح این داستان:
۲ تا کلمه + یه کاما + علامت تعجب میشه ۱۰۲۴ تا عدد:
Embedding for 'Hello, world!':
Embedding Length: '1024'!


0.017290225, 0.04488248, 0.00056118704, -0.009004725, -0.045384012, 0.008568012, 0.07241785, 0.04243991, 0.047746666, 0.0021948903, 0.007101463,...


از خوبی‌های semantic kernel به جز اینکه نسخه‌های سی‌شارپ، پایتون و جاوا داره اینه که خیلی کنترل خوبی روی فرایند داخلی بهمون می‌ده و فقط یه rest client برای صدا زدن سرویس‌ها نیست. به سادگی می‌شه امبدینگ‌مدل رو دید... این یه مقدمه ساده بود از اینکه درک کنیم چرا باید از وکتور دیتابیس استفاده کرد. توی وکتور دیتابیس ما کلی عدد داریم، این اعداد از کجا میان؟ بله، از همین امبدینگ‌مدل. پس دلیل اینکه ما برای RAG نیاز به وکتوردیتابیس به جای دیتابیس کلاسیک (مثل RDBMS) داریم.

این کد خیلی کوچیک که نوشتم رو نگاه کنید یا اگر دوست داشتید اجرا کنید. از ollama + یک مدل کوچیک با ۳۳۵ میلیون پارامتر + semantic kernel استفاده کردم، برای دیدن اینکه با یه مدل کوچیک، عبارت Hello World تبدیل به چی می‌شه!

💬 سوال؟ نظر؟
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍2👏2
🤖 مثال RAG با استفاده از Qdrant

وکتور دیتابیس Qdrant یک پایگاه داده برداری (Vector Database) و موتور جستجوی برداری کدبازه که برای ذخیره و جستجوی بردارهای High-dimensional Embeddings طراحی شده. یک ابزار با قابلیت مدیریت حجم بالای داده‌های برداری و با ارائه API ساده ولی در عین حال قدرتمند (مثل gRPC و REST)، ما رو توی پیاده‌سازی سرویس‌های هوشمند و مبتنی بر جستجوی برداری کمک می‌کنن. کارهایی مثل RAG که توی پست‌های قبلی توضیح دادم... البته یه محیط گرافیکی تحت وب خوب هم همراه خودش داره.

حالا برگردیم به مثالی که چند پست قبل توضیح دادم و نمونه ساده‌اش رو توی مموری موقت دیدیم. یعنی RAG قیمت ارز (بهترین مثال برای ما ایرانی‌ها چون به‌روزترین مدل‌های هوش مصنوعی هم داده‌هاشون از نرخ ارز ما خاطرات دوردسته و پیش‌بینی‌اش هم محال؛ پس یقینا فقط RAG باید داشته باشیم براش 😁 )

همون مثال رو با Qdrant نوشتم. البته با PostgreSQL و pgvector هم نوشتم که هنوز فایل راهنماش کامل نشده... (به زودی ایشالا)

📱 📔 کد روی گیت‌هاب

خروجی اینطوریه که اول با داده‌های خام llama 3.2 (نسخه ۳ میلیارد پارامتر) مزخرف می‌نویسه، بعد میریم از bonbast.org نرخ ارز رو آنلاین می‌گیریم، توی وکتور دیتابیس ذخیره می‌کنیم و بعد دوباره همون سوال رو می‌پرسیم، ولی دیگه مزخرف نمی‌نویسه...)

به راحتی Qdrant رو با داکر می‌تونید روی ماشین خودتون اجرا کنید، ollama و مدل llama 3.2 (3b) هم همینطور.

💬 سوال؟ نظر؟ بحث؟
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍3
این روزها که خبر تغییر لایسنس AutoMapper و MediatR و MassTransit به جمع قبلی‌ها یعنی ImageSharp, IdentityServer, Fluent Assertions پیوست که تازه اینا اکوسیستم دات‌نت بودن، و اگر فارغ از اکوسیستم نگاه کنیم Redis و Elastic و... هم اضافه می‌شن؛ خوبه تا فرایند انتخاب تکنولوژی، مدیریت فنی محصول، بودجه‌بندی و... رو مرور کنیم.

چقدر تیم‌ها بابت جوگیری و چپوندن انبوه کتابخونه‌ها به پروژه با هدف عقب نیوفتادن از موج وبلاگ‌ها و ویدیوهای بلاگر‌های تکنولوژی، خودشون و اعصابشون و محصول و زمان رو دچار چالش کردن...

لذا خوبه تا مسیر اصولی رو یاد بگیریم، کاری که توی تیم‌های بزرگ عموما توسط technology manager هدایت می‌شه. با یه مثال انترپرایز بزنم تا بعدن نسبت به سایز کوچک‌تر بریم جلو:
شما می‌خواهید از کتابخونه A استفاده کنید، اول چک می‌کنید ببینید آیا توی green book سازمان لیست شده یا نه. اگر نشده باشه، جک می‌کنید ببینید کاری که اون کتابخونه قراره انجام بده، در دنیای محصولات تجاری، چقدر هزینه داره؟! و اگر کدباز است، نوع لایسنسش چیه؟ چند نفر توسعه‌دهنده فعال داره؟ کامیونیتی‌اش چقدر بزرگه؟ بنیه مالی این پروژه چجوریه؟ آیا جایگزین کدباز یا تجاری با امکانات مشابه یا حداقل نیاز ما وجود داره؟ و سوالات دیگه‌ای که بهمون کمک کنه تا چیزی رو انتخاب کنیم که آینده محصول تحت تاثیر عمیق قرار نگیره. بعد، موضوع پیاده‌سازی پیش میاد که کد ما چقدر قابلیت تعویض قطعات پازلش رو داره؟ (وابستگی‌ها با چقدر تغییر قابل تغییر هستن؟)

خلاصه اینکه توسعه محصول فقط استفاده از کتابخونه‌ها نیست، انتخاب ابزار هم بخشی از مسیر و نیازمندی‌های دانش و تجربه است. توسعه خیلی از محصولات «غلط اضافی» شرکت‌ها هستند!! (با توجه به استعداد مالی و بنیه فنی و...) کما اینکه تاسیس شرکت و استقلال هم «غلط اضافی» برخی علاقه‌مندانِ پوزیشن مدیرعاملیه....
👍1542
اگر حضرت سعدی در زمانه‌ی ما زیست می‌کرد، احتمالا علاوه بر «دم فرو بستن به وقت گفتن، و گفتن به وقت خاموشی» دو چیز دیگه رو هم طَیرهٔ عقل اعلام می‌فرمود:

۱: ست کردن جلسه بدون ذکر رئوس مطالب توی ایمیل دعوت
۲: ساختن تیکتی که توضیح و acceptance criteria دقیق نداره

* طَیرهٔ عقل: سبک‌ مغزی
** این لیست مستعد کامل شدن تا ده‌ها مورد طَیرهٔ عقل است، توی کامنت بنویسید، حضرت سعدی حتمن مطالعه خواهند کرد و در نسخ جدید گلستان اعمال خواهند کرد 🤓
😁14👍3👏2
🚀 تبدیل ریپازیتوری GitHub به MCP!

یه پروژه جذاب و کاربردی برای اتصال AI Assistentها...

هم‌زمان با دسترسی عمومی Agent mode و پشتیبانی از MCP روی VSCode
Please open Telegram to view this post
VIEW IN TELEGRAM
👍63🔥2
🎂 تولد ۲۰ سالگی git مبارک!

پروژه شخصی (بخوانید دلی) لینوس توروالدز که تبدیل به ابزار روزمره ما شد...

اگر دوست دارید بدونید نبوغ و پشتکار این مرد چقدره، همین بس که اولین نسخه‌ی کار بکن git طی ۵ روز نوشته شد!

پیشنهاد می‌کنم خوب یاد بگیرید، در مورد معماری و فایل‌سیستم git و VFSForGit بخونید که بسی جذابه!

توی یکی از جلسات تک‌افترنون سال‌ها پیش در موردش مفصل گفتم، اگر و اگر فایل صوتی جلسه رو پیدا کنم می‌گذارم توی کانال.

💬 شما گیت رو خام خام استفاده می‌کنید یا با کلاینت‌های GUI؟؟
Please open Telegram to view this post
VIEW IN TELEGRAM
👍127
🔄 معرفی Agent2Agent Protocol (A2A) از گوگل!

امروز گوگل توی کنفرانس Cloud Next پروتکل جدید Agent2Agent (A2A) رو معرفی کرد. این پروتکل باعث می‌شه تا AI‌ها بدون توجه به این‌که با چه فریم‌ورکی ساخته شدن، بتونن با هم ارتباط برقرار کنن. یعنی دیگه مثل این نیست که هر مدل باید به مدل خودش حرف بزنه؛ حالا همه می‌تونن با هم گپ بزنن! A2A تکمیل‌کننده مسیر Model Context Protocol (MCP) از آنتروپیک است (شرکت خالق Claude.ai)

تو این سیستم، یه تقسیم‌بندی ساده داریم: یه جوری AI‌ها به دو دسته تقسیم می‌شن؛ یه دسته که "کلاینت" هستن و درخواست‌ها رو می‌دن و دسته‌ی دیگه که "ریموت"، یعنی درخواست‌ها رو انجام می‌دن. این یه جور «قرارداد ارتباطی» به وسیله استانداردهای HTTP, SSE, و JSON-RPC فراهم می‌کنه و حتی از احراز هویت و سطح دسترسی هم پشتیبانی می‌کنه. پروتکل از قابلیت‌های مورد نیاز برای کارهای طولانی مدت هم پشتیبانی می‌کنه، یعنی می‌تونه بازخوردها، اعلان‌ها و وضعیت روز رو به صورت لحظه‌ای به شما گزارش بده.

همچنین لازم بدونید که گوگل تاکید می‌کنه این پروتکل، Agent2Agent، قرار نیست جایگزین Model Context Protocol (MCP) بشه؛ بلکه یک مکمل برای اون محسوب می‌شه. در واقع MCP برای دسترسی به داده‌ها به صورت استاندارد استفاده می‌شه و Agent2Agent هم برای ارتباط مستقیم بین مدل‌ها به کار میره. در کنار همکاری بیش از ۵۰ شریک فناوری معروف مثل Atlassian, Box, MongoDB, Salesforce و ...، این نوآوری گام مهمی توی تقویت همکاری هوش مصنوعی‌ها بین خودشونه.
👍10🔥211