نویسنده (ها): آندرژ رایل
در ابتدا منتشر شده در به سمت هوش مصنوعیبشر
این یک “گونی فنی” معمولی در یک استارتاپ است. این همچنین یک “رسانه رسانه ای” معمولی در یک استارتاپ است اما شما این نکته را می گیرید. هیچ چیز به عنوان یک مسئولیت وجود ندارد و اگر چیزی حتی از راه دور مربوط به فناوری باشد ، مهم نیست که چه چیزی در دامان شما قرار می گیرد. اینگونه است که من به یادگیری پایتون ، جنگو ، AWS ، سوئیفت ، iOS ، واکنش نشان دادم ، مولکول و احتمالاً یک دسته از چیزهای دیگر حتی اگر من به عنوان یک توسعه دهنده Android شروع کردم – من آن را یاد گرفتم زیرا به آن احتیاج داشتیم.
در کشف کردن ما 2 برنامه کاربردی موبایل بومی داریم که توسط Django Backend میزبانی شده در AWS پشتیبانی می شود ، و هر زمان که یک ویژگی جدید در نقشه راه ظاهر شود ، من با ساخت 3 سیستم عامل با ساختمان روبرو هستم. شخصی می گفت “شخص … آیا در مورد Multiplatform شنیده اید؟”

من انجام دادم اما وقتی شروع کردیم ، Multiplatform هنوز هم کاملاً ناخوشایند بود و ما در برنامه های خود کارهای جدی UI داریم ، بنابراین داشتن 2 راه حل بومی در واقع چیزی است که به این کمک زیادی کرده است. من مطمئن هستم که بسیاری از راه اندازی ها مانند آن وجود دارد … درست است؟
مشکل
بنابراین فرض کنیم شما در همان وضعیت هستید. شما باید یک ویژگی جدید را برای هر دو سیستم عامل تلفن همراه ارائه دهید و به تغییرات پس زمینه نیاز دارد. به طور معمول این به معنای خم کردن عضله عمومی و نوشتن کد در 3 زبان مختلف یا خم کردن کیف پول شما و استخدام 3 پیمانکار مختلف
اما راه بهتری وجود دارد.
راه حل
شما دانش دارید ، درست است؟ شما این درک را دارید که چگونه واقعاً این کار را از بین ببرید. شما ممکن است درک کاملی از این کار در تمام فناوری ها نداشته باشید اما باید ایده خوبی داشته باشید که چگونه حداقل در یکی از آنها این کار را انجام دهید. این زمانی است که مشخصات هوش مصنوعی مفید است.
مشخصات هوش مصنوعی چیست؟ TL: DR ؛ نسخه
برخی در واقع به شما خواهند گفت که این یک است جدید کد و من باید اعتراف کنم که من شروع به تکیه به این ایده می کنم. این اساساً توصیف فنی بسیار مفصلی در مورد آنچه می خواهید به دست آورید. این مراحل ، جزئیات فنی ، معاملات ، معیارهای پذیرش و غیره دارد. این مانند اسناد است اما از قبل نوشته شده است.
من با آن چه کار می کنم و چرا باید مراقبت کنم؟
خوشحالم که از شما پرسیدید 🤣 مشخصات (معمولاً با کمک AI BTW) را می گیرید و آن را به AI Agent تغذیه می کنید. نماینده مشخصات را می گیرد و (این مهمترین بخش است) آن را به حرف می زند. این ایده نیست. مانند یک سفر عجیب و غریب مانند این پسربشر تصمیم نمی گیرد که پروژه شما بد باشد و بهتر است آن را بازنویسی کنید. این فقط کار را انجام می دهد. این به عنوان یک Dev معمولی رفتار می کند که نوید را نشان می دهد و می خواهد شما را تحت تأثیر قرار دهد. اما لازم نیست ارشد یا کارمند باشد. شما قبلاً آن قسمت را انجام داده اید – شما یک مشخصات را بر اساس تجربه و درک خود از پروژه ایجاد کرده اید. تنها چیزی که باقی مانده است انجام کار دنیوی – کدگذاری آن است.
و بهترین قسمت؟ شما می توانید از این مشخصات برای ساختن همان موارد در سیستم عامل دیگر خود استفاده کنید
اثبات
بگذارید نمونه ای از زندگی واقعی را برای شما نشان دهم. همانطور که گفتم – ما هر دو را داریم اندرویدی وت منزوی نسخه های برنامه. ماه سپتامبر نزدیک شد بنابراین با دانستن کاربران ما ، می دانستیم که چیزی مربوط به پاییز کاملاً ضروری است. اینگونه است که “چالش Vibes Fall” به زندگی رسید.
ایده ساده است – ما کتابهایی را انتخاب می کنیم که با لرزش پاییز مطابقت داشته باشد و کاربران ما برای تکمیل این چالش باید 9 کتاب بخوانند. به اندازه کافی آسان اما برای این که این سرگرم کننده باشد ، ما مجبور شدیم مکانیک هایی مانند فصول محدود شده زمان ، گرافیک چالش های سفارشی را که به راحتی به اشتراک می گذارند معرفی کنیم ، راهی برای یافتن آن کتاب ها در برنامه (STH مانند شکارچی شکارچی) و یک دسته از پاداش های سرگرم کننده در طول مسیر. این جایی است که مشکل داشت. این برخی از طرح هایی است که ما با آنها آمده ایم.

دنج به نظر می رسد ، درست است؟
اما گیلاس در بالا وقتی درخواست ویژه ای دریافت کردم: “وقتی کاربر کتابی را باز می کند که در این چالش شرکت می کند ، برگها باید در حال سقوط باشند …”. به این ترتیب نتیجه نهایی به نظر می رسد

همه اینها واقعاً جادویی است (به خصوص اکنون که من از آن در برنامه استفاده می کنم) اما قبل از شروع کار می دانستم که این کار زیادی خواهد بود.
سریع
پس چگونه من در مورد آن مشخصات پیش رفتم؟ من کد Claude را شلیک کردم (نشان می دهم که چگونه خود را از دسترسی به فایل هایی که نمی خواهید در پایان آن را ببینید) محافظت کنید) در مخزن باطن و با این سریع شروع کردم. من از STH شبیه به هر مشخصه ای که می سازم استفاده می کنم:
Please look at @CLAUDE.md to understand what type of project we're working on
and look on all docs in @ai-specs.
Those are specs for previous features we were working on in this project
and guidelines on how to build such specs.
Today we're going to build a new spec. We are ONLY building the spec.
NO CODING PLEASE. NO RUNNING COMMANDS. Just simple spec creation.
Below you will find description of the feature we will be building spec for.
Please remember to include sections for progress tracking and learnings.Today we're building spec for VibeChallenge. It will be a very similar
concept to HashtagChallenge but it has to be a separate mechanism as the logic
is a little bit different - instead of unlocking spots based on hasthags
we will have a highlight with 9 spots and each spot will be unlocked
by a book that has a selected vibe. We will need to add vibes field to
the book most probably (right now we will only have FALL_VIBES but
there will be more in the future). Can you investigate how hashtag
challenges work in this app to propose a specification that will be similar
to this mechanism? VibeChallenges will also generate a UserHighlight.
Remember - NO CODING, we're building spec for now.
قسمت اول سریع دستور ذخیره شده من Claude است. من همیشه از آن برای شروع مشخصات جدید استفاده می کنم. بخش دوم توضیحات واقعی ویژگی است. پوشه AI-Specs فقط یک پوشه است که من تمام مشخصات خود را نگه می دارم. من از نماینده می خواهم که به آن توجه کند تا یاد بگیرد که مشخصات قبلی چگونه به نظر می رسد اما به من اعتماد کنید – اولین ساختمان سریع اولین مشخصات بسیار مشابه بود. شما متوجه بسیاری از یادآوری ها در مورد عدم برنامه نویسی نخواهید شد زیرا مأمورین دوست دارند پیش بروند و شما باید آنها را کنترل کنید. شما نمی خواهید که آنها دقیقاً مانند آنچه نمی خواهید کدگذاری را شروع کنید ، کدگذاری کنند. شما باید ابتدا برنامه ریزی کنید که چه چیزی را کد کنید.
توجه: بخشی در مورد ردیابی پیشرفت ، STH است که من از یکی از توسعه دهندگان من با آن کار کردم. اگر بخشی برای ردیابی پیشرفت دارید و در حین اجرای عامل از نشانه ها خارج می شود ، می توانید به راحتی به آنجا بروید که هنگام به روزرسانی پیشرفت بعد از هر مرحله ، از آنجا خارج شوید. فوق العاده ساده اما به توضیح آنچه انجام دادیم ، کاری که ما قصد داشتیم انجام دهیم و غیره کمک می کند.
بنابراین من این سریع را اجرا کردم ، به نماینده اجازه دادم که کد را جستجو کند و مشخصات را پیشنهاد کند. پس از انجام نسخه اول ، شما به سادگی به آنجا می روید ، به تنهایی (با تخصص و دانش خود در مورد پروژه) تحقیق کنید و درخواست تغییر کنید. تا زمانی که از مشخصات خوشحال نشوید. این است
من یک مرحله اضافی دارم که من نیز به عنوان یک دستور ذخیره شده Claude اضافه کردم. هنگامی که من با بررسی و رفع مشخصات این دستور کار کردم:
Please act as an experienced django developer and review spec
#$ARGUMENTS. What clarifying questions do you need in order to start
building this feature? DO NOT START any coding. Just ask clarifying questions.
When you get all answers you need DO NOT START coding, just let me know
that you are done and you can start building.
نماینده به طور معمول برخی از سؤالات (موارد بسیار خوب TBH) را در مورد موارد لبه و غیره ذکر می کند. پس از پاسخ دادن به آنها ، مشخصات را به روز می کند و وقتی آماده هستید فقط تایپ کنید
Ok. Let’s code it! Just remember about updating progress
و رونق! شما می توانید یک قهوه بگیرید و تماشا کنید که جادو اتفاق می افتد
استفاده مجدد
پس از انجام پس زمینه ، من Claude Code را در Android Repo باز کردم. من مشخصات را از پس زمینه چسباندم (کل مشخصات. فقط آن را در پوشه AI-SPEC در برنامه Android کپی کردم تا عامل بتواند آن را بخواند) و با این سریع شروع کرد
Please look at @CLAUDE.md to understand what type of project we're working
on and look on all docs in @ai-specs.
Those are specs for previous features we were working on in this project
and guidelines on how to build such specs.Today we're building spec for VibeChallenge functionality.
It is going to be very similar to HahstagChallenge but with elements
from BookWrapUp. Please look through
@ai-specs/backend-05-vibe-challenge-api.md backend to build support for this feature.
You will understand how the backend work. Today we're building spec
(remember, no coding) to support displaying of new type of user highglight
story, new highlight and new challenge settings and details.
VibeChallenge is very similar to hashtag challenge but there are no
topics - we will display a grid of 9 pumpkins and user will read books
to unlock those pumpkins (just like topics in hashtag challenge but
there are no topics so you don't have to implement reveal logic or display
different topics , just a pumpkin icon or a book cover).
Template has 9 spots (either pumpkin or cover) but it user has more
than 9 books you have to create additional page just like on
BookWrapUp (there you have up to 16 books and if user has more you
chunk them in lists of 16 books and provide more pages).
I will provide all kinds of images etc but you have to let me know
which ones you need.
As for the template, we will have a title (just like on monthly wrap up
but without the title background), background (loaded from url),
grid of 9 spots (pumpkin icon by default and book cover when spot is filled)
and a counter text in the bottom right corner saying
"PUMPKIN HARVESTED x/9" where x is the current progress.
When current progress reaches or surpasses 9 it should just show
"PUMPKIN HARVESTED x".
We should also implement reward system for VibeChallenge -
just like the reward system for hashtag challenge.
One difference here - there will be 9 rewards (1 reward for each book)
but the ssytem should change because of that.
Remember, NO CODING for now
همانطور که مشاهده می کنید ، مراحل زیادی در اینجا وجود دارد. اما این زیبایی نوشتن خاص است. به طور معمول عامل فقط خاموش می شود و با این نوع از Incructions ، این پروژه شما را با بازنویسی همه چیز از بین می برد. اما با مشخصات؟ ما فقط یک ساعت یا بیشتر در ساخت یک برنامه گام به گام بسیار دقیق در مورد نحوه اجرای همه این موارد صرف کردیم. نماینده حتی این را به عنوان 3 هفته کار برای یک تیم قوی تخمین زده است
و سپس آن را در حدود 45 دقیقه تحویل داد …
اشتباه کرد؟ جهنم آره آیا اشتباه می کنم؟ مطمئناً
اما من فقط بعد از هر مرحله کد و آزمایش را مرور می کردم و 2 روز بعد برنامه پس زمینه و اندرویدی داشتم …
سپس من دقیقاً همین کار را با iOS انجام دادم اما مجهز به 2 مشخصات قبلی بود. و می دانید چه چیزی مرا متحیر کرد؟ بعد از اینکه مشخصات iOS را به پایان رسانده ایم ، برنامه نویسی واقعی را به پایان رسانده ایم ، برنامه ای که فقط در اولین Go ساخته شده است 🤯 من هنوز مجبور شدم بعد از آزمایش ، تغییراتی ایجاد کنم و متوجه شدم که UI یک آشفتگی کامل است و موارد لبه ای وجود دارد که فقط در iOS متفاوت کار می کردند اما در کل من بسیار خوشحال شدم. iOS با این زمینه و تمام یادگیری ها از طرف Android ، کار ساده تری داشت. این زمینه برنامه iOS را درک کرد (زیرا Claude.md را برای این پروژه می خواند و آگاه بود که با سوئیفت کار می کند و نه کوتلین) اما به لطف همه یادگیری های موجود از پس زمینه و اندرویدی دقیقاً می دانست که چه کاری انجام دهد.
من بعد از یک آخر هفته و 3 شب با کل پروژه انجام شدم. قبل از نمایندگان و مشخصات احتمالاً حدود 2 هفته طول می کشد. این باید تفکر شما را شروع کند.
خلاصه
وقتی مأمورین برای اولین بار بیرون آمدند ، من تحت این تصور قرار گرفتم که آنها خیلی خطرناک هستند. آنها قدرت زیادی دارند و بدون نظارت مداوم می توانند پروژه شما را به هم بزنند. یا آسیب واقعی انجام دهید. اما ما هنوز هم می توانیم با قرار دادن GuardRails و به سادگی به آن اعتماد کنیم. درست مثل اینکه در تیم خود به Devs جدید اعتماد ندارید. شما همیشه بررسی می کنید که آنها چه کاری انجام داده اند زیرا آنها تجربه پروژه شما را ندارند. و اگر به آنها بگویید که کل فرآیند را بطور تکراری انجام دهند ، می توانید خروجی را در هر مرحله کنترل کرده و واکنش نشان دهید.
شخصی گفت که مشخصات فقط یک کد جدید است. در ابتدا ما دستورالعمل های پردازنده را در مونتاژ تایپ می کردیم. سپس C آمد و ما شروع به استفاده از کد ساختاری تر کردیم اما هنوز هم نشانگرهای کنترل شده و غیره. سپس برنامه نویسی عینی آمد و همه ما فراموش کردیم که نشانگرها چیست. سپس همه چارچوب ها آمدند و مردم فراموش کردند که چگونه مرتب سازی را بنویسند زیرا اکنون شما همیشه این جادویی را داشتید sorted()
عملکرد خود را در اختیار داشته باشید.
و اکنون اینجا هستیم. ما می توانیم دستورالعمل های انگلیسی ساده بنویسیم و مرتب سازی اتفاق می افتد. عادت می کند اما باید بگویم که وقتی می بینم صفحه نمایش من خاموش است از این لحظه قهوه لذت می برم و می توانم استراحت کنم و ببینم جادو اتفاق می افتد. جارویس در گوشه و کنار است.

Apendix: چگونه اطمینان حاصل کنیم که عامل AI به داده های حساس دسترسی ندارد؟
این چیزی است که من را از اولین اطلاعیه عوامل هوش مصنوعی ترساند و من واقعاً این دست اول را تجربه کردم. هنگامی که من با Augment بازی می کردم ، به طور خاص پرونده های حساس خود را به عنوان عدم وجود ذکر کردم و آن را به نسخه AI Gitignore اضافه کردم. من بسیار متعجب شدم که در طی یکی از نماینده جلسات اشکال زدایی ، فقط با خوشحالی STH را از این پرونده نقل کرد. وقتی با آن روبرو شدم ، البته فقط عذرخواهی کرد و قول داد که دیگر این کار را انجام ندهم. اما خسارت انجام شد ، درست است؟ داده ها قبلاً از طریق سرورهای تقویت شده پرواز می کردند.
بنابراین من تصمیم گرفتم که از عوامل استفاده نکنم تا زمانی که فهمیدم چگونه می توانم آن را متوقف کنم. و من این کار را کردم اگر شما کاربر مک یا لینوکس هستید ، این دستورالعمل است.
کاربران MAC
برای کاربران MAC STH به نام Sandbox وجود دارد. این کاهش یافته است اما من هنوز جایگزینی پیدا نکرده ام ، بنابراین اکنون باید انجام شود. این یک ویژگی داخلی است بنابراین مستقیماً از جعبه کار می کند
شما ایجاد می کنید sandbox-config.sb
پرونده در repo خود که به نظر می رسد
(version 1)
; Start permissive, then carve out hard denies.
; In SBPL the *last applicable rule wins*, so these denies override the default allow.
; (This is a common pattern documented by practitioners.)
(allow default) ; everything allowed unless explicitly denied; ---- Block your sensitive project paths ----
(deny file-read* file-write* file-map-executable
(subpath ".../.ebextensions") ; folder restriction (absolute path)
...
(literal ".../django/.ebignore") ; file restriction (absolute path)
...
)
و به سادگی کد Claude را با آن نمایه اجرا کنید
> sandbox-exec -f sandbox_config.sb claude
این است Claude به سادگی توسط سیستم برای دسترسی (یا حتی دیدن پرونده ها) محدود خواهد شد (یا حتی در مورد پرونده ها) پرونده ها/دایرکتوری هایی که شما مشخص می کنید. من چندین روش مختلف را برای متقاعد کردن آن برای دسترسی به پرونده ها امتحان کردم و هر بار که ما به سادگی توسط سیستم رد می شدیم.
کاربران لینوکس
ابزار بسیار مشابه ، اما در لینوکس به آن گفته می شود firejail
بشر به نصب نیاز دارد اما پس از انجام این کار ، شما به سادگی فایل پیکربندی را اضافه می کنید (کمی متفاوت است اما ایده یکسان است) و کلود را در متن آن شروع کنید. به همان روش کار کن هر زمان که کلود سعی کند به پرونده ها دسترسی پیدا کند ، به سادگی توسط سیستم رد می شود.
به یاد داشته باشید که از آن ابزارها استفاده کنید و باید خوب باشید
منتشر شده از طریق به سمت هوش مصنوعی
منبع: https://towardsai.net/p/machine-learning/spec-driven-development-in-a-startup