فرض کن یک شرکت نرمافزاری ایرانی داری که سامانهٔ حسابداری میفروشد و حدود چهارصد صفحه مستندات فنی و راهنمای کاربری دارد. تصمیم میگیری یک دستیار پاسخگو بسازی که بهجای اپراتور، جواب مشتریها را از دل همین مستندات بیرون بکشد. نسخهٔ اول را در یک بعدازظهر میسازی: متنها را تکهتکه میکنی، بردارشان را میسازی، نزدیکترین تکهها را پیدا میکنی و میدهی به مدل. دستیار جواب میدهد، جوابها هم قشنگاند. تا روزی که یک مشتری میپرسد «چطور چند سناریوی آزمون بسازم؟» و دستیار با اطمینان کامل، جواب یک بخش دیگر را تحویل میدهد.
اینجا همان نقطهای است که بیشتر پروژههای بازیابیمحور گیر میکنند. مشکل معمولاً در مدل نیست؛ در این است که هیچکس نمیداند سامانه دقیقاً چقدر خوب کار میکند و کدام حلقه ضعیف است. راهنمای رسمی آنتروپیک همین مسیر را در سه سطح جلو میبرد و در هر سطح عدد نشان میدهد: از دقت نهایی هفتاد و یک درصد تا هشتاد و یک درصد، فقط با دو تغییر. این درس همان سه سطح است، به زبان قابل استفاده.
لیست مطالب
آنچه در این درس یاد میگیرید
- چهار حلقهٔ یک سامانهٔ بازیابیمحور و اینکه شکست معمولاً در کدامشان اتفاق میافتد
- ساخت نسخهٔ پایه: تکهکردن بر اساس عنوان، جستوجوی برداری و پرامپتِ وفادار به سند
- چهار معیار ارزیابی بازیابی (دقت، پوشش، افیک و میانگین رتبهٔ معکوس) و اینکه هرکدام چه چیزی را لو میدهند
- سطح دو: خلاصهنمایه؛ چرا خلاصهای که خودت میسازی بازیابی را بهتر میکند
- سطح سه: بازرتبهبندی با مدل و جهش میانگین رتبهٔ معکوس از ۰٫۷۴ به ۰٫۸۷
بازیابیمحور در یک جمله
سامانهٔ بازیابیمحور یعنی بهجای اینکه از مدل بخواهی از حافظهاش جواب بدهد، اول تکههای مرتبط سند خودت را پیدا کنی و بعد از او بخواهی فقط از روی همانها جواب بدهد. چهار حلقه دارد: تکهکردن سند، تبدیل تکهها به بردار، پیدا کردن نزدیکترین تکهها به پرسش، و ساختن جواب. اگر با مفهوم پایه آشنا نیستی، پیشنهاد میکنم اول درس حافظهٔ ایجنت و بازیابی را بخوانی؛ اینجا فرض میگیریم مفهوم را میدانی و میخواهی کیفیتش را بالا ببری.
نکتهٔ اول که اغلب دستکم گرفته میشود، شکلِ تکههاست. راهنمای آنتروپیک سند را بر اساس عنوانها تکه میکند، نه بر اساس تعداد کاراکتر. یعنی هر تکه یک واحد معنایی کامل است و عنوانِ خودش را هم بهعنوان بخشی از متنِ برداریشده همراه دارد. این تفاوت کوچک اثر بزرگی دارد: وقتی عنوان «ساخت سناریوی آزمون» داخل خودِ بردار باشد، پرسشی که همان واژهها را دارد راحتتر پیدایش میکند.
texts = [f"Heading: {item['chunk_heading']}\n\nChunk Text: {item['text']}"
for item in data]
# embedding in batches of 128
result = [client.embed(texts[i:i+128], model="voyage-2").embeddings
for i in range(0, len(texts), 128)]
embeddings = [e for batch in result for e in batch]
سطح یک: نسخهٔ پایه و پرامپتِ وفادار
در نسخهٔ پایه، بردارها را نرمال میکنی، شباهت را با ضرب داخلی حساب میکنی، سه تکهٔ بالا را برمیداری و به مدل میدهی. آستانهٔ شباهت هم میگذاری تا تکههای بیربط اصلاً وارد نشوند. اما مهمتر از کد، شکل پرامپت است. دو جملهٔ کلیدی در پرامپت رسمی وجود دارد که نباید حذفشان کنی: یکی اینکه به سند وفادار بمان و فقط وقتی از آن فاصله بگیر که صددرصد مطمئنی، و دیگری اینکه مقدمهچینی نکن.
تا اینجا مقدمه بود. بخش اصلی این درس — نمونهها، پرامپتهای آماده و تمرینها — برای اعضای ویژه باز میشود.
ساخت RAG درست و حسابی؛ از ۷۱ به ۸۱ درصد دقت با دو تغییر
برای دیدن این بخش باید عضو ویژه (VIP) باشی. با شمارهٔ موبایلت وارد شو تا ۱۴ روز دسترسی رایگان فعال شود.
🎁 ورود / ثبتنام و شروع ۱۴ روز رایگان