babyagi

# هدف این اسکریپت پایتون یک نمونه سیستم مدیریت وظایف توانمند هوش مصنوعی است. این سیستم با استفاده از API های OpenAI و Pinecone، وظایف را ایجاد، اولویت بندی و اجرا می کند. ایده اصلی پشت این سیستم این است که وظایف بر اساس نتیجه وظایف قبلی و هدف پیش تعریف شده ایجاد می شوند. سپس این اسکریپت از قابلیت های پردازش زبان طبیعی (NLP) OpenAI برای ایجاد وظایف جدید براساس هدف استفاده می کند، و از Pinecone برای ذخیره و بازیابی نتایج وظایف برای کانتکست استفاده می کند. این یک نسخه کوچکتر از [Task-Driven Autonomous Agent](https://twitter.com/yoheinakajima/status/1640934493489070080?s=20) (28 مارس 2023) است. # موضوعات - [نحوه کارایی](#how-it-works) - [نحوه استفاده](#how-to-use) - [مدل های پشتیبانی شده](#supported-models) - [ملاحظات در خصوص ران کردن اسکریپت](#continous-script-warning) # نحوه کارایی این کسریپت اینگونه کار میکند که در یک لوپ به صورت متدادم: 1. وظیفه اول رو از لیست وظایف میگیرد 2. وظیفه را به عامل اجرایی ارسال می‌کند که با استفاده از API OpenAI بر اساس متن، وظیفه را انجام می‌دهد. 3. نتیجه را تقویت کرده و در Pinecone ذخیره می‌کند.. 4. وظایف جدید را ایجاد کرده و با توجه به هدف و نتیجه وظیفه قبلی، اولویت و لیست وظایف را مجدداً تنظیم می‌کند.
![image](https://user-images.githubusercontent.com/6764957/232961802-e4c4c17d-b520-4db1-827c-a218a1647c73.png) تابع execution_agent() جایی است که از API OpenAI استفاده می‌شود. این تابع دو پارامتر دریافت می‌کند: هدف و وظیفه. سپس یک پرامپت (prompt) به API OpenAI ارسال می‌کند که نتیجه وظیفه را برمی‌گرداند. پرامپت شامل توصیفی از وظیفه سیستم هوش مصنوعی، هدف و وظیفه خود است. نتیجه به عنوان یک رشته (string) برگشت داده می‌شود.
تابع task_creation_agent() جایی است که از API OpenAI برای ایجاد وظایف جدید براساس هدف و نتیجه وظیفه قبلی استفاده می‌شود. این تابع چهار پارامتر دریافت می‌کند: هدف، نتیجه وظیفه قبلی، شرح وظیفه و لیست کنونی وظایف. سپس یک پرامپت (prompt) به API OpenAI ارسال می‌شود که لیستی از وظایف جدید را به صورت رشته‌ها برمی‌گرداند. سپس تابع وظایف جدید را به عنوان یک لیست دیکشنری برمی‌گرداند، که هر دیکشنری شامل نام وظیفه است.
تابع prioritization_agent() جایی است که از API OpenAI برای تنظیم مجدد اولویت لیست وظایف استفاده می‌شود. این تابع یک پارامتر، یعنی شناسه وظیفه جاری را دریافت می‌کند. سپس یک پرامپت (prompt) به API OpenAI ارسال می‌شود که لیست وظایف تنظیم شده مجدداً به صورت لیست شماره‌دار برمی‌گرداند. در نهایت، این اسکریپت از Pinecone برای ذخیره و بازیابی نتایج وظایف برای کانتکست استفاده می‌کند. اسکریپت یک فهرست Pinecone براساس نام جدول مشخص شده در متغیر YOUR_TABLE_NAME ایجاد می‌کند. Pinecone سپس برای ذخیره نتایج وظایف در این فهرست، به همراه نام وظیفه و هر فضای متادیتا اضافی استفاده می‌شود. # نحوه استفاده برای استفاده از این اسکریپت، باید مراحل زیر را دنبال کنید: 1. کلون کردن مخزن ``` git clone https://github.com/yoheinakajima/babyagi.git cd babyagi ``` 2. نصب پکیج های مورد نیاز ``` pip install -r requirements.txt ``` 3. کپی کردن فایل .env.example به .env ``` cp .env.example .env ``` 4. تنظیم کلیدهای API OpenAI و Pinecone متغیرهای زیر را در فایل .env ویرایش کنید: ``` OPENAI_API_KEY= OPENAPI_API_MODEL= PINECONE_API_KEY= ``` 5. تنظیم محیط Pinecone متغیر زیر را در فایل .env ویرایش کنید: ``` PINECONE_ENVIRONMENT= ``` 6. تنظیم نام جدول برای نتایج وظایف متغیر زیر را در فایل .env ویرایش کنید: ``` TABLE_NAME= ``` 7. (اختیاری): تنظیم نام BabyAGI متغیر زیر را در فایل .env ویرایش کنید: ``` BABY_NAME= ``` 8. (اختیاری): تنظیم هدف سیستم مدیریت وظایف متغیر زیر را در فایل .env ویرایش کنید: ``` OBJECTIVE= ``` 9. (اختیاری): تنظیم اولین وظیفه سیستم متغیر زیر را در فایل .env ویرایش کنید: ``` INITIAL_TASK= ``` 10. اجرای اسکریپت ``` python babyagi.py ``` # اجرای اسکریپت داخل یک کانتینر Docker در این روش، نیاز به نصب docker و docker-compose دارید. ساده‌ترین راه برای نصب Docker Desktop است https://www.docker.com/products/docker-desktop/ برای اجرای سیستم داخل یک کانتینر Docker، ابتدا فایل .env را مطابق با مراحل بالا تنظیم کنید، سپس دستور زیر را اجرا کنید: ``` docker-compose up ``` # مدل‌های پشتیبانی شده این اسکریپت با تمام مدل‌های OpenAI و همچنین Llama از طریق Llama.cpp کار می‌کند. مدل پیش‌فرض **gpt-3.5-turbo** است. برای استفاده از مدل دیگر، آن را از طریق OPENAI_API_MODEL مشخص کنید یا از خط فرمان استفاده کنید. ## Llama آخرین نسخه [Llama.cpp](https://github.com/ggerganov/llama.cpp) را دانلود کنید و دستورالعمل‌های نصب آن را دنبال کنید. همچنین نیاز به وزن مدل Llama دارید. - **هیچگاه لینک‌های IPFS، magnet و هرگونه لینک دانلود مدل را در هیچ قسمتی از این مخزن، از جمله issues، discussions و pull requests به اشتراک نگذارید. لینک‌ها به صورت فوری حذف می‌شوند.** پس از آن، پوشه `llama/main` را به `llama.cpp/main` و `models` را به پوشه‌ای که وزن مدل Llama در آن قرار دارد متصل کنید. سپس اسکریپت را با استفاده از `OPENAI_API_MODEL=llama` یا `-l` اجرا کنید. # هشدار این اسکریپت برای اجرای پیوسته به عنوان یک سیستم مدیریت وظایف طراحی شده است. اجرای پیوسته این اسکریپت می‌تواند منجر به استفاده بالای API شود، لطفاً با مسئولیت کاربردی از # مشارکت بدیهی است که BabyAGI هنوز در دوران نوزادی خود است و به همین دلیل هنوز داریم جهت آن و گام‌های لازم برای رسیدن به آن را تعیین می‌کنیم. هدف طراحی برای BabyAGI در حال حاضر این است که _ساده_ باشد تا به راحتی قابل فهم و گسترش باشد. برای حفظ این سادگی، لطفاً در هنگام ارسال PRs به دستورالعمل‌های زیر عمل کنید: - تمرکز بر تغییرات کوچک و ماژولار به جای بازسازی گسترده. - هنگام معرفی ویژگی‌های جدید، یک توضیح جزئیاتی از مورد کاربرد خاصی که شما در حال حاضر با آن مواجه هستید، ارائه دهید. یک نکته از طرف @yoheinakajima (۵ آوریل ۲۰۲۳): > من می‌دانم که تعداد PRها در حال افزایش است و از صبر شما قدردانی می‌کنم - زیرا من همزمان با تازه وارد بودن به GitHub/OpenSource و برنامه ریزی نکردن وقت خود در این هفته مواجه هستم. در مورد جهت، من در دو دسته نگه داشتن آن ساده یا گسترده تر بودم - در حال حاضر به سمت نگه داشتن یک Baby AGI هستم و از آن به عنوان یک پلتفرم برای پشتیبانی و ترویج رویکردهای مختلف گسترش استفاده می‌کنم (به عنوان مثال BabyAGIxLangchain به عنوان یک جهت). من معتقدم که رویکردهای نظری مختلفی وجود دارند که ارزش اکتشاف آن‌ها را دارند، و من ارزش دارم در دسترس داشتن یک مکان مرکزی برای مقایسه و بحث بین این رویکردها را می‌بینم. ب