پیام اولِ پنهان
لیلا Claude را در دو جا به کار میبرد: برنامهی Claude روی گوشیاش، و گفتوگوی پشتیبانیِ سایتِ یک فروشگاه که با همان مدل کار میکند. روی گوشی دربارهی هر چیزی حرف میزند. در سایتِ فروشگاه مؤدبانه از حرف زدن دربارهی هر چیزی جز سفارشها و مرجوعیها سر باز میزند و آخرِ هر پیام نامِ فروشگاه را میآورد. یک مدل، دو شخصیت. این تفاوت از کجا میآید؟
لیلا فروشگاه از نسخهی خاصی از مدل استفاده میکند؟ نسخهای که آموزش دیده فروشنده باشد؟
امید ممکن است، ولی معمولاً نه. بیا از روی چیزهایی که میدانی پیدایش کنیم. مدل بیحافظه است و فقط آنچه را در درخواست هست میبیند. پس اگر دو برنامه از یک مدل استفاده کنند و مدل رفتارِ متفاوتی داشته باشد، تفاوت باید کجا باشد؟
لیلا در درخواست. برنامهی فروشگاه باید چیزی بفرستد که برنامهی من نمیفرستد.
امید درست است. و آن چیزی است که تو هرگز ننوشتهای و هرگز نمیبینی.
لیلا پس دستورهایی. چیزی مثل «تو دستیارِ فروشگاهی، فقط دربارهی سفارشها حرف بزن».
امید همین است. برنامه پیش از پیام اولِ تو، پیامِ خودش را در بالای درخواست میگذارد: دستیار کیست، چه کارهایی مجاز است و چه کارهایی نه، چطور پاسخ دهد. این پیام در تکتکِ درخواستها هست، پیش از گفتوگو.
لیلا پس فروشگاه یک پیام اولِ پنهان نوشته و مدل فقط از آن پیروی میکند.
امید آن «فقط» بارِ زیادی را به دوش میکشد، ولی بله: مدل طوری آموزش دیده که آن پیام اول را خیلی جدی بگیرد.
پرامپت سیستمی
به آن پیام اولِ پنهان پرامپت سیستمی (system prompt) میگویند. برنامه آن را مینویسد و در هر درخواست در آغاز زمینه، پیش از گفتوگو، میگذارد. معمولاً اینها را میگوید:
- دستیار کیست: «تو دستیارِ مشتریانِ یک کفشفروشی هستی»؛
- قاعدههایش: در چه کمک کند، از چه سر باز بزند، چه چیزی را هرگز نگوید؛
- چطور پاسخ دهد: کوتاه یا مفصل، صمیمی یا رسمی، به چه زبانی؛
- دانستههای بهدردبخور: تاریخِ امروز، نامِ کاربر، ساعتهای کارِ فروشگاه؛
- ابزارهایش: چه کارهایی را میتواند درخواست کند و کی از آنها استفاده کند.
معمولاً پرامپت سیستمی را نمیبینید، ولی به همهی پاسخها شکل میدهد. برای همین یک مدلِ یکسان میتواند دستیارِ یک فروشگاه باشد، یا معلمِ زبان، یا سرویسِ محتاطی برای اطلاعاتِ پزشکی، یا عاملی برای کدنویسی: یک مدل، با پیام اولی متفاوت.
پرامپت سیستمیِ یک عاملِ کدنویسی
پرامپت سیستمیِ یک عامل بلند است، اغلب چند هزار توکن. پرامپتِ Claude Code، در کنارِ خیلی چیزهای دیگر، به مدل میگوید روی یک پروژه چطور کار کند (پیش از تغییر دادنِ فایلی آن را بخوان؛ تغییرها را کوچک نگه دار؛ نتیجه را بررسی کن)، چه ابزارهایی دارد و هر کدام را چطور به کار ببرد، و با فرمانهایی که ممکن است چیزی را پاک کنند یا جایی بفرستند محتاط باشد. بخش بزرگی از «رفتارِ» یک عامل از همینجا میآید.
چون پرامپت سیستمی در آغاز هر درخواست است، پیش از آنکه کلمهای بنویسید بخشی از پنجرهی زمینه را هم گرفته است. این را در درس قبل دیدید: دستورهای برنامه اولین تکهی ستون بودند.
مدل به حرفِ چه کسی گوش میدهد
مدلها طوری آموزش دیدهاند که به پرامپت سیستمی بیشتر از پیامهای کاربر وزن بدهند: اگر فروشگاه بگوید «فقط دربارهی سفارشها حرف بزن»، مشتریای که شعر بخواهد یک «نه»ی مؤدبانه میشنود. به همین شکل، آموزش دیدهاند که به پیامهای شما بیشتر از متنی وزن بدهند که فقط واردِ گفتوگو میشود، مثل محتوای صفحهای از وب که عامل خوانده است.
مراقب باشید
این ترتیب از آموزش میآید، نه از یک قفل. پیامی که زیرکانه نوشته شده، یا متنی که در یک سند پنهان شده، گاهی میتواند مدل را وادار کند پرامپت سیستمیاش را نادیده بگیرد. درس «دستورهای پنهان در داده» دربارهی همین خطر است و اینکه عاملها چطور در برابرش محافظت میشوند.
چیزی که خودتان اضافه میکنید
معمولاً نمیتوانید پرامپت سیستمیِ یک برنامه را عوض کنید، ولی بیشترِ برنامهها اجازه میدهند خودتان چیزی به آغاز زمینه اضافه کنید. برنامههای گفتوگو «دستورهای سفارشی» یا «ترجیحاتِ شخصی» دارند: چند خط که در هر درخواست میرود («معلم هستم؛ ساده و روشن پاسخ بده»). عاملها فایلهایی از دستورها دارند که در آغاز هر جلسه بارگذاری میشوند و بعدها در دوره درسی جداگانه دارند. ایده همان است: متنی که هر بار اول میآید و به هر چه بعد از آن میآید شکل میدهد.
امتحان کنید
یک سؤالِ عجیبِ یکسان را از دو دستیارِ هوش مصنوعیِ متفاوت بپرسید، مثلاً «یک شعرِ دوخطی دربارهی منگنه بنویس.» بعد، اگر برنامهی گفتوگویتان دستورهای سفارشی دارد، یک خط اضافه کنید، مثلاً «همیشه دقیقاً در سه جمله پاسخ بده»، و دوباره بپرسید. اثرِ متنی را میبینید که پیش از گفتوگو قرار گرفته است.
درست به کار بردن
- دستورهای سفارشی را برای چیزهایی به کار ببرید که همیشه درستاند. نقشتان، سبکی که دوست دارید، زبانی که میخواهید: یک بار بنویسیدشان، بهجای اینکه در هر گفتوگو تکرارشان کنید.
- کوتاه و دقیق نگهشان دارید. در هر درخواست هستند، پس هر خط هر بار توکن خرج میکند، و فهرستی بلند از خواستههای مبهم بهراحتی کموزن میشود.
- وقتی برنامهای کاری را انجام نمیدهد، اغلب علتش پرامپت سیستمی است، نه مدل. همان مدل در برنامهای دیگر، با پیام اولی دیگر، شاید کمکتان کند.
- پرامپت سیستمی را دیوارِ امنیتی ندانید. رفتار را بهشدت شکل میدهد، ولی میشود با حرف دورش زد. محدودیتهای واقعیِ کارهای یک عامل از برنامهی دورِ آن میآیند، همانطور که درسهای بعدی نشان میدهند.
واژههای این درس
- پرامپت سیستمی (system prompt) - دستورهایی که برنامه در آغاز هر درخواست، پیش از گفتوگو، میگذارد و تعیین میکند دستیار کیست، قاعدهها و سبکش چیست و چه ابزارهایی دارد
ایدهی اصلی
هر درخواست با پرامپتی سیستمی شروع میشود که معمولاً هرگز نمیبینیدش. برای همین یک مدلِ یکسان در برنامههای مختلف اینقدر متفاوت رفتار میکند، و این پرامپت پیش از آنکه چیزی بنویسید سهمی از پنجرهی زمینه را گرفته است.