دانش و زیرعاملها30 از 37
برای خوانندههایی که کمی پایتون بلدند.
در درس «مهارتها در عاملِ شما» mini فهرستِ مهارتهایش را با read_skill و skill_index میسازد. این دو روی فایلهای سالم کار میکنند، ولی با یک فایلِ خراب با خطا میایستند: SKILL.mdای که خطِ description: ندارد، پیش از آنکه mini حتی راه بیفتد یک KeyError میدهد. اینجا نسخهای مینویسید که هیچوقت نمیشکند و میگوید کدام فایل خراب است و چرا.
ورودی. چند فایلِ SKILL.md، پشتِ سرِ هم. هر کدام با خطی شروع میشود که === و مسیرِ فایل است، مثلاً === skills/report/SKILL.md، و بعد خودِ فایل میآید. کدی که ورودی را به جفتهای (path, text) تقسیم میکند از قبل نوشته شده است (read_files، در پایین). شما دو تابع مینویسید.
`parse_skill(text)` سربرگِ یک فایل را میخواند.
- سربرگ خطهایی است که میانِ یک خطِ --- در آغاز و خطِ --- بعدی قرار دارند. خطهای خالیِ پیش از اولین --- حساب نمیشوند. فایلی که با --- شروع نشود، یا سربرگش هیچوقت بسته نشود، خطای no header دارد.
- هر خطِ سربرگ key: value است. آن را فقط در اولین دونقطه ببُرید، تا توضیحی مثلِ Use when: the user says "ship it" دونقطهاش را نگه دارد، و فاصلههای دو طرفِ هر بخش را حذف کنید. خطهایی را که دونقطه ندارند، و کلیدهایی را که لازم ندارید (مثل tools:)، نادیده بگیرید.
- (name, description, None) برگردانید، یا (None, None, error) با no name یا no description، که به همین ترتیب بررسی میشوند. مقدارِ خالی (name: که بعدش چیزی نیامده) نبودن حساب میشود.
- فقط سربرگ مهم است: یک خطِ --- پایینتر، در بدنه، فقط بخشی از بدنه است.
`build_index(files)` خطهایی را که باید چاپ شوند برمیگرداند.
- اگر دستکم یک مهارتِ سالم هست: خطِ Skills you can load with load_skill when a task matches:، و بعد برای هر مهارتِ سالم - name: description، به ترتیبِ نام. اگر هیچکدام نیست: فقط خطِ no skills.
- بعد، به ترتیبِ ورودی، برای هر فایلِ خراب error <path>: <error>. اگر یک مهارتِ سالم همان نامِ یک مهارتِ سالمِ قبلی را داشت، اولی را نگه دارید و دومی را با another skill is already called <name> گزارش کنید.
یک مثال. برای فایلِ skills/report/SKILL.md با name: report و description: Writes the monthly report.، و فایلِ skills/charts/SKILL.md که سربرگش فقط name: charts دارد، خروجی سه خط است:
Skills you can load with load_skill when a task matches:
- report: Writes the monthly report.
error skills/charts/SKILL.md: no description
یک راهنمایی. بعد از حذفِ خطهای خالیِ آغاز (text.strip("\n"))، متن را به خطها تقسیم کنید. بررسی کنید خطِ اول --- باشد، بعد در خطهای بعدی دنبالِ خطِ --- بعدی بگردید: سربرگ هر چیزی است که میانِ این دو است.
چرا مهم است. تا وقتی مدل مهارتی را بارگذاری نکرده، این فهرست همهی چیزی است که از مهارتهای شما میبیند. مهارتی که توضیحش جا افتاده هیچوقت در فهرست نمیآید، پس هیچوقت به کار نمیرود، و کسی هم متوجه نمیشود. بارگذارکنندهای که فایلهای خراب را بلند اعلام کند، این شکستِ بیصدا را به خطی تبدیل میکند که میتوانید درستش کنید.
ورود برای امتحان این تمرین.