paint-brush
Как создать смарт-контракт для прогнозирования ИИ с помощью GenLayer к@fakela
516 чтения
516 чтения

Как создать смарт-контракт для прогнозирования ИИ с помощью GenLayer

к Favour Kelvin11m2024/06/25
Read on Terminal Reader

Слишком долго; Читать

В этом уроке я познакомлю вас с процессом создания смарт-контракта для прогнозирования ИИ с использованием GenLayer. Мы расскажем: что такое смарт-контракты на базе искусственного интеллекта и концепцию интеллектуальных контрактов. Создание смарт-контракта, который может получить доступ к Интернету и использовать LLM для понимания и обработки инструкций на естественном языке. Использование GenLayer Simulator для тестирования, развертывания и выполнения контракта.
featured image - Как создать смарт-контракт для прогнозирования ИИ с помощью GenLayer
Favour Kelvin HackerNoon profile picture
0-item
1-item

Смарт-контракты на базе ИИ используют ИИ для доступа к веб-данным в реальном времени и интерпретации инструкций на естественном языке, улучшая традиционные смарт-контракты.

📌 Быстрые ссылки

👩‍💻 Что мы сделаем...

В этом уроке мы рассмотрим:

  • Что такое смарт-контракты на базе искусственного интеллекта и концепция интеллектуальных контрактов.
  • Шаги по созданию интеллектуального контракта прогнозирования
  • Использование симулятора GenLayer для тестирования, развертывания и выполнения контракта.


Примечание. В этом руководстве предполагаются и необходимы некоторые знания Python.

💡 Почему смарт-контракты на базе искусственного интеллекта?

Смарт-контракты, без сомнения, изменили правила игры. По своей природе они являются самоисполняющимися, а условия соглашения непосредственно записаны в коде. При выполнении заранее определенных условий они развертываются в блокчейне и обеспечивают безопасную и прозрачную обработку транзакций без необходимости участия третьей стороны.


Однако смарт-контракты следуют только конкретным инструкциям и не могут обрабатывать непредвиденные ситуации или сложные требования, не предусмотренные в их программе. Они не учатся и не адаптируются в зависимости от того, что происходит с течением времени. Кроме того, они не могут самостоятельно получить доступ к внешним данным. Им нужны сторонние сервисы, такие как Oracle, для передачи внешних данных в смарт-контракты, что позволяет им реагировать на реальные события.


🤔 Что такое интеллектуальный контракт?

GenLayer пытается решить эти ограничения смарт-контрактов, создавая интеллектуальный контракт , который сохраняет все возможности традиционных смарт-контрактов, но также может:


  • Используйте модели LLM, такие как GPT-4 и LLaMA, для понимания и обработки инструкций на естественном языке.

  • Получите доступ и используйте данные в реальном времени из Интернета без необходимости использования сторонних инструментов.



GenLayer использует метод консенсуса Optimistic Democracy для проверки транзакций и операций интеллектуальных контрактов. Ключевой частью этого метода консенсуса является принцип эквивалентности . Принцип эквивалентности — это особое правило или набор критериев, используемых в рамках оптимистической демократии для обеспечения точности и последовательности при работе с недетерминированными результатами, например, полученными с помощью LLM или веб-данных в реальном времени. По мере продвижения я расскажу больше о принципе эквивалентности и о том, как он работает при выполнении нашего интеллектуального контракта.


В этом блоге мы рассмотрим, как создать интеллектуальный контракт на прогнозирование футбола, который может получать данные из Интернета в реальном времени и обрабатывать их с помощью LLM для прогнозирования результатов матчей. Звучит интересно, правда?


Давайте сразу к делу :).

⚒️ Настройка симулятора GenLayer.

Прежде чем мы начнем создавать наш контракт, нам необходимо настроить среду, в которой мы будем его запускать. Симулятор GenLayer — это интерактивная песочница, которую мы можем использовать для создания и тестирования наших интеллектуальных контрактов. Давайте настроим это.

Предварительные условия

  • Убедитесь, что у вас установлена и работает последняя версия Docker.
  • Убедитесь, что Node.js и npm обновлены до последних версий, чтобы избежать проблем совместимости.

Установить

Перейдите к своему терминалу и скопируйте и вставьте следующее, чтобы установить GenLayer на свой компьютер:

 npm install -g genlayer


После установки запустите команду init, чтобы начать процесс настройки среды разработки:

 genlayer init


Когда вы запускаете эту команду, она инициализирует настройку с 5 валидаторами и предлагает вам выбрать предпочитаемого поставщика(ов) LLM.


Есть три варианта, которые вы можете выбрать:

  • OpenAI: Самый быстрый и надежный вариант запуска валидаторов)

  • Оллама: бесплатный вариант с открытым исходным кодом, он может работать медленнее, чем другие варианты.

  • Heurist: поставщик логических выводов для моделей искусственного интеллекта с открытым исходным кодом.


После того, как вы сделали свой выбор, он автоматически загружает и настраивает необходимые контейнеры Docker для среды симулятора GenLayer. После завершения настройки вы сможете получить доступ к GenLayer Simulator по адресу http://localhost:8080/ .


Теперь приступим к составлению нашего контракта!

⚽ Заключение контракта на прогнозирование футбола

В симуляторе имеется редактор кода для написания кода.


Интеллектуальные контракты написаны на Python, что делает его идеальным для обработки данных и строковых операций, необходимых для веб-взаимодействий и обработки естественного языка.


В рамках этого контракта на прогнозирование мы будем получать наши веб-данные с веб-сайта BBC Sport , а затем использовать LLM для обработки полученных данных, чтобы определить, какая команда является командой-победителем. Давайте посмотрим пошаговый процесс, как это сделать.


Если вы хотите пропустить это пошаговое руководство, проверьте код на GitHub и перейдите к разделу «Развертывание контракта» ниже.

1. Импорт необходимых библиотек и модулей.

Сначала мы импортируем библиотеки и модули, которые будем использовать для нашего интеллектуального контракта:


 import json from genvm.base.equivalence_principle import EquivalencePrinciple from genvm.base.icontract import IContract


  • json : этот модуль используется для анализа и обработки данных JSON, который является распространенным форматом обмена данными.
  • EquivalencePrinciple : это гарантирует, что результаты будут согласованными и точными для разных валидаторов. Он играет решающую роль в поддержании целостности недетерминированных выходных данных путем сравнения результатов нескольких валидаторов.
  • IContract : базовый класс для создания интеллектуальных контрактов на GenLayer, обеспечивающий основные свойства и поведение. Это гарантирует плавную интеграцию контракта в среду GenLayer (GenVM).

2. Определение класса интеллектуального контракта

Теперь нам нужно определить класс интеллектуального контракта, в данном случае это рынок прогнозов. Наш класс контракта Intelligent Contract наследует от IContract . Наследование от IContract необходимо для обеспечения правильного выполнения контракта в рамках GenLayer:


 class PredictionMarket(IContract):

3. Добавление параметров конструктора

Далее мы собираемся инициализировать состояние контракта и настроить все необходимые параметры. Этот шаг имеет решающее значение, поскольку он определяет начальные условия и свойства, которые наш контракт будет использовать на протяжении всего своего выполнения:

 class PredictionMarket(IContract): def __init__(self, game_date: str, team1: str, team2: str): self.has_resolved = False self.game_date = game_date self.resolution_url = 'https://www.bbc.com/sport/football/scores-fixtures/' + game_date self.team1 = team1 self.team2 = team2


В этом конструкторе мы определяем следующие параметры:

  • game_date : дата игры в формате «ГГГГ-ММ-ДД».
  • team1 : название первой команды, участвующей в матче.
  • team2 : название второй команды, участвующей в матче.
  • has_resolved : указывает, был ли уже решен исход игры, предотвращая избыточную обработку.
  • resolution_url : URL-адрес веб-сайта BBC Sport, с которого можно получить результаты игры.


Эти параметры определяют начальное состояние нашего контракта, делая его готовым к обработке результатов игры.

4. Решение исхода игры

Теперь давайте добавим метод для определения результата игры. Этот метод гарантирует, что мы обрабатываем результат игры только в том случае, если он еще не решен:

 async def resolve(self) -> None: if self.has_resolved: return "Already resolved" final_result = {}


Этот метод сначала проверяет, определен ли результат, путем проверки self.has_resolved . Это предотвращает избыточную обработку и обеспечивает эффективность. Если игра еще не решена, мы инициализируем final_result для сохранения результатов. Этот словарь будет содержать окончательные проверенные результаты игры.

5. Написание принципа эквивалентности

Принцип эквивалентности очень важен при написании интеллектуального контракта. Когда вы заходите в Интернет или звоните в LLM, могут возникнуть несоответствия. Принцип эквивалентности, как мы говорили ранее, представляет собой определенное правило или набор критериев, используемых для проверки окончательных результатов недетерминированных операций (веб-вызовов или вызовов LLM). Этот принцип использует несколько валидаторов, один из которых выступает в качестве лидера, предлагая результат, а другие подтверждают этот результат на основе определенных критериев или правил.


Поэтому в нашем контракте нам необходимо определить наш принцип эквивалентности, чтобы предотвратить несоответствия в наших результатах из Интернета или при процессах с помощью LLM:

 async with EquivalencePrinciple( result=final_result, principle="The score and the winner have to be exactly the same", comparative=True, ) as eq:


В нашем контракте на прогнозирование принцип эквивалентности гласит: «Счет и победитель должны быть абсолютно одинаковыми». Валидаторы будут использовать этот принцип для сравнения своих результатов с результатом лидера. Если результат соответствует принципу эквивалентности, то принимается окончательный результат. Флаг comparative=True указывает, что и лидер, и валидаторы выполняют идентичные задачи и сравнивают свои результаты, чтобы обеспечить согласованность.


В рамках этого принципа эквивалентности мы собираемся получить веб-данные об игре и обработать их с помощью LLM.

Получение веб-данных

Двигаясь дальше, в блоке «Принцип эквивалентности» мы собираемся получить содержимое веб-страницы из URL-адреса новостного сайта BBC Sport:

 web_data = await eq.get_webpage(self.resolution_url) print(web_data)


Как только данные будут получены, мы обработаем их с помощью LLM, чтобы проверить результат и определить команду-победителя по полученной веб-странице.

Обработка полученных данных с помощью LLM

Чтобы обработать информацию с полученной веб-страницы, мы собираемся создать подсказки для отправки в LLM, указав, что именно нужно делать. При взаимодействии с LLM важно создавать четкие и конкретные подсказки, которые помогут модели давать точные и релевантные ответы. Это приглашение, которое мы создали ниже:

 task = f"""In the following web page, find the winning team in a matchup between the following teams: Team 1: {self.team1} Team 2: {self.team2} Web page content: {web_data} End of web page data. If it says "Kick off [time]" between the names of the two teams, it means the game hasn't started yet. If you fail to extract the score, assume the game is not resolved yet. Respond with the following JSON format: {{ "score": str, // The score with numbers only, eg, "1:2", or "-" if the game is not resolved yet "winner": int, // The number of the winning team, 0 for draw, or -1 if the game is not yet finished }} """ result = await eq.call_llm(task) print(result)


Созданная нами подсказка предписывает LLM:

  • Определите команду-победителя и наберите очки на полученной веб-странице.

  • Мы также включили условие для LLM, проверяющее, не началась ли игра. Если между названиями двух команд появляется фраза «Начало [время]» — это означает, что игра еще не началась . LLM поручено распознать этот сценарий и понять, что никакого результата пока добиться невозможно.

  • Мы также включили еще одно условие, которое LLM должен обрабатывать, предполагая, что игра не завершена, если он не может получить счет. Это гарантирует правильную обработку незавершенных или текущих игр.

  • Наконец, мы просим LLM ответить в формате JSON.


Эта подробная подсказка учитывает различные сценарии и гарантирует, что LLM точно и последовательно извлечет и обработает необходимую информацию. После создания приглашения мы отправляем его в LLM с помощью метода call_llm .


5. Установка результата по принципу эквивалентности

Как только наш результат будет получен от LLM, он будет проверен и подтвержден в соответствии с принципом эквивалентности, определенным выше: «Оценка и победитель должны быть абсолютно одинаковыми». Если результат соответствует принципу эквивалентности, принимается окончательный результат.

 eq.set(result)


Примечание. Валидаторы не проверяют каждый шаг в блоке принципа эквивалентности, а сосредотачиваются только на конечном результате, чтобы уменьшить потребность в сложных проверках, сэкономить ресурсы и упростить операции контракта.

6. Анализ и оценка результата

Как только результат проверен и завершен, мы можем проанализировать его с помощью json.loads() . Это преобразует результат в формат, которым можно легко манипулировать и оценивать. Из результата анализа мы выделим победителя и наберем очки:

 result_json = json.loads(final_result['output']) if result_json['winner'] > -1: self.has_resolved = True self.winner = result_json['winner'] self.score = result_json['score'] return result_json


Если результат игры определен (победитель > -1), состояние контракта соответствующим образом обновляется. Это гарантирует точную запись конечного результата.


Теперь мы готовы развернуть наш контракт!


Давайте посмотрим наш контракт в действии!

🚀 Разверните свой интеллектуальный контракт на прогнозирование футбола

  1. В GenLayer Simulator нажмите кнопку воспроизведения, чтобы запустить контракт.

  2. В разделе параметров конструктора укажите дату игры и названия двух команд, которые вы хотите проверить. Например, вы можете установить для game_date значение «05.06.2024», для team1 — «Бразилия», а для team2 — «Ямайка».

  3. После того, как детали игры заданы, нажмите «Развернуть».



🎯 Выполнение транзакций

Для взаимодействия с развернутым контрактом перейдите в раздел «Выполнение транзакций» . Здесь вы можете вызвать метод разрешения для обработки результата игры.



Когда метод разрешения выполняется:

  • Узлы, запускаемые симулятором, извлекают данные из указанного URL-адреса, который в данном случае является URL-адресом BBC Sport, а затем LLM обрабатывает их.
  • Затем результат финальной игры проверяется в соответствии с принципом эквивалентности, определенным в коде.

Как работает принцип эквивалентности при исполнении интеллектуального контракта:

  • Расчет лидера: валидатор лидера получает игровые данные от BBC Sport и определяет окончательный счет и команду-победительницу. Например, Лидер рассчитывает счет как «1:2»: Ямайка (Команда 2) побеждает Бразилию (Команда 1).
  • Расчеты валидаторов: каждый валидатор независимо извлекает игровые данные с одного и того же URL-адреса и выполняет одну и ту же задачу для определения окончательного результата и победителя. Например, один валидатор может также рассчитать счет как «1:2» с победой Ямайки (Команда 2) над Бразилией (Команда 1).
  • Сравнение: Валидаторы сравнивают свои результаты с результатами Лидера. Согласно принципу эквивалентности, результат и победитель должны быть абсолютно одинаковыми. Если результат Лидера составляет «1:2» с Ямайкой (Команда 2) в качестве победителя, то результат каждого валидатора также должен быть «1:2» с Ямайкой (Команда 2) в качестве победителя.
  • Решение: Если результаты всех валидаторов совпадают с результатом Лидера, они признают результат Лидера действительным.


Этот процесс обеспечивает согласованность и точность во всей сети. Если валидаторы вернут «1:3» с Ямайкой (Команда 2) в качестве победителя, а лидер вернет «1:2» с Ямайкой (Команда 2), валидаторы отклонят результат.

Обработка различных сценариев:

  • Если игра завершена, ответ JSON будет включать окончательный счет и команду-победительницу.
  • Если игра началась, но не завершилась, ответ JSON будет указывать, что игра еще не решена.
  • Если игра не запустилась, ответ JSON укажет этот статус.


Просмотрите журналы, чтобы увидеть подробную информацию о взаимодействии контракта.

💭 Заключительные мысли: другие варианты использования смарт-контрактов с искусственным интеллектом

🙌 Поздравляем, если вы прочитали до конца!!!


Будущее выглядит светлым для смарт-контрактов на базе искусственного интеллекта. Помимо контракта на футбольные прогнозы, есть и другие идеи интеллектуальных контрактов, которые вы можете создать и протестировать с помощью GenLayer Simulator:

  • Репортер погоды
  • Токен ERC-20
  • Проверка цен на акции
  • Обзор новостей
  • Планировщик путешествий
  • Поиск книг
  • Логические головоломки
  • Волшебник монет


В документации GenLayer есть больше примеров идей о том, как достичь некоторых из вышеперечисленных.