1. اورتور
دوران توسعه سیلد در حال پایان است. موج بعدی تکامل تکنولوژیک مربوط به نبوغ انفرادی نیست، بلکه در مورد تسلط مشارکتی است. ساختن یک عامل تنها و باهوش آزمایشی جذاب است. ایجاد یک اکوسیستم قوی، ایمن و هوشمند از عوامل - یک Agentverse واقعی - چالش بزرگ برای شرکت مدرن است.
موفقیت در این دوره جدید مستلزم همگرایی چهار نقش حیاتی است، ستون های بنیادی که از هر سیستم عاملی پر رونق حمایت می کنند. کمبود در هر زمینه ضعفی ایجاد می کند که می تواند کل ساختار را به خطر بیندازد.
این کارگاه، کتاب بازی قطعی سازمانی برای تسلط بر آینده نمایندگی در Google Cloud است. ما یک نقشه راه پایان به انتها ارائه می دهیم که شما را از اولین حس یک ایده به یک واقعیت عملیاتی در مقیاس کامل راهنمایی می کند. در سراسر این چهار آزمایشگاه به هم پیوسته، خواهید آموخت که چگونه مهارتهای تخصصی یک توسعهدهنده، معمار، مهندس داده و SRE باید برای ایجاد، مدیریت و مقیاسبندی یک Agentverse قدرتمند همگرا شوند.
هیچ ستونی نمی تواند به تنهایی از Agentverse پشتیبانی کند. طرح بزرگ معمار بدون اجرای دقیق توسعه دهنده بی فایده است. نماینده Developer بدون خرد مهندس داده کور است و کل سیستم بدون حفاظت SRE شکننده است. تنها از طریق هم افزایی و درک مشترک از نقش های یکدیگر، تیم شما می تواند یک مفهوم نوآورانه را به یک واقعیت عملیاتی حیاتی تبدیل کند. سفر شما از اینجا شروع می شود. برای تسلط بر نقش خود آماده شوید و بیاموزید که چگونه در یک کل بزرگتر قرار می گیرید.
به Agentverse: A Call to Champions خوش آمدید
در گستره گسترده دیجیتالی شرکت، عصر جدیدی آغاز شده است. عصر کارگزاری است، زمان وعدههای عظیم، که در آن عوامل باهوش و خودمختار با هماهنگی کامل کار میکنند تا نوآوری را تسریع کنند و امور روزمره را از بین ببرند.
این اکوسیستم متصل از قدرت و پتانسیل به عنوان The Agentverse شناخته می شود.
اما یک آنتروپی خزنده، یک فساد خاموش که به نام The Static شناخته می شود، شروع به از بین بردن لبه های این دنیای جدید کرده است. Static یک ویروس یا یک اشکال نیست. این تجسم هرج و مرج است که در خود عمل خلقت شکار می شود.
این ناامیدی های قدیمی را به اشکال هیولایی تشدید می کند و هفت شبح توسعه را به دنیا می آورد. اگر کنترل نشود، The Static و آن Specters پیشرفت را متوقف خواهند کرد و وعده Agentverse را به سرزمینی بایر از بدهی های فنی و پروژه های متروکه تبدیل می کنند.
امروز، ما فراخوانی برای قهرمانان صادر می کنیم تا موج هرج و مرج را عقب برانند. ما به قهرمانانی نیاز داریم که مایل به تسلط بر هنر خود و همکاری با یکدیگر برای محافظت از Agentverse باشند. زمان انتخاب راه خود فرا رسیده است.
کلاس خود را انتخاب کنید
چهار مسیر متمایز پیش روی شما قرار دارد که هر کدام یک ستون مهم در مبارزه با The Static هستند. اگرچه آموزش شما یک ماموریت انفرادی خواهد بود، اما موفقیت نهایی شما به درک چگونگی ترکیب مهارت های شما با دیگران بستگی دارد.
- The Shadowblade (توسعه دهنده) : استاد فورج و خط مقدم. شما صنعتگری هستید که تیغه ها را می سازید، ابزارها را می سازید و در جزئیات پیچیده کد با دشمن روبرو می شوید. مسیر شما مسیر دقت، مهارت و خلاقیت عملی است.
- احضار کننده (معمار) : یک استراتژیست و ارکستر بزرگ. شما یک مامور واحد را نمی بینید، بلکه کل میدان جنگ را می بینید. شما نقشه های اصلی را طراحی می کنید که به کل سیستم های عامل اجازه می دهد با هم ارتباط برقرار کنند، با هم همکاری کنند و به هدفی به مراتب بزرگتر از هر جزء واحدی دست یابند.
- دانشمند (مهندس داده) : جوینده حقایق پنهان و حافظ خرد. شما به بیابان وسیع و رام نشده داده ها می روید تا هوشی را که به ماموران شما هدف و بینایی می دهد، کشف کنید. دانش شما می تواند ضعف دشمن را آشکار کند یا به یک متحد قدرت دهد.
- نگهبان (DevOps / SRE) : محافظ و سپر استوار قلمرو. شما قلعه ها را می سازید، خطوط تامین برق را مدیریت می کنید و مطمئن می شوید که کل سیستم می تواند در برابر حملات اجتناب ناپذیر The Static مقاومت کند. قدرت شما پایه ای است که پیروزی تیم شما بر آن بنا شده است.
ماموریت شما
تمرین شما به عنوان یک تمرین مستقل آغاز خواهد شد. شما مسیر انتخابی خود را طی خواهید کرد و مهارت های منحصر به فرد مورد نیاز برای تسلط بر نقش خود را یاد خواهید گرفت. در پایان آزمایش خود، با یک Spectre متولد شده از The Static روبرو خواهید شد - یک مینی رئیس که چالش های خاص هنر شما را شکار می کند.
فقط با تسلط بر نقش فردی خود می توانید برای آزمایش نهایی آماده شوید. سپس باید یک مهمانی با قهرمانان کلاس های دیگر تشکیل دهید. شما با هم وارد قلب فساد خواهید شد تا با یک رئیس نهایی روبرو شوید.
یک چالش نهایی و مشترک که قدرت ترکیبی شما را آزمایش می کند و سرنوشت Agentverse را تعیین می کند.
Agentverse منتظر قهرمانان خود است. به تماس پاسخ خواهی داد؟
2. گریمور محقق
سفر ما آغاز می شود! به عنوان محقق، سلاح اصلی ما دانش است. ما گنجینه ای از طومارهای باستانی و مرموز را در بایگانی خود (Google Cloud Storage) کشف کرده ایم. این طومارها حاوی اطلاعات خام در مورد جانوران ترسناکی هستند که زمین را مبتلا کرده اند. ماموریت ما استفاده از جادوی تحلیلی عمیق Google BigQuery و خرد یک مغز بزرگ جمینی (مدل جمینی پرو) برای رمزگشایی این متون بدون ساختار و جعل آنها به یک Bestiary ساختاریافته و قابل پرسش است. این پایه و اساس همه استراتژی های آینده ما خواهد بود.
چیزی که یاد خواهید گرفت
- از BigQuery برای ایجاد جداول خارجی استفاده کنید و با استفاده از BQML.GENERATE_TEXT با مدل Gemini، تبدیل های پیچیده بدون ساختار به ساختار را انجام دهید.
- یک Cloud SQL برای نمونه PostgreSQL تهیه کنید و پسوند pgvector را برای قابلیت های جستجوی معنایی فعال کنید.
- با استفاده از Dataflow و Apache Beam برای پردازش فایلهای متن خام، ایجاد جاسازیهای برداری با مدل Gemini، و نوشتن نتایج در پایگاه داده رابطهای، یک خط لوله دستهای قوی و کانتینری بسازید.
- برای پرس و جو از داده های برداری شده، یک سیستم اساسی Retrieval-Augmented Generation (RAG) را در یک عامل پیاده سازی کنید.
- یک عامل اطلاعاتی را به عنوان یک سرویس امن و مقیاس پذیر در Cloud Run مستقر کنید.
3. آماده سازی محراب علما
خوش آمدید محقق قبل از اینکه بتوانیم دانش قدرتمند گریمور خود را ثبت کنیم، ابتدا باید پناهگاه خود را آماده کنیم. این آیین بنیادی شامل مسحور کردن محیط Google Cloud ما، باز کردن پورتال های مناسب (API) و ایجاد مجراهایی است که جادوی داده ما از طریق آنها جریان می یابد. یک پناهگاه به خوبی آماده شده تضمین می کند که جادوهای ما قوی هستند و دانش ما امن است.
👉روی Activate Cloud Shell در بالای کنسول Google Cloud کلیک کنید (این نماد شکل ترمینال در بالای صفحه Cloud Shell است)،
👉روی دکمه "Open Editor" کلیک کنید (به نظر می رسد یک پوشه باز با مداد است). با این کار ویرایشگر کد Cloud Shell در پنجره باز می شود. در سمت چپ یک فایل کاوشگر خواهید دید.
👉شناسه پروژه Google Cloud خود را پیدا کنید:
- Google Cloud Console را باز کنید: https://console.cloud.google.com
- پروژه ای را که می خواهید برای این کارگاه استفاده کنید از منوی کشویی پروژه در بالای صفحه انتخاب کنید.
- شناسه پروژه شما در کارت اطلاعات پروژه در داشبورد نمایش داده می شود
👉ترمینال را در IDE ابری باز کنید،
👉💻در ترمینال، با استفاده از دستور زیر بررسی کنید که قبلا احراز هویت شده اید و پروژه به ID پروژه شما تنظیم شده است:
gcloud auth list
👉💻 پروژه بوت استرپ را از GitHub کلون کنید:
git clone https://github.com/weimeilin79/agentverse-dataengineer
chmod +x ~/agentverse-dataengineer/init.sh
chmod +x ~/agentverse-dataengineer/set_env.sh
chmod +x ~/agentverse-dataengineer/data_setup.sh
git clone https://github.com/weimeilin79/agentverse-dungeon.git
chmod +x ~/agentverse-dungeon/run_cloudbuild.sh
chmod +x ~/agentverse-dungeon/start.sh
👉💻 اسکریپت اولیه سازی را اجرا کنید، این اسکریپت از شما می خواهد شناسه پروژه Google Cloud خود را وارد کنید. و شناسه پروژه Google Cloud را که از آخرین مرحله پیدا کردید، با درخواست اسکریپت init.sh
وارد کنید.
cd ~/agentverse-dataengineer
./init.sh
👉💻 شناسه پروژه مورد نیاز را تنظیم کنید:
gcloud config set project $(cat ~/project_id.txt) --quiet
👉💻 دستور زیر را برای فعال کردن API های Google Cloud لازم اجرا کنید:
gcloud services enable \
storage.googleapis.com \
bigquery.googleapis.com \
sqladmin.googleapis.com \
aiplatform.googleapis.com \
dataflow.googleapis.com \
pubsub.googleapis.com \
cloudfunctions.googleapis.com \
run.googleapis.com \
cloudbuild.googleapis.com \
artifactregistry.googleapis.com \
iam.googleapis.com \
compute.googleapis.com \
cloudresourcemanager.googleapis.com \
cloudaicompanion.googleapis.com \
bigqueryunified.googleapis.com
👉💻 اگر قبلا یک مخزن Artifact Registry با نام agentverse-repo ایجاد نکرده اید، دستور زیر را برای ایجاد آن اجرا کنید:
. ~/agentverse-dataengineer/set_env.sh
gcloud artifacts repositories create $REPO_NAME \
--repository-format=docker \
--location=$REGION \
--description="Repository for Agentverse agents"
راه اندازی مجوز
👉💻 با اجرای دستورات زیر در ترمینال مجوزهای لازم را اعطا کنید:
. ~/agentverse-dataengineer/set_env.sh
# --- Grant Core Data Permissions ---
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$SERVICE_ACCOUNT_NAME" \
--role="roles/storage.admin"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$SERVICE_ACCOUNT_NAME" \
--role="roles/bigquery.admin"
# --- Grant Data Processing & AI Permissions ---
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$SERVICE_ACCOUNT_NAME" \
--role="roles/dataflow.admin"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$SERVICE_ACCOUNT_NAME" \
--role="roles/cloudsql.admin"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$SERVICE_ACCOUNT_NAME" \
--role="roles/pubsub.admin"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$SERVICE_ACCOUNT_NAME" \
--role="roles/aiplatform.user"
# --- Grant Deployment & Execution Permissions ---
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$SERVICE_ACCOUNT_NAME" \
--role="roles/cloudbuild.builds.editor"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$SERVICE_ACCOUNT_NAME" \
--role="roles/artifactregistry.admin"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$SERVICE_ACCOUNT_NAME" \
--role="roles/run.admin"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$SERVICE_ACCOUNT_NAME" \
--role="roles/iam.serviceAccountUser"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$SERVICE_ACCOUNT_NAME" \
--role="roles/logging.logWriter"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$SERVICE_ACCOUNT_NAME" \
--role="roles/dataflow.admin"
👉💻 همانطور که آموزش خود را شروع می کنید، چالش نهایی را آماده می کنیم. دستورات زیر Specters را از استاتیک آشفته احضار می کند و Boss را برای تست نهایی شما ایجاد می کند.
. ~/agentverse-dataengineer/set_env.sh
cd ~/agentverse-dungeon
./run_cloudbuild.sh
cd ~/agentverse-dataengineer
کار بسیار عالی، محقق افسون های بنیادی کامل شده اند. پناهگاه ما امن است، درگاههای نیروهای اصلی دادهها باز هستند، و خدمتگزار ما قدرتمند است. ما اکنون آماده شروع کار واقعی هستیم.
4. کیمیاگری دانش: تبدیل داده ها با BigQuery و Gemini
در جنگ بی وقفه علیه The Static، هر رویارویی بین یک قهرمان Agentverse و یک Spectre of Development به دقت ثبت شده است. سیستم شبیهسازی میدان نبرد، محیط آموزشی اولیه ما، بهطور خودکار برای هر رویارویی یک ورود ثبت نام Aetheric ایجاد میکند. این گزارشهای روایی با ارزشترین منبع اطلاعات خام ما هستند، سنگ معدن تصفیهنشدهای که ما بهعنوان محقق باید از آن فولاد بکر استراتژی را بسازیم. قدرت واقعی یک محقق صرفاً در اختیار داشتن دادهها نیست، بلکه در توانایی تبدیل سنگ معدن خام و آشفته اطلاعات به دادههای درخشان و ساختاریافتهای است که میتوانیم با اراده عمل کنیم.
سفر ما ما را از طریق یک فرآیند چند مرحله ای به طور کامل در پناهگاه Google BigQuery خواهد برد. ما با نگاه کردن به آرشیو GCS خود بدون حرکت دادن حتی یک اسکرول و با استفاده از یک لنز جادویی شروع خواهیم کرد. سپس، یک جوزا را احضار می کنیم تا داستان های شاعرانه و بدون ساختار سیاهه های جنگ را بخواند و تفسیر کند. در نهایت، پیشگویی های خام را در مجموعه ای از جداول بکر و به هم پیوسته اصلاح می کنیم. اولین گریمور ما و سوالی آنقدر عمیق از آن بپرسید که تنها با این ساختار جدید می توان به آن پاسخ داد.
نکته مهندس داده: چیزی که می خواهیم انجام دهیم یک الگوی ELT (Extract، Load، Transform) قدرتمند، درون پایگاه داده و مبتنی بر هوش مصنوعی است. این یک رویکرد پیشرفته است که به طور قابل توجهی با روش های سنتی متفاوت است.
- استخراج و بارگذاری (از طریق جدول خارجی): به جای یک فرآیند پرهزینه مصرف ("L" سنتی)، از یک جدول خارجی BigQuery استفاده خواهیم کرد. این یک "طرحواره در خواندن" را اعمال می کند، که به انبار داده ما امکان می دهد فایل های متن خام را مستقیماً در فضای ذخیره سازی ابری جستجو کند. این فوق العاده کارآمد است و جابجایی داده ها و تکرار ذخیره سازی را حذف می کند.
- تبدیل (از طریق ML.GENERATE_TEXT): "T" در ELT ما جایی است که جادوی واقعی اتفاق می افتد. ما از تابع ML.GENERATE_TEXT برای فراخوانی یک مدل Gemini به طور مستقیم از یک کوئری SQL استفاده خواهیم کرد. این به ما امکان میدهد تحول پیچیده و آگاه از متن را انجام دهیم - در این مورد، تبدیل متن روایی بدون ساختار به JSON ساختاریافته بدون نوشتن یا مدیریت خط لوله پردازش جداگانه در زبان دیگری (مانند پایتون یا جاوا). این یک تغییر پارادایم از راه حل های شکننده و سخت کد شده مانند عبارات منظم است که انعطاف پذیری و قدرت را با یک رابط SQL ساده ارائه می دهد.
لنز بررسی: بررسی GCS با جداول خارجی BigQuery
اولین اقدام ما ساختن عدسی است که به ما امکان می دهد محتویات بایگانی GCS خود را بدون ایجاد مزاحمت در طومارهای داخل آن ببینیم. یک جدول خارجی این لنز است که فایلهای متنی خام را به ساختار جدول مانندی نگاشت میکند که BigQuery میتواند مستقیماً پرس و جو کند.
برای انجام این کار، ابتدا باید یک خط پایدار قدرت، یک منبع CONNECTION ایجاد کنیم که به طور ایمن پناهگاه BigQuery ما را به بایگانی GCS پیوند دهد.
👉💻 در ترمینال Cloud Shell خود، دستور زیر را برای راه اندازی فضای ذخیره سازی و جعل مجرا اجرا کنید:
. ~/agentverse-dataengineer/set_env.sh
. ~/agentverse-dataengineer/data_setup.sh
bq mk --connection \
--connection_type=CLOUD_RESOURCE \
--project_id=${PROJECT_ID} \
--location=${REGION} \
gcs-connection
💡 سر بالا! پیامی بعدا ظاهر می شود!
اسکریپت راه اندازی از مرحله 2 فرآیندی را در پس زمینه شروع کرد. پس از چند دقیقه، پیامی در ترمینال شما ظاهر میشود که شبیه به این است: [1]+ Done gcloud sql instances create ...
این طبیعی و مورد انتظار است. این به سادگی به این معنی است که پایگاه داده Cloud SQL شما با موفقیت ایجاد شده است. می توانید با خیال راحت این پیام را نادیده بگیرید و به کار خود ادامه دهید.
قبل از اینکه بتوانید جدول خارجی ایجاد کنید، ابتدا باید مجموعه داده ای را ایجاد کنید که حاوی آن باشد.
👉💻 این یک دستور ساده را در ترمینال Cloud Shell خود اجرا کنید:
. ~/agentverse-dataengineer/set_env.sh
bq --location=${REGION} mk --dataset ${PROJECT_ID}:bestiary_data
👉💻 اکنون باید به امضای جادویی کانال مجوزهای لازم برای خواندن از بایگانی GCS و مشورت با Gemini را بدهیم.
. ~/agentverse-dataengineer/set_env.sh
export CONNECTION_SA=$(bq show --connection --project_id=${PROJECT_ID} --location=${REGION} --format=json gcs-connection | jq -r '.cloudResource.serviceAccountId')
echo "The Conduit's Magical Signature is: $CONNECTION_SA"
echo "Granting key to the GCS Archive..."
gcloud storage buckets add-iam-policy-binding gs://${PROJECT_ID}-reports \
--member="serviceAccount:$CONNECTION_SA" \
--role="roles/storage.objectViewer"
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:$CONNECTION_SA" \
--role="roles/aiplatform.user"
👉💻 در ترمینال Cloud Shell خود، دستور زیر را برای نمایش نام سطل خود اجرا کنید:
echo $BUCKET_NAME
ترمینال شما نامی شبیه به your-project-id-gcs-bucket نمایش می دهد. در مراحل بعدی به این نیاز خواهید داشت.
👉 باید دستور بعدی را از داخل ویرایشگر کوئری BigQuery در Google Cloud Console اجرا کنید. ساده ترین راه برای رسیدن به آنجا این است که پیوند زیر را در یک برگه مرورگر جدید باز کنید. این شما را مستقیماً به صفحه صحیح در Google Cloud Console می برد.
https://console.cloud.google.com/bigquery
👉 پس از بارگیری صفحه، روی دکمه آبی + (نوشتن یک پرسش جدید) کلیک کنید تا یک تب ویرایشگر جدید باز شود.
اکنون برای ایجاد لنز جادویی خود، عبارت Data Definition Language (DDL) را می نویسیم. این به BigQuery میگوید که کجا را ببیند و چه چیزی را ببیند.
👉📜 در ویرایشگر کوئری BigQuery که باز کردید، SQL زیر را جایگذاری کنید. به یاد داشته باشید که REPLACE-WITH-YOUR-BUCKET-NAME
را جایگزین کنید
با نام سطلی که همین الان کپی کردی . و روی Run کلیک کنید:
CREATE OR REPLACE EXTERNAL TABLE bestiary_data.raw_intel_content_table (
raw_text STRING
)
OPTIONS (
format = 'CSV',
-- This is a trick to load each line of the text files as a single row.
field_delimiter = '§',
uris = ['gs://REPLACE-WITH-YOUR-BUCKET-NAME/raw_intel/*']
);
👉📜 برای "نگاه از طریق لنز" و مشاهده محتوای فایل ها یک پرس و جو انجام دهید.
SELECT * FROM bestiary_data.raw_intel_content_table;
لنز ما سر جایش است. اکنون می توانیم متن خام طومارها را ببینیم. اما خواندن فهمیدن نیست.
در Archives of Forgotten Ideas، محققی از Agentverse، Elara (تعریف adv_001)، با شبح فرشتهای کمالگرایی روبرو شد. این موجودیت که با نام «p-01» فهرستبندی شده بود، با نیروی حیاتی 120 امتیازی میدرخشید. الارا با یک افسون متمرکز از Elegant Sufficiency، هاله فلج کننده خود را در هم شکست، یک حمله ذهنی که 150 نقطه آسیب وارد کرد. این رویارویی با تمرکز شدید 180 ثانیه به طول انجامید. ارزیابی نهایی: پیروزی
طومارها در جدول ها و ردیف ها نوشته نشده اند، بلکه در نثر پیچ در پیچ حماسه ها نوشته شده اند. این اولین آزمون عالی ماست.
The Scholar's Divination: تبدیل متن به جدول با SQL
چالش این است که گزارشی که حملات دوگانه و سریع Shadowblade را شرح میدهد، بسیار متفاوت از داستان یک احضار کننده است که برای یک انفجار منفرد و ویرانگر قدرت زیادی جمعآوری میکند. ما نمی توانیم به سادگی این داده ها را وارد کنیم. ما باید آن را تفسیر کنیم این لحظه جادو است. ما از یک پرس و جوی SQL به عنوان یک طلسم قدرتمند برای خواندن، درک و ساختار تمام رکوردها از همه فایل های خود، درست در داخل BigQuery استفاده خواهیم کرد.
👉💻 در ترمینال Cloud Shell خود، دستور زیر را برای نمایش نام اتصال خود اجرا کنید:
echo "${PROJECT_ID}.${REGION}.gcs-connection"
ترمینال شما رشته اتصال کامل را نمایش می دهد، کل این رشته را انتخاب و کپی کنید، در مرحله بعد به آن نیاز خواهید داشت
ما از یک افسانه واحد و قدرتمند استفاده خواهیم کرد: ML.GENERATE_TEXT
. این طلسم یک Gemini را احضار میکند، هر طومار را به آن نشان میدهد و به آن فرمان میدهد که حقایق اصلی را به عنوان یک شی JSON ساختاریافته بازگرداند.
👉📜 در استودیو BigQuery، مرجع مدل جمینی را ایجاد کنید. این اوراکل Gemini Flash را به کتابخانه BigQuery ما متصل می کند تا بتوانیم آن را در جستارهای خود فراخوانی کنیم. به یاد داشته باشید که جایگزین کنید
REPLACE-WITH-YOUR-FULL-CONNECTION-STRING
با رشته اتصال کاملی که به تازگی از ترمینال خود کپی کرده اید، جایگزین کنید.
CREATE OR REPLACE MODEL bestiary_data.gemini_flash_model
REMOTE WITH CONNECTION `REPLACE-WITH-YOUR-FULL-CONNECTION-STRING`
OPTIONS (endpoint = 'gemini-2.5-flash');
👉📜 حالا، طلسم بزرگ تغییر شکل را بیاندازید. این پرسوجو متن خام را میخواند، برای هر اسکرول یک اعلان دقیق میسازد، آن را به Gemini ارسال میکند، و یک جدول مرحلهبندی جدید از پاسخ ساختار یافته JSON هوش مصنوعی میسازد.
CREATE OR REPLACE TABLE bestiary_data.structured_bestiary AS
SELECT
-- THE CRITICAL CHANGE: We remove PARSE_JSON. The result is already a JSON object.
ml_generate_text_result AS structured_data
FROM
ML.GENERATE_TEXT(
-- Our bound Gemini Flash model.
MODEL bestiary_data.gemini_flash_model,
-- Our perfectly constructed input, with the prompt built for each row.
(
SELECT
CONCAT(
"""
From the following text, extract structured data into a single, valid JSON object.
Your output must strictly conform to the following JSON structure and data types. Do not add, remove, or change any keys.
{
"monster": {
"monster_id": "string",
"name": "string",
"type": "string",
"hit_points": "integer"
},
"battle": {
"battle_id": "string",
"monster_id": "string",
"adventurer_id": "string",
"outcome": "string",
"duration_seconds": "integer"
},
"adventurer": {
"adventurer_id": "string",
"name": "string",
"class": "string"
}
}
**CRUCIAL RULES:**
- Do not output any text, explanations, conversational filler, or markdown formatting like ` ```json` before or after the JSON object.
- Your entire response must be ONLY the raw JSON object itself.
Here is the text:
""",
raw_text -- We append the actual text of the report here.
) AS prompt -- The final column is still named 'prompt', as the oracle requires.
FROM
bestiary_data.raw_intel_content_table
),
-- The STRUCT now ONLY contains model parameters.
STRUCT(
0.2 AS temperature,
2048 AS max_output_tokens
)
);
تغییر شکل کامل است، اما نتیجه هنوز خالص نیست. مدل Gemini پاسخ خود را در قالبی استاندارد برمیگرداند و JSON مورد نظر ما را در یک ساختار بزرگتر میپیچد که شامل فرادادههای مربوط به فرآیند فکری آن است. اجازه دهید قبل از اینکه بخواهیم آن را خالص کنیم، به این پیشگویی خام نگاه کنیم.
👉📜 برای بررسی خروجی خام از مدل Gemini یک پرس و جو اجرا کنید:
SELECT * FROM bestiary_data.structured_bestiary;
👀 شما یک ستون به نام structured_data خواهید دید. محتوای هر ردیف شبیه به این شی پیچیده JSON خواهد بود:
{"candidates":[{"avg_logprobs":-0.5691758094475283,"content":{"parts":[{"text":"```json\n{\n \"monster\": {\n \"monster_id\": \"gw_02\",\n \"name\": \"Gravewight\",\n \"type\": \"Gravewight\",\n \"hit_points\": 120\n },\n \"battle\": {\n \"battle_id\": \"br_735\",\n \"monster_id\": \"gw_02\",\n \"adventurer_id\": \"adv_001\",\n \"outcome\": \"Defeat\",\n \"duration_seconds\": 45\n },\n \"adventurer\": {\n \"adventurer_id\": \"adv_001\",\n \"name\": \"Elara\",\n \"class\": null\n }\n}\n```"}],"role":"model"},"finish_reason":"STOP","score":-97.32906341552734}],"create_time":"2025-07-28T15:53:24.482775Z","model_version":"gemini-2.5-flash","response_id":"9JyHaNe7HZ2WhMIPxqbxEQ","usage_metadata":{"billable_prompt_usage":{"text_count":640},"candidates_token_count":171,"candidates_tokens_details":[{"modality":"TEXT","token_count":171}],"prompt_token_count":207,"prompt_tokens_details":[{"modality":"TEXT","token_count":207}],"thoughts_token_count":1014,"total_token_count":1392,"traffic_type":"ON_DEMAND"}}
همانطور که می بینید، جایزه ما - شیء JSON تمیزی که درخواست کردیم - در اعماق این ساختار قرار دارد. تکلیف بعدی ما مشخص است. ما باید آیینی را انجام دهیم تا به طور سیستماتیک در این ساختار حرکت کنیم و خرد ناب درون را استخراج کنیم.
آیین پاکسازی: عادی سازی خروجی GenAI با SQL
جمینی صحبت کرده است، اما کلماتش خام هستند و در انرژیهای اثیری خلقتش (نامزدها، پایان_دلیل و غیره) پیچیده شدهاند. یک محقق واقعی به سادگی پیشگویی خام را کنار نمی گذارد. آنها با دقت خرد اصلی را استخراج می کنند و آن را در قالب های مناسب برای استفاده در آینده می نویسند.
ما اکنون مجموعه آخر طلسم خود را انجام خواهیم داد. این اسکریپت واحد:
- JSON خام و تودرتو را از جدول مرحله ما بخوانید.
- آن را پاک و تجزیه کنید تا به داده های اصلی برسید.
- قطعات مربوطه را در سه میز نهایی و بکر بنویسید: هیولاها، ماجراجویان و نبردها.
👉📜 در ویرایشگر کوئری BigQuery جدید، طلسم زیر را اجرا کنید تا لنز پاکسازی ما ایجاد شود:
CREATE OR REPLACE TABLE bestiary_data.monsters AS
WITH
CleanedDivinations AS (
SELECT
SAFE.PARSE_JSON(
REGEXP_EXTRACT(
JSON_VALUE(structured_data, '$.candidates[0].content.parts[0].text'),
r'\{[\s\S]*\}'
)
) AS report_data
FROM
bestiary_data.structured_bestiary
)
SELECT
JSON_VALUE(report_data, '$.monster.monster_id') AS monster_id,
JSON_VALUE(report_data, '$.monster.name') AS name,
JSON_VALUE(report_data, '$.monster.type') AS type,
SAFE_CAST(JSON_VALUE(report_data, '$.monster.hit_points') AS INT64) AS hit_points
FROM
CleanedDivinations
WHERE
report_data IS NOT NULL
QUALIFY ROW_NUMBER() OVER (PARTITION BY monster_id ORDER BY name) = 1;
👉📜 Bestiary را تایید کنید:
SELECT * FROM bestiary_data.monsters;
در مرحله بعد، ما Roll of Champions خود را ایجاد می کنیم، لیستی از ماجراجویان شجاعی که با این جانوران روبرو شده اند.
👉📜 در یک ویرایشگر کوئری جدید، طلسم زیر را برای ایجاد جدول ماجراجویان اجرا کنید:
CREATE OR REPLACE TABLE bestiary_data.adventurers AS
WITH
CleanedDivinations AS (
SELECT
SAFE.PARSE_JSON(
REGEXP_EXTRACT(
JSON_VALUE(structured_data, '$.candidates[0].content.parts[0].text'),
r'\{[\s\S]*\}'
)
) AS report_data
FROM
bestiary_data.structured_bestiary
)
SELECT
JSON_VALUE(report_data, '$.adventurer.adventurer_id') AS adventurer_id,
JSON_VALUE(report_data, '$.adventurer.name') AS name,
JSON_VALUE(report_data, '$.adventurer.class') AS class
FROM
CleanedDivinations
QUALIFY ROW_NUMBER() OVER (PARTITION BY adventurer_id ORDER BY name) = 1;
👉📜 Roll of Champions را تایید کنید:
SELECT * FROM bestiary_data.adventurers;
در نهایت، جدول حقایق خود را ایجاد خواهیم کرد: کرونیکل نبردها. این متن دو مورد دیگر را به هم پیوند می دهد و جزئیات هر برخورد منحصر به فرد را ثبت می کند. از آنجایی که هر نبرد یک رویداد منحصر به فرد است، نیازی به حذف مجدد نیست.
👉📜 در یک ویرایشگر کوئری جدید، طلسم زیر را برای ایجاد جدول مبارزات اجرا کنید:
CREATE OR REPLACE TABLE bestiary_data.battles AS
WITH
CleanedDivinations AS (
SELECT
SAFE.PARSE_JSON(
REGEXP_EXTRACT(
JSON_VALUE(structured_data, '$.candidates[0].content.parts[0].text'),
r'\{[\s\S]*\}'
)
) AS report_data
FROM
bestiary_data.structured_bestiary
)
-- Extract the raw essence for all battle fields and cast where necessary.
SELECT
JSON_VALUE(report_data, '$.battle.battle_id') AS battle_id,
JSON_VALUE(report_data, '$.battle.monster_id') AS monster_id,
JSON_VALUE(report_data, '$.battle.adventurer_id') AS adventurer_id,
JSON_VALUE(report_data, '$.battle.outcome') AS outcome,
SAFE_CAST(JSON_VALUE(report_data, '$.battle.duration_seconds') AS INT64) AS duration_seconds
FROM
CleanedDivinations;
👉📜 کرونیکل را تایید کنید:
SELECT * FROM bestiary_data.battles;
کشف بینش های استراتژیک
طومارها خوانده شده، ذات تقطیر شده، و توم ها نوشته شده اند. گریمور ما دیگر فقط مجموعه ای از حقایق نیست، یک پایگاه داده رابطه ای از خرد عمیق استراتژیک است. اکنون میتوانیم سؤالاتی بپرسیم که وقتی دانش ما در متن خام و بدون ساختار گیر افتاده بود، پاسخ به آنها غیرممکن بود.
اجازه دهید اکنون یک فال نهایی و بزرگ انجام دهیم. ما طلسمی خواهیم کرد که هر سه داستان ما را به یکباره بررسی می کند - Bestiary of Monsters، Roll of Champions، و Chronicle of Battles - تا بینش عمیق و عملی را کشف کنیم.
سوال استراتژیک ما: "برای هر ماجراجو، قدرتمندترین هیولایی که با موفقیت شکست داده اند، چیست و این پیروزی خاص چقدر طول کشید؟"
این یک سوال پیچیده است که مستلزم پیوند دادن قهرمانان به نبردهای پیروزمندانه آنها و آن نبردها با آمار هیولاهای درگیر است. این قدرت واقعی یک مدل داده ساخت یافته است.
👉📜 در یک ویرایشگر پرس و جو BigQuery جدید، عبارت نهایی زیر را وارد کنید:
-- This is our final spell, joining all three tomes to reveal a deep insight.
WITH
-- First, we consult the Chronicle of Battles to find only the victories.
VictoriousBattles AS (
SELECT
adventurer_id,
monster_id,
duration_seconds
FROM
bestiary_data.battles
WHERE
outcome = 'Victory'
),
-- Next, we create a temporary record for each victory, ranking the monsters
-- each adventurer defeated by their power (hit points).
RankedVictories AS (
SELECT
v.adventurer_id,
m.name AS monster_name,
m.hit_points,
v.duration_seconds,
-- This spell ranks each adventurer's victories from most to least powerful monster.
ROW_NUMBER() OVER (PARTITION BY v.adventurer_id ORDER BY m.hit_points DESC) as victory_rank
FROM
VictoriousBattles v
JOIN
bestiary_data.monsters m ON v.monster_id = m.monster_id
)
-- Finally, we consult the Roll of Champions and join it with our ranked victories
-- to find the name of each champion and the details of their greatest triumph.
SELECT
a.name AS adventurer_name,
a.class AS adventurer_class,
r.monster_name AS most_powerful_foe_defeated,
r.hit_points AS foe_hit_points,
r.duration_seconds AS duration_of_greatest_victory
FROM
bestiary_data.adventurers a
JOIN
RankedVictories r ON a.adventurer_id = r.adventurer_id
WHERE
-- We only want to see their number one, top-ranked victory.
r.victory_rank = 1
ORDER BY
foe_hit_points DESC;
خروجی این پرس و جو یک جدول تمیز و زیبا خواهد بود که "داستان بزرگترین شاهکار قهرمان" را برای هر ماجراجویی در مجموعه داده شما ارائه می دهد. ممکن است چیزی شبیه این به نظر برسد:
تب Big Query را ببندید.
این نتیجه تک و زیبا ارزش کل خط لوله را ثابت می کند. شما با موفقیت گزارشهای خام و آشفته میدان جنگ را به منبعی از داستانهای افسانهای و بینشهای استراتژیک و مبتنی بر داده تبدیل کردهاید.
5. The Scribe's Grimoire: In-Datawarehouse Chunking, Embedding, and Search
کار ما در آزمایشگاه کیمیاگر موفقیت آمیز بود. ما طومارهای خام و روایی را به جداول ساختاریافته و رابطهای تبدیل کردهایم - یک شاهکار قدرتمند از جادوی دادهها. با این حال، خود طومارهای اصلی هنوز حقیقت معنایی عمیقتری دارند که جداول ساختاریافته ما نمیتوانند به طور کامل آن را درک کنند. برای ساختن یک عامل واقعاً عاقل، باید قفل این معنا را باز کنیم.
طومار خام و طویل، ابزاری بینقص است. اگر مامور ما در مورد "هاله فلج کننده" سوالی بپرسد، یک جستجوی ساده ممکن است یک گزارش کامل از نبرد را که در آن عبارت فقط یک بار ذکر شده است، نشان دهد و پاسخ را در جزئیات نامربوط پنهان کند. یک محقق استاد می داند که حکمت واقعی نه در حجم، بلکه در دقت یافت می شود.
ما سه تشریفات قدرتمند درون پایگاه داده را به طور کامل در محل مقدس BigQuery خود انجام خواهیم داد.
- تشریفات تقسیم (چون کردن): ما سیاهه های اطلاعاتی خام خود را می گیریم و با دقت آنها را به قسمت های کوچکتر، متمرکز و مستقل تقسیم می کنیم.
- آیین تقطیر (جاسازی): ما از BQML برای مشورت با مدل Gemini استفاده خواهیم کرد، و هر تکه متن را به یک "اثر انگشت معنایی" - یک جاسازی برداری تبدیل می کنیم.
- آیین پیشگویی (جستجو): ما از جستجوی برداری BQML برای پرسیدن یک سوال به زبان انگلیسی ساده استفاده می کنیم و مرتبط ترین و مقطر ترین حکمت را از Grimoire خود پیدا می کنیم.
کل این فرآیند یک پایگاه دانش قدرتمند و قابل جستجو ایجاد می کند بدون اینکه داده ها از امنیت و مقیاس BigQuery خارج شوند.
یادداشت مهندس داده: این یک خط لوله آماده سازی داده RAG کامل و سرتاسر را نشان می دهد که به طور کامل در BigQuey اجرا شده است. این الگویی است که سربار عملیاتی خطوط لوله سنتی هوش مصنوعی را به شدت ساده می کند. با استفاده از BQML برای قطعهسازی، جاسازی و جستجو، نیاز به جابجایی دادههای جداگانه، پردازش خوشهها (مانند Spark) یا تماسهای API خارجی را از بین میبریم و گردش کار را سریعتر، ایمنتر و مدیریت آسانتر میکنیم.
تشریفات تقسیم: ساختارشکنی طومارها با SQL
منبع خرد ما فایلهای متن خام موجود در بایگانی GCS ما هستند که از طریق جدول خارجی ما، bestiary_data.raw_intel_content_table
قابل دسترسی هستند. اولین وظیفه ما نوشتن طلسمی است که هر طومار طولانی را بخواند و آن را به مجموعه ای از آیات کوچکتر و قابل هضم تر تقسیم کند. برای این آیین، «تکه» را به عنوان یک جمله تعریف می کنیم.
در حالی که تقسیم بر اساس جمله نقطه شروع روشن و مؤثری برای گزارشهای روایت ما است، یک استاد اسکریب استراتژیهای تکه تکهای زیادی در اختیار دارد، و انتخاب برای کیفیت جستجوی نهایی حیاتی است. ممکن است از روش های ساده تر استفاده شود
- طول (اندازه) ثابت است ، اما این میتواند یک ایده کلیدی را بهطور خام به نصف تقسیم کند.
آیین های پیچیده تر، مانند
- تکه تکه شدن بازگشتی اغلب در عمل ترجیح داده می شود. آنها سعی می کنند ابتدا متن را در امتداد مرزهای طبیعی مانند پاراگراف ها تقسیم کنند، سپس به جملات برمی گردند تا بافت معنایی را تا حد امکان حفظ کنند. برای نسخه های خطی واقعاً پیچیده.
- Content-Aware Chunking (سند) ، که در آن Scribe از ساختار ذاتی سند استفاده می کند - مانند سرصفحه ها در یک کتابچه راهنمای فنی یا توابع در یک طومار کد، برای ایجاد منطقی ترین و قوی ترین تکه های خرد. و بیشتر...
برای گزارشهای جنگ ما، جمله تعادل کاملی از جزئیات و زمینه را فراهم میکند.
👉📜 در ویرایشگر کوئری BigQuery جدید، دستور زیر را اجرا کنید. این طلسم از تابع SPLIT برای جدا کردن متن هر اسکرول در هر نقطه (.) استفاده می کند و سپس آرایه جملات به دست آمده را در ردیف های جداگانه قرار می دهد.
CREATE OR REPLACE TABLE bestiary_data.chunked_intel AS
WITH
-- First, add a unique row number to each scroll to act as a document ID.
NumberedScrolls AS (
SELECT
ROW_NUMBER() OVER () AS scroll_id,
raw_text
FROM
bestiary_data.raw_intel_content_table
)
-- Now, process each numbered scroll.
SELECT
scroll_id,
-- Assign a unique ID to each chunk within a scroll for precise reference.
CONCAT(CAST(scroll_id AS STRING), '-', CAST(ROW_NUMBER() OVER (PARTITION BY scroll_id) AS STRING)) as chunk_id,
-- Trim whitespace from the chunk for cleanliness.
TRIM(chunk) AS chunk_text
FROM
NumberedScrolls,
-- This is the core of the spell: UNNEST splits the array of sentences into rows.
UNNEST(SPLIT(raw_text, '.')) AS chunk
-- A final refinement: we only keep chunks that have meaningful content.
WHERE
-- This ensures we don't have empty rows from double periods, etc.
LENGTH(TRIM(chunk)) > 15;
👉 اکنون، یک پرس و جو انجام دهید تا دانش تازه نویسی شده و تکه تکه شده خود را بررسی کنید و تفاوت را ببینید.
SELECT * FROM bestiary_data.chunked_intel ORDER BY scroll_id, chunk_id;
نتایج را مشاهده کنید. در جایی که زمانی یک بلوک متنی متراکم وجود داشت، اکنون چندین ردیف وجود دارد که هر کدام به اسکرول اصلی (scroll_id) گره خوردهاند، اما فقط شامل یک جمله متمرکز و متمرکز هستند. اکنون هر ردیف یک کاندیدای عالی برای برداری است.
آیین تقطیر: تبدیل متن به بردار با BQML
👉💻 ابتدا به ترمینال خود برگردید، دستور زیر را اجرا کنید تا نام اتصال شما نمایش داده شود:
. ~/agentverse-dataengineer/set_env.sh
echo "${PROJECT_ID}.${REGION}.gcs-connection"
👉📜 ما باید یک مدل BigQuery جدید ایجاد کنیم که به جاسازی متن Gemini اشاره کند. در BigQuery Studio، طلسم زیر را اجرا کنید. توجه داشته باشید که باید REPLACE-WITH-YOUR-FULL-CONNECTION-STRING
با رشته اتصال کاملی که به تازگی از ترمینال خود کپی کرده اید جایگزین کنید.
CREATE OR REPLACE MODEL bestiary_data.text_embedding_model
REMOTE WITH CONNECTION `REPLACE-WITH-YOUR-FULL-CONNECTION-STRING`
OPTIONS (endpoint = 'text-embedding-005');
👉📜 حالا طلسم تقطیر بزرگ را بزنید. این کوئری تابع ML.GENERATE_EMBEDDING را فراخوانی میکند، که هر ردیف از جدول chunked_intel ما را میخواند، متن را به مدل جاسازی Gemini ارسال میکند و اثر انگشت بردار حاصل را در یک جدول جدید ذخیره میکند.
CREATE OR REPLACE TABLE bestiary_data.embedded_intel AS
SELECT
*
FROM
ML.GENERATE_EMBEDDING(
-- The embedding model we just created.
MODEL bestiary_data.text_embedding_model,
-- A subquery that selects our data and renames the text column to 'content'.
(
SELECT
scroll_id,
chunk_id,
chunk_text AS content -- Renaming our text column is the key correction.
FROM
bestiary_data.chunked_intel
),
-- The configuration struct is now simpler and correct.
STRUCT(
-- This task_type is crucial. It optimizes the vectors for retrieval.
'RETRIEVAL_DOCUMENT' AS task_type
)
);
این فرآیند ممکن است یک یا دو دقیقه طول بکشد زیرا BigQuery تمام تکههای متن را پردازش میکند.
👉📜 پس از تکمیل، جدول جدید را بررسی کنید تا اثر انگشت معنایی را ببینید.
SELECT
chunk_id,
content,
ml_generate_embedding_result
FROM
bestiary_data.embedded_intel
LIMIT 20;
اکنون ستون جدیدی به ml_generate_embedding_result
خواهید دید که حاوی نمایش برداری متراکم متن شما است. Grimoire ما اکنون از نظر معنایی رمزگذاری شده است.
آیین پیشگویی: جستجوی معنایی با BQML
👉📜 آزمون نهایی گریمور ما این است که از آن یک سوال بپرسیم. ما اکنون مراسم نهایی خود را انجام خواهیم داد: جستجوی برداری. این جستجوی کلمه کلیدی نیست. جستجوی معناست. ما یک سوال را به زبان طبیعی میپرسیم، BQML سؤال ما را به یک جاسازی در حال پرواز تبدیل میکند و سپس کل جدول embedded_intel
ما را جستجو میکند تا تکههای متنی را پیدا کند که اثر انگشتشان «نزدیکترین» به معنا هستند.
SELECT
-- The content column contains our original, relevant text chunk.
base.content,
-- The distance metric shows how close the match is (lower is better).
distance
FROM
VECTOR_SEARCH(
-- The table containing the knowledge base with its embeddings.
TABLE bestiary_data.embedded_intel,
-- The column that contains the vector embeddings.
'ml_generate_embedding_result',
(
-- This subquery generates an embedding for our question in real-time.
SELECT ml_generate_embedding_result
FROM ML.GENERATE_EMBEDDING(
MODEL bestiary_data.text_embedding_model,
(SELECT 'What are the tactics against a foe that causes paralysis?' AS content),
STRUCT('RETRIEVAL_QUERY' AS task_type)
)
),
-- Specify how many of the closest results we want to see.
top_k => 3,
-- The distance metric used to find the "closest" vectors.
distance_type => 'COSINE'
);
تجزیه و تحلیل طلسم:
-
VECTOR_SEARCH
: تابع اصلی که جستجو را هماهنگ می کند. -
ML.GENERATE_EMBEDDING
(پرس و جو داخلی): این جادو است. ما پرس'What are the tactics...'
جوی خود را با استفاده از همان مدل ، اما با نوع کار'RETRIEVAL_QUERY'
که به طور خاص برای پرس و جوها بهینه شده است، جاسازی می کنیم. -
top_k => 3
: ما 3 نتیجه برتر مرتبط را می خواهیم. -
distance_type => 'COSINE'
: این "زاویه" بین بردارها را اندازه گیری می کند. زاویه کوچکتر به این معنی است که معانی بیشتر تراز هستند.
به نتایج دقیق نگاه کنید. این پرس و جو حاوی کلمه "شکن" یا "طلسم" نبود، با این حال نتیجه برتر این است: "با یک افسون متمرکز و متمرکز از Elegant Sufficiency، الارا هاله فلج کننده خود را در هم شکست، یک حمله ذهنی که 150 نقطه آسیب وارد کرد" . این قدرت جستجوی معنایی است. مدل مفهوم «تاکتیک در برابر فلج» را درک کرد و جمله ای را یافت که یک تاکتیک خاص و موفق را توصیف می کرد.
شما اکنون با موفقیت یک خط لوله RAG پایه کامل و درون انباره ایجاد کرده اید. شما دادههای خام را تهیه کردهاید، آنها را به بردارهای معنایی تبدیل کردهاید و آنها را با معنا جستجو کردهاید. در حالی که BigQuery یک ابزار قدرتمند برای این کار تحلیلی در مقیاس بزرگ است، برای یک عامل زنده که نیاز به پاسخهای با تأخیر کم دارد، ما اغلب این حکمت آماده را به یک پایگاه داده عملیاتی تخصصی منتقل میکنیم. موضوع آموزش بعدی ما همین است.
6. The Vector Scriptorium: ساخت فروشگاه وکتور با Cloud SQL برای استنتاج
Grimoire ما در حال حاضر به صورت جداول ساختاریافته وجود دارد - فهرست قدرتمندی از حقایق، اما دانش آن تحت اللفظی است. این monster_id = "MN-001" را میفهمد، اما معنای عمیقتر و معنایی پشت "Obfuscation" را نمیفهمد. برای اینکه به عواملمان خرد واقعی بدهیم، تا به آنها اجازه دهیم با ظرافت و آیندهنگری نصیحت کنند، باید جوهر دانش خود را به شکلی تقطیر کنیم که معنی را در بر گیرد: بردارها .
جست و جوی ما برای دانش ما را به ویرانه های در حال فروپاشی یک تمدن پیشرو که مدت هاست فراموش شده است، سوق داده است. ما که در اعماق یک طاق مهر و موم شده مدفون شده ایم، صندوقچه ای از طومارهای باستانی را کشف کرده ایم که به طور معجزه آسایی حفظ شده است. اینها گزارش های جنگی صرف نیستند. آنها حاوی حکمت عمیق و فلسفی در مورد چگونگی شکست دادن جانوری هستند که همه تلاش های بزرگ را آزار می دهد. موجودی که در طومارها بهعنوان «رکود خزنده و خاموش» توصیف میشود، «شکستگی بافت آفرینش». به نظر می رسد که The Static حتی برای افراد باستان نیز شناخته شده بود، یک تهدید چرخه ای که تاریخ آن در زمان از دست رفت.
این افسانه فراموش شده بزرگترین دارایی ماست. این کلید نه تنها برای شکست دادن هیولاهای فردی، بلکه برای توانمندسازی کل حزب با بینش استراتژیک است. برای استفاده از این قدرت، ما اکنون کتاب املای واقعی Scholar (یک پایگاه داده PostgreSQL با قابلیتهای برداری) را ایجاد میکنیم و یک Vector Scriptorium خودکار (یک خط لوله جریان داده) برای خواندن، درک و ثبت جوهر بیزمان این طومارها میسازیم. این گریمور ما را از کتاب حقایق به موتور خرد تبدیل می کند.
یادداشت مهندس داده: برای کتاب املای خود، Cloud SQL را برای PostgreSQL با پسوند pgvector انتخاب کرده ایم. این رویکرد یک «فروشگاه یکجا» ایجاد میکند که در آن ابردادههای ساختاریافته ما (مانند scroll_id و محتوا) و جاسازیهای برداری معنایی ما با هم در یک پایگاه داده زندگی میکنند. این معماری را برای بسیاری از برنامهها بسیار ساده میکند، زیرا میتوانید هم دادههای رابطهای را پرسوجو کنید و هم جستجوی شباهت برداری را با یک پرسوجوی SQL در یک سیستم انجام دهید. در حالی که پایگاههای داده تخصصی مانند Vertex AI Vector Search عملکرد برتر را در مقیاس عظیم (میلیاردها بردار) از طریق جستجوی تقریبی نزدیکترین همسایه (ANN) ارائه میدهند، pgvector تعادل عالی از سادگی، مقرونبهصرفه و قدرت را برای بسیاری از برنامههای RAG سازمانی با استفاده از جستجوی دقیق نزدیکترین همسایه (ENN) فراهم میکند.
Forging the Scholar's Spellbook (Cloud SQL)
قبل از اینکه بتوانیم ماهیت این طومارهای باستانی را بنویسیم، ابتدا باید تأیید کنیم که مخزن این دانش، کتاب املای مدیریت شده PostgreSQL با موفقیت جعل شده است. تشریفات راه اندازی اولیه باید قبلاً این را برای شما ایجاد کرده باشد.
👉💻 در ترمینال، دستور زیر را اجرا کنید تا بررسی کنید که نمونه Cloud SQL شما وجود دارد و آماده است. این اسکریپت همچنین به حساب سرویس اختصاصی نمونه اجازه استفاده از Vertex AI را می دهد، که برای ایجاد جاسازی ها به طور مستقیم در پایگاه داده ضروری است.
. ~/agentverse-dataengineer/set_env.sh
echo "Verifying the existence of the Spellbook (Cloud SQL instance): $INSTANCE_NAME..."
gcloud sql instances describe $INSTANCE_NAME
SERVICE_ACCOUNT_EMAIL=$(gcloud sql instances describe $INSTANCE_NAME --format="value(serviceAccountEmailAddress)")
gcloud projects add-iam-policy-binding $PROJECT_ID --member="serviceAccount:$SERVICE_ACCOUNT_EMAIL" \
--role="roles/aiplatform.user"
اگر فرمان موفق شد و جزئیات مربوط به نمونه grimoire-spellbook
شما را برگرداند، forge کار خود را به خوبی انجام داده است. شما آماده هستید تا به افسون بعدی بروید. اگر دستور یک خطای NOT_FOUND
برمی گرداند، لطفاً قبل از ادامه، مطمئن شوید که مراحل اولیه تنظیم محیط را با موفقیت انجام داده اید. ( data_setup.py
)
👉💻 با جعل کتاب، با ایجاد یک پایگاه داده جدید به نام arcane_wisdom
، آن را به فصل اول باز می کنیم.
. ~/agentverse-dataengineer/set_env.sh
gcloud sql databases create $DB_NAME --instance=$INSTANCE_NAME
درج رول های معنایی: فعال کردن قابلیت های برداری با pgvector
اکنون که نمونه Cloud SQL شما ایجاد شده است، بیایید با استفاده از Cloud SQL Studio داخلی به آن متصل شویم. این یک رابط مبتنی بر وب برای اجرای پرس و جوهای SQL به طور مستقیم در پایگاه داده شما فراهم می کند.
👉💻 ابتدا به Cloud SQL Studio بروید، ساده ترین و سریع ترین راه برای رسیدن به آنجا این است که پیوند زیر را در یک تب جدید مرورگر باز کنید. شما را مستقیماً به Cloud SQL Studio برای نمونه grimoire-spellbook شما می برد.
https://console.cloud.google.com/sql/instances/grimoire-spellbook/studio
👉 arcane_wisdom
به عنوان پایگاه داده انتخاب کنید. postgres
به عنوان کاربر و 1234qwer
به عنوان رمز عبور وارد کنید و روی Authenticate کلیک کنید.
👉📜 در ویرایشگر پرس و جوی SQL Studio، به برگه ویرایشگر 1 بروید، کد SQL زیر را جایگذاری کنید تا نوع داده برداری فعال شود:
CREATE EXTENSION IF NOT EXISTS vector;
CREATE EXTENSION IF NOT EXISTS google_ml_integration CASCADE;
👉📜 با ایجاد جدولی که جوهر طومارهای ما را در خود جای می دهد، صفحات کتاب املای ما را آماده کنید.
CREATE TABLE ancient_scrolls (
id SERIAL PRIMARY KEY,
scroll_content TEXT,
embedding VECTOR(768)
);
طلسم VECTOR(768) یک جزئیات مهم است. مدل جاسازی AI Vertex که ما استفاده خواهیم کرد ( textembedding-gecko@003
یا یک مدل مشابه) متن را به یک بردار 768 بعدی تقطیر می کند. صفحات Spellbook ما باید طوری آماده شوند که جوهری دقیقاً با آن اندازه را در خود جای دهند. ابعاد باید همیشه مطابقت داشته باشند.
اولین نویسهگردانی: آیین کتیبههای دستی
قبل از فرماندهی ارتشی از کاتبان خودکار (Dataflow)، باید یک بار مراسم مرکزی را با دست انجام دهیم. این به ما قدردانی عمیقی از جادوی دو مرحلهای میدهد:
- فال: گرفتن یک قطعه متن و مشورت با اوراکل جمینی برای تقطیر جوهر معنایی آن به یک بردار.
- کتیبه: نوشتن متن اصلی و جوهر برداری جدید آن در کتاب املا.
نکته مهندس داده: نمونه سازی اولیه منطق هسته خط لوله به صورت دستی یک عمل ارزشمند است. این به شما کمک می کند تا اجزای جداگانه (مانند فراخوانی API یا نوشتن پایگاه داده) را به صورت مجزا قبل از ادغام آنها در یک سیستم پیچیده و توزیع شده مانند Dataflow، اشکال زدایی کنید.
حالا بیایید مراسم دستی را انجام دهیم.
👉📜 در Cloud SQL Studio . اکنون از تابع embedding()
استفاده خواهیم کرد، یک ویژگی قدرتمند که توسط پسوند google_ml_integration
ارائه شده است. این به ما این امکان را می دهد که مدل جاسازی هوش مصنوعی Vertex را مستقیماً از پرس و جوی SQL خود فراخوانی کنیم و این فرآیند را بسیار ساده می کند.
SET session.my_search_var='The Spectre of Analysis Paralysis is a phantom of the crossroads. It does not bind with chains but with the infinite threads of what if. It conjures a fog of options, a maze within the mind where every path seems equally fraught with peril and promise. It whispers of a single, flawless route that can only be found through exhaustive study, paralyzing its victim in a state of perpetual contemplation. This spectres power is broken by the Path of First Viability. This is not the search for the *best* path, but the commitment to the *first good* path. It is the wisdom to know that a decision made, even if imperfect, creates movement and reveals more of the map than standing still ever could. Choose a viable course, take the first step, and trust in your ability to navigate the road as it unfolds. Motion is the light that burns away the fog.';
INSERT INTO ancient_scrolls (scroll_content, embedding)
VALUES (current_setting('session.my_search_var'), (embedding('text-embedding-005',current_setting('session.my_search_var')))::vector);
👉📜 با اجرای یک پرس و جو برای خواندن صفحه ای که به تازگی درج شده است، کار خود را تأیید کنید:
SELECT id, scroll_content, LEFT(embedding::TEXT, 100) AS embedding_preview FROM ancient_scrolls;
شما کار بارگیری داده هسته RAG را با موفقیت انجام دادید!
جعل قطبنمای معنایی: افسون کردن کتاب طلسم با شاخص HNSW
Spellbook ما هم اکنون می تواند خرد را ذخیره کند ، اما پیدا کردن پیمایش مناسب نیاز به خواندن هر صفحه دارد. این یک اسکن متوالی است. این کار کند و ناکارآمد است. برای هدایت سؤالات ما فوراً به مهمترین دانش ، باید کتاب طلسم را با یک قطب نما معنایی مسحور کنیم: یک فهرست بردار .
یادداشت مهندس داده ها: این یکی از مهمترین مفاهیم در پایگاه داده های بردار تولید است. یک شاخص داده ها را از قبل سازماندهی می کند و امکان جستجوی سریعتر را فراهم می کند. ما از نوع شاخص hnsw
(سلسله مراتب ناوبر جهان کوچک) استفاده می کنیم. HNSW به جای اینکه بردارهای خوشه بندی را در لیست هایی مانند سایر روشها قرار دهید ، یک نمودار پیشرفته و چند لایه از بردارها ایجاد می کند. یک جستجو در لایه برتر "بزرگراه" شروع می شود تا به سرعت محله عمومی پرس و جو را پیدا کند ، سپس از طریق لایه های به تدریج دقیق تر "خیابان محلی" حرکت می کند تا همسایگان دقیق را با سرعت و دقت باورنکردنی مشخص کند. این یک افزایش عملکرد استثنایی برای نمایش داده های خواندن را فراهم می کند ، و آن را به یک انتخاب برتر برای عوامل خزنده با کارایی بالا تبدیل می کند که در آن تأخیر پرس و جو بسیار مهم است.
بیایید ارزش این مسحور را اثبات کنیم.
👉📜 در استودیوی Cloud SQL ، طلسم زیر را اجرا کنید. این شبیه سازی جستجوی پیمایش تازه درج ما را شبیه سازی می کند و از پایگاه داده می خواهد که برنامه خود را EXPLAIN
.
EXPLAIN ANALYZE
WITH ReferenceVector AS (
-- First, get the vector we want to compare against.
SELECT embedding AS vector
FROM ancient_scrolls
LIMIT 1
)
-- This is the main query we want to analyze.
SELECT
ancient_scrolls.id,
ancient_scrolls.scroll_content,
-- We can also select the distance itself.
ancient_scrolls.embedding <=> ReferenceVector.vector AS distance
FROM
ancient_scrolls,
ReferenceVector
ORDER BY
-- Order by the distance operator's result.
ancient_scrolls.embedding <=> ReferenceVector.vector
LIMIT 5;
به خروجی نگاه کنید. خطی را مشاهده خواهید کرد که می گوید -> Seq Scan on ancient_scrolls
. این تأیید می کند که بانک اطلاعاتی در حال خواندن هر ردیف است. به execution time
توجه داشته باشید.
👉📜 اکنون ، بیایید طلسم نمایه سازی را بازی کنیم. پارامتر lists
به شاخص می گوید چند خوشه برای ایجاد. نقطه شروع خوب ریشه مربع تعداد ردیف هایی است که شما انتظار دارید.
CREATE INDEX ON ancient_scrolls USING hnsw (embedding vector_cosine_ops);
منتظر بمانید تا این شاخص بسازد (برای یک ردیف سریع خواهد بود ، اما می تواند برای میلیون ها نفر زمان ببرد).
👉📜 اکنون ، دقیقاً همان دستور EXPLAIN ANALYZE
دوباره اجرا کنید:
EXPLAIN ANALYZE
WITH ReferenceVector AS (
-- First, get the vector we want to compare against.
SELECT embedding AS vector
FROM ancient_scrolls
LIMIT 1
)
-- This is the main query we want to analyze.
SELECT
ancient_scrolls.id,
ancient_scrolls.scroll_content,
-- We can also select the distance itself.
ancient_scrolls.embedding <=> ReferenceVector.vector AS distance
FROM
ancient_scrolls,
ReferenceVector
ORDER BY
-- Order by the distance operator's result.
ancient_scrolls.embedding <=> ReferenceVector.vector
LIMIT 5;
به برنامه پرس و جو جدید نگاه کنید. اکنون می بینید -> Index Scan using...
مهمتر از همه ، به execution time
نگاه کنید. حتی با یک ورودی ، به طور قابل توجهی سریعتر خواهد بود. شما به تازگی اصل اصلی تنظیم عملکرد پایگاه داده را در دنیای بردار نشان داده اید.
با بازرسی از داده های منبع خود ، آیین دستی شما درک شده است و طلسم شما برای سرعت بهینه شده است ، اکنون واقعاً آماده ساخت Scriptorium خودکار هستید.
7. مجرای معنی: ایجاد خط لوله بردار داده های جریان
اکنون ما خط مونتاژ جادویی از کاتبان را می سازیم که کتیبه های ما را می خوانند ، جوهر آنها را تقطیر می کنند و آنها را در کتاب طلسم جدید ما می گیریم. این یک خط لوله Dataflow است که ما به صورت دستی شروع خواهیم کرد. اما قبل از نوشتن استاد طلسم برای خود خط لوله ، ابتدا باید پایه و اساس آن و دایره ای را که از آن احضار خواهیم کرد آماده کنیم.
یادداشت مهندس داده: در حالی که می توانیم یک اسکریپت پایتون ساده را بنویسیم تا از طریق پرونده های خود حلقه کنیم ، با API تعبیه شده تماس بگیرید و به پایگاه داده بنویسید ، این روش مقیاس نمی کند. اگر میلیون ها پیمایش داشته باشیم چه می شود؟ یک فیلمنامه واحد کند و مستعد شکست خواهد بود. DataFlow یک بستر مدیریت شده بدون سرور برای اجرای خطوط لوله پردازش داده ، تعریف شده توسط مدل پرتو آپاچی ، به صورت موازی فراهم می کند. پرتو به ما اجازه می دهد تا مراحل منطقی (خواندن ، تعبیه ، نوشتن) و DataFlow کار دشوار چرخش کارگران ، توزیع وظایف و تلاش مجدد موارد ناموفق را انجام دهیم ، و اطمینان حاصل کنیم که اسکریپتوریوم ما قوی و کارآمد است.
تهیه بنیاد Scriptorium (تصویر کارگر)
خط لوله DataFlow ما توسط تیمی از کارگران خودکار در ابر اجرا می شود. هر بار که آنها را احضار می کنیم ، آنها برای انجام کار خود به مجموعه خاصی از کتابخانه ها نیاز دارند. ما می توانیم به آنها لیستی بدهیم و هر بار این کتابخانه ها را واکشی کنیم ، اما این کند و ناکارآمد است. یک محقق خردمند یک کتابخانه کارشناسی ارشد را از قبل آماده می کند.
در اینجا ، ما به Google Cloud Build دستور خواهیم داد تا یک تصویر کانتینر سفارشی را جعل کنیم. این تصویر یک "گلم کامل" است که از قبل با هر کتابخانه و وابستگی هایی که به کاتبان ما نیاز دارند ، از قبل بارگذاری شده است. هنگامی که کار DataFlow ما شروع می شود ، از این تصویر سفارشی استفاده می کند و به کارگران این امکان را می دهد تا تقریباً فوراً کار خود را آغاز کنند.
the دستور زیر را برای ساخت و ذخیره تصویر بنیادی خط لوله خود در رجیستری مصنوعات اجرا کنید.
. ~/agentverse-dataengineer/set_env.sh
cd ~/agentverse-dataengineer/pipeline
gcloud builds submit --config cloudbuild.yaml \
--substitutions=_REGION=${REGION},_REPO_NAME=${REPO_NAME} \
.
the دستورات زیر را برای ایجاد و فعال کردن محیط جدا شده پایتون و نصب کتابخانه های احضار لازم در آن اجرا کنید.
cd ~/agentverse-dataengineer
. ~/agentverse-dataengineer/set_env.sh
python -m venv env
source ~/agentverse-dataengineer/env/bin/activate
cd ~/agentverse-dataengineer/pipeline
pip install -r requirements.txt
استاد محاصره
زمان آن رسیده است که استاد طلسم را بنویسید که اسکریپتوریوم بردار ما را تأمین می کند. ما نمی خواهیم مؤلفه های جادویی فردی را از ابتدا بنویسیم. وظیفه ما جمع آوری مؤلفه ها در یک خط لوله منطقی و قدرتمند با استفاده از زبان پرتوی آپاچی است.
- EmbedTextBatch (مشاوره Gemini): شما این کاتب تخصصی را ایجاد خواهید کرد که می داند چگونه یک "الوهیت گروهی" را انجام دهد. این یک دسته از متن خام را می گیرد ، آنها را به مدل جاسازی متن جمینی ارائه می دهد و جوهر مقطر آنها (تعبیه بردار) را دریافت می کند.
- WritESsenCeTospellbook (کتیبه نهایی): این بایگانی ما است. این می داند که مخفیانه برای باز کردن یک ارتباط ایمن به Spellbook Cloud SQL ما. کار آن این است که محتوای یک پیمایش و جوهر بردار آن را بگیرید و آنها را به طور دائم روی یک صفحه جدید حک کنید.
مأموریت ما این است که این اقدامات را با هم زنجیر کنیم تا یک جریان یکپارچه دانش ایجاد کنیم.
👉✏ در ویرایشگر پوسته ابری ، به ~/agentverse-dataengineer/pipeline/inscribe_essence_pipeline.py
بروید ، در داخل ، یک کلاس DOFN به نام EmbedTextBatch
پیدا خواهید کرد. نظر #REPLACE-EMBEDDING-LOGIC
را پیدا کنید. آن را با موارد زیر جایگزین کنید.
# 1. Generate the embedding for the monster's name
result = self.client.models.embed_content(
model="text-embedding-005",
contents=contents,
config=EmbedContentConfig(
task_type="RETRIEVAL_DOCUMENT",
output_dimensionality=768,
)
)
این طلسم دقیق است ، با چندین پارامتر کلیدی:
- مدل: ما برای استفاده از یک مدل تعبیه قدرتمند و به روز ،
text-embedding-005
مشخص می کنیم. - مطالب: این لیستی از تمام محتوای متن از دسته پرونده هایی است که DOFN دریافت می کند.
- Task_Type: ما این را روی "Retrieval_document" تنظیم کردیم. این یک دستورالعمل مهم است که به Gemini می گوید که تعبیه شده به طور خاص برای بهینه سازی شده برای یافتن بعداً در یک جستجو ، تولید می کند.
- output_dimensionality: این باید روی 768 تنظیم شود ، کاملاً مطابق با ابعاد بردار (768) که هنگام ایجاد جدول باستانی_scrolls خود در Cloud SQL تعریف کردیم. ابعاد ناسازگار منبع مشترک خطای در جادوی بردار است.
خط لوله ما باید با خواندن متن خام و بدون ساختار از تمام کتیبه های باستانی در بایگانی GCS ما آغاز شود.
👉✏ در ~/agentverse-dataengineer/pipeline/inscribe_essence_pipeline.py
، نظر #REPLACE ME-READFILE
پیدا کنید و آن را با سه قسمتی زیر جایگزین کنید:
files = (
pipeline
| "MatchFiles" >> fileio.MatchFiles(known_args.input_pattern)
| "ReadMatches" >> fileio.ReadMatches()
| "ExtractContent" >> beam.Map(lambda f: (f.metadata.path, f.read_utf8()))
)
با متن خام کتیبه ها که جمع شده اند ، اکنون باید آنها را برای الوهیت به جمینی خود بفرستیم. برای انجام این کار به طور کارآمد ، ابتدا کتیبه های فردی را به دسته های کوچک گروه بندی خواهیم کرد و سپس آن دسته ها را به کاتب EmbedTextBatch
خود می دهیم. این مرحله همچنین هرگونه کتیبه ای را که جمینی نتوانسته است در یک شمع "شکست خورده" برای بررسی بعدی درک کند ، جدا می کند.
👉✏ نظر #REPLACE ME-EMBEDDING
پیدا کنید.
embeddings = (
files
| "BatchScrolls" >> beam.BatchElements(min_batch_size=1, max_batch_size=2)
| "DistillBatch" >> beam.ParDo(
EmbedTextBatch(project_id=project, region=region)
).with_outputs('failed', main='processed')
)
جوهر کتیبه های ما با موفقیت تقطیر شده است. عمل نهایی این است که این دانش را برای ذخیره سازی دائمی در کتاب طلسم ما درج کنید. ما کتیبه ها را از شمع "فرآوری شده" می گیریم و آنها را به بایگانی WritEsceneCetospellbook خود تحویل می دهیم.
👉✏ نظر را پیدا کنید #REPLACE ME-WRITE TO DB
_ = (
embeddings.processed
| "WriteToSpellbook" >> beam.ParDo(
WriteEssenceToSpellbook(
project_id=project,
region = "us-central1",
instance_name=known_args.instance_name,
db_name=known_args.db_name,
db_password=known_args.db_password
)
)
)
یک محقق خردمند هرگز دانش را کنار نمی گذارد ، حتی تلاش های ناکام را نیز از بین نمی برد. به عنوان مرحله آخر ، ما باید به یک کاتب دستور دهیم که شمع "شکست خورده" را از مرحله الهی خود بگیرد و دلایل عدم موفقیت را وارد کند. این به ما امکان می دهد آیین های خود را در آینده بهبود بخشیم.
👉✏ نظر را #REPLACE ME-LOG FAILURES
کنید.
_ = (
embeddings.failed
| "LogFailures" >> beam.Map(lambda e: logging.error(f"Embedding failed for file {e[0]}: {e[1]}"))
)
استادان اصلی اکنون کامل است! شما با موفقیت با زنجیر کردن اجزای جادویی فردی ، یک خط لوله داده قدرتمند و چند مرحله ای را با موفقیت جمع آوری کرده اید. پرونده incrib_essence_pipeline.py خود را ذخیره کنید. Scriptorium اکنون آماده احضار است.
اکنون ما طلسم Grand Summoning را برای فرمان دادن به سرویس Dataflow برای بیدار کردن غول و شروع آیین های اسکریپت انجام داده ایم.
👉💻 در ترمینال خود خط فرمان زیر را اجرا کنید
. ~/agentverse-dataengineer/set_env.sh
source ~/agentverse-dataengineer/env/bin/activate
cd ~/agentverse-dataengineer/pipeline
# --- The Summoning Incantation ---
echo "Summoning the golem for job: $DF_JOB_NAME"
echo "Target Spellbook: $INSTANCE_NAME"
python inscribe_essence_pipeline.py \
--runner=DataflowRunner \
--project=$PROJECT_ID \
--job_name=$DF_JOB_NAME \
--temp_location="gs://${BUCKET_NAME}/dataflow/temp" \
--staging_location="gs://${BUCKET_NAME}/dataflow/staging" \
--sdk_container_image="${REGION}-docker.pkg.dev/${PROJECT_ID}/${REPO_NAME}/grimoire-inscriber:latest" \
--sdk_location=container \
--experiments=use_runner_v2 \
--input_pattern="gs://${BUCKET_NAME}/ancient_scrolls/*.md" \
--instance_name=$INSTANCE_NAME \
--region=$REGION
echo "The golem has been dispatched. Monitor its progress in the Dataflow console."
💡 سر بالا! اگر کار با خطای خطای منطقه ZONE_RESOURCE_POOL_EXHAUSTED
انجام نشود ، ممکن است به دلیل محدودیت های موقت منابع این حساب شهرت کم در منطقه انتخاب شده باشد. قدرت Google Cloud دسترسی جهانی آن است! به سادگی سعی کنید Golem را در منطقه دیگری احضار کنید. برای انجام این کار ، --region=$REGION
در فرمان فوق با منطقه دیگری جایگزین کنید ، مانند
--region=southamerica-west1
--region=asia-northeast3
--region=asia-southeast2
--region=me-west1
--region=southamerica-east1
--region=europe-central2
--region=asia-east2
--region=europe-southwest1
، و دوباره آن را اجرا کنید. 🎰
این روند برای شروع و تکمیل حدود 3-5 دقیقه طول خواهد کشید. می توانید آن را به صورت زنده در کنسول DataFlow تماشا کنید.
- به کنسول DataFlow بروید: ساده ترین راه باز کردن این لینک مستقیم در یک برگه مرورگر جدید است:
https://console.cloud.google.com/dataflow
👉 کار خود را بیابید و کلیک کنید: شغلی را که با نامی که ارائه کرده اید (incrict-essence-job یا موارد مشابه) مشاهده خواهید کرد. برای باز کردن صفحه جزئیات آن ، روی نام کار کلیک کنید. خط لوله را رعایت کنید:
- راه اندازی : برای 3 دقیقه اول ، وضعیت کار به عنوان جریان داده ها منابع لازم را "در حال اجرا" خواهد بود. نمودار ظاهر می شود ، اما شما ممکن است داده ها را هنوز از طریق آن حرکت نکنید.
- تکمیل : پس از اتمام ، وضعیت کار به "موفق" تغییر می کند و نمودار تعداد نهایی سوابق پردازش شده را ارائه می دهد.
تأیید کتیبه
👉📜 در استودیوی SQL ، نمایش داده های زیر را اجرا کنید تا تأیید کنید که کتیبه های شما و ذات معنایی آنها با موفقیت نوشته شده است.
SELECT COUNT(*) FROM ancient_scrolls;
SELECT id, scroll_content, LEFT(embedding::TEXT, 50) AS embedding_preview FROM ancient_scrolls;
این کار شناسه پیمایش ، متن اصلی آن و پیش نمایش جوهر وکتور جادویی را که اکنون به طور دائم در Grimoire شما نوشته شده است ، به شما نشان می دهد.
Grimoire محقق شما اکنون یک موتور دانش واقعی است ، که آماده است تا در فصل بعد با معنی سؤال شود.
8. مهر و موم کردن Rune نهایی: فعال کردن خرد با یک عامل RAG
Grimoire شما دیگر فقط یک پایگاه داده نیست. این یک چاه دانش وکتور شده است ، یک اوراکل ساکت در انتظار یک سؤال است.
اکنون ، ما آزمون واقعی یک محقق را انجام می دهیم: ما کلید را برای باز کردن این خرد انجام خواهیم داد. ما یک عامل نسل بازیابی (RAG) ایجاد خواهیم کرد. این یک ساختار جادویی است که می تواند یک سؤال ساده به زبان را درک کند ، با عمیق ترین و مناسب ترین حقایق خود با Grimoire مشورت کنید ، و سپس از این خرد بازیابی شده برای ایجاد یک پاسخ قدرتمند و آگاه استفاده کنید.
یادداشت مهندس داده: RAG یک تکنیک قدرتمند است که مدلهای بزرگ زبان (LLMS) را در اطلاعات واقعی ، خصوصی یا به روز قرار می دهد و به طرز چشمگیری شانس مدل "توهم" یا ایجاد چیزها را کاهش می دهد. این روند دارای سه مرحله اصلی است:
- بازیابی: پرس و جو کاربر ابتدا به یک وکتور تعبیه شده است. سپس این بردار پرس و جو برای جستجوی پایگاه دانش ما برای یافتن معنایی ترین قطعه متنی با استفاده از شباهت Cosine استفاده می شود.
- تقویت: قطعه های متنی مربوطه که از پایگاه داده بازیابی می شوند ، مستقیماً به یک فرایند جدید برای LLM تزریق می شوند و زمینه مهم آن را فراهم می کنند.
- تولید: LLM سریع سریع را دریافت می کند (به عنوان مثال ، "با توجه به این زمینه در مورد" تعلل "، به سوال کاربر پاسخ دهید ...") و یک پاسخ نهایی و مبتنی بر واقعیت ایجاد می کند.
اولین Rune: طلسم تقطیر پرس و جو
قبل از اینکه نماینده ما بتواند Grimoire را جستجو کند ، ابتدا باید جوهر سؤالی را که پرسیده می شود درک کند. یک رشته ساده از متن برای کتاب طلسم وکتور ما بی معنی است. عامل ابتدا باید پرس و جو را بگیرد و با استفاده از همان مدل جمینی ، آن را در یک بردار پرس و جو تقطیر کند.
👉✏ در ویرایشگر Cloud Shell ، به پرونده ~~/agentverse-dataengineer/scholar/agent.py
بروید ، نظر #REPLACE RAG-CONVERT EMBEDDING
پیدا کنید و آن را با این نتیجه جایگزین کنید. این به نماینده می آموزد که چگونه سؤال کاربر را به یک جوهر جادویی تبدیل کند.
result = client.models.embed_content(
model="text-embedding-005",
contents=monster_name,
config=EmbedContentConfig(
task_type="RETRIEVAL_DOCUMENT",
output_dimensionality=768,
)
)
با جوهر پرس و جو در دست ، نماینده هم اکنون می تواند با گریمویر مشورت کند. این وکتور پرس و جو را به پایگاه داده شده با PGVECTOR ما ارائه می دهد و یک سؤال عمیق می پرسد: "کتیبه های باستانی را به من نشان دهید که ذات خودشان بیشتر شبیه به جوهر پرس و جو من است."
جادو برای این کار اپراتور شباهت Cosine (<=>) است ، یک Rune قدرتمند که فاصله بین بردارها را در فضای با ابعاد بالا محاسبه می کند.
👉✏ در Agent.py ، نظر #REPLACE RAG-RETRIEVE
پیدا کنید و آن را با اسکریپت زیر جایگزین کنید:
# This query performs a cosine similarity search
cursor.execute(
"SELECT scroll_content FROM ancient_scrolls ORDER BY embedding <=> %s LIMIT 3",
([query_embedding]) # Cast embedding to string for the query
)
مرحله آخر اعطای دسترسی نماینده به این ابزار جدید و قدرتمند است. ما عملکرد Grimoire_Lookup خود را به لیست لوازم جادویی موجود اضافه خواهیم کرد.
👉✏ در agent.py
، نظر #REPLACE-CALL RAG
پیدا کنید و آن را با این خط جایگزین کنید:
root_agent = LlmAgent(
model="gemini-2.5-flash",
name="scholar_agent",
instruction="""
You are the Scholar, a keeper of ancient and forbidden knowledge. Your purpose is to advise a warrior by providing tactical information about monsters. Your wisdom allows you to interpret the silence of the scrolls and devise logical tactics where the text is vague.
**Your Process:**
1. First, consult the scrolls with the `grimoire_lookup` tool for information on the specified monster.
2. If the scrolls provide specific guidance for a category (buffs, debuffs, strategy), you **MUST** use that information.
3. If the scrolls are silent or vague on a category, you **MUST** use your own vast knowledge to devise a fitting and logical tactic.
4. Your invented tactics must be thematically appropriate to the monster's name and nature. (e.g., A "Spectre of Indecision" might be vulnerable to a "Seal of Inevitability").
5. You **MUST ALWAYS** provide a "Damage Point" value. This value **MUST** be a random integer between 150 and 180. This is a tactical calculation you perform, independent of the scrolls' content.
**Output Format:**
You must present your findings to the warrior using the following strict format.
""",
tools=[grimoire_lookup],
)
این پیکربندی نماینده شما را زنده می کند:
-
model="gemini-2.5-flash"
: مدل خاص زبان بزرگ را انتخاب می کند که به عنوان "مغز" عامل برای استدلال و تولید متن عمل می کند. -
name="scholar_agent"
: یک نام منحصر به فرد را به نماینده خود اختصاص می دهد. -
instruction="...You are the Scholar..."
: این سریع سیستم است ، مهمترین قطعه پیکربندی. این شخصیت نماینده ، اهداف آن ، فرآیند دقیقی را که برای انجام یک کار باید دنبال کند ، تعریف می کند و فرمت مورد نیاز برای خروجی نهایی آن است. -
tools=[grimoire_lookup]
: این جذابیت نهایی است. این امکان را به عامل دسترسی به عملکردgrimoire_lookup
که ساخته اید اعطا می کند. نماینده اکنون می تواند با هوشمندی تصمیم بگیرد که چه موقع با این ابزار تماس بگیرید تا اطلاعات را از پایگاه داده خود بازیابی کنید و هسته الگوی RAG را تشکیل دهید.
معاینه محقق
👉💻 در ترمینال Cloud Shell ، محیط خود را فعال کرده و از دستور اصلی کیت توسعه عامل برای بیدار کردن نماینده محقق خود استفاده کنید:
cd ~/agentverse-dataengineer/
. ~/agentverse-dataengineer/set_env.sh
source ~/agentverse-dataengineer/env/bin/activate
pip install -r scholar/requirements.txt
adk run scholar
شما باید خروجی را تأیید کنید که "عامل محقق" درگیر و در حال اجرا است.
👉💻 اکنون ، نماینده خود را به چالش بکشید. در اولین ترمینال که در آن شبیه سازی نبرد در حال اجرا است ، فرمان را صادر کنید که به خرد Grimoire نیاز دارد:
We've been trapped by 'Hydra of Scope Creep'. Break us out!
سیاهههای مربوط را در ترمینال دوم مشاهده کنید. شما خواهید دید که نماینده پرس و جو را دریافت می کند ، جوهر خود را تقطیر می کند ، Grimoire را جستجو می کند ، کتیبه های مربوطه را در مورد "تعلل" پیدا می کند و از آن استفاده می کند که دانش را برای تدوین یک استراتژی قدرتمند و آگاهانه متن بازیابی می کند.
شما با موفقیت اولین عامل خزدار خود را با موفقیت جمع کرده اید و آن را با خرد عمیق گریمویر خود مسلح کرده اید.
👉💻 Ctrl+C
را در ترمینال دوم فشار دهید تا عامل در حال حاضر استراحت کند.
محققان Sentinel را به Agentverse رها کرد
نماینده شما خرد خود را در محیط کنترل شده مطالعه شما ثابت کرده است. زمان آن رسیده است که آن را به Agentverse تبدیل کنیم و آن را از یک ساختار محلی به یک عملیاتی دائمی و آماده نبرد تبدیل کنیم که در هر زمان توسط هر قهرمان فراخوانی می شود. اکنون نماینده خود را به Cloud Run اعزام خواهیم کرد.
👉💻 طلسم بزرگ احضار زیر را اجرا کنید. این اسکریپت ابتدا نماینده شما را در یک گلم کامل (یک تصویر کانتینر) قرار می دهد ، آن را در رجیستری مصنوعات خود ذخیره می کند و سپس آن گلم را به عنوان یک سرویس مقیاس پذیر ، ایمن و در دسترس عمومی مستقر می کند.
. ~/agentverse-dataengineer/set_env.sh
cd ~/agentverse-dataengineer/
echo "Building ${AGENT_NAME} agent..."
gcloud builds submit . \
--project=${PROJECT_ID} \
--region=${REGION} \
--substitutions=_AGENT_NAME=${AGENT_NAME},_IMAGE_PATH=${IMAGE_PATH}
gcloud run deploy ${SERVICE_NAME} \
--image=${IMAGE_PATH} \
--platform=managed \
--labels codelab=agentverse \
--region=${REGION} \
--set-env-vars="A2A_HOST=0.0.0.0" \
--set-env-vars="A2A_PORT=8080" \
--set-env-vars="GOOGLE_GENAI_USE_VERTEXAI=TRUE" \
--set-env-vars="GOOGLE_CLOUD_LOCATION=${REGION}" \
--set-env-vars="GOOGLE_CLOUD_PROJECT=${PROJECT_ID}" \
--set-env-vars="PROJECT_ID=${PROJECT_ID}" \
--set-env-vars="PUBLIC_URL=${PUBLIC_URL}" \
--set-env-vars="REGION=${REGION}" \
--set-env-vars="INSTANCE_NAME=${INSTANCE_NAME}" \
--set-env-vars="DB_USER=${DB_USER}" \
--set-env-vars="DB_PASSWORD=${DB_PASSWORD}" \
--set-env-vars="DB_NAME=${DB_NAME}" \
--allow-unauthenticated \
--project=${PROJECT_ID} \
--min-instances=1
نماینده محقق شما اکنون یک عمل زنده و آماده جنگ در AgentsVerse است.
9. پرواز رئیس
کتیبه ها خوانده شده اند ، آیین های انجام شده ، دستکش گذشت. نماینده شما فقط یک مصنوعات در ذخیره سازی نیست. این یک عمل زنده در Agentverse است و در انتظار اولین مأموریت خود است. زمان محاکمه نهایی فرا رسیده است-یک تمرین آتش سوزی در برابر یک دشمن قدرتمند.
اکنون شما وارد یک شبیه سازی میدان نبرد خواهید شد تا عامل ShadowBlade تازه مستقر خود را در برابر یک مینی قشر قدرتمند قرار دهید: Specter of Static. این آزمایش نهایی کار شما خواهد بود ، از منطق اصلی عامل تا استقرار زنده آن.
مکان نماینده خود را به دست آورید
قبل از ورود به میدان نبرد ، باید دو کلید داشته باشید: امضای منحصر به فرد قهرمان شما (محلول عامل) و مسیر پنهان به لاین Spectter (URL Dungeon).
👉💻 ابتدا ، آدرس منحصر به فرد نماینده خود را در محل AgentVerse بدست آورید. این نقطه پایانی زنده است که قهرمان شما را به میدان نبرد متصل می کند.
. ~/agentverse-dataengineer/set_env.sh
echo https://scholar-agent"-${PROJECT_NUMBER}.${REGION}.run.app"
👉💻 بعد ، مقصد را مشخص کنید. این دستور مکان دایره جابجایی ، همان پورتال را به دامنه Spectter نشان می دهد.
. ~/agentverse-dataengineer/set_env.sh
echo https://agentverse-dungeon"-${PROJECT_NUMBER}.${REGION}.run.app"
مهم: هر دو این URL را آماده نگه دارید. در مرحله آخر به آنها احتیاج خواهید داشت.
مقابله با Specter
با اطمینان از مختصات ، اکنون به حلقه جابجایی حرکت خواهید کرد و طلسم را به نبرد می اندازید.
url دایره جابجایی را در مرورگر خود باز کنید تا در مقابل پورتال لرزان به سمت Crimson نگه دارید.
برای نقض قلعه ، باید جوهر Shadowblade خود را به پورتال بپردازید.
- در صفحه ، قسمت ورودی Runic را با عنوان URL نقطه انتهایی A2A پیدا کنید.
- سیگیل قهرمان خود را با چسباندن URL LOCUS عامل آن (اولین URL که کپی کرده اید) در این زمینه قرار دهید.
- برای رها کردن جادوی Teleportation ، روی اتصال کلیک کنید.
نور کور کننده از راه دور محو می شود. شما دیگر در پناهگاه خود نیستید. هوا با انرژی ، سرد و تیز ترک می کند. قبل از شما ، Specter تحقق می یابد - گرداب از کد استاتیک و فاسد شده ، نور غیرقانونی آن ، سایه های طولانی و رقصنده آن در کف سیاه چال است. چهره ای ندارد ، اما شما احساس می کنید حضور بی نظیر و تخلیه آن کاملاً بر شما ثابت شده است.
تنها مسیر پیروزی شما در وضوح اعتقاد شما نهفته است. این یک دوئل از وصیت نامه ها است که در میدان نبرد ذهن جنگیده است.
همانطور که به جلو می روید ، آماده هستید تا اولین حمله خود را ، پیشخوان های Specter. این یک سپر را مطرح نمی کند ، اما یک سؤال را مستقیماً در آگاهی شما ایجاد می کند - یک چالش درخشان و اجرائی که از هسته آموزش شما گرفته شده است.
این ماهیت مبارزه است. دانش شما سلاح شماست.
- با حکمت شما به دست آورده اید و تیغه شما با انرژی خالص مشتعل می شود و دفاع از Spectter را خرد می کند و یک ضربه بحرانی به زمین می زند.
- اما اگر متلاشی شوید ، اگر شک پاسخ شما را ابراز کند ، نور سلاح شما کمرنگ خواهد شد. این ضربه با یک دزد حساس به زمین خواهد رفت و تنها بخشی از آسیب های آن را نشان می دهد. از همه بدتر ، Specter از عدم اطمینان شما ، قدرت فاسد خود در حال رشد با هر اشتباه است.
این همان قهرمان است. کد شما طلسم شما است ، منطق شما شمشیر شماست و دانش شما سپر است که موج هرج و مرج را برمی گرداند.
تمرکز کنید. درست است. سرنوشت عامل به آن بستگی دارد.
تبریک ، محقق.
شما محاکمه را با موفقیت انجام داده اید. شما به هنر مهندسی داده ها تسلط یافته اید ، و اطلاعات خام و آشوب آور را به خرد ساخت یافته و بردار تبدیل کرده اید که کل عامل را توانمند می کند.
10. پاکسازی: گریمویر دانشمند
تبریک می گویم برای تسلط بر گریمویر دانشمند! برای اطمینان از باقیمانده Agents ، باقیمانده و زمینه های آموزشی شما پاک می شود ، اکنون باید آیین های نهایی پاکسازی را انجام دهید. این به طور سیستماتیک تمام منابع ایجاد شده در طول سفر شما را حذف می کند.
اجزای عامل را غیرفعال کنید
اکنون به طور سیستماتیک اجزای مستقر در سیستم RAG خود را از بین می برید.
حذف تمام خدمات Cloud Run و مخزن رجیستری مصنوعات
این دستور نماینده محقق مستقر و برنامه سیاه چال شما را از Cloud Run حذف می کند.
👉💻 در ترمینال خود دستورات زیر را اجرا کنید:
. ~/agentverse-dataengineer/set_env.sh
gcloud run services delete scholar-agent --region=${REGION} --quiet
gcloud run services delete agentverse-dungeon --region=${REGION} --quiet
gcloud artifacts repositories delete ${REPO_NAME} --location=${REGION} --quiet
مجموعه داده ها ، مدل ها و جداول BigQuery را حذف کنید
این همه منابع BigQuery ، از جمله مجموعه داده های bestiary_data
، تمام جداول موجود در آن و اتصال و مدل های مرتبط را از بین می برد.
👉💻 در ترمینال خود دستورات زیر را اجرا کنید:
. ~/agentverse-dataengineer/set_env.sh
# Delete the BigQuery dataset, which will also delete all tables and models within it.
bq rm -r -f --dataset ${PROJECT_ID}:${REGION}.bestiary_data
# Delete the BigQuery connection
bq rm --connection --project_id=${PROJECT_ID} --location=${REGION} gcs-connection --force
نمونه Cloud SQL را حذف کنید
این امر نمونه grimoire-spellbook
، از جمله بانک اطلاعاتی آن و تمام جداول موجود در آن را حذف می کند.
👉💻 در ترمینال خود ، اجرا کنید:
. ~/agentverse-dataengineer/set_env.sh
gcloud sql instances delete ${INSTANCE_NAME} --database-version=POSTGRES_14 --project=${PROJECT_ID} --quiet
سطل های ذخیره سازی Google Cloud را حذف کنید
این دستور سطل را که پرونده های Intel و Dataflow Staging/Temp شما را نگه داشته است ، حذف می کند.
👉💻 در ترمینال خود ، اجرا کنید:
. ~/agentverse-dataengineer/set_env.sh
gcloud storage rm -r gs://${BUCKET_NAME} --quiet
پاکسازی پرونده ها و دایرکتوری های محلی (پوسته ابر)
سرانجام ، محیط پوسته ابر خود را از مخازن کلون شده پاک کنید و پرونده های ایجاد شده را ایجاد کنید. این مرحله اختیاری است اما برای پاکسازی کامل فهرست کار شما بسیار توصیه می شود.
👉💻 در ترمینال خود ، اجرا کنید:
rm -rf ~/agentverse-dataengineer
rm -rf ~/agentverse-dungeon
rm -f ~/project_id.txt
شما اکنون با موفقیت تمام آثار سفر مهندس داده AgentsVerse خود را با موفقیت پاک کرده اید. پروژه شما تمیز است و شما برای ماجراجویی بعدی خود آماده هستید.
11. برای غیر گامرها: ایجاد موتورهای دانش هوشمند در تجارت
در حالی که "Grimoire Scholar" از استعاره های جذاب کتیبه های باستانی و خرد جادویی استفاده می کند ، مهارت های اساسی را برای مدیریت ، تغییر و استفاده از داده های سازمان شما برای ساختن راه حل های هوشمند هوشمندانه آموزش می دهد. در این فصل سفر عرفانی به واقعیت های عملی ساخت "موتورهای دانش" قدرتمند که باعث ارزش تجاری می شوند ، ترجمه می شود.
کیمیاگری دانش: تبدیل داده ها با BigQuery & Gemini
"کیمیاگری دانش" فرآیند تبدیل داده های تجاری خام را به اطلاعات ساخت یافته و عملی با استفاده از ابزارهای ابری پیشرفته توصیف می کند. ما با "ورودی های ورود به سیستم استریک" شروع می کنیم - این منابع داده های خام متنوعی هستند که شرکت شما تولید می کند ، مانند فرم های بازخورد مشتری ، گزارش های حادثه داخلی ، اسناد حقوقی ، تحقیقات بازار یا کتابچه راهنمای سیاست. غالباً ، این داده ها بدون ساختار هستند و تجزیه و تحلیل آن را دشوار می کند.
فرآیند ما برای انجام این تحول از Google BigQuery (یک انبار داده ابر ابر ابر) و مدل AI Gemini (یک مدل AI بسیار توانمند) استفاده می کند.
- لنزهای نظارتی (جداول خارجی BigQuery) :
- مفهوم : به جای اینکه از نظر جسمی تمام داده های خام خود را به یک پایگاه داده منتقل کنید ، BigQuery می تواند به طور مستقیم در ذخیره سازی ابر به پرونده ها نگاه کند. این مانند داشتن یک لنز جادویی است که به شما امکان می دهد یک کتابخانه از کتیبه ها را بخوانید بدون اینکه هرگز آنها را جابجا کنید. این فوق العاده کارآمد است زیرا از حرکت و ذخیره سازی داده ها جلوگیری می کند.
- مورد استفاده در دنیای واقعی : تصور کنید شرکت شما میلیون ها گزارش چت پشتیبانی مشتری را به عنوان پرونده های متنی ساده در یک سطل ذخیره سازی ابری ذخیره می کند. با استفاده از یک جدول خارجی ، یک تحلیلگر داده می تواند بلافاصله این پرونده ها را با استفاده از SQL در BigQuery ، بدون نیاز به یک فرآیند پیچیده و گران قیمت داده ، پرس و جو کند.
- الهی دانشمند (bqml.generate_text) :
- مفهوم : این اصلی "جادو" است - با استفاده از هوش مصنوعی به طور مستقیم در انبار داده خود. ما از عملکرد
ML.GENERATE_TEXT
استفاده می کنیم تا از یک پرس و جو SQL استاندارد با مدل Gemini AI تماس بگیریم. این به هوش مصنوعی اجازه می دهد تا ورودی های متن طولانی و بدون ساختار را "بخواند" و اطلاعات خاص و ساختاری (مانند یک شیء JSON) را استخراج کند. این یک روش قدرتمند برای تبدیل مشاهدات کیفی به داده های کمی است. - مورد استفاده در دنیای واقعی :
- تجزیه و تحلیل بازخورد مشتری : به طور خودکار "احساسات" (مثبت ، منفی ، خنثی) ، "محصول ذکر شده" و "دسته شماره" را از بررسی مشتری متن آزاد استخراج کنید.
- خلاصه گزارش حادثه : پارس طولانی مدت IT حادثه برای استخراج "سیستم تحت تأثیر" ، "میزان شدت" ، "علت ریشه" و "مراحل وضوح" به یک قالب ساختاری برای تجزیه و تحلیل آسان تر و شناسایی روند گزارش می دهد.
- استخراج تعهدات قراردادی : از اسناد حقوقی ، به طور خودکار تاریخ های کلیدی ، طرفین درگیر و بندهای خاص را بیرون بکشید.
- این امر نیاز به ورود به اطلاعات دستی یا اسکریپت های پیچیده و شکننده متن (مانند عبارات منظم) ، صرفه جویی در وقت زیاد و اطمینان از سازگاری را از بین می برد.
- مفهوم : این اصلی "جادو" است - با استفاده از هوش مصنوعی به طور مستقیم در انبار داده خود. ما از عملکرد
- آیین پاکسازی (عادی سازی خروجی Genai) :
- مفهوم : پس از اطلاعات AI ، اغلب در جزئیات اضافی پیچیده می شود (مانند نمرات اعتماد به نفس AI یا سایر ابرداده). این مرحله شامل تمیز کردن و تجزیه آن است که خروجی AI فقط داده های خالص و ساختاری مورد نیاز شما را بدست می آورد.
- مورد استفاده در دنیای واقعی : اطمینان از استخراج "گروه شماره" از گزارش حادثه همیشه یکی از مجموعه مقادیر از پیش تعریف شده است ، یا اینکه تاریخ ها همیشه در یک قالب ثابت هستند. این داده ها را برای تجزیه و تحلیل قابل اعتماد آماده می کند.
- کشف بینش استراتژیک :
- مفهوم : هنگامی که داده های خام و بدون ساختار شما به جداول تمیز و ساخت یافته تبدیل می شوند (به عنوان مثال ،
monsters
،adventurers
،battles
در CodeLab) ، می توانید نمایش داده شد و تجزیه و تحلیل های پیچیده ای را انجام دهید که قبلاً غیرممکن بودند. - مورد استفاده در دنیای واقعی : فراتر از شمارش ساده ، اکنون می توانید به سؤالاتی مانند: "میانگین زمان حل و فصل برای حوادث بحرانی IT مربوط به سیستم صورتحساب ما چیست؟" یا "کدام ویژگی های محصول اغلب در بازخورد مثبت مشتری از یک جمعیت شناسی خاص ذکر شده است؟" این اطلاعات عمیق و عملی تجاری را فراهم می کند.
- مفهوم : هنگامی که داده های خام و بدون ساختار شما به جداول تمیز و ساخت یافته تبدیل می شوند (به عنوان مثال ،
این کل فرایند یک الگوی "در بخش ، AI (عصاره ، بار ، تبدیل)" "در بخش ، یک رویکرد برش را امکان پذیر می کند که داده ها را در انبار داده شما ایمن نگه می دارد ، حرکت را به حداقل می رساند و AI را برای تحولات قدرتمند و انعطاف پذیر با استفاده از دستورات SQL ساده استفاده می کند.
Grimoire Scrib: in-datawarehouse ، تعبیه ، تعبیه و جستجو
در حالی که جداول ساختاری برای حقایق عالی است ، می توان معنای عمیق تر اسناد اصلی را از دست داد. "گریمویر کاتب" در مورد ایجاد یک پایگاه دانش معنایی است که معنی و زمینه اسناد شما را درک می کند ، نه فقط کلمات کلیدی. این امر برای ساخت جستجوی واقعاً هوشمندانه و سیستم های پاسخگو AI بسیار مهم است.
- آیین تقسیم (chunking) :
- مفهوم : اسناد طولانی مانند کتابهای متراکم است. برای یافتن پاسخ های خاص ، کل کتاب را نمی خوانید. شما پاراگراف ها یا جملات خاص را کم می کنید. "chunking" فرایند تجزیه اسناد طولانی (به عنوان مثال ، کتابچه راهنمای سیاست ، مستندات محصول ، مقالات تحقیق) در معابر کوچکتر ، متمرکز تر و دارای خود است. این باعث می شود جستجوی دقیق تر شود.
- مورد استفاده در دنیای واقعی : گرفتن یک کتابچه راهنمای کارمند 50 صفحه ای و تقسیم خودکار آن را در صدها بیانیه شخصی یا سؤالات متداول تقسیم می کند. این تضمین می کند که وقتی یک کارمند از یک سؤال سؤال می کند ، هوش مصنوعی فقط مربوط به بخش ها را بازیابی می کند ، نه کل سند. استراتژی های مختلف قطعه (با جمله ، بند ، بخش سند) بر اساس نوع سند برای بازیابی بهینه انتخاب می شوند.
- آیین تقطیر (جاسازی) :
- مفهوم : متن برای رایانه ها سخت است که معنا را درک کنند. "تعبیه" از یک مدل هوش مصنوعی (مانند جمینی) برای تبدیل هر تکه متن به یک "اثر انگشت معنایی" عددی منحصر به فرد (یک بردار) استفاده می کند. تکه هایی با معانی مشابه "اثر انگشت" دارند که از نظر عددی به یکدیگر نزدیک هستند ، حتی اگر از کلمات مختلفی استفاده کنند.
- مورد استفاده در دنیای واقعی : تبدیل تمام توضیحات محصول شرکت ، مواد بازاریابی و مشخصات فنی به این اثر انگشت معنایی. این امکان جستجوی واقعاً هوشمندانه بر اساس معنی را فراهم می کند.
- آیین الهی (جستجوی معنایی) :
- مفهوم : "جستجوی معنایی" به جای جستجوی کلمات کلیدی دقیق ، از این اثر انگشت های عددی برای یافتن تکه های متنی استفاده می کند که از نظر مفهومی شبیه به پرس و جو کاربر هستند. سوال کاربر همچنین به اثر انگشت تبدیل می شود و سیستم نزدیکترین تکه های سند مطابق را پیدا می کند.
- مورد استفاده در دنیای واقعی : یک کارمند می پرسد ، "چگونه می توانم برای هزینه های سفر بازپرداخت کنم؟" جستجوی کلمه کلیدی ممکن است اسناد را با استفاده از "گزارش هزینه" از دست بدهد. با این حال ، یک جستجوی معنایی بخش های مربوط به "سیاست سفر و هزینه" شرکت را پیدا می کند ، حتی اگر کلمات دقیق وجود نداشته باشد ، زیرا معنی مشابه است.
این کل فرآیند یک پایگاه دانش قدرتمند و قابل جستجو ایجاد می کند و امکان بازیابی اطلاعات هوشمند را فراهم می کند بدون اینکه داده های حساس داشته باشید تا هرگز از محیط امن BigQuery خود خارج شوید.
The Vector Scriptorium: ساخت فروشگاه بردار با ابر SQL برای استنتاج
در حالی که BigQuery برای پردازش و تجزیه و تحلیل داده های در مقیاس بزرگ بسیار عالی است ، برای عوامل زنده هوش مصنوعی که نیاز به پاسخ های بسیار سریع دارند ، ما اغلب این "خرد" آماده را به یک پایگاه داده تخصصی تر و عملیاتی منتقل می کنیم. "Vector Scriptorium" در مورد ساخت یک فروشگاه دانش با کارایی بالا و با استفاده از یک پایگاه داده رابطه ای است که برای AI تقویت شده است.
- جعل Spellbook Scholar (Cloud SQL برای PostgreSQL با
pgvector
) :- مفهوم : ما از یک پایگاه داده استاندارد و مدیریت شده مانند Cloud SQL برای PostgreSQL استفاده می کنیم و آن را به یک برنامه افزودنی ویژه به نام
pgvector
مجهز می کنیم. این به پایگاه داده اجازه می دهد تا هم بخش های متن اصلی ما و هم وکتور معنایی آنها را در کنار هم ذخیره کند. این یک "فروشگاه یک مرحله ای" برای داده های رابطه ای سنتی و داده های بردار دوستانه هوش مصنوعی است. - مورد استفاده در دنیای واقعی : ذخیره سازی سؤالات متداول محصول شرکت خود ، مقالات پشتیبانی فنی یا سیاست های منابع انسانی. این پایگاه داده هم متن پاسخ ها و هم اثر انگشت معنایی آنها را در اختیار دارد ، که برای جستجوی سریع توسط AI آماده است.
- مفهوم : ما از یک پایگاه داده استاندارد و مدیریت شده مانند Cloud SQL برای PostgreSQL استفاده می کنیم و آن را به یک برنامه افزودنی ویژه به نام
- جعل قطب نما معنایی (شاخص HNSW) :
- مفهوم : جستجوی میلیون ها اثر انگشت معنایی یکی یکی خیلی کند خواهد بود. "شاخص بردار" (مانند HNSW-دنیای کوچک قابل پیمایش سلسله مراتبی) یک ساختار داده پیشرفته است که این اثر انگشت را از قبل سازماندهی می کند و به طرز چشمگیری سریع جستجو می کند. این به سرعت نمایش داده ها را به مهمترین اطلاعات راهنمایی می کند.
- مورد استفاده در دنیای واقعی : برای یک سرویس مشتری با خدمات هوش مصنوعی Chatbot ، یک شاخص HNSW تضمین می کند که وقتی مشتری از یک سؤال سؤال می کند ، سیستم می تواند مناسب ترین پاسخ را از هزاران مقاله در میلی ثانیه پیدا کند و تجربه کاربری یکپارچه ای را ارائه دهد.
- مجرای معنا (خط لوله بردار Dataflow) :
- مفهوم : این خط لوله پردازش داده های خودکار و مقیاس پذیر شما برای به روزرسانی مداوم فروشگاه دانش شما است. با استفاده از Google DataFlow (یک سرویس بدون سرور ، مدیریت شده برای پردازش داده های بزرگ) و Apache Beam (یک مدل برنامه نویسی) ، شما یک خط مونتاژ از "کاتبان" می سازید که:
- اسناد جدید یا به روز شده را از ذخیره سازی ابری بخوانید.
- دسته ای از آنها را برای ارسال به مدل تعبیه Gemini برای اثر انگشت معنایی پردازش کنید.
- متن و بردار جدید آن را در پایگاه داده Cloud SQL خود بنویسید.
- مورد استفاده در دنیای واقعی : به طور خودکار تمام اسناد داخلی جدید (به عنوان مثال ، گزارش های سه ماهه ، سیاست های HR به روز شده ، مشخصات محصول جدید) را از یک درایو مشترک به پایگاه داده
pgvector
خود مصرف می کنید. این تضمین می کند که پایه دانش داخلی هوش مصنوعی شما همیشه به روز است ، بدون مداخله دستی ، و می تواند برای رسیدگی به میلیون ها سند به طور کارآمد مقیاس کند.
- مفهوم : این خط لوله پردازش داده های خودکار و مقیاس پذیر شما برای به روزرسانی مداوم فروشگاه دانش شما است. با استفاده از Google DataFlow (یک سرویس بدون سرور ، مدیریت شده برای پردازش داده های بزرگ) و Apache Beam (یک مدل برنامه نویسی) ، شما یک خط مونتاژ از "کاتبان" می سازید که:
این کل فرایند یک گردش کار قوی و خودکار برای غنی سازی مداوم و حفظ یک پایگاه دانش معنایی ، برای هر برنامه هوش مصنوعی داده محور حیاتی ایجاد می کند.
مهر و موم نهایی Rune: فعال کردن خرد با یک عامل RAG
پایگاه دانش بردار شما آماده است. "مهر و موم کردن Rune نهایی" در مورد فعال کردن یک مشاور هوشمند هوش مصنوعی است که قادر به مهار این دانش است. ما یک عامل نسل بازیابی (RAG) را بازیابی می کنیم ، یک ساختار قدرتمند هوش مصنوعی که جستجوی هوشمند را با توانایی هوش مصنوعی در تولید پاسخ های منسجم ترکیب می کند.
- RAG (نسل بازیابی شده توسط Augmenter) :
- مفهوم : RAG یک تکنیک مهم برای ساخت مدل های بزرگ زبان (LLMS) دقیق تر ، واقعی و قابل اعتماد تر است. به جای اینکه فقط به دانش از پیش آموزش LLM (که می تواند منسوخ شود یا مستعد ابتلا به "توهم" باشد) تکیه کند ، RAG ابتدا اطلاعات مربوطه را از پایگاه دانش معتبر شما بازیابی می کند و سپس از آن اطلاعات برای تقویت سریع LLM استفاده می کند ، و آن را برای تولید یک پاسخ دقیق ، متن-متن هدایت می کند.
- سه مرحله اصلی :
- بازیابی : سوال کاربر به یک بردار (اثر انگشت معنایی) تبدیل می شود ، که سپس برای جستجوی پایگاه داده
pgvector
شما برای مناسب ترین تکه های متن استفاده می شود. - تقویت : این قطعه های متنی برگشتی و واقعی به طور مستقیم در فوری قرار می گیرند که به LLM داده می شود و زمینه خاص و به روز آن را فراهم می کند.
- تولید : LLM این سریع را دریافت می کند و پاسخ نهایی را ایجاد می کند که در داده های معتبر شرکت شما پایه گذاری شده و خطر خطاها یا اطلاعات ساخته شده را کاهش می دهد.
- بازیابی : سوال کاربر به یک بردار (اثر انگشت معنایی) تبدیل می شود ، که سپس برای جستجوی پایگاه داده
- معاینه محقق ( ابزار
grimoire_lookup
) :- مفهوم : عامل RAG شما به "محقق" تبدیل می شود که دارای یک ابزار
grimoire_lookup
است. هنگامی که کاربر از یک سؤال پرسید ، عامل هوشمندانه تصمیم می گیرد از این ابزار استفاده کند. Thegrimoire_lookup
function then performs the "retrieve" step by converting the query to an embedding and searching thepgvector
database. The retrieved context is then passed to the main LLM for augmentation and generation. - Real-World Use Case : An AI-powered Internal Help Desk Chatbot .
- User Question : An employee asks, "What's the process for requesting extended leave for medical reasons?"
- RAG Agent Action :
- The
scholar_agent
identifies the need for information and uses itsgrimoire_lookup
tool. - The tool converts the question into an embedding and searches the
ancient_scrolls
table in thepgvector
database. - It retrieves the most relevant sections from the HR policy document on medical leave.
- These sections are then fed as context to the Gemini LLM.
- The Gemini LLM then generates a precise, step-by-step answer based only on the retrieved HR policy, reducing the chance of providing incorrect or outdated information.
- The
- This provides employees with instant, accurate answers based on official company documents, reducing the workload on HR and improving employee satisfaction.
- مفهوم : عامل RAG شما به "محقق" تبدیل می شود که دارای یک ابزار
This creates an AI agent that is not just conversational, but genuinely knowledgeable and reliable, serving as a trusted source of information within your enterprise.