babyagi
# Задача
Этот Python-скрипт является примером системы управления задачами на основе искусственного интеллекта. Система использует API OpenAI и Pinecone для создания, определения приоритетов и выполнения задач. Основная идея этой системы заключается в том, что она создает задачи на основе результатов предыдущих задач и заранее определенной цели. Затем скрипт использует возможности обработки естественного языка (NLP) OpenAI для создания новых задач на основе цели, а Pinecone - для хранения и извлечения результатов задач в контексте. Это урезанная версия оригинального [Task-Driven Autonomous Agent](https://twitter.com/yoheinakajima/status/1640934493489070080?s=20) (Mar 28, 2023).
В этом README будет описано следующее:
* [Как работает скрипт](#как-это-работает)
* [Как использовать скрипт](#как-этим-пользоваться)
* [Поддерживаемые Модели](#поддерживаемые-модели)
* [Предупреждение о непрерывном запуске скрипта](#предупреждение-о-запуске-скрипта)
# Как это работает
Скрипт работает путем запуска бесконечного цикла, который выполняет следующие действия:
1. Вытаскивает первую задачу из списка задач.
2. Отправляет задачу агенту выполнения, который использует API OpenAI для выполнения задачи на основе контекста.
3. Обогащает результат и сохраняет его в Pinecone.
4. Создает новые задачи и изменяет приоритеты в списке задач на основе цели и результата предыдущей задачи.
Функция execution_agent() является тем местом, где используется API OpenAI. Она принимает два параметра: цель и задачу. Затем она посылает подсказку API OpenAI, который возвращает результат выполнения задачи. Подсказка состоит из описания задачи системы искусственного интеллекта, цели и самой задачи. Результат возвращается в виде строки.
Функция task_creation_agent() - это функция, в которой API OpenAI используется для создания новых задач на основе цели и результата предыдущей задачи. Функция принимает четыре параметра: цель, результат предыдущей задачи, описание задачи и текущий список задач. Затем она отправляет запрос в API OpenAI, который возвращает список новых задач в виде строк. Затем функция возвращает новые задачи в виде списка словарей, где каждый словарь содержит название задачи.
Функция prioritization_agent() - это функция, в которой API OpenAI используется для изменения приоритетов списка задач. Функция принимает один параметр - идентификатор текущей задачи. Она отправляет запрос в API OpenAI, который возвращает список задач с измененными приоритетами в виде нумерованного списка.
Наконец, скрипт использует Pinecone для хранения и извлечения результатов задач в контексте. Скрипт создает индекс Pinecone на основе имени таблицы, указанной в переменной YOUR_TABLE_NAME. Затем Pinecone используется для хранения результатов задачи в индексе, вместе с именем задачи и любыми дополнительными метаданными.
# Как этим пользоваться
Чтобы воспользоваться скриптом, необходимо выполнить следующие шаги:
1. Клонируйте репозиторий с помощью `git clone https://github.com/yoheinakajima/babyagi.git` и `cd` в клонированный репозиторий.
2. Установите необходимые пакеты: `pip install -r requirements.txt`.
3. Скопируйте файл .env.example в .env: `cp .env.example .env`. Здесь вы установите следующие переменные.
4. Задайте ключи API OpenAI и Pinecone в переменных OPENAI_API_KEY, OPENAPI_API_MODEL и PINECONE_API_KEY.
5. Установите окружение Pinecone в переменной PINECONE_ENVIRONMENT.
6. Задайте имя таблицы, в которой будут храниться результаты задачи, в переменной TABLE_NAME.
7. (Необязательно) Задайте цель системы управления задачами в переменной OBJECTIVE.
8. (Необязательно) Задайте первую задачу системы в переменной INITIAL_TASK.
9. Запустите скрипт.
Все необязательные значения, указанные выше, могут быть также заданы в командной строке.
# Поддерживаемые Модели
Этот скрипт работает со всеми моделями OpenAI, а также с Llama через Llama.cpp. Модель по умолчанию - **gpt-3.5-turbo**. Чтобы использовать другую модель, укажите ее через OPENAI_API_MODEL или используйте командную строку.
## Llama
Скачайте последнюю версию [Llama.cpp](https://github.com/ggerganov/llama.cpp) и следуйте инструкциям для ее создания. Вам также понадобятся модельные грузы (model weights) Llama.
- **Ни при каких обстоятельствах не делитесь IPFS, magnet-ссылками или любыми другими ссылками на загрузку моделей в этом репозитории, в том числе в вопросах, обсуждениях или запросах. Они будут немедленно удалены.**
После этого соедините `llama/main` с llama.cpp/main и `models` с папкой, где у вас лежат веса моделей Llama. Затем запустите скрипт с аргументом `OPENAI_API_MODEL=llama` или `-l`.
# Предупреждение
Этот скрипт предназначен для непрерывного выполнения в рамках системы управления задачами. Постоянный запуск этого скрипта может привести к высокому использованию API поэтому, пожалуйста, используйте его ответственно. Кроме того, скрипт требует правильной настройки API OpenAI и Pinecone, поэтому убедитесь, что вы настроили API перед запуском скрипта.
# Вклад в развитие проекта
BabyAGI все еще находится в зачаточном состоянии, поэтому мы определяем его направление и шаги развития. В настоящее время основная цель дизайна BabyAGI - быть *простым*, чтобы его было легко понять и развивать. Чтобы сохранить эту простоту, мы просим вас придерживаться следующих правил при подаче PR:
* Сосредоточьтесь на небольших модульных модификациях, а не на обширном рефакторинге.
* При введении новых функций предоставляйте подробное описание конкретного случая использования, который вы рассматриваете.
Заметка от @yoheinakajima (Apr 5th, 2023):
> Я знаю, что количество PR растет, ценю ваше терпение - поскольку я новичок на GitHub/OpenSource и не планировал свое время на этой неделе. Что касается направления, я размышлял о сохранении простоты и расширении - сейчас я склоняюсь к сохранению простоты ядра Baby AGI и использованию его в качестве платформы для поддержки и продвижения различных подходов к его расширению (например, BabyAGIxLangchain как одно из направлений). Я считаю, что существуют различные подходы, которые стоит изучить, и я вижу ценность в наличии центрального места для сравнения и обсуждения. Больше обновлений будет в ближайшее время.
Я новичок в GitHub и Open Source поэтому, пожалуйста, будьте терпеливы, пока я учусь правильно управлять этим проектом. Днем я работаю в венчурной фирме, так что обычно я буду проверять PR и проблемы по ночам, после того как уложу своих детей - что может происходить не каждый вечер. Открыт для идеи привлечения поддержки, скоро обновлю этот раздел (ожидания, видение проекта и т.д.). Общаюсь со многими людьми и учусь - следите за обновлениями!
# Предистория
BabyAGI - это сокращенная версия оригинального [Task-Driven Autonomous Agent](https://twitter.com/yoheinakajima/status/1640934493489070080?s=20) (Mar 28, 2023), опубликованного в Twitter. Эта версия сократилась до 140 строк: 13 комментариев, 22 пробела и 105 кода. Название репозитория появилось в реакции на оригинальный автономный агент - автор не хочет сказать, что это AGI.
Сделано с любовью [@yoheinakajima](https://twitter.com/yoheinakajima), который, как оказалось, является VC (хотел бы посмотреть, что вы создаете!).