Spaces:
Sleeping
Cel
Ten skrypt Pythona jest przyk艂adem systemu zarz膮dzania zadaniami nap臋dzanego przez AI. System wykorzystuje API OpenAI i Pinecone do tworzenia zada艅, ustalania ich priorytet贸w i wykonywania. G艂贸wn膮 ide膮 tego systemu jest to, 偶e tworzy on zadania na podstawie wynik贸w poprzednich zada艅 i predefiniowanego celu. Nast臋pnie skrypt wykorzystuje mo偶liwo艣ci OpenAI w zakresie przetwarzania j臋zyka naturalnego (NLP) do tworzenia nowych zada艅 w oparciu o cel, a Pinecone do przechowywania i pobierania wynik贸w zada艅 w kontek艣cie. Jest to okrojona wersja oryginalnego Task-Driven Autonomous Agent (28 marca 2023).
W tym README zostan膮 om贸wione nast臋puj膮ce kwestie:
Jak dzia艂a skrypt
Skrypt zbudowany jest w formie niesko艅czonej p臋tli, kt贸ra wykonuje nast臋puj膮ce czynno艣ci:
- Pobiera pierwsze zadanie z listy zada艅.
- Wysy艂a zadanie do agenta wykonawczego, kt贸ry u偶ywa API OpenAI do wykonania zadania w oparciu o kontekst.
- Wzbogaca wynik i zapisuje go w Pinecone.
- Tworzy nowe zadania i dokonuje repriorytetyzacji listy zada艅 w oparciu o cel i wynik poprzedniego zadania.
Funkcja execution_agent() jest miejscem, w kt贸rym wykorzystywane jest API OpenAI. Przyjmuje ona dwa parametry: cel i zadanie. Nast臋pnie wysy艂a monit do API OpenAI, kt贸re zwraca wynik zadania. Zach臋ta sk艂ada si臋 z opisu zadania systemu AI, celu oraz samego zadania. Wynik jest nast臋pnie zwracany jako ci膮g znak贸w.
Funkcja task_creation_agent() jest miejscem, w kt贸rym API OpenAI jest wykorzystywane do tworzenia nowych zada艅 na podstawie celu i wyniku poprzedniego zadania. Funkcja przyjmuje cztery parametry: cel, wynik poprzedniego zadania, opis zadania oraz aktualn膮 list臋 zada艅. Nast臋pnie wysy艂a monit do API OpenAI, kt贸re zwraca list臋 nowych zada艅 jako ci膮gi znak贸w. Nast臋pnie funkcja zwraca nowe zadania jako list臋 s艂ownik贸w, gdzie ka偶dy s艂ownik zawiera nazw臋 zadania.
Funkcja prioritization_agent() jest miejscem, w kt贸rym API OpenAI jest wykorzystywane do zmiany priorytet贸w na li艣cie zada艅. Funkcja przyjmuje jeden parametr, ID bie偶膮cego zadania. Wysy艂a ona monit do API OpenAI, kt贸re zwraca list臋 zada艅 do ponownego ustalenia priorytet贸w w postaci listy numerycznej.
Na koniec skrypt wykorzystuje Pinecone do przechowywania i pobierania wynik贸w zada艅 w kontek艣cie. Skrypt tworzy indeks Pinecone na podstawie nazwy tabeli okre艣lonej w zmiennej YOUR_TABLE_NAME. Pinecone jest nast臋pnie u偶ywany do przechowywania wynik贸w zadania w indeksie, wraz z nazw膮 zadania i wszelkimi dodatkowymi metadanymi.
Jak korzysta膰 ze skryptu
Aby skorzysta膰 ze skryptu, nale偶y wykona膰 nast臋puj膮ce kroki:
- Sklonuj repozytorium poprzez
git clone https://github.com/yoheinakajima/babyagi.git
i przejd藕 (cd
) do sklonowanego repozytorium. - Zainstaluj wymagane pakiety:
pip install -r requirements.txt
. - Skopiuj plik .env.example do .env:
cp .env.example .env
. W tym miejscu ustawisz nast臋puj膮ce zmienne. - Ustaw swoje klucze API OpenAI i Pinecone w zmiennych OPENAI_API_KEY, OPENAPI_API_MODEL oraz PINECONE_API_KEY.
- Ustaw 艣rodowisko Pinecone w zmiennej PINECONE_ENVIRONMENT.
- Ustaw nazw臋 tabeli, w kt贸rej b臋d膮 przechowywane wyniki zada艅 w zmiennej TABLE_NAME.
- (Opcjonalnie) Ustaw cel systemu zarz膮dzania zadaniami w zmiennej OBJECTIVE.
- (Opcjonalnie) Ustaw pierwsze zadanie systemu w zmiennej INITIAL_TASK.
- Uruchom skrypt.
Wszystkie powy偶sze warto艣ci opcjonalne mog膮 by膰 r贸wnie偶 okre艣lone w linii polece艅.
Uruchomienie wewn膮trz kontenera docker
Jako warunek wst臋pny, b臋dziesz potrzebowa艂 mie膰 zainstalowany docker i docker-compose. Najprostsz膮 opcj膮 jest docker desktop: https://www.docker.com/products/docker-desktop/.
Aby uruchomi膰 system wewn膮trz kontenera docker, skonfiguruj sw贸j plik .env jak w krokach powy偶ej, a nast臋pnie uruchom poni偶sze polecenie:
docker-compose up
Obs艂ugiwane modele
Ten skrypt dzia艂a ze wszystkimi modelami OpenAI, a tak偶e z Llama poprzez Llama.cpp. Domy艣lnym modelem jest gpt-3.5-turbo. Aby u偶y膰 innego modelu, okre艣l go poprzez parametr OPENAI_API_MODEL lub u偶yj linii polece艅.
Llama
Pobierz najnowsz膮 wersj臋 Llama.cpp i post臋puj zgodnie z instrukcjami, aby j膮 zbudowa膰. Do modelu Llama b臋dziesz r贸wnie偶 potrzebowa艂 wag.
- W 偶adnym wypadku nie udost臋pniaj IPFS, link贸w magnet ani 偶adnych innych link贸w do pobierania modeli w tym repozytorium, w艂膮czaj膮c w to issues, dyskusje i pull requesty. Zostan膮 one natychmiast usuni臋te.
Nast臋pnie podlinkuj llama/main
z llama.cpp/main i models
do folderu, w kt贸rym masz wagi modelu Llama. Nast臋pnie uruchom skrypt z argumentem OPENAI_API_MODEL=llama
lub -l
.
Ostrze偶enie
Ten skrypt zosta艂 zaprojektowany do ci膮g艂ego dzia艂ania jako cz臋艣膰 systemu zarz膮dzania zadaniami. Uruchomienie tego skryptu w trybie ci膮g艂ym mo偶e powodowa膰 du偶e zu偶ycie API, wi臋c prosz臋 korzysta膰 z niego w spos贸b odpowiedzialny. Dodatkowo, skrypt wymaga poprawnego skonfigurowania API OpenAI i Pinecone, dlatego przed uruchomieniem skryptu upewnij si臋, 偶e skonfigurowa艂e艣 te API.
Tw贸j wk艂ad
Nie trzeba dodawa膰, 偶e BabyAGI jest wci膮偶 w powijakach i dlatego wci膮偶 okre艣lamy jego kierunek i kroki, kt贸re nale偶y podj膮膰, aby go osi膮gn膮膰. Obecnie, g艂贸wnym celem BabyAGI jest bycie prostym, tak aby by艂o 艂atwe do zrozumienia i rozwijania. Aby utrzyma膰 t臋 prostot臋, prosimy o przestrzeganie nast臋puj膮cych wytycznych przy wysy艂aniu PR-贸w:
- Skup si臋 na ma艂ych, modularnych modyfikacjach, a nie na rozleg艂ych przer贸bkach / refaktoryzacji.
- Przy wprowadzaniu nowych funkcji przedstaw szczeg贸艂owy opis konkretnego przypadku u偶ycia, do kt贸rego si臋 odnosisz.
Uwaga od @yoheinakajima (5. kwietnia 2023):
Wiem, 偶e jest coraz wi臋cej PR-贸w, doceniam wasz膮 cierpliwo艣膰 - jestem nowy na GitHubie/OpenSource i nie zaplanowa艂em odpowiednio mojego czasu w tym tygodniu. Re:kierunek, by艂em rozdarty w kwestii utrzymania prostoty vs rozszerzania - obecnie sk艂aniam si臋 ku utrzymaniu prostoty rdzenia Baby AGI i u偶yciu tego jako platformy do wspierania i promowania r贸偶nych podej艣膰 do rozszerzania tego (np. BabyAGIxLangchain jako jeden kierunek). Wierz臋, 偶e istniej膮 r贸偶ne opiniotw贸rcze podej艣cia, kt贸re s膮 warte zbadania i widz臋 warto艣膰 w posiadaniu centralnego miejsca do por贸wnania i dyskusji. Wi臋cej aktualizacji wkr贸tce.
Jestem nowy w GitHubie i open source, wi臋c prosz臋 o cierpliwo艣膰, gdy b臋d臋 si臋 uczy膰, jak prawid艂owo zarz膮dza膰 tym projektem. W dzie艅 prowadz臋 firm臋 VC, wi臋c generalnie b臋d臋 sprawdza艂 PR-y i problemy w nocy, po tym jak zejd膮 mi dzieci - co mo偶e nie by膰 codzienno艣ci膮. Jestem otwarty na pomys艂 wprowadzenia wsparcia, wkr贸tce b臋d臋 aktualizowa艂 t臋 sekcj臋 (oczekiwania, wizje, itp.). Rozmawiam z wieloma lud藕mi i ucz臋 si臋 - czekajcie na aktualizacje!
Inne projekty zainspirowane tym projektem
W kr贸tkim czasie od premiery, BabyAGI zainspirowa艂o wiele projekt贸w. Mo偶esz zobaczy膰 je wszystkie tutaj.
T艂o
BabyAGI to okrojona wersja oryginalnego Task-Driven Autonomous Agent (28 marca 2023) udost臋pnionego na Twitterze. Ta wersja sprowadza si臋 do 140 linii: 13 komentarzy, 22 puste miejsca i 105 kodu. Nazwa repo pojawi艂a si臋 w reakcji na oryginalnego autonomicznego agenta - autor nie ma zamiaru sugerowa膰, 偶e jest to AGI.
Wykonane z mi艂o艣ci膮 przez @yoheinakajima, kt贸ry tak si臋 sk艂ada jest te偶 VC (ch臋tnie zobaczy艂bym, co budujesz!).