Transcription
Итак, наш отчет готов. Отлично! Он разделен на несколько секций.
В части о полезности говорится, что Биткойн — это первая и наиболее признанная криптовалюта, и он является дефляционным активом. Так что с точки зрения полезности он довольно хорош.
Что касается принятия и признания, то у него много подписчиков в Твиттере, и он широко известен в криптоэкосистеме. Это еще один плюс.
Активность разработчиков также хороша, а что касается ценовых трендов, то, как вы знаете, он значительно вырос за последние месяцы и сейчас близок к 100 000 долларов. Технические индикаторы, такие как скользящие средние, которые мы рассчитали, также показывают восходящий тренд.
В целом, отчет говорит, что Биткойн — это сильная покупка, и у него рейтинг "А".
Еще раз, ребята, пожалуйста, не доверяйте этому отчету и не торгуйте на его основе.
Привет всем, с вами Нан. Добро пожаловать на мой канал! Сегодня мы хотим создать ИИ-агента, который будет анализировать криптовалюты. Мы будем использовать ChatGPT в качестве нашей языковой модели, Llama Index в качестве фреймворка для создания ИИ-агентов и Streamlit для создания очень простого интерфейса для нашего приложения.
Я пытаюсь показать вам разные фреймворки для работы с языковыми моделями и создания ваших ИИ-агентов. Если вы не смотрели мои предыдущие видео, я много говорил о DeepSpeed, LangChain, LangGraph и также Pytorch AI. Сегодня я представлю вам Llama Index.
Я бы посоветовал вам посмотреть этот плейлист, где я собрал все свои видео о том, как работать с языковыми моделями и как создавать ИИ-агентов. Полезно иметь все эти инструменты в вашем арсенале, чтобы вы могли сравнить их плюсы и минусы, а затем решить, какой из них использовать.
Перед тем как начать, обратите внимание, что торговля криптовалютами имеет очень высокий риск. Это даже рискованнее, чем акции. Я просто использую этот небольшой проект как повод показать вам, как работать с языковыми моделями, так что, пожалуйста, не используйте результаты этого проекта для реальной торговли криптовалютами.
Давайте взглянем на наш проект. Я перечислил все зависимости в нашем файле requirements.txt. Я собираюсь использовать CoinGecko в качестве нашего API, чтобы получить всю информацию, которую мы хотим о разных монетах. Это может быть история цен, информация о монете, активность разработчиков, и хорошая новость в том, что это не обязательно требует API-ключа.
Как я уже упоминал, я собираюсь использовать Llama Index для работы с языковыми моделями и создания нашего агента. Нам также понадобится Numpy для выполнения некоторых операций, и, конечно, нам нужен Streamlit для создания простого интерфейса для нашего приложения.
Чтобы настроить наш проект, вам нужно сделать две вещи. Давайте перейдем к командной строке. Во-первых, установите все зависимости с помощью pip: `pip install -r requirements.txt`, и затем запустите это, и все зависимости будут установлены.
Второе, вам нужно экспортировать ваш OpenAI API-ключ. Здесь, внутри этих кавычек, вам нужно вставить ваш OpenAI API-ключ, потому что мы собираемся использовать API ChatGPT, и Llama Index будет полагаться на эту переменную окружения, чтобы прочитать API-ключ. Я уже это сделал, мне не нужно делать это сейчас, но, пожалуйста, имейте в виду, что вам, вероятно, нужно будет сделать это в первый раз.
Вернемся к проекту. Я уже создал скелет проекта. Самое важное, что наш ИИ-агент нуждается в большом количестве информации о конкретной криптовалюте. Нам нужно определить некоторые инструменты, получить эту информацию и затем передать ее языковой модели. Затем мы спросим языковую модель: "На основе этой информации, как вы думаете, стоит ли покупать эту монету или продавать?" И мы получим наш ответ.
Очень важно выбрать именно ту информацию, которую вы хотите. Например, у вас есть торговая стратегия на рынке криптовалют, вы используете некоторые технические индикаторы, вы используете какие-то фундаментальные данные. Вам нужно передать их все языковой модели, если вы хотите получить действительно хороший ответ от нее.
Для нашего демонстрационного примера я решил предоставить ей набор информации о монете, которую я собираюсь предоставить здесь. Это будет описание: что это за монета, каково ее назначение, почему она была создана, рыночная капитализация в долларах США и также ранг рыночной капитализации, который очень важен. Например, люди говорят, что все, что ниже 100, немного подозрительно.
Также меня интересует, насколько велика сообщество вокруг монеты. Например, сколько у нее подписчиков в социальных сетях или какова активность разработчиков в ее репозитории на GitHub: сколько звезд, сколько форков, сколько комментариев за последние дни. Это интересные вещи, которые, я думаю, помогут мне решить, какая монета хороша, а какая нет.
Я решил использовать количество подписчиков в Твиттере и также количество недавних комментариев за последние месяцы. Эта информация доступна через CoinGecko. Я также предоставлю языковой модели историю цен, скажем, за последний год, чтобы она могла увидеть, какие были колебания цен и какова тенденция.
В конце я собираюсь использовать некоторые технические индикаторы. Вы можете использовать что угодно: RSI, скользящие средние, MFI. Я решил использовать скользящие средние. У меня есть класс, который содержит все скользящие средние на 20, 50 и 200 дней. Я собираюсь рассчитать все это и передать языковой модели. Это будет наш метод расчета скользящих средних.
С этим сказанным, давайте начнем кодировать. Я начну с получения информации о монете. Мне нужен API CoinGecko, чтобы получить информацию. Я назову его, скажем, CG, а идентификатор монеты — это ввод, который мы получаем от пользователя. Например, пользователь спросит: "Стоит ли мне инвестировать в Эфириум?" И Эфириум будет нашим идентификатором монеты, который мы передадим API.
Здесь я собираюсь получить монету по идентификатору и затем передать идентификатор монеты. Это будет моя информация о монете. Это вернет огромное количество информации, например, какой у этой монеты домашний сайт, информация о рыночной капитализации, информация о активности на Reddit, активности в Твиттере, активности на GitHub. Я просто отфильтрую данные, которые мне нужны, и покажу вам здесь.
Обратите внимание, что это просто тип dict, так что я могу просто вернуть словарь, содержащий все эти поля, и это будет разрешено как информация о монете. Давайте создадим информацию о монете и заполним информацию по одному. Давайте на самом деле воспользуемся предложением Co-Pilot и затем проверим их по одному, если они верны.
Для описания мы будем получать поле описания, и, конечно, оно может быть на разных языках. Я выберу английский. Для рыночной капитализации будет то же самое, они будут в разных валютах. Я выберу долларовый. Это будет ранг рыночной капитализации. Например, Биткойн — это первый, Эфириум — второй. Это будет тот же список, который вы увидите на coinmarketcap.com.
Затем есть поле данных сообщества, которое содержит всю информацию, такую как активность на Reddit, активность в Твиттере, подписчики в Твиттере. Я здесь просто интересуюсь подписчиками в Твиттере, так что я это прочитаю.
Также есть данные разработчиков, которые содержат все звезды репозитория, форки, все проблемы, вероятно, и также недавнюю активность комментариев. Я возьму только это, которое считает все комментарии за последний месяц. Это показывает, насколько активен репозиторий и как люди вносят свой вклад в проект. Я оставлю это, и с этим сказанным у нас будет информация о монете.
Получить историю цен не так сложно. Вам также нужен другой вызов API, который называется, я думаю, "coinMarketChartByID". Да, это он. Я собираюсь передать идентификатор монеты, и если вы посмотрите здесь, у него есть валюта и количество дней. Я скажу, что хочу USD в качестве валюты, а дни — 365, то есть я хочу данные за последний год. Я просто верну это, это будет список кортежей: первый — временная метка, а второй — цена.
Это список, который говорит, что в этот день цена была такой-то. Чтобы рассчитать скользящие средние, нам нужно скопировать это, потому что мне нужна та же история цен. Я назову это историей цен, и теперь нам нужно рассчитать скользящие средние на 20, 50 и 200.
Во-первых, как я уже говорил, эта история цен содержит как временные метки, так и цены. Я просто извлеку цены. Это будут первые индексы кортежей, так что ноль — это временная метка, а один — это цена. Я просто соберу все это и соберу в новый список.
Существует метод, называемый convolve в Numpy, который, по сути, выполняет операцию, которую мы хотим для расчета скользящих средних. Все, что мне нужно сделать, это вызвать `np.convolve`, передать цены и затем сделать `np.ones`, и здесь должно быть число, которое мы хотим. Например, для скользящей средней на 20 это будет 20, затем разделить на 20, и режим также должен быть "valid".
Если я собираюсь вернуть все три скользящие средние, которые я хочу рассчитать, я скажу вернуть, а затем этот класс технических индикаторов, который мы создали, и тогда это будет ma20, это будет это, а ma50 будет это с только 50, а ma200 будет это и это.
Это наши функции, которые необходимы для получения всей необходимой информации, чтобы передать ее нашему агенту. Нам нужно создать инструменты из этих функций. Для этого Llama Index предоставляет нам функцию tool. Функция tool позволяет нам легко преобразовать любую функцию, которую мы пишем, в инструмент.
Я собираюсь вызвать `from llama_index import tool`, и функция будет `fetch_coin_info`, и это наш инструмент информации о монете. Это первый инструмент, нам нужно три. Этот будет `fetch_price_history`, и это будет наш инструмент истории цен.
А это будет `fetch` или, извините, `calculate_moving_averages`, и мы назовем его, возможно, инструментом скользящих средних. Это три инструмента, которые нам нужны.
Давайте также определим нашу языковую модель. Я собираюсь использовать ChatGPT, так что я определю модель OpenAI. Я буду использовать GPT-4, потому что он поддерживает вызов функций. Вы можете использовать любую модель, которая вам нравится от OpenAI или любого другого провайдера, но единственное, что вам нужно убедиться, это то, что она поддерживает вызов функций, потому что использование инструментов возможно только с моделями, которые поддерживают вызов функций.
Я также установлю температуру на ноль, потому что не хочу сюрпризов. Я хочу запускать модель на разных монетах и всегда получать один и тот же результат, а температура это контролирует. Я не хочу никакой случайности.
В конце нам нужно создать нашего собственного агента, объединив нашу языковую модель и инструменты, а также, возможно, системный запрос, который говорит языковой модели, что она должна делать, каковы ее обязанности.
Давайте определим его. Я назову его агентом. Мы используем языковую модель OpenAI, так что это должен быть OpenAI агент из Llama Index. У нас есть набор инструментов, я вызову `from tools`, ему нужен список инструментов. Я дам `coin_info`, `price_history` и `moving_average`.
Я также разобью это, чтобы вы могли лучше видеть. Это наши инструменты, наша языковая модель — это та, которую мы определили выше, а системный запрос я уже определил, чтобы сэкономить время. Я скопирую его и вставлю сюда.
Что я спрашиваю у языковой модели, так это то, что вы — продвинутый ИИ-агент по анализу криптовалют. Вам нужно использовать фундаментальные данные, ценовые данные и технические индикаторы, чтобы сказать нам, что криптовалюта является сильной покупкой, сильной продажей или просто удержанием.
Мы также даем ей некоторые факторы, на которые следует обратить внимание: полезность монеты, насколько велика ее сообщество, конечно, активность разработчиков и также исторические ценовые тренды и технические индикаторы. Мы подчеркиваем это, и всякий раз, когда мы задаем вопросы языковой модели, и у нее нет всей этой информации, она будет использовать эти инструменты, чтобы получить эту информацию.
Я только что определил, что я имею в виду под рейтингом от A до E. A — это сильная покупка, B — покупка, C — удержание, D — продажа, а E — это сильная продажа. Если криптовалюта показывает действительно хорошие результаты, это сильная покупка. Если это просто мем-коин, что-то без особой полезности, это сильная продажа, а другие вещи могут быть где-то посередине.
Хорошая вещь здесь в том, что я также установил `verbose` на true, чтобы вы могли видеть некоторые логи и точно видеть, как агент пытается получить информацию, рассуждать и давать вам ответ.
На этом все для определения нашего агента. Теперь все, что мне нужно сделать, это определить интерфейс для него. Я собираюсь использовать Streamlit, как я уже говорил. Я скажу, возможно, `selectbox`, а затем спрошу пользователя выбрать криптовалюту, и я предоставлю ему список.
Я имею в виду Биткойн, Эфириум, да, возможно, также добавлю что-то вроде Догикоинов, чтобы у нас был разнообразный выбор криптовалют. Давайте разобьем это на переменную, назовем ее, скажем, `coin`, и если монета была выбрана, я собираюсь показать ответ агента в формате markdown, потому что обычно языковые модели дают вам ответ, который использует markdown для выделения заголовков и важных частей, так что это будет визуально лучше.
Затем я собираюсь спросить агента с помощью функции, называемой `chat`, что-то вроде: "Стоит ли мне инвестировать в" и затем монету. Мы спрашиваем агента, стоит ли нам инвестировать в определенную монету, и мы получим ответ, который покажем здесь в формате markdown.
Давайте перейдем к командной строке, чтобы запустить это и посмотреть, как это работает. Я скажу `streamlit run` и затем мой файл на Python. Давайте запустим это и перейдем в браузер.
Окей, вы можете видеть, что он работает для Биткойна и пытается сгенерировать отчет для нас.
Итак, наш отчет готов. Отлично! Он разделен на несколько секций.
В части о полезности говорится, что Биткойн — это первая и наиболее признанная криптовалюта, и он является дефляционным активом. Так что с точки зрения полезности он довольно хорош.
Что касается принятия и признания, то у него много подписчиков в Твиттере, и он широко известен в криптоэкосистеме. Это еще один плюс.
Активность разработчиков также хороша, а что касается ценовых трендов, то, как вы знаете, он значительно вырос за последние месяцы и сейчас близок к 100 000 долларов. Технические индикаторы, такие как скользящие средние, которые мы рассчитали, также показывают восходящий тренд.
В целом, отчет говорит, что Биткойн — это сильная покупка, и у него рейтинг "А".
Еще раз, ребята, пожалуйста, не доверяйте этому отчету и не торгуйте на его основе. Это так же хорошо, как информация, которую вы передаете языковой модели.
Если вы, например, сейчас передадите ей другой технический индикатор, который говорит, что Биткойн — это продажа, этот отчет скажет вам, что вы должны продать Биткойн.
Сказав это, давайте также взглянем на монету, которая не так хороша, например, Догикоин, и посмотрим, каков будет ответ. Давайте подождем отчет.
Да, отлично! Он говорит, что это шутливая валюта, и у нее есть связь с Илоной Маском, и у нее много подписчиков в Твиттере, так что принятие хорошее, по крайней мере. Но активность разработчиков, по сути, нулевая, потому что у нее не так много полезности. Ценовая тенденция также колеблется, так что в целом он не дает ей очень хорошую оценку. Он говорит, что если у вас есть, вы можете удерживать, но это не покупка.
Таким образом, вы можете видеть, что на основе предоставленной информации он действительно отвечает очень хорошо.
Другая вещь, которую я хочу показать вам, это, возможно, вернуться к командной строке, и я хочу показать вам, что, поскольку мы запустили это в режиме подробного вывода, вы можете видеть все эти логи и как ваш агент пытается получить информацию и рассуждать.
Здесь говорится, что пользователь спросил: "Стоит ли мне инвестировать в Догикоин?" Я вызываю какую-то функцию, как вы можете видеть, это `fetch_coin_info` была вызвана. Вы можете видеть все это описание, которое мы получили из этого API, показано здесь, а затем вы можете видеть этот огромный список со всеми данными истории цен: временные метки и цены, как я уже говорил.
Если я прокручу немного вниз, вы также увидите, что он также вызывает функцию скользящей средней после этого.
Да, на этом все. Я надеюсь, вам понравилось смотреть это видео. Пожалуйста, также поставьте лайк и подпишитесь на меня для получения большего количества контента, подобного этому. Увидимся!