آنچه یاد خواهید گرفت:
ساخت یک پایپلاین کامل بازیابی نسل افزوده (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 علاقهمند هستند.