خانه / هوش مصنوعی (AI) / طراحی و پیاده‌سازی Multimodal AI با Langchain

طراحی و پیاده‌سازی Multimodal AI با Langchain

طراحی و پیاده‌سازی Multimodal AI با Langchain

نویسنده:

انتشار:

به‌روزرسانی:

تعداد نظرات: 0

زمان مطالعه: 13 دقیقه

ساخت Multimodal AI با LangChain رویکردی نوین برای ایجاد سیستم‌های هوش مصنوعی است که می‌توانند هم‌زمان با چند نوع داده مانند متن، تصویر و سایر ورودی‌های غیرمتنی کار کنند. برخلاف سیستم‌های سنتی که تنها به ورودی متنی محدود بودند، مدل‌های چندوجهی این امکان را فراهم می‌کنند که هوش مصنوعی درک غنی‌تری از دنیای واقعی داشته باشد. LangChain به‌عنوان یک لایه orchestration، نقش کلیدی در اتصال مدل‌های زبانی، داده‌های چندرسانه‌ای و منطق برنامه ایفا می‌کند و مسیر توسعه چنین سیستم‌هایی را ساختاریافته‌تر و قابل مدیریت‌تر می‌سازد.

در این مقاله، به‌صورت گام‌به‌گام به طراحی و پیاده‌سازی multimodal AI با LangChain می‌پردازیم. ابتدا مفهوم multimodality و اهمیت آن را توضیح می‌دهیم، سپس بررسی می‌کنیم LangChain چگونه از ورودی‌های چندرسانه‌ای پشتیبانی می‌کند. در ادامه با یک مثال ساده متن و تصویر شروع می‌کنیم و بعد به سراغ معماری‌های پیشرفته‌تر مثل Multi-Modal RAG می‌رویم تا ببینیم چطور می‌توان از LangChain برای ساخت اپلیکیشن‌های چندرسانه‌ای واقعی و قابل استفاده در مقیاس محصول بهره برد.

Multimodal یعنی چه و چرا مهم است؟

multimodal

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

برای مثال، یک سیستم فقط متنی ممکن است بتواند به سوال «این تصویر درباره چیست؟» پاسخ ندهد، اما یک سیستم multimodal می‌تواند خود تصویر را ببیند، محتوای آن را تحلیل کند و سپس پاسخ متنی دقیق ارائه دهد. این تغییر، هوش مصنوعی را از یک ابزار صرفا متنی به یک سیستم نزدیک‌تر به درک انسانی تبدیل می‌کند.

تفاوت سیستم‌های متنی با سیستم‌های Multimodal

برای درک بهتر اهمیت multimodality، مقایسه زیر کمک‌کننده است:

سیستم فقط متنی

  • ورودی: متن
  • خروجی: متن
  • محدود به توصیف‌هایی است که کاربر از قبل نوشته

سیستم Multimodal

  • ورودی: متن + تصویر (و در موارد پیشرفته‌تر صدا و ویدیو)
  • خروجی: متن، تحلیل یا تصمیم
  • قادر به تحلیل مستقیم داده‌های غیرمتنی

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

چرا Multimodal AI برای اپلیکیشن‌های واقعی حیاتی است؟

اهمیت multimodal AI زمانی مشخص می‌شود که وارد سناریوهای واقعی محصول می‌شویم. برخی نمونه‌های رایج عبارت‌اند از:

  • پرسش و پاسخ روی تصاویر: مثل پرسیدن درباره محتوای یک نمودار، فاکتور یا تصویر محصول
  • تحلیل اسناد ترکیبی: اسنادی که هم متن دارند و هم تصویر (PDFها، اسلایدها، کاتالوگ‌ها)
  • جستجوی پیشرفته: جستجو در مجموعه‌ای از متن‌ها و تصاویر به‌صورت هم‌زمان
  • سیستم‌های پشتیبانی هوشمند: تحلیل اسکرین‌شات خطا به همراه توضیح متنی کاربر

در تمام این سناریوها، اگر سیستم فقط متن را بفهمد، بخش مهمی از اطلاعات را از دست می‌دهد.

نقش LangChain در دنیای Multimodal

اینجا دقیقا جایی است که LangChain اهمیت پیدا می‌کند. وقتی با داده‌های چندرسانه‌ای سروکار داریم، فقط «مدل» کافی نیست؛ ما به سیستمی نیاز داریم که بتواند:

  • ورودی‌های مختلف را مدیریت کند
  • آن‌ها را به مدل مناسب ارسال کند
  • پاسخ‌ها را ترکیب و کنترل کند

LangChain این نقش را به‌عنوان یک لایه هماهنگ‌کننده (orchestration layer) بازی می‌کند. به‌جای اینکه منطق پردازش متن، تصویر و retrieval را به‌صورت پراکنده در کد پیاده‌سازی کنیم، LangChain کمک می‌کند این اجزا در یک جریان مشخص و قابل نگهداری کنار هم قرار بگیرند.

LangChain چگونه ورودی‌های چندرسانه‌ای را پشتیبانی می‌کند؟

۱

برای ساخت یک سیستم multimodal AI، صرفا داشتن یک مدل چندرسانه‌ای کافی نیست. چالش اصلی در عمل این است که چگونه متن، تصویر و سایر ورودی‌ها را به‌شکل درست مدیریت کنیم، به مدل مناسب بدهیم و خروجی قابل استفاده بگیریم. این دقیقا همان جایی است که LangChain نقش خود را نشان می‌دهد.

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

مفهوم Multimodal Models در LangChain

در LangChain، پشتیبانی از ورودی‌های چندرسانه‌ای از طریق مفهوم Multimodal Models انجام می‌شود. این مدل‌ها می‌توانند بیش از یک نوع ورودی را هم‌زمان دریافت کنند؛ برای مثال:

  • متن + تصویر
  • توضیح متنی درباره یک تصویر
  • پرسش متنی درباره محتوای یک تصویر

LangChain خودش مدل چندرسانه‌ای نمی‌سازد، بلکه به‌عنوان یک لایه میانی، ورودی‌ها را در قالب مناسب آماده کرده و به مدل‌هایی که چندوجهی هستند ارسال می‌کند.

به بیان ساده:

  • LangChain = مدیر جریان داده
  • Multimodal Model = مغز تحلیل متن و تصویر

چرا LangChain برای Multimodal از API خام بهتر است؟

در مثال‌های ساده، شاید استفاده مستقیم از API مدل‌های multimodal کافی باشد. اما به‌محض اینکه:

  • چند نوع ورودی داشته باشید
  • بخواهید retrieval اضافه کنید
  • یا پاسخ را با داده‌های دیگر ترکیب کنید

کد به‌سرعت پیچیده می‌شود. LangChain این پیچیدگی را مدیریت و مهار می‌کند، نه اینکه آن را حذف کند و همین موضوع برای پروژه‌های واقعی حیاتی است.

جریان ساده پردازش Multimodal در LangChain

در ساده‌ترین حالت، جریان کار به این شکل است:

۱. کاربر ورودی متنی و تصویری ارسال می‌کند

۲. LangChain ورودی‌ها را در قالب مناسب آماده می‌کند

۳. مدل multimodal (مثلا یک LLM با پشتیبانی تصویر) ورودی را تحلیل می‌کند

۴. پاسخ متنی تولید می‌شود

۵. LangChain پاسخ را به لایه بعدی (نمایش، ذخیره، یا پردازش بیشتر) می‌فرستد

این تفکیک مراحل باعث می‌شود کد:

  • خواناتر باشد
  • تست‌پذیرتر باشد
  • و در پروژه‌های بزرگ‌تر قابل نگهداری بماند

مثال Multimodal با LangChain (متن + تصویر)

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

در این سناریو، فرض می‌کنیم:

  • یک تصویر داریم (مثلا تصویر یک محصول یا نمودار)
  • یک سوال متنی درباره همان تصویر می‌پرسیم
  • مدل با در نظر گرفتن هر دو ورودی پاسخ می‌دهد

پیش‌نیازها

برای اجرای این مثال به موارد زیر نیاز داریم:

  • Python 3.9 یا بالاتر
  • نصب LangChain
  • دسترسی به یک مدل multimodal (مثل مدل‌هایی که ورودی تصویر را پشتیبانی می‌کنند)
  • یک تصویر نمونه (URL یا فایل محلی)

نصب LangChain:

در این مثال تمرکز روی نحوه استفاده LangChain از ورودی چندرسانه‌ای است، نه تنظیمات خاص یک ارائه‌دهنده مدل.

ایده‌ی کلی مثال

جریان داده در این مثال به شکل زیر است:

  • کاربر یک تصویر + یک سوال متنی وارد می‌کند
  • LangChain این دو ورودی را در یک پیام واحد ترکیب می‌کند
  • مدل multimodal تصویر را تحلیل می‌کند
  • پاسخ متنی تولید می‌شود

این دقیقا همان الگوی پایه‌ای است که بعدا می‌توان آن را گسترش داد و وارد معماری‌های پیچیده‌تر کرد.

آماده‌سازی پیام Multimodal در LangChain

LangChain از ساختار پیام‌ها (Messages) استفاده می‌کند. برای ورودی چندرسانه‌ای، پیام می‌تواند شامل چند بخش مختلف باشد؛ مثلاً متن و تصویر در کنار هم.

نمونه‌ای ساده از ساخت یک پیام multimodal:

در اینجا:

  • بخش اول پیام، متن سوال است
  • بخش دوم، تصویر موردنظر (به‌صورت URL)
  • LangChain این دو را به‌عنوان یک ورودی واحد به مدل ارسال می‌کند

ارسال پیام به مدل با LangChain

حالا پیام ساخته‌شده را به یک مدل multimodal می‌دهیم. در LangChain، این کار معمولا از طریق یک کلاس مدل انجام می‌شود.

نمونه ساده:

در این مرحله:

  • مدل متن و تصویر را هم‌زمان دریافت می‌کند
  • تصویر تحلیل می‌شود
  • پاسخ متنی تولید می‌شود

چرا این مثال مهم است؟

این مثال ساده چند نکته کلیدی را نشان می‌دهد:

  • ورودی multimodal در LangChain یک چیز پیچیده یا جادویی نیست
  • متن و تصویر در یک ساختار استاندارد کنار هم قرار می‌گیرند
  • همان الگوی پیام‌ها که برای متن استفاده می‌شود، برای تصویر هم قابل گسترش است

در واقع، LangChain کمک می‌کند بدون درگیر شدن با جزئیات فرمت‌های خام API، تمرکزمان روی منطق برنامه باشد.

LangChain در نقش مغز برنامه‌های چندرسانه‌ای

وقتی یک مثال ساده multimodal (متن + تصویر) را پیاده‌سازی می‌کنیم، شاید در نگاه اول به نظر برسد که LangChain فقط یک لایه‌ی نازک روی API مدل است. اما در عمل، ارزش اصلی LangChain زمانی مشخص می‌شود که سیستم شروع به بزرگ شدن، چندمرحله‌ای شدن و ترکیب با داده‌های مختلف می‌کند.

در برنامه‌های چندرسانه‌ای واقعی، ما معمولا فقط یک درخواست و یک پاسخ نداریم. بلکه با سناریوهایی مثل این روبه‌رو هستیم:

  • ورودی کاربر شامل متن + تصویر + context قبلی است
  • پاسخ مدل باید با داده‌های داخلی سیستم ترکیب شود
  • گاهی لازم است قبل یا بعد از پاسخ مدل، ابزار یا retrieval اجرا شود

LangChain دقیقا در این نقطه به‌عنوان مغز (Coordinator) سیستم عمل می‌کند.

LangChain به‌عنوان لایه Orchestration

می‌توان LangChain را به‌عنوان یک لایه orchestration در نظر گرفت که:

  • تصمیم می‌گیرد چه ورودی‌ای به کدام مدل برود
  • مشخص می‌کند چه زمانی retrieval انجام شود
  • خروجی مدل را به مرحله بعدی هدایت می‌کند
  • اجازه می‌دهد کل جریان به‌صورت مرحله‌ای و شفاف تعریف شود

در سیستم‌های multimodal، این نقش حتی پررنگ‌تر است، چون:

  • ورودی‌ها متنوع‌ترند
  • خطاها پیچیده‌ترند
  • و نیاز به انعطاف‌پذیری بیشتر است

چرا Multimodal بدون orchestration سریعا پیچیده می‌شود؟

فرض کنید بخواهید بدون LangChain یک سیستم زیر را بسازید:

  • کاربر یک تصویر ارسال می‌کند
  • یک سوال متنی می‌پرسد
  • سیستم باید:
    • تصویر را تحلیل کند
    • اطلاعات مرتبط را از دیتابیس یا vector store پیدا کند
    • پاسخ نهایی را با context کامل بسازد

اگر همه این مراحل را دستی و بدون ساختار انجام دهید:

  • کد به‌سرعت شلوغ و غیرقابل نگهداری می‌شود
  • اضافه کردن قابلیت جدید (مثلا حافظه یا ابزار جدید) سخت می‌شود
  • تست و دیباگ دشوار می‌شود

LangChain با تعریف الگوهای مشخص (Chains، Runnables، Pipelines) کمک می‌کند این پیچیدگی کنترل‌شده و قابل توسعه باقی بماند.

معماری و پیاده‌سازی یک Multi-Modal RAG ساده با LangChain

۲

برای اینکه Multimodal RAG از حد تئوری خارج شود، بهتر است معماری و پیاده‌سازی را هم‌زمان ببینیم. هدف این بخش ساخت یک pipeline کامل و واقعی است، اما به ساده‌ترین شکل ممکن؛ بدون اینکه وارد جزئیات اضافی شویم.

  • ابتدا تصاویر و متن‌ها را از فایل‌ها استخراج می‌کنیم.
  • از یک Vision LLM می‌خواهیم برای آن‌ها خلاصه/توضیح کوتاه تولید کند.
  • خلاصه‌ها را در Chroma امبد (Embed) می‌کنیم و فایل‌های اصلی را در یک دیتابیس درون‌حافظه‌ای (in-memory) ذخیره می‌کنیم.
  • یک Multi-Vector Retriever می‌سازیم. این بازیاب با استفاده از امتیاز شباهت، خلاصه‌ها را از وکتوراستور پیدا می‌کند و سپس سند/محتوای اصلی متناظر با آن خلاصه‌ها را از دیتاستور برمی‌گرداند.
  • در نهایت، اسناد بازیابی‌شده را به یک MM-LLM (مدل چندرسانه‌ای) می‌دهیم تا پاسخ را تولید کند.

وابستگی‌ها (Dependencies)

PDFها و بسیاری از فرمت‌های داده معمولا جدول و تصویر داخل خود دارند. استخراج آن‌ها به سادگی استخراج متن نیست. برای این کار به ابزارهایی نیاز داریم که مخصوص این کار طراحی شده‌اند؛ مثل Unstructured.
Unstructured یک ابزار متن‌باز برای پیش‌پردازش فایل‌هایی مثل HTML، PDF و Word است و می‌تواند با استفاده از OCR، تصاویر جاسازی‌شده را از فایل‌ها استخراج کند. برای اجرای Unstructured روی سیستم، باید Poppler و Tesseract نصب باشند.

نصب Tesseract و Poppler

حالا می‌توانیم Unstructured را همراه با کتابخانه‌های موردنیاز نصب کنیم:

استخراج تصاویر و جدول‌ها (Extract Images and Tables)

برای استخراج تصاویر و جدول‌ها از تابع partition_pdf استفاده می‌کنیم:

این کد PDF را بخش‌بندی (partition) می‌کند، تصاویر را در مسیر مشخص‌شده استخراج می‌کند، و متن‌ها را نیز بر اساس استراتژی و محدودیت‌های کاراکتری تعیین‌شده تکه‌تکه (chunk) می‌کند.

حالا متن‌ها و جدول‌ها را از هم جدا می‌کنیم:

خلاصه‌سازی متن و جدول‌ها (Text and Table Summaries)

برای تولید خلاصه‌های کوتاه از چانک‌های متن و جدول‌ها، از Gemini Pro استفاده می‌کنیم. در LangChain یک زنجیره‌ی خلاصه‌سازی وجود دارد و ما با Expression Language یک زنجیره‌ی ساده می‌سازیم.

برای استفاده از مدل‌های Gemini در LangChain باید:

  • یک حساب GCP داشته باشید
  • VertexAI را فعال کنید
  • و Credentialها را تنظیم کنید

کد خلاصه‌سازی:

در این زنجیره، چهار جزء اصلی داریم:

  • یک دیکشنری برای عبور دادن داده‌ها
  • ساخت prompt template
  • مدل LLM
  • پارسر رشته‌ای (StrOutputParser)

همچنین AIMessage به‌کمک RunnableLambda در صورت خطا، یک پیام جایگزین برمی‌گرداند.

خلاصه‌سازی تصاویر (Image Summaries)

همان‌طور که گفتیم، برای تصاویر باید از یک مدل vision استفاده کنیم تا تصویر را به توضیح متنی تبدیل کند. می‌توانید از GPT-4، Llava، Gemini و… استفاده کنید. در اینجا از Gemini Pro Vision استفاده شده است.

برای پردازش تصاویر:

  • تصویر را به base64 تبدیل می‌کنیم
  • همراه با یک prompt ثابت به Gemini Pro Vision می‌دهیم

بازیاب چندبرداری (Multi-Vector Retriever)

ایده این است که:

  • خلاصه‌های متن/جدول/تصویر را در یک vector store ذخیره کنیم
  • محتوای اصلی را در یک document store درون‌حافظه‌ای نگه داریم
  • سپس هنگام جستجو، اول خلاصه‌های نزدیک را پیدا کنیم و بعد اصل سند متناظر را برگردانیم

LangChain برای این کار MultiVectorRetriever را ارائه می‌دهد:

در این کد:

  • یک Chroma vector store برای خلاصه‌ها داریم
  • یک InMemoryStore برای محتوای اصلی
  • و MultiVectorRetriever این دو را به هم متصل می‌کند

ساخت پایپلاین RAG با LangChain Expression Language

در مرحله نهایی، پایپلاین را با Expression Language می‌سازیم. این بخش شامل چند تابع کمکی است تا:

  • متن و تصویر را از هم جدا کند
  • اگر داده base64 تصویر باشد، آن را تشخیص دهد و resize کند
  • یک prompt مناسب بسازد
  • و سپس مدل vision پاسخ نهایی را تولید کند

این زنجیره چند بخش دارد:

  • یک دیکشنری شامل context و question
  • یک زنجیره برای context که شامل retriever و تابع جداسازی متن/تصویر است
  • تابعی که یک دستورالعمل برای grounded بودن پاسخ اضافه می‌کند
  • مدل vision برای تولید پاسخ
  • و در پایان parser برای خروجی متن

اجرای Retriever و RAG Chain

می‌توانید ابتدا retriever را تست کنید تا مطمئن شوید اسناد درست بازیابی می‌شوند:

حالا خود زنجیره RAG را اجرا کنید:

برای گرفتن پاسخ بهتر، معمولاً کافی است prompt را کمی تنظیم کنید؛ در بسیاری از موارد با تغییر کوچک در prompt، کیفیت جواب‌ها به شکل محسوسی بهتر می‌شود.

چه زمانی LangChain برای Multimodal انتخاب درستی است؟

LangChain ابزار قدرتمندی است، اما استفاده از آن همیشه بهترین انتخاب نیست. در پروژه‌های multimodal، مهم است بدانیم کِی LangChain ارزش اضافه می‌کند و کِی فقط پیچیدگی می‌آورد. اگر این تصمیم درست گرفته نشود، سیستم بیش‌ازحد مهندسی‌شده (over-engineered) می‌شود.

استفاده از LangChain برای multimodal AI انتخاب درستی است اگر:

  • ورودی‌ها فقط متن نیستند و با تصویر یا داده‌های غیرمتنی سروکار دارید
  • نیاز دارید چند مرحله پردازش (تحلیل تصویر، retrieval، پاسخ‌دهی) را هماهنگ کنید
  • قصد دارید سیستم را به RAG یا pipelineهای پیچیده‌تر گسترش دهید
  • نگهداری و توسعه‌پذیری کد برایتان مهم است

در مقابل، استفاده از LangChain ضروری نیست اگر:

  • فقط یک درخواست ساده متن + تصویر دارید
  • retrieval یا حافظه در کار نیست
  • سیستم قرار نیست رشد کند یا قابلیت جدید بگیرد
  • استفاده مستقیم از API مدل‌ها نیازتان را برطرف می‌کند

به‌طور خلاصه، LangChain زمانی بیشترین ارزش را ایجاد می‌کند که multimodality به‌همراه جریان‌های چندمرحله‌ای و داده‌محور وارد بازی شود.

جمع‌بندی

برنامه‌های چندرسانه‌ای نشان می‌دهند که آینده هوش مصنوعی فقط در پردازش متن خلاصه نمی‌شود. داده‌های واقعی معمولا ترکیبی از متن، تصویر و زمینه هستند و سیستم‌هایی که نتوانند این ترکیب را درک کنند، به‌سرعت به محدودیت می‌خورند. Multimodal AI تلاشی است برای نزدیک‌تر کردن مدل‌ها به این واقعیت و LangChain نقش مهمی در عملی‌کردن این رویکرد ایفا می‌کند.

LangChain با قرار گرفتن در نقش یک لایه orchestration، امکان مدیریت ورودی‌های متنوع، اتصال مدل‌ها و کنترل جریان پردازش را فراهم می‌کند؛ بدون اینکه توسعه‌دهنده مجبور شود منطق سیستم را به‌صورت پراکنده و شکننده پیاده‌سازی کند. زمانی که multimodality با retrieval و داده‌های خارجی ترکیب می‌شود، داشتن چنین لایه‌ای دیگر یک انتخاب لوکس نیست، بلکه به یک نیاز عملی تبدیل می‌شود.

 

منابع

dev.to | analyticsvidhya.com 

سوالات متداول

LangChain یک فریم‌ورک برای مدیریت، اتصال و ارکستریشن مدل‌های زبانی است که ساخت pipelineهای چندمرحله‌ای و چندوجهی (Multimodal) را ساده می‌کند.

بسته به نیاز پروژه می‌توان از:
– مدل‌های متنی (LLM)
– مدل‌های Vision
– مدل‌های Speech-to-Text
– مدل‌های Text-to-Image

بله، اما:
– برای پروژه‌های ساده ممکن است بیش‌ازحد پیچیده باشد
– بیشترین ارزش LangChain در پروژه‌های چندمرحله‌ای و مقیاس‌پذیر دیده می‌شود

– پروژه‌های بسیار ساده
– نیاز به latency بسیار پایین
– سناریوهایی که pipeline ثابت و بدون تصمیم‌گیری دارند

فرصت‌های شغلی

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

دیدگاه‌ها

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

فهرست محتوا