paint-brush
Cách xây dựng hợp đồng thông minh dự đoán AI bằng GenLayer từ tác giả@fakela
516 lượt đọc
516 lượt đọc

Cách xây dựng hợp đồng thông minh dự đoán AI bằng GenLayer

từ tác giả Favour Kelvin11m2024/06/25
Read on Terminal Reader

dài quá đọc không nổi

Trong hướng dẫn này, tôi sẽ hướng dẫn bạn quy trình xây dựng hợp đồng thông minh dự đoán AI bằng GenLayer. Chúng ta sẽ đề cập đến: Hợp đồng thông minh được hỗ trợ bởi AI là gì và khái niệm về Hợp đồng thông minh. Xây dựng hợp đồng thông minh có thể truy cập web và sử dụng LLM để hiểu và xử lý các hướng dẫn bằng ngôn ngữ tự nhiên. Sử dụng Trình mô phỏng GenLayer để kiểm tra, triển khai và thực hiện hợp đồng.
featured image - Cách xây dựng hợp đồng thông minh dự đoán AI bằng GenLayer
Favour Kelvin HackerNoon profile picture
0-item
1-item

Hợp đồng thông minh được hỗ trợ bởi AI sử dụng AI để truy cập dữ liệu web theo thời gian thực và giải thích các hướng dẫn bằng ngôn ngữ tự nhiên, nâng cao hợp đồng thông minh truyền thống.

🎯 Liên kết nhanh

👩‍💻 Chúng ta sẽ làm gì...

Trong hướng dẫn này, chúng tôi sẽ đề cập đến:

  • Hợp đồng thông minh được hỗ trợ bởi AI là gì và khái niệm về Hợp đồng thông minh.
  • Các bước xây dựng hợp đồng thông minh dự đoán
  • Sử dụng trình mô phỏng GenLayer để kiểm tra, triển khai và thực hiện hợp đồng.


Lưu ý: Một số kiến thức về Python được giả định và cần thiết trong hướng dẫn này.

💡 Tại sao nên sử dụng hợp đồng thông minh được hỗ trợ bởi AI?

Không còn nghi ngờ gì nữa, hợp đồng thông minh đã thay đổi cuộc chơi. Về bản chất, chúng tự thực hiện, với các điều khoản của thỏa thuận được viết trực tiếp thành mã. Khi đáp ứng các điều kiện xác định trước, họ sẽ triển khai trên blockchain và đảm bảo rằng các giao dịch được xử lý an toàn, minh bạch mà không cần bên thứ ba.


Tuy nhiên, hợp đồng thông minh chỉ tuân theo các hướng dẫn cụ thể và không thể xử lý các tình huống bất ngờ hoặc các yêu cầu phức tạp không có trong lập trình của chúng. Họ không học hỏi hoặc thích nghi dựa trên những gì xảy ra theo thời gian. Ngoài ra, họ không thể truy cập dữ liệu bên ngoài một cách độc lập. Họ cần các dịch vụ của bên thứ ba như Oracles để cung cấp dữ liệu bên ngoài cho các hợp đồng thông minh, cho phép họ phản ứng với các sự kiện trong thế giới thực.


🤔 Hợp đồng thông minh là gì?

Hạn chế này của hợp đồng thông minh là điều GenLayer đang cố gắng giải quyết bằng cách tạo Hợp đồng thông minh giữ lại tất cả các khả năng của hợp đồng thông minh truyền thống nhưng cũng có thể:


  • Sử dụng các mô hình LLM như GPT-4 và LLaMA để hiểu và xử lý các hướng dẫn bằng ngôn ngữ tự nhiên.

  • Truy cập và sử dụng dữ liệu thời gian thực từ internet mà không cần đến công cụ của bên thứ ba.



GenLayer sử dụng phương pháp đồng thuận Optimistic Democracy để xác thực các giao dịch và hoạt động của Hợp đồng thông minh. Một phần quan trọng của phương pháp đồng thuận này là Nguyên tắc tương đương . Nguyên tắc Tương đương là một quy tắc hoặc bộ tiêu chí cụ thể được sử dụng trong khuôn khổ Dân chủ Lạc quan để đảm bảo tính chính xác và nhất quán khi xử lý các kết quả đầu ra không xác định, chẳng hạn như các kết quả do LLM tạo ra hoặc dữ liệu web thời gian thực. Khi chúng ta tiếp tục, tôi sẽ giải thích thêm về Nguyên tắc tương đương và cách thức hoạt động của nó khi chúng ta thực hiện hợp đồng thông minh của mình.


Đối với blog này, chúng ta sẽ xem xét cách xây dựng hợp đồng thông minh dự đoán bóng đá có thể lấy dữ liệu thời gian thực từ web và xử lý dữ liệu đó bằng LLM để dự đoán kết quả trận đấu. Nghe có vẻ thú vị phải không?


Chúng ta hãy đi thẳng vào nó :).

⚒️ Thiết lập Trình mô phỏng GenLayer

Trước khi bắt đầu xây dựng hợp đồng của mình, chúng ta cần thiết lập môi trường nơi chúng ta sẽ chạy nó. Trình mô phỏng của GenLayer là một hộp cát tương tác mà chúng tôi có thể sử dụng để xây dựng và thử nghiệm Hợp đồng thông minh của mình. Hãy thiết lập nó.

Điều kiện tiên quyết

  • Đảm bảo bạn đã cài đặt và chạy phiên bản Docker mới nhất.
  • Đảm bảo cả Node.js và npm đều được cập nhật lên phiên bản mới nhất để tránh các vấn đề tương thích.

Cài đặt

Đi tới thiết bị đầu cuối của bạn và sao chép-dán thông tin sau để cài đặt GenLayer trên máy tính của bạn:

 npm install -g genlayer


Sau khi cài đặt, hãy chạy lệnh init để bắt đầu quá trình thiết lập môi trường phát triển của bạn:

 genlayer init


Khi bạn chạy lệnh này, nó sẽ khởi tạo thiết lập với 5 trình xác nhận và nhắc bạn chọn (các) nhà cung cấp LLM ưa thích của mình.


Có ba tùy chọn bạn có thể chọn:

  • OpenAI: Tùy chọn nhanh nhất và đáng tin cậy nhất để chạy trình xác thực)

  • Ollama: Tùy chọn mã nguồn mở và miễn phí, nó có thể hoạt động chậm hơn các tùy chọn khác

  • Heurist: Nhà cung cấp suy luận cho các mô hình AI nguồn mở


Sau khi bạn đã thực hiện lựa chọn của mình, nó sẽ tự động tải xuống và định cấu hình các vùng chứa Docker cần thiết cho môi trường mô phỏng GenLayer. Sau khi thiết lập hoàn tất, bạn có thể truy cập Trình mô phỏng GenLayer tại http://localhost:8080/ .


Bây giờ, hãy bắt tay vào xây dựng hợp đồng của chúng ta!

⚽ Xây dựng hợp đồng dự đoán bóng đá

Trình mô phỏng có trình soạn thảo mã để viết mã.


Hợp đồng thông minh được viết bằng Python, khiến nó trở nên lý tưởng để xử lý dữ liệu và các hoạt động chuỗi cần thiết cho tương tác web và xử lý ngôn ngữ tự nhiên.


Đối với hợp đồng dự đoán này, chúng tôi sẽ truy xuất dữ liệu web của mình từ trang web BBC Sport và sau đó chúng tôi sử dụng LLM để xử lý dữ liệu được truy xuất nhằm xác định đội nào là đội chiến thắng. Hãy xem quy trình từng bước để thực hiện việc này


Nếu bạn muốn bỏ qua phần hướng dẫn, hãy kiểm tra mã trên GitHub và đi tới phần "Hợp đồng triển khai" bên dưới.

1. Nhập các thư viện và mô-đun cần thiết

Trước tiên, chúng tôi sẽ nhập các thư viện và mô-đun mà chúng tôi sẽ sử dụng cho Hợp đồng thông minh của mình:


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


  • json : Mô-đun này được sử dụng để phân tích cú pháp và xử lý dữ liệu JSON, đây là định dạng phổ biến để trao đổi dữ liệu.
  • EquivalencePrinciple : Điều này đảm bảo rằng kết quả nhất quán và chính xác trên các trình xác thực khác nhau. Nó đóng một vai trò quan trọng trong việc duy trì tính toàn vẹn của kết quả đầu ra không xác định bằng cách so sánh kết quả từ nhiều trình xác thực.
  • IContract : Lớp cơ sở để tạo Hợp đồng thông minh trên GenLayer, cung cấp các thuộc tính và hành vi thiết yếu. Nó đảm bảo rằng hợp đồng tích hợp trơn tru trong môi trường GenLayer (GenVM).

2. Xác định loại hợp đồng thông minh

Bây giờ, chúng ta cần xác định lớp Hợp đồng thông minh trong trường hợp này là Thị trường dự đoán. Lớp hợp đồng Hợp đồng thông minh của chúng tôi kế thừa từ IContract . Việc kế thừa từ IContract là cần thiết để đảm bảo rằng hợp đồng được thực thi đúng cách trong khung GenLayer:


 class PredictionMarket(IContract):

3. Thêm tham số hàm tạo

Tiếp theo, chúng ta sẽ khởi tạo trạng thái của hợp đồng và thiết lập mọi tham số cần thiết. Bước này rất quan trọng vì nó xác định các điều kiện và thuộc tính ban đầu mà hợp đồng của chúng ta sẽ sử dụng trong suốt quá trình thực hiện:

 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


Trong hàm tạo này, chúng tôi xác định các tham số sau:

  • game_date : Ngày của trò chơi được định dạng là 'YYYY-MM-DD'.
  • team1 : Tên của đội đầu tiên tham gia trận đấu.
  • team2 : Tên của đội thứ hai tham gia trận đấu.
  • has_resolved : Cho biết kết quả của trò chơi đã được giải quyết hay chưa, ngăn chặn việc xử lý dư thừa.
  • resolution_url : URL của trang web BBC Sport mà từ đó có thể truy xuất kết quả trận đấu.


Các tham số này xác định trạng thái ban đầu của hợp đồng của chúng tôi, giúp nó sẵn sàng xử lý kết quả trò chơi.

4. Giải quyết kết quả trò chơi

Bây giờ, hãy thêm một phương pháp để xác định kết quả của trò chơi. Phương pháp này đảm bảo rằng chúng tôi chỉ xử lý kết quả của trò chơi nếu nó chưa được giải quyết:

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


Phương pháp này trước tiên kiểm tra xem kết quả đã được xác định chưa bằng cách kiểm tra self.has_resolved . Điều này ngăn chặn việc xử lý dư thừa và đảm bảo hiệu quả. Nếu trò chơi vẫn chưa được giải quyết, chúng tôi sẽ khởi tạo final_result để lưu trữ kết quả. Từ điển này sẽ lưu giữ các kết quả được xác nhận cuối cùng của trò chơi.

5. Viết nguyên lý tương đương

Nguyên tắc tương đương rất quan trọng khi viết Hợp đồng thông minh. Khi bạn truy cập web hoặc gọi LLM, sự mâu thuẫn có thể phát sinh. Nguyên tắc tương đương như chúng tôi đã nói trước đó là một quy tắc hoặc bộ tiêu chí cụ thể được sử dụng để xác thực kết quả đầu ra cuối cùng của các hoạt động không xác định (các cuộc gọi web hoặc LLM). Nguyên tắc này sử dụng nhiều người xác nhận, trong đó một người đóng vai trò là người lãnh đạo đề xuất kết quả và những người khác xác nhận kết quả này dựa trên các tiêu chí hoặc quy tắc đã xác định.


Do đó, trong hợp đồng của chúng tôi, chúng tôi cần xác định Nguyên tắc tương đương của mình để ngăn chặn sự không nhất quán trong kết quả đầu ra của chúng tôi từ web hoặc khi xử lý bằng LLM:

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


Đối với hợp đồng dự đoán của chúng tôi, Nguyên tắc tương đương nêu rõ rằng "Tỷ số và người chiến thắng phải hoàn toàn giống nhau". Người xác thực sẽ sử dụng nguyên tắc này để so sánh kết quả của họ với kết quả của người dẫn đầu. Nếu kết quả phù hợp với Nguyên tắc tương đương thì kết quả cuối cùng được chấp nhận. Cờ comparative=True cho biết rằng cả người lãnh đạo và người xác nhận đều thực hiện các nhiệm vụ giống nhau và so sánh kết quả của họ để đảm bảo tính nhất quán.


Trong Nguyên tắc tương đương này, chúng tôi sẽ tìm nạp dữ liệu web về trò chơi và xử lý dữ liệu đó bằng LLM.

Tìm nạp dữ liệu web

Trong tương lai, trong khối Nguyên tắc tương đương, chúng tôi sẽ truy xuất nội dung trang web từ URL trang web tin tức BBC Sport:

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


Sau khi dữ liệu được truy xuất, chúng tôi sẽ xử lý dữ liệu đó bằng LLM để kiểm tra kết quả và xác định đội chiến thắng từ trang web được truy xuất.

Xử lý dữ liệu được truy xuất bằng LLM

Để xử lý thông tin từ trang web được truy xuất, chúng tôi sẽ tạo lời nhắc để gửi tới LLM, cho nó biết chính xác những gì nó cần làm. Khi tương tác với LLM, điều quan trọng là phải tạo lời nhắc rõ ràng và cụ thể để hướng dẫn mô hình đưa ra phản hồi chính xác và phù hợp. Đây là lời nhắc chúng tôi tạo ra dưới đây:

 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)


Lời nhắc mà chúng tôi đã tạo sẽ hướng dẫn LLM:

  • Xác định đội chiến thắng và ghi điểm từ trang web được truy xuất

  • Chúng tôi cũng đưa vào một điều kiện để LLM kiểm tra xem trò chơi chưa bắt đầu hay chưa. Nếu cụm từ "Bắt đầu [thời gian]" xuất hiện giữa tên của hai đội, điều đó cho thấy trận đấu chưa bắt đầu . LLM được hướng dẫn để nhận ra tình huống này và hiểu rằng chưa thể trích xuất được kết quả nào.

  • Chúng tôi cũng đưa vào một điều kiện khác để xử lý LLM giả định rằng trò chơi không được giải quyết nếu nó không thể trích xuất điểm. Điều này đảm bảo rằng các trò chơi chưa hoàn thành hoặc đang diễn ra được xử lý phù hợp.

  • Cuối cùng, chúng tôi yêu cầu LLM phản hồi bằng định dạng JSON


Lời nhắc chi tiết này xử lý các tình huống khác nhau và đảm bảo rằng LLM trích xuất và xử lý thông tin cần thiết một cách chính xác và nhất quán. Sau khi lời nhắc được tạo, chúng tôi sẽ gửi nó đến LLM bằng phương thức call_llm .


5. Đặt kết quả theo nguyên tắc tương đương

Sau khi kết quả của chúng tôi nhận được từ LLM, kết quả đó sẽ được kiểm tra và xác thực theo Nguyên tắc tương đương được xác định ở trên: "Điểm số và người chiến thắng phải hoàn toàn giống nhau." Nếu kết quả phù hợp với Nguyên tắc tương đương thì kết quả cuối cùng được chấp nhận.

 eq.set(result)


Lưu ý: Trình xác thực không xác thực từng bước trong khối Nguyên tắc tương đương và chỉ tập trung vào kết quả cuối cùng để giảm nhu cầu xác thực phức tạp, tiết kiệm tài nguyên và đơn giản hóa hoạt động của hợp đồng

6. Phân tích và đánh giá kết quả

Sau khi kết quả được xác thực và hoàn thiện, giờ đây chúng ta có thể phân tích kết quả bằng cách sử dụng json.loads() . Điều này chuyển đổi kết quả thành một định dạng có thể dễ dàng thao tác và đánh giá. Từ kết quả được phân tích cú pháp của chúng tôi, chúng tôi sẽ trích xuất người chiến thắng và ghi điểm:

 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


Nếu kết quả của trò chơi được xác định (người thắng > -1), trạng thái của hợp đồng sẽ được cập nhật tương ứng. Điều này đảm bảo rằng kết quả cuối cùng được ghi lại chính xác.


Bây giờ chúng ta đã sẵn sàng triển khai hợp đồng của mình!


Hãy xem hợp đồng của chúng tôi đang hoạt động!

🚀 Triển khai Hợp đồng thông minh dự đoán bóng đá của bạn

  1. Trong Trình mô phỏng GenLayer, nhấp vào nút phát để chạy hợp đồng của bạn.

  2. Trong phần thông số hàm tạo, cung cấp ngày thi đấu và tên của hai đội bạn muốn kiểm tra. Ví dụ: bạn có thể đặt game_date thành "2024-06-05", team1 thành "Brazil" và team2 thành "Jamaica".

  3. Sau khi cài đặt chi tiết trò chơi, hãy nhấp vào Triển khai



🎯 Thực hiện giao dịch

Để tương tác với hợp đồng đã triển khai, hãy đi tới phần Thực hiện giao dịch . Tại đây, bạn có thể gọi phương thức giải quyết để xử lý kết quả của trò chơi.



Khi phương thức giải quyết được thực thi:

  • Các nút do trình mô phỏng chạy lấy dữ liệu từ URL được chỉ định, trong trường hợp này là URL của BBC Sport và sau đó LLM xử lý dữ liệu đó
  • Kết quả của trò chơi cuối cùng sau đó được xác thực theo Nguyên tắc tương đương được xác định trong mã.

Nguyên tắc tương đương hoạt động như thế nào khi hợp đồng thông minh được thực thi:

  • Tính toán Đội trưởng: Trình xác thực Đội trưởng lấy dữ liệu trò chơi từ BBC Sport và xác định tỷ số cuối cùng cũng như đội chiến thắng. Ví dụ: Đội trưởng tính tỷ số là "1:2" khi Jamaica (Đội 2) giành chiến thắng trước Brazil (Đội 1).
  • Tính toán của người xác thực: Mỗi người xác thực tìm nạp dữ liệu trò chơi một cách độc lập từ cùng một URL và thực hiện cùng một nhiệm vụ để xác định điểm số cuối cùng và người chiến thắng. Ví dụ: một người xác thực cũng có thể tính tỷ số là "1:2" khi Jamaica (Đội 2) giành chiến thắng trước Brazil (Đội 1).
  • So sánh: Người xác nhận so sánh kết quả của họ với kết quả của Người lãnh đạo. Theo Nguyên tắc tương đương, điểm số và người chiến thắng phải bằng nhau. Nếu kết quả của Người dẫn đầu là "1:2" với Jamaica (Đội 2) là người chiến thắng thì kết quả của mỗi người xác nhận cũng phải là "1:2" với Jamaica (Đội 2) là người chiến thắng.
  • Quyết định: Nếu tất cả kết quả của người xác nhận trùng khớp với kết quả của Người lãnh đạo thì họ chấp nhận kết quả của Người lãnh đạo là hợp lệ.


Quá trình này đảm bảo tính nhất quán và chính xác trên toàn mạng. Nếu người xác thực trả về "1:3" với Jamaica (Đội 2) là người chiến thắng và người dẫn đầu trả về "1:2" với Jamaica (Đội 2), thì người xác nhận sẽ từ chối kết quả.

Xử lý các tình huống khác nhau:

  • Nếu trò chơi kết thúc, phản hồi JSON sẽ bao gồm tỷ số cuối cùng và đội chiến thắng.
  • Nếu trò chơi đã bắt đầu nhưng chưa kết thúc thì phản hồi JSON sẽ cho biết trò chơi chưa được giải quyết.
  • Nếu trò chơi chưa bắt đầu thì phản hồi JSON sẽ cho biết trạng thái này.


Xem nhật ký để biết thông tin chi tiết về tương tác hợp đồng.

💭 Suy nghĩ cuối cùng: Các trường hợp sử dụng khác cho Hợp đồng thông minh AI

🙌 Xin chúc mừng nếu bạn đã đọc hết!!!


Tương lai có vẻ tươi sáng cho các hợp đồng thông minh được hỗ trợ bởi AI. Ngoài hợp đồng dự đoán bóng đá, còn có những ý tưởng hợp đồng thông minh khác mà bạn có thể xây dựng và thử nghiệm với Trình mô phỏng GenLayer:

  • Người dự báo thời tiết
  • Mã thông báo ERC-20
  • Kiểm tra giá cổ phiếu
  • Tóm tắt tin tức
  • Người lập kế hoạch du lịch
  • Trình tìm sách
  • Câu đố logic
  • Phù thủy tiền xu


Có nhiều ý tưởng mẫu hơn trong tài liệu GenLayer về cách đạt được một số điều trên.