ساخت یک اپلیکیشن RAG در Python
✅ سرفصل و جزئیات آموزش
آنچه یاد خواهید گرفت:
- ساخت یک پایپلاین کامل بازیابی نسل افزوده (RAG) در Python، از جذب مستندات تا خروجی چت استریمینگ
- اجرای Postgres با افزونه pgvector از طریق Docker Compose، همراه با ایندکسگذاری HNSW برای جستجوی برداری سریع و تقریبی نزدیکترین همسایه
- chunking مستندات با تقسیمبندی آگاه از پاراگراف و همپوشانی، و توضیح اینکه چرا هر انتخاب در chunking بر کیفیت بازیابی اثر میگذارد.
- پیادهسازی جذب اتمی و idempotent مستندات با استفاده از هش محتوای SHA-256 و upsertهای تراکنشی
- استفاده از OpenAI SDK برای فراخوانی مدلهای محلی Ollama و API میزبانی شده OpenAI از طریق یک مسیر کد مشترک
- پیادهسازی بازیابی هیبریدی که جستجوی برداری متراکم را با BM25 متن کامل Postgres ترکیب میکند و با Reciprocal Rank Fusion ادغام میشود.
- ساخت یک query rewriter که پرسشهای پیگیری مانند «what does it eat?» را به جستجوهای مستقل تبدیل میکند تا واقعاً chunkهای مفید بازیابی شوند.
- ساخت یک directory watcher با watchdog، همراه با debouncing برای هر مسیر تا ذخیره ویرایشگر هرگز باعث خواندن فایلهای نیمهنوشته نشوند.
- بهکارگیری الگوی Strategy و Adapter برای جایگزینی backend مبتنی بر Postgres با Weaviate فقط با یک متغیر محیطی، بدون هیچ تغییری در بقیه کد
- ساخت یک رابط کاربری وب چت استریمینگ با FastAPI و رویدادهای سمت سرور و vanilla JavaScript بدون React و بدون مرحله build
- ورود تصاویر با استفاده از پایپلاین vision model از نوع describe-then-embed، همراه با نرمالسازی فرمت برای backendهای vision
- رندرینگ ایمن خروجی LLM markdown در مرورگر با marked + DOMPurify، شامل ایمیجهای درونخطی
- بهکارگیری الگوهای استاندارد مهندسی نرمافزار - تزریق وابستگی، Factory و Strategy و Adapter و context managerها، lazy imports و غیره
- عیبیابی تجربی خطاهای RAG با استفاده از cosine scoreها، رتبههای full-text و خروجی ادغام شده، به جای حدس زدن درباره پرامپتها
پیشنیازهای دوره
- مهارت پایه در Python، آشنایی پایه با SQL و کار با خط فرمان و Docker - هیچ تجربه قبلی با LLM یا پایگاه داده برداری لازم نیست.
توضیحات دوره
یک اپلیکیشن بازیابی نسل افزوده (RAG) را در Python، از یک پوشه خالی تا یک چت وب استریمینگ با حافظه چندمرحلهای، بازیابی هیبریدی، ورود ایمیج و دو backend قابل تعویض برای فروشگاه برداری - بدون LangChain، بدون LlamaIndex، بدون جادو - بسازید. شما تکتک خطوط را خودتان مینویسید و در پایان دقیقاً میفهمید هر کدام چه کاری انجام میدهد.
بیشتر آموزشهای RAG همه موارد را در یک کتابخانه سطح بالا پنهان میکنند و در حد «کار میکند» متوقف میشوند. این دوره مسیر دیگری را انتخاب میکند. شما پایپلاین را از ابتدا میسازید - chunking، تعبیهها، ورود idempotent، بازیابی هیبریدی سمانتیک+واژگانی با Reciprocal Rank Fusion و query rewriter برای پرسشهای پیگیری، استریمینگ توکن سمت سرور و برنچ vision model برای تصاویر بر پایه Postgres ساده (با pgvector) و یک سرور محلی Ollama
هیچ هزینه API در زمان یادگیری ندارید. هیچ جعبه سیاهی وجود ندارد. وقتی بعداً سراغ فریمورکی مثل LangChain بروید، واقعاً میفهمید در under the hood چه میکند.
آنچه در یک پروژه خواهید ساخت:
- بهطور کامل به صورت محلی با Ollama اجرا میشود، یا با تغییر فقط یک متغیر محیطی به صورت شفاف روی OpenAI API کار میکند.
- تعبیهها را در Postgres + pgvector با HNSW indexing ذخیره میکند، یا در Weaviate با backendهای قابل تعویض از طریق تنظیم پیکربندی
- بازیابی هیبریدی: جستجوی برداری متراکم و BM25 متن کامل Postgres، ادغام شده با Reciprocal Rank Fusion برای رفع مواردی که جستجوی صرفاً سمانتیک روی اصطلاحات نادر، نامها و شناسهها بیصدا شکست میخورد.
- یک directory watcher که فایلهای جدید را بهصورت خودکار وارد میکند، با debouncing هنگام ذخیره توسط ویرایشگر تا هرگز فایل نیمهنوشته را نخواند.
- یک رابط کاربری چت وب استریمینگ بر پایه FastAPI + رویدادهای سمت سرور + vanilla JavaScript بدون React و بدون مرحله build با حافظه چندمرحلهای، بازنویسی کوئری برای پرسشهای پیگیری، ارجاع به منابع، و رندرینگ ایمیج درونخطی
- جذب ایمیج از طریق یک vision model با پایپلاین describe-then-embed چندوجهی در همان جدول chunks، بدون نیاز به تغییر اسکیما
در طول مسیر، الگوهای واقعی طراحی نرمافزار را در کد واقعی تمرین میکنید: تزریق وابستگی، Strategy و Adapter و Factory و lifespanها، context managers، مرزهای thread-safety، تراکنشهای اتمی، و کدنویسی دفاعی در برابر سرویسهای خارجی که بیسروصدا آنطور که در مستنداتشان ادعا شده کار نمیکنند. مضمون تکرارشونده این دوره، ارزش انتزاعهای خوب است: رابط مربوط به فروشگاه برداری که از ابتدا طراحی میشود، بعداً اجازه میدهد یک backend دوم را فقط در یک فایل اضافه کنید؛ همان پایپلاین بازیابی هم برای CLI و هم برای وب اپلیکیشن استفاده میشود؛ و فیلد chunk-metadata که در ابتدای دوره شاید آکادمیک به نظر برسد، بعداً همان چیزی است که پشتیبانی از ایمیج را به یک تغییر ساده تبدیل میکند.
در پایان، یک پایگاه کد خواهید داشت که میتوانید آن را گسترش دهید، یک reranker اضافه کنید، embedder دیگری را امتحان کنید، مدل چت را عوض کنید، یا آن را به مجموعه مستندات خودتان وصل کنید و همچنین واژگان مهندسی لازم را برای صحبت درباره RAG بهعنوان نرمافزار تولید، نه یک دمو در notebook، به دست میآورید.
این دوره برای چه کسانی مناسب است؟
- توسعهدهندگان Python که به یکپارچهسازی LLMs در پروژههای خود و افزودن قابلیت RAG علاقهمند هستند.
ساخت یک اپلیکیشن RAG در Python
-
مقدمه 05:07
-
نصب Python 05:24
-
نصب یک IDE 01:22
-
اشتباهات - همه ما مرتکبشان میشویم 00:57
-
راهاندازی یک اپلیکیشن اولیه Python 14:47
-
راهاندازی کد LLM 09:46
-
راهاندازی CLI 10:37
-
Pulling یک مدل از Ollama و تست کردن 07:15
-
شروع کار با فروشگاه برداری 09:06
-
راهاندازی Postgres 03:36
-
تعریف قرارداد فروشگاه برداری 14:26
-
پیادهسازی Postgres store - بخش 1 15:31
-
پیادهسازی Postgres store - بخش 2 04:08
-
اتصال بخشها به هم 04:05
-
تست موارد مختلف 09:00
-
شروع کار 09:11
-
راهاندازی منطق chunking 12:36
-
ساخت تعبیهها از chunkها 12:01
-
تست embedder ما 04:15
-
راهاندازی ingestor 14:39
-
اتصال CLI برای ingestor 09:40
-
تست پایپلاین جذب داده 04:19
-
شروع کار با بازیابی 02:31
-
پیادهسازی جستجو در فروشگاه برداری مربوط به Postgres 09:39
-
راهاندازی کوئری 05:33
-
تست بازیابی 08:00
-
شروع کار: پرامپت سیستم 09:00
-
Wrapping بازیابی در پیام کاربر 11:29
-
پیادهسازی فرمان ask - بررسی RAG به صورت end-to-end در یک تابع 13:05
-
استفاده از پرامپت سیستم خارجی 02:57
-
اصلاح فرمان چت برای استفاده از RAG 07:56
-
افزودن spinner 09:58
-
بهبود spinner 02:45
-
شروع کار: جابهجایی فایلهای پردازش شده 08:56
-
بررسی ایمنی: جلوگیری از تریگر شدن دوباره جذب فایلها 01:54
-
اسکن پوشه مستندات هنگام راهاندازی اپلیکیشن 03:53
-
راهاندازی یک handler برای debouncing 11:56
-
راهاندازی watcher برای جستجوی فایلهای قابل پردازش 05:29
-
افزودن فرمان watch 02:09
-
تست موارد مختلف 03:39
-
شروع کار: ترکیبیکردن روش جستوجوی Postgres 21:30
-
مرور کد و تست بازیابی هیبریدی 21:30
-
شروع کار: اصلاح رابط انتزاعی برای متادیتا 03:51
-
بروزرسانی فروشگاه برداری در Postgres برای متادیتا 04:00
-
بروزرسانی روش جستجو برای متادیتا 08:07
-
Populate کردن متادیتا 04:02
-
شروع کار: راهاندازی Weaviate و افزودن وابستگی 02:46
-
شروع کار با weaviate store با ورودیهای config 03:38
-
راهاندازی Weaviate Store: بخش 1 19:39
-
راهاندازی has_document 03:46
-
راهاندازی upsert_document 11:41
-
راهاندازی delete_document 01:46
-
راهاندازی جستجو 15:48
-
تست موارد مختلف 04:54
-
افزودن وابستگیهای پروژه 02:35
-
شروع کار با وب اپلیکیشن ما 08:23
-
راهاندازی اپلیکیشن FastAPI و یک مسیر 11:57
-
مرور index.html 05:52
-
راهاندازی endpoint چت 14:05
-
راهاندازی endpoint برای آپلود در فروشگاه برداری 08:20
-
مشکلی که میخواهیم حل کنیم 02:50
-
شروع کار با بازنویسی کوئری 05:56
-
استفاده از rewriter در چت CLI 04:53
-
استفاده از rewriter در چت وب 05:08
-
شروع کار 01:54
-
بروزرسانی config برای ایمیجها 02:03
-
پیادهسازی فراخوانی vision و تبدیل فرمت 14:04
-
دریافت یک vision model و تست کردن 05:37
-
بروزرسانی ingestor برای ایمیجها 20:47
-
اصلاح کوئری برای ایمیجها - بخش 1 05:43
-
اصلاح کوئری برای ایمیجها - بخش 2 07:55
-
بروزرسانی وب اپلیکیشن برای تصاویر - بخش 1 06:38
-
بروزرسانی وب اپلیکیشن برای تصاویر - بخش 2 15:20
-
تست موارد مختلف 06:32
-
تغییرات نهایی 04:39
مشخصات آموزش
ساخت یک اپلیکیشن RAG در Python
- تاریخ به روز رسانی: 1405/04/12
- سطح دوره:مقدماتی
- تعداد درس:75
- مدت زمان :09:50:46
- حجم :7.0GB
- زبان:دوبله زبان فارسی
- دوره آموزشی:AI Academy