برنامه نویسی

postgres.new: Postgres درون مرورگر با رابط هوش مصنوعی

معرفی postgres.new، جعبه شنی Postgres درون مرورگر با کمک هوش مصنوعی. با postgres.new، می‌توانید فوراً تعداد نامحدودی از پایگاه‌های داده Postgres را که مستقیماً در مرورگر شما اجرا می‌شوند، بچرخانید (و به زودی آنها را در S3 مستقر کنید).

هر پایگاه داده با یک مدل زبان بزرگ (LLM) جفت می شود که راه را برای موارد استفاده جالب باز می کند:

  • وارد کردن CSV را بکشید و رها کنید (تولید جدول در حین پرواز)
  • تولید و صادرات گزارش
  • نمودارها را ایجاد کنید
  • ساخت نمودارهای پایگاه داده

همه اینها در حالی که کاملاً محلی برای مرورگر خود هستید. این کمی شبیه به ترکیب Postgres و ChatGPT در یک رابط است:

⚡️ آن را امتحان کنید

بیشتر یک یادگیرنده بصری؟ ویدیو را ببینید!

https://www.youtube.com/watch?v=ooWaPVvljlU

در این نسخه ی نمایشی، چندین مورد استفاده جالب را پوشش می دهیم:

  • شما یک فایل CSV دارید که می خواهید به سرعت آن را پرس و جو کنید و تجسم کنید. می‌توانید آن را در اکسل بارگذاری کنید، اما به SQL دانا هستید و واقعاً آرزو می‌کنید که می‌توانید آن را مانند یک پایگاه داده جستجو کنید.
  • شما از ChatGPT می‌خواهید که به شما کمک کند تا مقداری SQL بنویسید، اما در حالت ایده‌آل می‌خواهید آن را روی یک پایگاه داده واقعی اجرا کنید تا بدانید درست است یا خیر. بالاخره LLM ها کامل نیستند.
  • شما در حال ساخت پروژه جانبی بعدی خود هستید و زمان آن است که پایگاه داده خود را برنامه ریزی کنید. شما قبلاً 1000 بار این کار را انجام داده‌اید و آرزو می‌کنید که کاش می‌توانستید فقط آنچه را که می‌خواهید «توصیف» کنید و هوش مصنوعی کار ایجاد نمودارهای ER و مهاجرت‌های SQL را انجام دهد.

چگونه کار می کند

همه پرس و جوها در postgres.new مستقیماً در مرورگر شما اجرا می شوند. هیچ کانتینر Postgres راه دور یا پروکسی WebSocket وجود ندارد.

این چگونه ممکن است؟ ستاره نمایش PGlite است، یک نسخه WASM از Postgres که می تواند مستقیماً در مرورگر شما اجرا شود. دوستان ما در ElectricSQL چند ماه پیش پس از کشف راهی برای کامپایل منبع واقعی Postgres در Web Assembly، PGlite را منتشر کردند (در ادامه در این مورد بیشتر توضیح خواهیم داد).

انگیزه

چند چیز وجود دارد که ما می خواستیم با postgres.new به آنها برسیم:

  1. توسعه مبتنی بر هوش مصنوعی: ما می خواستیم تعامل بین Postgres و AI را دوباره تصور کنیم. این باعث می‌شود که خطاهایی که گاهی اوقات هوش مصنوعی مرتکب می‌شود، ملایم‌تر باشد (و اجازه دهید با آن روبرو شویم: توسعه‌دهندگان نیز).
  2. سندباکس Postgres: ما از طرفداران بزرگ جعبه های شنی و نوت بوک هستیم. از آنجایی که PGlite در مرورگر اجرا می شود، سریع و یکبار مصرف به نظر می رسد. می‌توانید «یک میلیون فیل کوچک» را بچرخانید تا تجزیه و تحلیل داده‌ها را با استفاده از همان رابط Postgres انجام دهید که در توسعه روزانه‌مان با آن آشنا هستیم.
  3. پایگاه های داده بسیار ارزان: ما همیشه به دنبال راه هایی برای ارائه به توسعه دهندگان هستیم پایگاه داده های بیشتر برای ارزان تر. PGlite هنوز نوپا است، اما ما می‌توانیم پتانسیل آن را برای چرخش میلیون‌ها پایگاه داده ارزان که می‌توانند از S3 ذخیره و خوانده شوند، ببینیم. این موارد کاربردهای متنوعی را که در انجمن Supabase می بینیم را پوشش می دهد.

ویژگی ها و نحوه کار آنها

پس دقیقاً چه کاری می توانید با postgres.new انجام دهید؟ اینها زیر کاپوت چگونه کار می کنند؟

دستیار هوش مصنوعی

ما PGlite را با یک مدل زبان بزرگ (در حال حاضر GPT-4o) جفت می‌کنیم و به آن فرمانروایی کامل بر پایگاه داده می‌دهیم بدون اینکه مجوز یا تأییدیه محدودی از کاربر لازم باشد. این در واقع یک جزئیات مهم است – و درهای جدیدی را باز کرده است که سایر ابزارهای هوش مصنوعی + Postgres با آن دست و پنجه نرم می کنند.

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

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

واردات و صادرات CSV

یک فایل CSV را مستقیماً روی چت بکشید و رها کنید تا فوراً یک جدول جدید با داده های وارد شده به طور خودکار به آن دریافت کنید. مدل زبان هدر CSV و چند ردیف نمونه را اسکن می‌کند تا تصمیم بگیرد از کدام نوع داده برای هر ستون استفاده شود:

واردات و صادرات CVS

درست مانند انسان ها، هوش مصنوعی همیشه این را درست نمی کند. ممکن است ردیفی از داده‌ها وجود داشته باشد که از دست رفته است که با انواع داده‌های مورد انتظار مطابقت نداشته و باعث عدم موفقیت در واردات می‌شود. برای حل این مشکل، قابلیت خوددرمانی هوش مصنوعی را اضافه کردیم. هر گونه خطای SQL از Postgres به مدل زبان بازگردانده می شود تا بتواند چند تلاش دیگر را برای حل مشکل امتحان کند. این رفتار هر زمان که هوش مصنوعی SQL را اجرا می کند، نه فقط واردات CSV، فعال می شود.

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

نمودارها

نمودارها یک ویژگی درجه یک در چت هستند. به سادگی با افزودن کلمه “نمودار” (یا مشابه) به پیام خود، هوش مصنوعی پرس و جوی مناسب را با استفاده از SQL اجرا می کند و سپس نموداری می سازد که نشان دهنده آن داده است:

نمونه نمودارها

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

ما این نمودارها را با استفاده از Chart.js، یکی از بالغ‌ترین کتابخانه‌های نمودارگیری موجود در جاوا اسکریپت، در زیر پوشش ارائه می‌کنیم. انتخاب Chart.js تا حد زیادی تحت تأثیر مدل زبان (GPT-4o) بود که درک بسیار خوبی از نحو و پیکربندی آن دارد. این مدل به سادگی خروجی SQL را به نحو معادل Chart.js ترجمه می کند، سپس آن را در صفحه نمایش می دهد. یک اثر جانبی خوب این است که می‌توانید از هوش مصنوعی بخواهید تا نوع، رنگ‌ها، محورها، عنوان یا هر چیز دیگری را که می‌خواهید نمودار را تنظیم کند تا زمانی که Chart.js از ویژگی شما پشتیبانی می‌کند. درخواست می کنند.

شایان ذکر است که Chart.js گاهی اوقات انتظار ورودی هایی دارد که می تواند کمی پرمخاطب باشد و به هزینه و تأخیر اضافه کند. در آینده می‌خواهیم با دیگر گزینه‌های نموداری که ورودی مختصرتری دارند آزمایش کنیم.

نمودارهای ER و مهاجرت

معمولاً نمودارهای ER قبل از نوشتن هر SQL ایجاد می شوند. به هر حال، چرا در سینتکس SQL گرفتار شوید، در حالی که واقعاً فقط به گرفتن داده ها و نیازهای ارتباط برنامه خود اهمیت می دهید؟

اما با هوش مصنوعی، این گردش کار کمی تغییر می کند. ایجاد کیفیت برای یک مدل زبان بی اهمیت است CREATE و ALTER اظهارات در عرض چند ثانیه پس چرا به مدل اجازه ندهید DDL واقعی را در مقابل یک جعبه شنی Postgres انجام دهد و به سادگی نمودار ER را بر اساس این جداول تولید کند؟

نمونه نمودارها

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

نمونه مهاجرت

در زیر سرپوش از یک نسخه سازگار با مرورگر از postgres-metato جداول PGlite در جاوا اسکریپت استفاده می کنیم، سپس آنها را با استفاده از schema visualizer رندر می کنیم. برای انتقال، ما تاریخچه چت را اسکن می کنیم و تمام پرس و جوهای SQL مربوط به DDL را در یک نمای واحد به هم متصل می کنیم.

در آینده، ما همچنین می خواهیم از بخش “seeds” پشتیبانی کنیم که خروجی دارد INSERT عبارات برای داده های نمونه ایجاد شده توسط مدل زبان. متأسفانه ما نمی‌توانیم به سادگی این پرس‌و‌جوها را مانند مهاجرت‌ها به هم متصل کنیم، زیرا ساختار جدول و ستون می‌تواند در طول زمان تغییر کند و دانه‌های قبلی را بشکند. برای اینکه این کار به درستی کار کند، به چیزی شبیه به نسخه WASM نیاز داریم pg_dump که می تواند تمام داده ها را در پایان تخلیه کند (با ما همراه باشید – تیم ElectricSQL روی آن کار می کند!)

جستجوی معنایی و RAG

ElectricSQL سخت کار کرده است تا از پسوندهای Postgres واقعی در PGlite (کامپایل شده در WASM) پشتیبانی کند. یکی از برنامه‌های افزودنی که در فهرست اولویت‌ها قرار داشت pgvector بود که جستجوی برداری درون مرورگر را فعال می‌کند.

pgvector به طور پیش‌فرض در postgres.new فعال است، به این معنی که می‌توانید فوراً ستون‌های برداری را روی هر جدولی ایجاد و درخواست کنید. البته، این فقط در صورتی مفید است که جاسازی‌های واقعی برای کار با آنها داشته باشید – بنابراین ما به Transformers.js دسترسی هوش مصنوعی دادیم که به شما امکان می‌دهد جاسازی‌های متنی را مستقیماً در مرورگر ایجاد کنید، سپس آنها را در PGlite ذخیره یا جستجو کنید.

جاسازی ها را ایجاد کنید

زیر کاپوت، جاسازی ها را در یک ذخیره می کنیم meta.embeddings جدول سپس شناسه های حاصل از هر جاسازی را به هوش مصنوعی ارسال می کند. ما این کار را به این دلیل انجام می‌دهیم که بردارهای جاسازی بزرگ هستند و فرستادن این بردارها به مدل نه تنها گران است، بلکه مستعد خطا نیز است. در عوض، مدل زبان از آن آگاه است meta.embeddings جدول و زمانی که نیاز به دسترسی به جاسازی دارد، به سادگی آن را درخواست می کند.

ما هیجان زده هستیم که ببینیم مردم با این ابزار چه می کنند. ما متوجه شدیم که ماسه‌بازی کاملی برای آزمایش جستجوی معنایی و RAG در یک محیط کم خطر ارائه کرده است.

استقرارها

با postgres.new ما انتظار داریم تا پایان هفته استقرارهای فقط خواندنی داشته باشیم. این به یک دلیل اصلی مهم است: میزبانی پایگاه داده PGLite در S3 بسیار ارزان است. در حالی که اجرای یک پایگاه داده کامل Postgres آنقدر گران نیست، موارد استفاده ای وجود دارد که توسعه دهندگان بیشتر ویژگی های Postgres را دوست دارند، اما بدون هزینه اجرای یک پایگاه داده کامل. PGLite که از طریق S3 ارائه می‌شود، دروازه‌ها را به روی بسیاری از موارد استفاده باز می‌کند: یک پایگاه داده تکراری برای هر کاربر. پایگاه‌های اطلاعاتی فقط خواندنی برای خواندن سریع‌تر. ویژگی های جستجو میزبانی شده در لبه. شاید حتی یک نسخه کوتاه شده از Supabase.

PGlite به خودی خود یک پایگاه داده تعبیه شده است به این معنی که شما نمی توانید مانند یک پایگاه داده معمولی Postgres از طریق اتصال TCP به آن متصل شوید. برای پشتیبانی از استقرارهای پشتیبانی شده از PGlite، ما به راهی برای بازسازی مؤلفه سرور TCP Postgres و همچنین تجزیه پیام های پروتکل سیم واقعی نیاز داشتیم تا افراد بتوانند از طریق هر مشتری معمولی Postgres به پایگاه داده خود متصل شوند.

اینگونه بود که pg-gateway متولد شد: یک کتابخانه TypeScript که پروتکل سیم Postgres را از سمت سرور پیاده سازی می کند. API هایی را ارائه می دهد که می توانید به آن ها متصل شوید تا درخواست های احراز هویت، پرس و جوها و سایر پیام های مشتری را خودتان مدیریت کنید.

نمودار pglite

در زیر هود، PGlite از پیام‌های پروتکل سیمی پشتیبانی می‌کند (بیشتر را در زیر ببینید)، اما فقط پیام‌هایی را که پس از شروع/تأیید دست دادن می‌بینید، پشتیبانی می‌کند. بنابراین ما طراحی کردیم که pg-gateway پیام‌های راه‌اندازی/TLS/احراز هویت را مدیریت کند، سپس پیام‌های آینده را به سادگی به PGlite منتقل کنیم.

ما ویژگی‌های شاداب بیشتری را در pg-gateway ساخته‌ایم، اما باید منتظر پست وبلاگ خود باشیم.

شیرجه عمیق PGlite

هیچ یک از اینها بدون PGlite که توسط دوستان ما در ElectricSQL توسعه یافته امکان پذیر نخواهد بود.

صفحه فرود PGlite

PGlite چیست؟

PGlite یک ساخت WASM (مجموعه وب) از Postgres است که در یک کتابخانه کلاینت TypeScript/JavaScript بسته بندی شده است. می توانید از آن برای اجرای Postgres در مرورگر، Node.js و Bun بدون وابستگی اضافی استفاده کنید. این تعدادی از موارد استفاده را فراهم می کند که ممکن است بهتر از یک پایگاه داده کامل Postgres باشد:

  • تست واحد و CI: PGlite برای شروع و از بین رفتن بسیار سریع است. این برای تست های واحد عالی است – می توانید برای هر آزمون یک Postgres تازه منحصر به فرد داشته باشید.
  • توسعه محلی: می توانید از PGlite به عنوان جایگزینی برای Postgres کامل محلی برای توسعه استفاده کنید. محیط های توسعه خود را ساده کنید.
  • توسعه از راه دور یا کانتینرهای وب محلی: از آنجایی که PGlite بسیار سبک است، می توان آن را به راحتی در محیط های توسعه کانتینری از راه دور یا کانتینرهای وب درون مرورگر جاسازی کرد.

ماندگاری داده ها

PGlite از چندین پشتیبان برای ماندگاری داده ها پشتیبانی می کند:

  1. سیستم فایل بومی هنگامی که در Node استفاده می شود
  2. IndexedDB و OPFS هنگام استفاده در مرورگر

این سریع است، با پرس و جوهای سبک CRUD که در کمتر از 0.3 میلی ثانیه اجرا می شوند. این ایده آل است که وضعیت محلی را در یک برنامه وب ذخیره می کند.

پشتیبانی برنامه افزودنی

PGlite از کاتالوگ بزرگی از پسوندهای Postgres پشتیبانی می کند. در اینجا دو پسوند قابل توجه وجود دارد که در یک محیط جاسازی شده مفید هستند:

pgvector

pgvector را می توان برای نمایه سازی و جستجوی جاسازی ها، معمولاً به عنوان بخشی از یک گردش کار هوش مصنوعی (بازیابی نسل افزوده) استفاده کرد. همانطور که هوش مصنوعی به سمت دستگاه کاربر حرکت می کند، انجام جستجوهای برداری نزدیک به مدل برای کاهش تاخیر ضروری است.

live

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

مروری فنی بر PGlite

Postgres معمولاً تحت یک مدل انشعاب چند فرآیندی اجرا می‌شود، هر اتصال کلاینت توسط فرآیند postmaster به یک فرآیند فرزند واگذار می‌شود. با این حال، در WASM هیچ پشتیبانی برای فرآیندهای فورکینگ، و پشتیبانی محدود برای موضوعات وجود ندارد.

خوشبختانه، Postgres یک “حالت تک کاربره” داخلی نسبتاً ناشناخته دارد که هم تک فرآیندی و هم تک رشته ای است. این در درجه اول برای فعال کردن بوت استرپ یک پایگاه داده جدید یا برای بازیابی فاجعه طراحی شده است.

PGlite با افزودن پشتیبانی از پروتکل سیم Postgres بر روی حالت تک کاربر ایجاد می‌شود، زیرا Postgres استاندارد تنها از حداقل لغو اولیه REPL در حالت تک کاربر پشتیبانی می‌کند، این امکان پرس‌و‌جوهای پارامتری شده و تبدیل بین انواع Postgres و انواع زبان‌های میزبان را فراهم می‌کند.

تعدادی چیز دیگر در Postgres وجود دارد که PGlite آنها را برای فعال کردن استفاده از WASM اصلاح می کند. این موارد عبارتند از:

  • پشتیبانی از تعیین کاربر برای اتصال هنگام شروع در حالت تک کاربره، اجازه می دهد مجوزها و RLS اعمال شوند.
  • پشتیبانی برای COPY، برای بارگیری فرمت های کپی باینری CSV یا Postgres در پایگاه داده. این با ایجاد یک دستگاه مجازی در VFS به دست آمد، /dev/blob، که می توانید با آن بخوانید و بنویسید COPY دستور، و نشان دهنده یک شی Blob جاوا اسکریپت در پرس و جو است.
  • اضافه شدن dumpDataDir و loadDataDir امکان تخلیه و بارگیری یک تاربال از Postgres datadir.
  • pg_notify برای اجرا در حالت تک فرآیندی تغییر یافته است، و پایه‌هایی را برای یک رابط پرس و جوی واکنشی زنده در بالای NOTIFY و LISTEN.
  • یک OPFS (سیستم فایل خصوصی اصلی) VFS جدید برای مرورگرها که عملکرد و پشتیبانی بهتری را برای پایگاه های داده به میزان قابل توجهی بزرگتر از آنچه در حافظه جا می شود ارائه می دهد.

به زودی

ما دوست داریم زودتر و اغلب در Supabase ارسال کنیم، بنابراین تعدادی از ویژگی ها در بک لاگ وجود دارد:

  • پایگاه داده خود را مستقر کنید: ما توانایی استقرار پایگاه داده خود را در S3 و دسترسی به آن از هر نقطه در اینترنت (برای شروع فقط خواندنی) اضافه می کنیم.
  • پشتیبانی از انواع فایل های بیشتر: ما قصد داریم برای اسناد Word، تصاویر (از طریق جاسازی تصویر) و موارد دیگر پشتیبانی اضافه کنیم.
  • اشتراک گذاری پایگاه داده: درست مانند CodeSandbox، به زودی می‌توانید پایگاه‌های داده را با استفاده از یک URL منحصربه‌فرد با دیگران به اشتراک بگذارید.
  • پشتیبانی از PGlite OPFS: پایگاه‌های داده در حال حاضر در IndexedDB ذخیره می‌شوند و ما آن را به OPFS منتقل می‌کنیم تا فایل‌ها را مستقیماً در سیستم فایل میزبان ذخیره کنیم.
  • صادرات پایگاه داده: به زودی می توانید یک pg_dump از پایگاه داده خود را اجرا کرده و آن را به هر پایگاه داده Postgres بازیابی کنید.

منبع باز

مثل همیشه، کاری که ما انجام داده‌ایم منبع باز و دارای مجوز مجاز است (و کار تیم الکتریک است. اگر می‌خواهید به آن‌ها ستاره بدهید، مشکلی اضافه کنید یا کدی را ارائه دهید، در اینجا تمام مخازن منبع باز وجود دارد. خودت:

⚡️ اطلاعات بیشتر در هفته راه اندازی

نوشته های مشابه

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

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

دکمه بازگشت به بالا