خروجی هوش مصنوعی مولد همیشه قابل اعتماد نیست، اما در اینجا نحوه بهبود کد و جستجوهای ایجاد شده توسط فناوری پشت سر ChatGPT و جلوگیری از ارسال داده های حساس آورده شده است.
- هوش مصنوعی مولد برای جستارهای سازمانی
- مرحله ۱: داده های نمونه خود را به یک رشته تک نویسه تبدیل کنید
- مرحله ۲: یک درخواست برای LLM ایجاد کنید
- مرحله ۳: ارسال داده ها به API OpenAI
- مرحله ۴: نتایج کد SQL را که توسط GPT بازگردانده شده است اجرا کنید
- مرحله ۵ (اختیاری): ایجاد یک برنامه تعاملی
به لطف فناوری پشت ChatGPT، پرس و جو از مجموعه داده به زبان انگلیسی ساده به طرز شگفت آوری ساده شده است.
همانند بیشتر هوش مصنوعی مولد، نتایج API OpenAI همچنان باقی است ناقص است، به این معنی که شما نمی توانید فقط به آنها اعتماد کنید. خوشبختانه، اکنون میتوانید کد بنویسید تا از GPT بپرسید چگونه پاسخ را محاسبه میکند—و سپس اگر با این رویکرد موافق هستید، میتوانید کد را خودتان اجرا کنید. این به این معنی است که شما می توانید سوالاتی را به زبان طبیعی بپرسید، مانند “کل فروش بر اساس منطقه در سال گذشته چقدر بود؟” و از صحت پاسخ اطمینان داشته باشید.
در اینجا یک تکنیک سریع و کثیف برای تنظیم یک جستجوی زبان طبیعی از پایگاه داده خود با GPT وجود دارد:
- ساختار دادههای خود، چند ردیف نمونه یا هر دو را در یک رشته متن قرار دهید.
- با آن اطلاعات به همراه سؤال زبان طبیعی خود، یک «پیام» برای هوش مصنوعی ایجاد کنید.
- پست را به API GPT-3.5-turbo OpenAI بفرستید و برای پاسخ به سوال خود درخواست SQL کنید.
- برای محاسبه پاسخ شما، SQL را اجرا کنید که بر روی مجموعه داده شما باز می گردد.
- (اختیاری) یک برنامه کاربردی تعاملی ایجاد کنید تا جستجوی مجموعه داده به زبان انگلیسی ساده را آسان کنید.
این روش در هنگام مدیریت داده های دنیای واقعی چندین مزیت دارد. با ارسال تنها ساختار داده و برخی ردیفهای نمونه (که میتواند شامل دادههای جعلی باشد)، نیازی به ارسال دادههای حساس واقعی به OpenAI نیست. همچنین اگر داده های شما برای محدودیت های اندازه سریع OpenAI بیش از حد بزرگ باشد، جای نگرانی نیست. و با درخواست SQL بهجای پاسخ نهایی، امکان بررسی نحوه ایجاد پاسخ GPT در این فرآیند نشان داده میشود.
هوش مصنوعی مولد برای جستارهای سازمانی
اگر در مورد استفاده از هوش مصنوعی مولد برای توسعه پرس و جوهای سطح سازمانی جدی هستید، ممکن است بخواهید ابزارهایی مانند LangChain، چارچوبی برای کار با چندین مدل زبان بزرگ مختلف (LLM)، نه تنها GPT OpenAI. OpenAI همچنین اخیراً امکان گنجاندن تماسهای تابعی را اعلام کرده است. درخواستهای API، که با هدف آسانتر کردن و قابل اعتماد کردن پرسوجو و کارهای مشابه است. اما برای یک نمونه اولیه سریع یا استفاده شخصی شما، فرآیندی که در اینجا توضیح داده شده است یک راه آسان برای شروع است. نمایش من با R انجام میشود، اما این تکنیک تقریباً در هر زبان برنامهنویسی کار میکند.
مرحله ۱: داده های نمونه خود را به یک رشته تک نویسه تبدیل کنید
دادههای نمونه در این مرحله میتواند شامل طرح پایگاه داده و/یا چند ردیف داده باشد. تبدیل همه آن به یک رشته تک نویسه مهم است زیرا بخشی از جستار بزرگتر رشته متنی خواهد بود که به GPT 3.5 ارسال می کنید.
اگر داده های شما از قبل در پایگاه داده SQL هستند، این مرحله باید بسیار آسان باشد. اگر اینطور نیست، پیشنهاد میکنم آن را به فرمت SQL-queryable تبدیل کنید. چرا؟ پس از آزمایش نتایج کد R و SQL، من به کد SQL که GPT تولید می کند بیشتر از کد R آن اطمینان دارم. (من گمان می کنم دلیل آن این است که LLM داده های SQL بیشتری نسبت به R برای آموزش داشت.)
در R، بسته sqldf به شما امکان می دهد پرس و جوهای SQL را روی یک قاب داده R اجرا کنید ، و این چیزی است که در این مثال استفاده خواهم کرد. یک کتابخانه sqldf مشابه در پایتون وجود دارد. برای دادههای بزرگتر که عملکرد مهم است، ممکن است بخواهید پروژه duckdb را بررسی کنید. p>
اطلاعات سرشماری برای نسخه آزمایشی
توجه داشته باشید که برای نمایش خود، از یک فایل CSV با داده های جمعیت ایالت سرشماری ایالات متحده استفاده خواهم کرد که در states.csv.
کد زیر فایل داده را به R وارد می کند، از sqldf
استفاده می کند تا ببیند اگر قاب داده یک جدول پایگاه داده SQL بود، طرحواره SQL چگونه به نظر می رسید، سه ردیف نمونه را با dplyr استخراج می کند. تابع
است و هر دو ردیف طرحواره و نمونه را به رشته های کاراکتری تبدیل می کند. سلب مسئولیت: ChatGPT قسمت پایه R filter()
apply()
از کد را نوشت که داده ها را به یک رشته تبدیل می کند (من معمولاً این کارها را با purrr
انجام می دهم).
library(rio)
library(dplyr)
library(sqldf)
library(glue)
states <- rio::import("https://raw.githubusercontent.com/smach/SampleData/main/states.csv") |>
filter(!is.na(Region))
states_schema <- sqldf("PRAGMA table_info(states)")
states_schema_string <- paste(apply(states_schema, 1, paste, collapse = "\t"), collapse = "\n")
states_sample <- dplyr::sample_n(states, 3)
states_sample_string <- paste(apply(states_sample, 1, paste, collapse = "\t"), collapse = "\n")
مرحله ۲: یک درخواست برای LLM ایجاد کنید
قالب باید چیزی شبیه به «به گونهای رفتار کنید که گویی یک دانشمند داده هستید. شما یک جدول SQLite به نام {table_name}
با طرح زیر دارید: ```{schema}```
. سطرهای اول به این شکل هستند: ```{rows_sample}```
. بر اساس این داده ها، یک پرسش SQL برای پاسخ به سؤال زیر بنویسید: {query}
. فقط SQL را برگردانید، توضیحات اضافه نشود.”
عملکرد زیر یک پرس و جو در آن نوع قالب ایجاد می کند و آرگومان هایی را برای طرح داده، ردیف های نمونه، پرس و جو کاربر و نام جدول می گیرد.
create_prompt <- function(schema, rows_sample, query, table_name) {
glue::glue("Act as if you're a data scientist. You have a SQLite table named {table_name} with the following schema:
```
{schema}
```
The first rows look like this:
```{rows_sample}```
Based on this data, write a SQL query to answer the following question: {query}. Return the SQL query ONLY. Do not include any additional explanation.")
}
مرحله ۳: ارسال داده ها به API OpenAI
میتوانید با برش و چسباندن دادهها در یکی از رابطهای وب OpenAI شروع کنید تا نتایج را در ChatGPT یا زمین بازی OpenAI API ببینید. ChatGPT برای استفاده هزینه ای دریافت نمی کند، اما نمی توانید نتایج را تغییر دهید. زمین بازی به شما امکان میدهد چیزهایی مانند دما را تنظیم کنید – به این معنی که واکنش باید چقدر “تصادفی” یا خلاقانه باشد – و اینکه از کدام مدل میخواهید استفاده کنید. برای کد SQL، دما را روی ۰ تنظیم کردم.
بعد، یک سوال زبان طبیعی را در متغیر my_query
ذخیره میکنم، با تابع create_prompt()
خود یک درخواست ایجاد میکنم و میبینم وقتی آن درخواست را در آن قرار میدهم چه اتفاقی میافتد. زمین بازی API:
> my_query <- "What were the highest and lowest Population changes in 2020 by Division?"
> my_prompt <- get_query(states_schema_string, states_sample_string, my_query, "states")
> cat(my_prompt)
Act as if you're a data scientist. You have a SQLite table named states with the following schema:
```
۰ State TEXT ۰ NA ۰
۱ Pop_2000 INTEGER ۰ NA ۰
۲ Pop_2010 INTEGER ۰ NA ۰
۳ Pop_2020 INTEGER ۰ NA ۰
۴ PctChange_2000 REAL ۰ NA ۰
۵ PctChange_2010 REAL ۰ NA ۰
۶ PctChange_2020 REAL ۰ NA ۰
۷ State Code TEXT ۰ NA ۰
۸ Region TEXT ۰ NA ۰
۹ Division TEXT ۰ NA ۰
```
The first rows look like this:
```Delaware ۷۸۳۶۰۰ ۸۹۷۹۳۴ ۹۸۹۹۴۸ ۱۷.۶ ۱۴.۶ ۱۰.۲ DE South South Atlantic
Montana ۹۰۲۱۹۵ ۹۸۹۴۱۵ ۱۰۸۴۲۲۵ ۱۲.۹ ۹.۷ ۹.۶ MT West Mountain
Arizona ۵۱۳۰۶۳۲ ۶۳۹۲۰۱۷ ۷۱۵۱۵۰۲ ۴۰.۰ ۲۴.۶ ۱۱.۹ AZ West Mountain```
Based on this data, write a SQL query to answer the following question: What were the highest and lowest Population changes in 2020 by Division?. Return the SQL query ONLY. Do not include any additional explanation.
اعلام وارد زمین بازی OpenAI API و کد SQL حاصل شد.
در اینجا نتایج زمانی که SQL پیشنهادی را اجرا میکنم نشان میدهد:
sqldf("SELECT Division, MAX(PctChange_2020) AS Highest_PctChange_2020, MIN(PctChange_2020) AS Lowest_PctChange_2020 FROM states GROUP BY Division;")
Division Highest_PctChange_2020 Lowest_PctChange_2020
۱ East North Central 4.7 -0.1
۲ East South Central 8.9 -0.2
۳ Middle Atlantic 5.7 2.4
۴ Mountain 18.4 2.3
۵ New England 7.4 0.9
۶ Pacific 14.6 3.3
۷ South Atlantic 14.6 -3.2
۸ West North Central 15.8 2.8
۹ West South Central 15.9 2.7
ChatGPT نه تنها SQL دقیق ایجاد کرد، بلکه من مجبور نبودم به GPT بگویم که “تغییر جمعیت ۲۰۲۰” در ستون Pop_2020 است.
مرحله ۴: نتایج کد SQL بازگشتی توسط GPT را اجرا کنید
ارسال و بازگرداندن داده ها به و از OpenAI به صورت برنامه نویسی به جای برش و چسباندن آنها در یک رابط وب بسیار راحت تر است. چند بسته بسته R برای کار با OpenAI API وجود دارد. بلوک کد زیر با استفاده از بسته openai
یک درخواست به API می فرستد، پاسخ API را ذخیره می کند، بخشی از پاسخ حاوی متن را با کد SQL درخواستی استخراج می کند، آن کد را چاپ می کند و کد را اجرا می کند. SQL روی داده ها.
library(openai)
my_results <- openai::create_chat_completion(model = "gpt-3.5-turbo", temperature = 0, messages = list(
list(role = "user", content = my_prompt)
))
the_answer <- my_results$choices$message.content
cat(the_answer)
SELECT Division, MAX(PctChange_2020) AS Highest_Population_Change, MIN(PctChange_2020) AS Lowest_Population_Change
FROM states
GROUP BY Division;
sqldf(the_answer)
Division Highest_Population_Change Lowest_Population_Change
۱ East North Central 4.7 -0.1
۲ East South Central 8.9 -0.2
۳ Middle Atlantic 5.7 2.4
۴ Mountain 18.4 2.3
۵ New England 7.4 0.9
۶ Pacific 14.6 3.3
۷ South Atlantic 14.6 -3.2
۸ West North Central 15.8 2.8
۹ West South Central 15.9 2.7
اگر میخواهید از API استفاده کنید، به کلید OpenAI API نیاز دارید. برای این بسته، کلید باید در یک متغیر محیطی سیستم مانند OPENAI_API_KEY
ذخیره شود. توجه داشته باشید که استفاده از API رایگان نیست، اما من این پروژه را بیش از ده بار یک روز قبل از اینکه آن را به ویرایشگر خود تبدیل کنم، اجرا کردم و کل استفاده از حساب من ۱ سنت بود.
مرحله ۵ (اختیاری): یک برنامه تعاملی ایجاد کنید
شما اکنون تمام کدهای مورد نیاز برای اجرای پرس و جو خود را در یک گردش کار R در یک اسکریپت یا ترمینال دارید. اما اگر میخواهید یک برنامه تعاملی برای جستجوی دادهها به زبان ساده بسازید، من کد یک برنامه اصلی Shiny را اضافه کردهام که میتوانید از آن استفاده کنید.
پست های مرتبط
نحوه استفاده از GPT به عنوان یک زبان طبیعی برای موتور جستجوی SQL
نحوه استفاده از GPT به عنوان یک زبان طبیعی برای موتور جستجوی SQL
نحوه استفاده از GPT به عنوان یک زبان طبیعی برای موتور جستجوی SQL