当前位置:   article > 正文

面向区块链的人工智能实用指南(二)_区块链上使用机器学习托管计算的应用有哪些

区块链上使用机器学习托管计算的应用有哪些

原文:zh.annas-archive.org/md5/58940cca7d2940f332e72159433da08b

译者:飞龙

协议:CC BY-NC-SA 4.0

第八章:实施 DIApps

*"区块链和人工智能是 IT 领域的双子星。*它们在这里帮助拯救人类免受隐形病毒的侵害。"

由于区块链和人工智能已经问世超过 10 年,现在可以通过结合这两项技术构建一系列全新的解决方案。通过以一种新的方式结合这两项技术,我们可以解决一些棘手的问题。在本章中,我们将提出一种更好的应用程序开发模式,利用人工智能和区块链的组合。本章是一个实践性的章节,您将学习如何使用区块链和人工智能技术构建智能应用程序,这些应用程序有可能拯救我们免受 COVID-19 以及其他传染病的更多爆发的侵害。在本章结束时,您将能够识别分布式智能应用 (DIApp)的好处,并使用 DIApp 设计模式构建一个样本接触追踪应用程序。

本章节将涵盖以下主题:

  • 分布式应用的演进

  • 构建一个样本 DIApp

  • 测试样本 DIApp

  • 部署样本 DIApp

  • 回顾样本 DIApp

让我们开始吧!

技术 要求

在学习本章节的教程时,请确保您的系统已安装以下软件:

在安装了上述软件依赖项的情况下,我们已在 Linux(Ubuntu)和 macOS(Mojave)上测试了代码,以确保其正常运行。

为了理解并欣赏本章节的内容,您必须熟悉 DIApp 设计模式的基本概念,如第七章中所解释的DIApp 的开发生命周期

本章还假设您熟悉区块链的基本概念,如第一章中所解释的,区块链入门。同时也假设您熟悉人工智能的基本概念,如第二章中所解释的,人工智能景观简介

为了理解这两项技术之间的联系,并在本章中应用它们,您还需要理解分布式数据库技术的好处,在第四章中已有详细解释,并且附有示例,AI 与区块链驱动数据库

分布式应用的演进

让我们通过按照时间顺序迅速回顾去中心化应用的当前状态来开始本章。下图展示了过去三十年中应用程序的演变过程:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 8.1:自互联网诞生以来应用程序的演变

在这里,我们可以观察到应用程序设计模式发生了三次重大转变。我们还可以观察到应用程序随时间演变的三个主要方面。

我们将在接下来的章节中讨论每一个。

传统的 Web 应用程序

尽管互联网的基础工作在 1970 年代和 1980 年代已经奠定了,但是正是万维网使得信息如何在网络中的节点之间轻松共享有了显著进步。自公共互联网的问世以来,传统的 Web 应用程序,如博客、聊天室和电子商务网站,便开始出现在中期的 1990 年代。大多数互联网流量仍然由这些应用程序驱动,向互联网用户提供信息和服务。

这些应用程序大多以简单的后端 Web 服务器开始。服务器被托管以接受世界各地的有限客户端连接,但在达到所需阈值后很容易崩溃。现在,这些应用程序大多已经转向了 n 层架构。

当前使用的n 层架构,也称为多层架构多层架构,用于管理诸如电子商务网站、社交媒体网站、聊天室、博客平台等大规模 Web 应用程序。为了便于公司进行用户执行的交易,专用基础设施在云上进行管理。与客户-服务器模型的原始版本相比,n 层模型将功能分为许多层(因此得名)。这也意味着在处理传统 Web 应用程序的故障和管理活跃性方面,n 层模型作为客户-服务器模型的更好版本。公司管理自己的基础设施,如服务器,这是向用户提供服务所需的。公司使用的大部分基础设施可以从云提供商那里购买或租用一段时间。这意味着运行传统 Web 应用程序的成本几乎是固定的。

现在,让我们试着了解过去十年中互联网上去中心化应用程序的演变。

去中心化应用程序

去中心化应用的最主要特征是它不受单一实体的控制。另一个重要特征是它为使用应用程序提供了一个共同的入门标准。按照教科书的定义,Napster 和 BitTorrent 是一些最早的可以用于以点对点格式托管和共享各种文件的去中心化应用程序。

有些人可能会想知道区块链是否被用来构建这些应用程序。部分正确,这些点对点文件共享协议使用了我们今天在区块链中使用的基本加密和网络技术。

在撰写本文时,即 2020 年,我们将去中心化应用主要与运行在比特币和以太坊等区块链上的业务逻辑相关联。我们必须了解,去中心化应用也是一种设计模式,早在比特币发明之前就存在了。

将去中心化应用与传统 Web 应用进行比较,我们可以看到去中心化应用在多个服务器或计算机上运行。而且,这些计算机不一定由单一实体或个人拥有和操作。它们通常由愿意为了利益或激励而运行软件的相关方组成。因此,可以得出结论,大多数去中心化应用在点对点网络上运行。与传统 Web 应用不同,这些应用不会遭受单一故障点的影响。

这些点对点网络由一种协议定义,并且通常具有容错性,以保护用户免受许多攻击向量的影响。与客户端-服务器模型相比,由于其分布式拓扑结构,很难 compromise 一个点对点网络。在区块链协议中的激励机制和惩罚措施使得 compromise 网络的成本远高于从此类攻击中获得的回报。

虽然去中心化应用解决了前述两个问题,但由于与代币价格波动相关的成本,运行业务和关键任务应用的成本仍然具有挑战性。在撰写本文时,正在努力降低这种波动性,以便代表用户签署交易或提前为交易成本支付用户。

到目前为止,我们已经了解到传统 Web 应用和集中式服务以固定成本提供可预测的性能,而去中心化应用则提供独立的服务,而不会 risking 网络、供应商或用户。然而,我们也了解到,通过使用去中心化应用来实现独立性,我们在费用方面引入了一定程度的不确定性。最后,我们还观察到,用户选择集中式模型以在内部环境中实现性能和安全性。

现在,让我们尝试了解互联网上去中心化智能应用是如何发展的。

去中心化智能应用

现在,由于商业模式正在倾向于透明和效率,需要一种新的设计模式,有利于追溯性,去中心化和可预测性的组合。去中心化智能应用程序可以在点对点网络中使用可靠的基础设施。这个网络由多个实体运营的节点组成,它们可能对为用户服务和发展他们的业务感兴趣。此类网络上的交易通常会在非常短的时间内确认,而费用显著更低。类似于大型公共网络,由于攻击的利益和执行攻击的成本之间的差值,试图破坏网络将会非常昂贵。

与其他模式之间的一个关键区别在于 AI 模型的更紧密集成,借助去中心化数据库的帮助。这使得可能构建具有可追溯性和洞察力作为一流特性的使命关键和业务中心的应用程序。

现在,让我们总结对所有三种模型的分析。

对比和分析

通过权衡每种模式的优势和权衡,我们可以总结我们的学习并决定正确的设计模式。

在传统的 Web 应用程序的情况下,当使用集中和专用的基础设施时,我们可能会观察到更好的性能。交易将以合理且固定的成本实现几乎立即的最终性,适用于开发应用程序的公司。然而,这种设计模式可能缺乏其他设计模式提供的一些安全性和可追溯性功能。

在去中心化应用程序的情况下,我们可能会观察到合理的性能和可追溯性,但以可变的交易成本为代价。与传统 Web 应用程序相比,交易速度可能会受到影响。

在去中心化智能应用程序的情况下,我们可能会观察到大多数交易的可预测成本和几乎即时的最终性。除了更好的成本,速度,安全性和性能,该模式还为构建保护隐私的应用程序提供了去中心化存储,这些应用程序可以用于在用户数据上以道德方式使用 AI 模型从中获得可操作洞见。

现在,我们已经分析了三种主要模式,让我们用一个表格总结它们的区别:

传统 Web 应用程序(App)去中心化应用程序(DApp,dApp 或 Dapp)去中心化智能应用程序(DIApp)
网络使用客户-服务器模型与 n 层架构。使用分布式网络拓扑来允许任何人加入网络。使用分布式网络拓扑来允许任何人加入网络。
安全单点故障的可能性很高。数据可能会因加密薄弱或数据集中控制而遭到黑客攻击或泄漏。用户是数据的所有者。所有数据和操作都由唯一的密钥对保护。存储的数据量有限。用户可以使用相同的密钥对安全地存储和操作更大量的数据,以便拥有自己的数据。
成本一年内管理专用基础设施的固定成本。交易成本不稳定,因为成本取决于区块链中本地代币的价格。在小型但分散的节点组中,价格相对稳定。
透明度应用程序和数据操作对用户或其他利益相关者不透明。应用程序的逻辑和大部分操作都是透明的。私人交易是可选的。逻辑和操作是透明的,提供了使用隐私而不损害安全性的选项。
性能可以处理大量交易并实现即时最终性由于节点的大规模分布,吞吐量较低。最终性较慢。交易吞吐量较高。最终性也能迅速实现。
隐私公司很少会在利用洞察力时练习完全的用户数据隐私和匿名性,因为数据托管在由组织控制的中心化或分散式数据库上。通过钱包进行匿名处理,但在区块链网络上管理数据是一件昂贵的事情。用户的隐私取决于应用程序的政策。 AI 模型不经常使用。DIApps 旨在为用户提供完整的隐私和匿名性,同时以公平的方式利用 AI 提供有意义且可操作的洞察力,而不会损害用户的匿名性。

上面的表格显示了不同应用程序模式的优缺点。

现在我们已经快速回顾了应用程序的演变,让我们构建一个解决现实世界挑战的样本 DIApp。

构建样本 DIApp

在这一部分,我们将涵盖问题陈述,找到所述问题的解决方案,根据 DIApp 设计模式设计技术架构,并观察如何开发启动 DIApp 所需的所有可交付成果。

让我们从以下部分了解问题陈述。

问题陈述

一种名为严重急性呼吸综合症冠状病毒 2 型SARS-CoV-2)的新型冠状病毒引发了一场名为2019 冠状病毒病COVID-19)的新型大流行。在撰写本章节时,该病毒已经通过各种传播方式感染了全球超过 1100 万人,不幸地夺走了 50 万人以上的生命:这是人类历史书中的悲伤一页。尽管地方政府已经采取了措施减少这些感染,但一些病毒携带者似乎是无症状的。这意味着一个人可能携带病毒却不知情。有时,规定的检查也可能无法在患者体内孵化的早期阶段识别出病毒。

当前挑战

这种病毒给人类带来了新的挑战。让我们来看看在撰写本章节时所面临的两个主要挑战。

  • 检测无症状患者中的病毒:正如前面讨论的,SARS-CoV-2 病毒给医务人员带来了一个新的挑战,即识别人体内没有显示任何症状的感染。这些人可能被允许继续他们的日常生活,从而使他们所属社区的整体健康处于风险之中。这在安全检查中留下了一个巨大的漏洞,可能允许无症状的人接触公共服务或与可能从患者那里感染病毒的人交往。

  • 追踪病毒的传播:尽管对于一些无症状的人,早期检测病毒是困难的,但随着时间的推移,症状会逐渐显现。一旦出现症状,并且这个人检测为阳性,追踪被诊断患者的所有行动以遏制感染就显得非常重要。在没有患者过去几周活动的准确历史记录的情况下,这是难以实现的。任何记录这些行动的努力都需要时间,并且由于人为错误而保持不准确。

为了遏制这种感染,医务人员采取了联系追踪措施。我们将在下一节中了解更多关于联系追踪的内容。

联系追踪

联系追踪是一个过程,目的是识别过去几天或几周参与患者活动的所有人,自感染被诊断以来。这是卫生部门官员在与执法机构协调的过程。

联系追踪的一般工作流程如下:

  1. 医生已经诊断该患者为 SARS-CoV-2 阳性。

  2. 一个联系追踪员被分配到这个案例。

  3. 联系追踪员与患者互动以识别患者的活动。

  4. 根据司法管辖区/国家的不同,联系追踪员负责收集关于患者过去一定天数或周数的准确信息。例如,在印度,测试阳性的患者可能被要求分享他们过去 14 天的活动情况。

  5. 根据患者提供的信息,接触追踪者可能会验证一些信息。

  6. 如果患者分享的信息令人信服,将聘请更多的接触追踪者来确定受到患者感染的一级人员。

  7. 一旦这种手动搜索结束,被联系到的人将接受病毒测试。

  8. 根据司法管辖权,被联系到的人可能会被强制隔离 14 天,以检查是否出现症状。

  9. 被隔离的人会定期接受病毒检测。

  10. 如果没有病毒迹象,疑似病人将被释放。但是,如果他们测试呈阳性,同样的过程将重复。

尽管你可能会觉得这个过程安排得非常紧密和复杂,但许多国家仍然采用手动方式执行这里提到的大部分步骤。尽管一些国家选择利用数字技术自动化接触追踪,但他们并未考虑所有的感染因素。

接触追踪的问题

正如我们之前讨论的,接触追踪是一个艰巨的过程。虽然一些国家已成功地能够通过数字方式自动化这个过程,但是很难跟踪来自非人类来源的感染。

我们往往忘记,有大量的假设认为病毒的起源可以追溯到生活在森林、乡村和城市地区的蝙蝠。许多研究人员也观察到,这种病毒可以在许多形式的表面上保留几个小时。现代供应链非常先进,货物可以在几个小时内从一个地方转移到另一个地方。不幸的是,供应链的高速提供了一个潜在窗口,病毒可能在货物在空中运输的时候从一个容器传播到另一个容器。这样的传染不仅危及正常商品的供应链,还可能感染许多使用这些产品但没有进行有效消毒的人群。在向公众交付货物之前评估感染的风险是必须考虑的。同样,我们希望保护我们的宠物和其他重要物种。

因此,有必要考虑监测动物和非生物物体是否感染了 SARS-CoV-2 病毒。因此,需要一种数字接触追踪算法,可以解决这两个生态系统中感染的可能性。

随着数字接触追踪对动物和物体的需求得到明确确认,让我们试图制定解决方案的方法。

解决方案方法

由于我们正在开发一个样例应用程序来跟踪动物和非生物对象的潜在感染情况,我想将解决方案命名为动物和物体的去中心化智能接触追踪DICTAO)。如前文所述,有必要跟踪动物和物体。为了透明度,我们必须能够在细粒度水平上追踪感染状态。具有分散和开放分类帐的公共区块链可以提供此功能。同样,我们必须理解全球供应链是一个繁忙的世界。手动跟踪所有潜在联系几乎是不可能的。同样,很难确定动物之间的潜在联系。因此,有必要采用自动但智能的方式来识别潜在感染并将其与噪音分离。因此,区块链和人工智能在追踪动物和物体方面的需求就此产生。

在接下来的章节中,我们将看到如何构建 DICTAO。

选择区块链技术

如前所述,区块链对于维护动物和物体状态的透明度至关重要。由于这是一个构建样例 DIApp 的教程,我将保持上下文非常简单和易于理解。

以太坊网络有许多测试网络供开发人员在沙盒测试环境中部署和测试其应用程序。最著名的测试网络之一称为Kovan测试网络。Kovan 是基于PoA(权威证明)的以太坊区块链网络。它由以太坊开发者社区维护。Kovan 测试网络以其执行速度、可靠性和通过 Faucet 提供的免费测试以太币而闻名。您可以在这里阅读有关 Kovan 测试网络的更多信息:kovan-testnet.github.io/website/

Faucet 是供智能合约开发人员和用户免费获取测试网令牌的软件,而无需在本地 PC 上进行挖掘。大多数区块链测试网络都有各自的 Faucet。

我选择了 Kovan,只是为了帮助您尽可能轻松地理解和适应区块链。Kovan 是一个测试网络,因此不打算用于任何生产级别的以太坊应用程序。如果您希望为实际用例部署此示例,我建议您要么使用以太坊主网,要么偏好于 Matic 等侧链。如果您希望实时部署它,您可以在这里了解更多关于 Matic 侧链的信息:matic.network/

选择去中心化数据库

数字接触追踪通常涉及收集数据。为了提高准确性并提供高质量的预测,可以以高频率收集更多的数据。随着时间的推移,数据可能会变得非常庞大。这样的数据不应直接存储在区块链上,因为这会产生高昂的成本。此外,存储大量数据通常会导致瓶颈问题,并可能影响区块链的性能。因此,有必要将动物或物体的活动存储在去中心化数据库中。

我将使用 MóiBit 的 REST API 作为本示例 DIApp 的去中心化数据库。MóiBit 提供了一个开发者友好的 API 环境,这使得它成为一个容易的选择。

由于 MóiBit 是基于 IPFS 的去中心化存储服务,对新文件或现有文件的每一次更改都会生成一个新的哈希。类似于区块链,每个新的哈希代表了一个成功的状态变化。然而,与区块链相比,更新 MóiBit 上的数据将更加便宜和快速。由于它是由哈希驱动的,文件的完整性也得到了保障,并且易于验证。

要了解有关 MóiBit API 的更多信息,请访问其文档网站:apidocs.moibit.io/

选择一种人工智能技术

跟踪一个区域中的无数对象和动物——即使是一个小区域——将导致大量的数据点。在这些数据点上手动执行接触追踪几乎是不可能的。由于一些低质量的数据点,手动接触追踪者的努力很容易就会付诸东流。随着阳性病例数量的增加,手动接触追踪者的压力也会增加,以尽快关闭一个案例并转向下一个案例。这也可能导致感染的不准确识别。

为了减少错误并自动化清理、排序、分组和预测感染的过程,我们可以利用人工智能技术。

如前所述,合同追踪通常涉及分析感染者/动物/物体的活动过程。可以安全地假设,对位置数据进行快照,以及发生时间戳,将为潜在接触案例提供足够的见解。因此,我们将分析地理位置数据。

我们将使用地理空间分析来识别数据点中的一些异常情况。具体来说,我们将使用基于密度的空间聚类算法与噪声DBSCAN)算法进行地理空间分析,以识别动物和物体之间的潜在感染情况。它是一种数据聚类算法,用于有效地将数据点分组在一个范围内,并且丢弃其他数据点无法到达的异常值。

要了解有关 DBSCAN 算法的更多信息,请参阅以下维基百科文章:en.wikipedia.org/wiki/DBSCAN

现在我们已经决定了示例 DIApp 中将使用的技术和技巧,让我们尝试以 DIApp 设计模式的形式将其形式化为一个参考技术架构。

示例 DIApp 的技术架构

在本节中,我将提出示例 DIApp 的技术架构。基于前面各节中所做的决策,我将所有解决方案组件编译成一个图表,如下所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 8.2:我们示例应用的 DIApp 参考架构

在上图中,我们根据 DIApp 设计模式中提出的 DIApp 参考架构代表了所有解决方案组件。现在,让我们逐个查看每个组件:

传感器:传感器是附在动物或需要在感染情况下进行跟踪的物体上的硬件设备。每个传感器都由在以太坊区块链上可识别的唯一钱包地址标识。此外,重要的是要注意,每个传感器都会在 MóiBit 上获得一个专用文件,其中可以存储相应传感器的位置历史。

一个应用将在传感器内运行。期望该应用能自动读取其位置并将位置更新到其在 MóiBit 上的专用文件中。传感器的当前位置可以通过调用地理位置 API 访问。在我们的示例 DIApp 中,我们使用 Google Maps API 来检索传感器的当前位置。当调用时,Google 地图地理位置 API 将经度、纬度和坐标的准确性返回给传感器。

为简单起见,我们将忽略 Google 地图 API 返回的准确性值,并将其余数据上传到 MóiBit。由于示例 DIApp 试图展示 AI 和区块链技术的融合,优化在本书中并不优先考虑。在预测感染时处理数据的准确性将超出本书的范围。然而,我期待与您线下解决这个问题。

现在,一旦传感器收到来自 Google 地图地理位置 API 的响应,数据将被重组并上传到 MóiBit 上的专用位置历史文件中。我们将在 开发传感器客户端代码 部分讨论客户端应用程序的设计和结构。

区块链中的智能合约:在示例 DIApp 中,智能合约的重要性在于为每个传感器执行的每个位置更新维护证明。每当传感器在 MóiBit 上更新其位置历史时,将向智能合约发出新的函数调用,以更新为传感器指定的相应钱包的**内容标识符(CID)**值。我们将在后面的章节中讨论智能合约的设计和结构。

接触追踪仪表板:接触追踪仪表板是一个简单的基于 Express 的 Node.js web 应用程序,它生成一个本地服务器来托管单个 HTML 文件。通过 Node.js 应用程序呈现的仪表板网页,用户可以输入疑似的钱包 ID。Web 应用程序执行基本的表单验证,并返回任何潜在感染的钱包 ID 列表。我们将在后面的章节讨论接触追踪仪表板的设计和结构。

接触追踪 API:接触追踪 API 接收用户跟踪疑似钱包 ID 的输入。这是一个后端 API,也会预测被感染的 ID,以便将它们返回给仪表板。我们将在后面的章节讨论接触追踪 API 的设计和结构。

开发智能合约

在本节中,我们将讨论用于记录每次位置历史更新的证据的智能合约的设计和结构。如前一节所述,我们将使用以太坊区块链,因此我将向您展示如何用 Solidity 语言开发智能合约。

如果你对 Solidity 编程语言不熟悉,我建议你查看他们的网站以获取更多技术细节、知识和文档:solidity.readthedocs.io/。理解 Solidity 编程语言的语义对于理解本节内容并了解建议 DIApp 解决方案的智能合约的好处至关重要。

让我们从识别参与者开始。我们知道解决方案旨在追踪源自动物和物体的感染。因此,我们了解到跟踪设备或传感器是必要的。假设每个传感器都可以通过一个唯一的以太坊钱包地址进行识别。除了传感器,我们还有医疗专业人员和执法团队等最终用户,他们可能希望从给定的动物或物体中识别潜在的感染者:

  1. 每当传感器有新的位置在 MóiBit 上更新时,它就会进行必要的更新,并从 MóiBit 那里收到一个哈希。我们正在使用该哈希和来自调用传感器的钱包地址在智能合约上维护一个映射。每当传感器更新一个新的位置坐标时,传感器的钱包地址对应的值就需要更新。因此,我们需要定义一个映射来记录对每个传感器位置历史所做的任何更改。我们可以用以下映射来做到这一点:
mapping(address => string) private deviceIDToLatestCID;
  • 1

从上述映射中,我们可以看到地址作为一个唯一键,对应一个更新的字符串值,这基本上是从 MóiBit 收到的 CID,当对应传感器的位置更新时。

  1. 除了前面的映射之外,我们还需要另一个映射来通过它们的地址跟踪所有传感器,以确认它们是否曾经更新过它们的位置。我们可以通过在以下映射中持久保存所有钱包地址的列表来实现这一点:
  mapping(address => uint256) private deviceIDExists;
  • 1

从上述映射中,我们可以看到,每个更新了历史记录的传感器都会记录在这个映射中。我们很快就会了解到背后的原因。

  1. 最后,我们将每个曾经更新过历史记录的传感器的地址记录到以下钱包地址数组中:
   address[] private deviceIDs;
  • 1

从前面的数组声明中,指定用户可以访问智能合约中曾经更新过其位置历史记录的所有地址列表。不要将deviceIDs数组与deviceIDExists映射混淆。该数组用于直接访问每个传感器的钱包地址,而映射用于检查传感器是否已经更新了位置历史记录。

在我们继续讨论这个智能合约的功能方面之前,我们还有两个声明:一个修改器和一个事件。

  1. 修改器是在执行函数之前必须满足的条件指令。如果函数的修改器条件不满足,则不会发生函数调用。在我们的情况下,我们使用一个修改器来控制谁可以更新位置历史记录映射:deviceIDToLatestCID。正如您可能已经观察到的那样,这个映射需要使用指向传感器最新位置历史记录的 CID 进行更新。但我们还需要确保只有传感器才能更新自己的值。其他传感器、用户或开发人员不应被允许更新未知传感器的位置历史记录。这个重要的设计决定将防止其他恶意行为者破坏区块链上正常传感器的声誉。

要实现这一点,我们可以使用以下修改器:

   modifier onlyBy(address _account) {
       require(
           *msg*.sender == _account,
           "Sender not authorized to update this mapping!"
       );
       _; // The "_;"! will be replaced by the actual function body when the modifier is used.
   }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

从前面的修改器声明中,我们可以观察到,只有在调用者与正在区块链中更新其位置历史记录的地址相同时,才会执行具有前述修改器的函数。当我们了解到位置是如何通过setLatestCID函数更新时,我们将理解这个onlyBy映射的含义。但在此之前,让我们快速浏览一下事件的最后声明。

  1. 当处理复杂用例时,事件非常有用。作为可能将一些以太币或其他代币存入钱包的用户,我们等待交易收据作为确认。对于某些逻辑执行的确认,我们不能只等待交易收据。可能需要触发其他子组件,具体取决于逻辑的成功执行。这时,事件就派上了用场。Solidity 中的事件是一种日志记录功能,它帮助非区块链应用程序找到一个线索点,并继续执行。

我们将在我们的智能合约中声明一个事件,如下所示:

   event MappingUpdated(address deviceID, string latestCID);
  • 1

从先前的事件声明中,我们可以看到事件可以与传感器的钱包地址一起被发出,以及它的最新 CID。每当映射成功更新为指向 MóiBit 上传感器最新位置历史的新 CID 时,就会发出这个事件。

  1. 我们将通过查看setLatestCID函数体来更多了解MappingUpdated事件的应用,如下所示:
   function setLatestCID(address deviceID, string memory latestCID)
       public
       onlyBy(deviceID)
   {
       deviceIDToLatestCID[deviceID] = latestCID;
       if (deviceIDExists[deviceID] == 0) {
           deviceIDs.push(deviceID);
           deviceIDExists[deviceID] = 1;
       }
       emit MappingUpdated(deviceID, latestCID);
   }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

从前述函数声明中可以看到,setLatestCID是一个 setter 函数,允许每个传感器通过传递其钱包地址和指向 MóiBit 上最新历史的 CID 来更新自己的位置历史。addressstring类型用于定义deviceIDlatestCID输入参数。deviceID是调用函数的传感器的钱包地址,而latestCID是指向 MóiBit 上相应传感器最新历史的哈希。public关键字定义函数可以被全局任何人调用。然后,我们看到onlyBy修饰符被用来验证函数调用。它接受相同的输入参数deviceID并检查意图更新位置历史的调用者是否是传感器本身。如果修改器的条件验证为真,剩余的函数体将被执行。否则,交易将被撤销。既然我们对setLatestCID函数的标题有了充分的了解,现在让我们了解它的体。

在函数体内部,我们可以观察到latestCID的值立即被赋给了deviceID。一旦映射被更新,它会检查传感器是否之前更新了它的位置。这是通过检查deviceIDExists映射中相应传感器钱包地址的状态位来实现的。如果给定钱包地址没有条目存在,它会被添加到deviceIDExists映射中,并且相应的状态位值被设置为 1。同时,我们还可以观察到我们正在将deviceIDs数组附加到新数组上。在这种条件下更新此数组可以确保钱包地址不会作为重复项再次添加到数组中。这意味着setLatestCID函数只在新的传感器上线到智能合约时追加钱包地址。最后,一旦位置映射被更新并且状态位被管理,MappingUpdated事件就会被函数发出。你可以看到在括号中提供了输入参数来记录相应值的事件。这总结了setLatestCID设置函数的细节。现在,让我们来看一些智能合约中的其他getter函数。

  1. 一旦我们为给定的传感器使用新的 CID 设置了位置历史映射,我们可能需要读取映射以获取传感器的详细信息。

因此,我们将定义一个getter函数来从映射中读取传感器的最新 CID,如下所示:

   function getLatestCID(*address* deviceID)
       public
       view
       returns (*string* memory latestCID)
   {
       return deviceIDToLatestCID[deviceID];
   }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

正如你所看到的,getter函数getLatestCID读取一个输入参数。deviceID输入参数代表传感器的钱包地址,使用 Solidity 类型 address。由于任何人都应该能够查看传感器定期更新其位置的证明,我们必须使这个getter函数全局可访问。这可以通过使用public关键字实现。另外,由于这是一个仅从区块链获取数据而不打算进行更改的函数,也需要使用view关键字。这确保了getLatestCID函数具有只读权限。由于我们希望任何人都能调用该函数,因此对于此函数我们没有修饰符。在函数体中,我们只能看到一行指令,即从deviceIDToLatestCID映射中返回相应传感器的 CID 值。由于返回值是在映射中定义的字符串,函数的头部也定义了同样的。这总结了getter函数getLatestCID

  1. 现在让我们看一下后端脚本所需的附属函数。

我们将继续定义另一个getter函数,如下所示:

   function getDeviceIDsLength() public view returns (*uint256*) {
       return deviceIDs.length;
   }
  • 1
  • 2
  • 3

正如你所看到的,getDeviceIDsLength是一个不接受任何输入参数,但简单返回deviceIDs数组当前长度的getter函数。因为我们需要从后端程序调用这个函数,所以我们也将此函数的可见性设置为public。与我们之前的函数类似,此函数也是一个只读函数,返回一个无符号整数值。因此,函数头部使用了viewuint256。这总结了getter函数getDeviceIDsLength

  1. 现在让我们来看一下合约中的最后一个函数:
   function getIDByIndex(uint256 index) public view returns (*address*) {
       return deviceIDs[index];
   }
  • 1
  • 2
  • 3

正如您所看到的,getIDByIndex是一个getter函数,根据deviceIDs数组的索引值返回钱包地址。由于在 Solidity 中直接返回复合值比较复杂,我必须逐个读取它们。如果您是一个精通 Solidity 开发者,您可以消除这个函数,并在客户端直接读取整个数组,而无需花费太多气体成本。

完整的 Solidity 智能合约代码可在以下 GitHub 链接找到:github.com/PacktPublishing/Hands-On-Artificial-Intelligence-for-Blockchain/tree/master/Chapter08

现在我们有了管理位置更新证明的方法,让我们继续为传感器开发客户端代码,该代码可以在 MóiBit 上进行位置历史更新并调用该合约。

为传感器开发客户端代码

在本节中,我们将讨论传感器应用程序的设计和结构。该应用程序用于以周期性的方式获取传感器的当前位置,并将位置历史记录更新到 MóiBit。一旦成功更新了位置历史记录,MóiBit 收到的新 CID 或哈希值就可以作为证明,表明传感器通过周期性地更新其位置保持在正常状态。应用程序现在将调用适当的区块链功能,以维护其信誉。

我选择用 Python 语言实现这个应用程序,因为它是跨 AI物联网IoT)和区块链等领域的参考实现中广泛使用的语言。理解 Python 对于理解本节内容非常重要。我建议您注册一个 Packt 微课程,以了解 Python 语言的基本概念:subscription.packtpub.com/interactive-courses/data/introduction-to-python

我的实现是一个单独的 Python 脚本。首先,以下 import 语句是确保 Python 脚本中必要调用的必需语句:

  1. 请确保您使用 pip install 命令安装 import 语句中提到的第三方库:
import requests
import os
import datetime
import calendar
import time
import json
from web3 import Web3
import http.client
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  1. 在整个脚本中,我将使用一些重要的变量。它们如下:
url = 'https://www.googleapis.com/geolocation/v1/geolocate'
myobj = {'key': os.environ['GMAPS_API_KEY']}
  • 1
  • 2

从上面的代码块中,您可以看到 url 是一个字符串变量,包含了指向 Google Maps 地理位置 API 的 URL。myobj 是我在请求期间将传递给地理位置 API 的请求对象。由于地理位置 API 受到用户注册的 API 密钥保护,我需要在每次请求 Google Maps 地理位置 API 时传递这个密钥。在 myobj 变量中,您可以看到 key 映射到 API KEY,这个值在 shell 中设置,可以通过 os.environ['GMAPS_API_KEY'] 访问。基本上,它获取了 GMAPS_API_KEY 环境变量的值,并将其用作 key 的对应值。我们将在后续部分看到如何设置 GMAPS_API_KEY 的值。

  1. 现在,让我们了解一下我用于 MóiBit 操作的一些常见变量:
conn = http.client.HTTPSConnection("kfs2.moibit.io")
moibit_url = 'https://kfs2.moibit.io/moibit/v0/'
moibit_header_obj = {
   'api_key': os.environ['MOIBIT_API_KEY'],
   'api_secret': os.environ['MOIBIT_API_SECRET'],
   'content-type': "application/json"
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

正如您所看到的,conn是一个变量,表示传感器作为客户端与 MóiBit 作为服务器之间建立的 HTTPS 连接。moibit_url是一个字符串变量,指向 MóiBit API 的基本 URL。此外,moibit_header_obj是我需要作为请求头的一部分传递的 JSON 对象。由于 MóiBit API 也受 API 密钥和 API 密钥的保护,因此我需要传递这两个值以使用 MóiBit 网络对我的请求进行身份验证。分别将这两个值表示为api_keyapi_secret字段。这两个字段再次分别映射到MOIBIT_API_KEYMOIBIT_API_SECRET环境变量,os.environ从 shell 中获取对应环境变量的值。

最后,content-type字段表示请求头的元数据。由于它是一个 JSON 对象,我们使用"application/json"作为相应的值。

  1. 现在,让我们看一下脚本中与区块链交互相关的变量:
blockchain_url = 'https://kovan.infura.io/v3/' + \
   os.environ['WEB3_INFURA_PROJECT_ID']
  • 1
  • 2

从前面的代码块中,我们可以观察到blockchain_url字符串变量指向以太坊科文测试网的 URL,该网址可通过服务提供商 Infura 访问。由于 Infura 的 API 也是受保护的,因此我们需要传递在 Infura 用户帐户下创建的项目 ID。这是因为我们在字符串末尾添加了WEB3_INFURA_PROJECT_ID环境变量的值,我们使用os.environ从 shell 中读取该值。

  1. 由于我们要与区块链上的智能合约进行交互,因此我们还必须在我们的脚本中定义其相应的合约应用二进制接口ABI),如下所示:
abi = """[{"anonymous": false,"inputs": [{"indexed": false,"internalType": "address","name": "deviceID","type": "address"},{"indexed": false,"internalType": "string","name": "latestCID","type": "string"}],"name": "MappingUpdated","type": "event"},{"inputs": [{"internalType": "address","name": "deviceID","type": "address"},{"internalType": "string","name": "latestCID","type": "string"}],"name": "setLatestCID","outputs": [],"stateMutability": "nonpayable","type": "function"},{"inputs": [],"name": "getDeviceIDsLength","outputs": [{"internalType": "uint256","name": "","type": "uint256"}],"stateMutability": "view","type": "function"},{"inputs": [{"internalType": "uint256","name": "index","type": "uint256"}],"name": "getIDByIndex","outputs": [{"internalType": "address","name": "","type": "address"}],"stateMutability": "view","type": "function"},{"inputs": [{"internalType": "address","name": "deviceID","type": "address"}],"name": "getLatestCID","outputs": [{"internalType": "string","name": "latestCID","type": "string"}],"stateMutability": "view","type": "function"}]"""
  • 1

如果您不理解这个,不要惊慌。这基本上是合约的变量、函数以及输入和输出规范的序列化 JSON 表示。

如果您不是 Solidity 智能合约开发人员,我建议您通过访问solidity.readthedocs.io/en/v0.5.3/abi-spec.html来熟悉 ABI。

  1. 现在我们已经定义了对脚本功能至关重要的每个变量,让我们继续了解以下脚本的功能。

通常情况下,我们 Python 脚本的入口点始于main()函数,如下面的代码摘录所定义:

if __name__ == "__main__":
   main()

def main():
   # Fetching the Tracking ID locally, or generating a new one
   Tracking_ID = os.environ['WALLET_ADDRESS']
   print("# Setting tracking ID: ", os.environ['WALLET_ADDRESS'])

   # Getting the current geo-coordinates of the device
   print("# Getting the current geo-coordinates of the device from GMaps API")
   (latitude, longitude) = getGeoCordinates()

   # Reading the current UTC based Unix timestamp of the device
   print("# Reading the current UTC based Unix timestamp of the device")
   timestamp = getCurrentTime()

   # Generate the JSON structure
   jsonData = Marshal(Tracking_ID, latitude, longitude, timestamp)

   # Updating the location history to IPFS-based MoiBit network
   print("# Updating the location history to IPFS-based MoiBit network")
   latest_cid = updateLocationHistory(Tracking_ID, jsonData)

   # Publishing the proof to Ethereum
   print("# Publishing the proof to Ethereum")
   txnHash = CommitTxn(Tracking_ID, latest_cid)
   print("https://kovan.etherscan.io/tx/"+txnHash)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

从上述代码块中,我们可以了解到当调用main函数时,它会从WALLET_ADDRESS环境变量中读取传感器的钱包地址作为Tracking_ID。一旦确定了其钱包地址,就会调用getGeoCordinates函数来获取当前的纬度和经度。现在我们有了当前的纬度和经度,立即调用getCurrentTime函数来获取该时刻的当前 UNIX 时间戳。现在,所有四个变量 - Tracking_IDlatitudelongitudetimestamp - 预计将形成一个 JSON 对象。因此,调用Marshal函数将这四个值分别编组成一个 JSON 对象,在idlatitudelongitudetimestamp字段下。结果变量jsonData现在准备好更新到 MóiBit 上专用于该传感器的相应位置历史文件中。现在,通过传递钱包地址变量Tracking_IDjsonData来调用updateLocationHistory函数。一旦在 MóiBit 中更新了最新的位置数据,该函数将最新的 CID 作为latest_cid返回给主函数。现在,这个 CID 用于通过智能合约在区块链上签署一个新的交易。一旦交易被签署并放置在以太坊科文区块链上,交易哈希将作为txnHash返回。相同的哈希被后缀到一个 URL 上以进行预览。生成的 URL 可用于查看交易的状态。这总结了main函数。

  1. 由于main首先需要地理坐标,因此它调用了以下定义的getGeoCordinates函数:
def getGeoCordinates():
   res = requests.post(url, data=myobj)
   geoCordinates = res.json()['location']
   lat = *float*("{:.7f}".format(geoCordinates['lat']))
   long = *float*("{:.7f}".format(geoCordinates['lng']))  return (lat, long) # Accuracy is not considered in the POC because optimizations are out of scope
  • 1
  • 2
  • 3
  • 4
  • 5

从上述代码块中,我们可以看到getGeoCordinates函数正在向 Google Maps 地理位置 API 发送 POST API 调用,以及凭据一起发送。API 响应res被解析以提取纬度和经度。您可以观察到我们将两个值的小数度舍入到七位数。您还可以观察到我们忽略了accuracy字段,因为优化此解决方案仅仅是本书的范围之外。

  1. 一旦main函数接收到latlong值,它现在立即通过调用以下定义的getCurrentTime函数来捕获时间戳:
def getCurrentTime():
   dt = datetime.datetime.utcnow()
   timestamp = time.mktime(dt.timetuple())
   timestamp = *int*(timestamp)
   return timestamp
  • 1
  • 2
  • 3
  • 4
  • 5

正如您从上述代码块中所看到的那样,getCurrentTime函数只是根据传感器的本地时间捕获 UNIX 时间戳并返回它。

  1. 现在我们已经拥有了所有必要的数据,main函数需要以 MóiBit 可呈现的格式呈现它。因此,调用以下定义的Marshal函数:
def Marshal(Tracking_ID, lat, long, timestamp):
   data = {"id": Tracking_ID,
           "latitude": lat,
           "longitude": long,
           "timestamp": timestamp
           }   return data
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

正如您所见,Marshal函数只是取这四个值并以 JSON 格式返回数据的编组版本。

  1. 准备好传感器的新位置数据后,将调用 updateLocationHistory 函数,该函数在此链接中定义:github.com/PacktPublishing/Hands-On-Artificial-Intelligence-for-Blockchain/blob/master/Chapter08/iot-client-code/python/main.py

如您所见,updateLocationHistory 函数通过调用 checkIfFileExists 函数检查 MóiBit 上是否已经存在传感器的专用文件。根据 checkIfFileExists 函数返回的状态值,如果 MóiBit 上不存在传感器的专用文件,则创建一个新文件。创建后,将 JSON 编组数据上传到新创建的文件,并将文件的 CID 返回到 main 函数作为 latest_cid。然而,如果 MóiBit 上已经存在传感器的专用文件,则首先下载传感器的当前位置历史记录,然后将新编组的位置数据追加到其中。追加后,更新的位置历史记录现在上传到 MóiBit。作为文件的新更新,将带有新位置数据的文件的 CID 哈希返回到 main 作为 latest_cid

在出现任何错误的情况下,会打印适当的响应错误代码,以及响应体和标头中的数据。

  1. checkIfFileExists 函数定义如下:
def checkIfFileExists(*walletAddress*):
   print("checkIfFileExists(): Checking if /dictao/" +
         walletAddress+".json exists.")
   pre_payload = {"path": "/dictao/"}
   payload = json.dumps(pre_payload)
  conn.request("POST", moibit_url+"listfiles", payload, moibit_header_obj)
   res = conn.getresponse()
   responseObject = json.loads(res.read())
   if res.status == 200:
       if responseObject['data']['Entries'] == None:
           print("checkIfFileExists(): /dictao/" +
                 walletAddress+".json does not exist!")
           return False, ""
       else:
           for fileObject in responseObject['data']['Entries']:
               if walletAddress+".json" == fileObject['Name']:
                   print("checkIfFileExists(): Found /dictao/"+walletAddress +
                         ".json "+"with the hash "+fileObject['Hash'])
                   return True, fileObject['Hash']
   print("checkIfFileExists(): /dictao/" +
         walletAddress+".json does not exist!")
   return False, ""
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

checkIfFileExists 函数遍历整个 dictao 文件夹,检查是否有专门用于传感器的文件。由于文件名与钱包地址相同,因此只需传递传感器的钱包地址,然后检查 MóiBit 上是否存在专门用于传感器的文件即可。如果调用传感器的钱包地址是 0xABC,那么此传感器在 MóiBit 上的专用文件将是 0xABC.json。如果在您各自的 MóiBit 开发者帐户的根文件夹 dictao 下找到文件,则向 updateLocationHistory 函数返回布尔值 True。如果不存在这样的文件,则返回 False

  1. 最后,一旦 main 函数接收到传感器位置数据的更新 CID 哈希,就需要在区块链上维护此位置更新的证明。因此,它调用 CommitTxn 函数,其定义如下:
def CommitTxn(id, cid):
   print("CommitTxn(): Connecting to the ethereum network")
   w3 = Web3(Web3.HTTPProvider(blockchain_url))
   print("CommitTxn(): Initializing the live contract instance at " +
         os.environ['PROOF_SMART_CONTRACT_ADDRESS'])
   contract = w3.eth.contract(
       os.environ['PROOF_SMART_CONTRACT_ADDRESS'], *abi*=abi)

   print("CommitTxn(): Creating a raw transaction to call smart contract function setLatestCID()")
   nonce = w3.eth.getTransactionCount(os.environ['WALLET_ADDRESS'])
   setLatestCID_txn = contract.functions.setLatestCID(
       os.environ['WALLET_ADDRESS'],
       cid,
   ).buildTransaction({
       'chainId': 42,
       'gas': 3000000,
       'gasPrice': w3.toWei('1', 'gwei'),
       'nonce': nonce,
   })
   print("CommitTxn(): Signing the raw transaction with private key")
   signed_txn = w3.eth.account.sign_transaction(
       setLatestCID_txn, *private_key*=os.environ['WALLET_PRIVATE_KEY'])
   w3.eth.sendRawTransaction(signed_txn.rawTransaction)

   tx_hash = w3.toHex(w3.keccak(signed_txn.rawTransaction))
   tx_receipt = w3.eth.waitForTransactionReceipt(tx_hash)
   print("CommitTxn(): Sucessfully updated the CID in the blockchain. Transaction receipt:\n", tx_receipt)
   print("CommitTxn(): Checking the new/latest hash for the wallet from blockchain: " +
         contract.functions.getLatestCID(os.environ['WALLET_ADDRESS']).call())
   return tx_hash
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

从上面的代码块中,您可以看到CommitTxn函数正在使用钱包地址和最新的 cid,分别使用idCID。该函数现在通过连接到由 Infura 运行的以太坊节点之一的新的web3对象与以太坊 Kovan 区块链网络进行连接。连接到以太坊 Kovan 区块链网络后,它连接到在区块链上部署的智能合约,通过传递合约地址。合同地址也作为PROOF_SMART_CONTRACT_ADDRESS传递到 shell 中,可以通过os.environ读取。使用这个地址,合同变量被初始化,并指向区块链上的智能合约实例。现在,通过使用输入数据idCID,创建一个新的交易。通过 Python 的web3库提供的buildTransaction调用创建了这个事务。chainId字段表示以太坊 Kovan 区块链的网络 ID。

要了解每个参数传递给此函数的更多信息,建议您阅读web3.py发送原始交易的文档:web3py.readthedocs.io/en/stable/web3.eth.account.html#sign-a-contract-transaction

一旦交易已建立、发送并通过网络验证,将获得一个收据作为tx_receipt。我们等待这个收据,然后将交易哈希作为tx_hash发回main函数以供参考。这总结了CommitTxn函数。

现在位置历史数据已更新,并且在区块链上有了证据,让我们学习如何应用 AI 技术以预测潜在的感染。

训练模型

在本节中,我将带您了解利用 AI 技术构建接触者追踪算法所需的所有步骤。我们将经历训练 AI 模型以预测结果或值时的常见步骤。借助我们的样本 DIApp,我们将了解训练 AI 模型时采取的 10 个常见步骤,并重新应用到我们的用例中。我们将使用 Jupyter Notebook 来解释所涉及的每个步骤。

构建基于 AI 的接触者追踪算法的步骤如下:

  1. 准备训练数据集: 如前文所述,每个传感器的位置历史存储在 MóiBit 的单独文件中。每个文件作为主 DataFrame 的子集,将用于识别潜在的感染。一个单独传感器的 DataFrame 如下所示:

** 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传**

图 8.3: 在 Jupyter Notebook 中使用 pandas DataFrame 视图捕获的单个传感器的位置历史

为了智能地检测潜在感染并对感染进行集群化,我们将使用 DBSCAN 算法。

DBSCAN 是一种数据聚类算法,它将高密度数据点与低密度点分离开来。这个算法是由 Martin Ester、Hans-Peter Kriegel、Jörg Sander 和 Xiaowei Xu 在 1996 年提出的。基本上,DBSCAN 算法将在某个空间中彼此靠近的一组数据点聚类在一起,并将离群值作为噪音忽略掉。

为了理解位置历史及其在 DBSCAN 中的适用性,我们生成了一个具有预设的随机 ID、时间戳和纬度-经度值的训练数据集。我们自己指定随机值并不容易也不安全。因此,我们使用了JSON 生成器工具。JSON 生成器允许用户以可定制的方式生成具有随机值的 JSON 文档。这是通过编程 JSON 生成器为给定字段使用特定值来实现的。

我们使用以下语法生成了 100 个具有随机 ID、时间戳、纬度和经度值的 JSON 对象:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Fig 8.4: 生成训练数据集所需的模式在 JSON Generator 上

如前面的截图所示,模式指定了数据集中所需的所有四个属性。由于这是一个数据集,id属性具有一组虚拟钱包地址。timestamp属性也具有一组 UNIX 时间戳,范围在 24 小时内,每个之间都至少间隔 1 小时。最后,latitudelongitude属性也已被指定为在指定的最小值和最大值之间以七位小数精度接受任何值。

从前述的模式中,我们可以生成确切的 100 个随机 JSON 对象。但这可能不够。因此,我重新生成了一些随机 JSON 对象,形成了由 1,000 个 JSON 对象组成的训练数据集。我将前述模式生成的 100 个 JSON 对象重复 10 次。得到的数据集是 1,000 个随机 JSON 对象的数组。

可以通过执行pandas库的head()函数来在 Jupyter Notebook 上查看得到的数据集,如下所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Fig 8.5**:** 在 Jupyter Notebook 上调用 df.head()函数的输出

如前述截图所示,我们可以看到在 Jupyter Notebook 上已经创建并读取了一个训练数据集。

  1. 分析训练数据集:现在,我们已经创建了一个具有随机值的训练数据集,并将其加载到了 Jupyter Notebook 中,我们将对其进行进一步分析,以更好地理解数据集。这个过程被称为分析训练数据集。这一步可以帮助我们更好地了解数据点的性质以及它们的分布情况。

首先,我们通过调用info函数来描述如何获取有关数据集的顶线信息:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Fig 8.6**:** 在 Jupyter Notebook 上调用 df.info()函数的输出

从前面的截图中,我们可以观察到数据集中有 1,001 个条目。info 函数调用的输出还列出了 DataFrame 中的所有列,包括它们的类型。它还检查是否有任何空值。由于我们为 JSON 生成器设计的模式非常具体,因此 DataFrame 的任何行中都没有空值。

接下来,我们需要通过使用 describe() 函数让 pandas 描述数据集来了解数据点的分布:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 8.7:Jupyter Notebook 上 df.describe() 函数调用的输出

从前面的截图中,我们可以观察到相同 DataFrame 的统计摘要。我们可以看到,count 表示训练 DataFrame 中非空行的总数,df.mean 分别表示纬度和经度列的平均值约为 12.973009 和 77.621612。 min 分别表示 DataFrame 中记录的纬度和经度的最小值分别为 12.879612 和 77.445554。 max 分别表示 DataFrame 中记录的纬度和经度的最大值分别为 13.069226 和 77.798141。尽管 countmeanminmax 突出了边界,但它们并不解释数据点的分布。但是,数据点的分布可以通过 std25%50%75% 参数来理解。让我们了解一下它们的含义。

std 数值上表示纬度和经度值与平均纬度和经度值的距离有多远。在本例中,这些值分别为 0.054532 和 0.101059。由于我们在 JSON 生成器模式中输入了最小值和最大值范围,我们的训练数据集中的 std 值很低。尽管在 DataFrame 中的所有行看起来都很接近,但由于每个行之间的一次小数度变化或转变,它们彼此之间相隔数公里。

如果 df DataFrame 被排序,DataFrame 的前 250 列将具有从 12.879612 到 12.925427 的纬度值范围。同样,经度值将从 77.445554 到 77.535446 范围内。这由结果参数 25% 表示。通过在分析时级联 250 行,可以解释剩余参数 50%75%max

还值得注意的是,摘要有助于了解数据点是否分布均匀。

  1. 特征工程:特征工程通常涉及识别关键数据点,转换数据点,并对其进行整理以进行更好的分析。由于我们的数据集中没有缺失值或 NaN 值,我们将不会对数据集进行任何特征工程。

  2. 探索性数据分析:接下来,我们将尝试对数据集进行可视化分析。由于我们正在处理地理数据,最好通过将它们与真实地图相对比来理解数据点。我们将使用 Plotly 库在真实地图上绘制纬度-经度坐标。通过这样做,我们将获得以下可视化效果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 8.8**:在 Jupyter Notebook 上使用 Plotly 绘制数据点的图形输出

从上述截图中,我们可以看到所有数据点都被绘制在 Bengaluru 城市的许多区域。这是因为我们在训练数据集中设置了限制。正如您所看到的,我们在 JSON 生成器模式中手动设置了纬度和经度的限制。因此,在 Bengaluru 城市边界之外我们看不到任何其他数据点。在尝试此教程时,您可能希望根据您的要求更改它,并在 JSON 生成器模式中提到一个特定城市的纬度-经度范围,或者保持非常宽泛。

除了在地图上绘制纬度-经度数据外,我们还可以使用散点图来分析数据点。在散点图下,我们将纬度-经度值绘制在一个二维图上,其中x轴表示纬度,y轴表示经度。

现在,让我们来看一下在我们的训练数据集上的一个更简单版本的散点图:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 8.9:在 Jupyter Notebook 上使用 Seaborn 绘制数据点的散点图输出

从上述截图中,我们可以观察到在地理空间中随机分布的所有 10 个 ID 的位置历史。每种颜色代表一个 ID,而图表上的所有彩色点代表其相应的位置历史。您可以通过应用更多参数化过滤器并使用其他图表进行分析(包括但不限于箱形图、联合图、热图等)来变得更有创意。

要了解有关可视化您的训练数据集的更多信息,我建议您使用 Seaborn 和 Plotly。要了解有关 Seaborn 的更多信息,请访问seaborn.pydata.org/。要了解有关 Plotly 的更多信息,请访问plotly.com/

  1. 训练数据集的分割:大多数情况下,我们将训练数据集分为两部分。一部分用于训练模型,而另一部分用于预测值并将预测值与训练数据集中的实际值进行比较。由于我们正在对数据进行聚类,并且不使用基于回归的模型来实际预测值,因此无需拆分我们的训练数据集。

  2. 选择模型:在执行动物和物体的数字接触追踪时,一种方法是使用可以根据新发现的医疗数据和方法进行定制的聚类算法。虽然有许多聚类方法,例如 K-means、层次聚类和基于密度的聚类,但在这个示例应用程序中,我们选择了基于密度的聚类,因为它简单易懂,还提供了一些可应用于实际用例的定制。

K-means 聚类也很容易理解,但通常在分析地理坐标和空间数据时声誉不佳。虽然层次聚类可以帮助我们分析空间数据,但不像 DBSCAN 那样提供简单的学习曲线。

我们将使用 scikit-learn 机器学习库中提供的 DBSCAN 算法。

关于可用特征的更多信息,请访问以下链接:scikit-learn.org/stable/modules/generated/sklearn.cluster.DBSCAN.html

  1. 训练和拟合:现在我们已经创建了训练数据集,对其进行了分析并可视化了,我们需要使用训练数据集使用 DBSCAN 算法训练我们的模型,以对数据点进行聚类并明确识别它们。

根据全球许多从业者接受的医疗规范,普遍认为如果人们不保持至少 6 英尺的最小安全距离,我们可能会感染冠状病毒。因此,我们假设相同的接受度量单位用于身体距离,并创建我们的模型,以便对彼此连接且距离小于或等于 6 英尺的数据点进行聚类。

基于我们迄今为止讨论的标准,我们将使用 Jupyter Notebook 定义模型如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Fig 8.10:使用训练数据集初始化 DBSCAN 模型

从上述截图中,我们可以观察到基于 DBSCAN 算法初始化了一个model。输入给 DBSCAN 算法的是训练数据集 df 本身。除了 df,还发送了 epsilon 变量。Epsilon 是任意两个给定数据点之间的最大距离。我们选择 0.0018288 作为epsilon 变量的值,因为它是 6 英尺的公里等效值。这是设置基于 DBSCAN 的模型时的关键参数。除了epsilon,还向 DBSCAN 算法发送了 min_sample 变量以初始化模型。min_sample 定义了在epsilon 半径内需要存在的最小数据点数以形成一个聚类。我们选择 2 作为 min_sample 变量的值,因为传播感染需要至少两个参与者。

最后,我们需要选择度量函数,根据该函数计算数据点之间的距离。由于我们正在处理地理坐标,我们选择haversine作为度量函数,以计算数据点之间的距离以形成集群。

要了解更多关于 haversine 地理距离公式的信息,请访问以下维基百科文章:en.wikipedia.org/wiki/Haversine_formula

一旦模型被初始化,集群就会形成,并且通过我们向训练数据集添加名为cluster的新列将其分配给相应的数据点。现在,您可以看到相同的 DataFrame 通过增加一个名为 cluster 的列进行了更新,如下面的屏幕截图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 8.11**:**通过在 Jupyter Notebook 上调用 df.head()函数调用读取带有新列集群的 DataFrame 的更新内容

当集群在图上绘制时,x轴代表纬度,y轴代表经度,结果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 8.12:散点图显示所有集群,包括噪声

从前面绘制的图表中,我们可以观察到有 74 个正常集群,范围从cluster-0cluster-73。还重要的是观察到还有一个名为cluster–1的集群,它代表所有不属于任何集群的数据点。这样的数据点被视为噪声,因此它们与我们进一步的接触追踪努力无关。如果传感器连接到可能已被隔离并且没有与戴传感器的另一个动物或物体进行交互的动物或物体,则会发生噪声数据点。

由于前面的图中有很多噪声,因此很难分析数据,因此让我们继续删除 DataFrame 中被视为噪声的所有数据点。

我们可以去除噪声并重新绘制图形如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 8.13**:**再次绘制前去除噪声集群

从前面的屏幕截图中,我们可以观察到我们已经删除了所有属于cluster -1的行。

结果图表更清晰,可以如下观察:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 8.14:重新绘制没有噪声的集群

从前面的屏幕截图中,您可以观察到 DBSCAN 模型已成功初始化并配置了参数。现在,让我们检查模型的准确性。

  1. 评估模型:通常,预测模型使用逻辑回归器或分类器。但在我们的示例应用程序中,我们不是在预测任何新值;我们只是使用机器学习将数据分割成更小的、定制的集群。

现在我们已经能够将数据集分成两个或两个以上数据点的簇,我们需要检查聚类是否有效。 简而言之,我们需要检查模型的基本正确性。 在我们的情况下,我们可以通过检查模型是否生成任何误报来进行基本评估;也就是说,我们需要检查模型是否将两个或两个以上的数据点聚类在一起,这些数据点的 haversine 距离大于指定距离。 如果这样的数据点被聚合到一个新的簇中,我们可以很容易地得出结论,即模型具有误报的限制。 同样,我们还需要检查模型是否容易产生错失检测;也就是说,我们需要检查模型是否将两个或两个以上的数据点聚类在一起,这些数据点的 haversine 距离小于指定的有效距离,但模型未能将其识别为潜在的感染。 由于本书的范围有限,我们将通过做一个观察来得出结论,即当前模型似乎会为 haversine 距离高达 10 米的数据点产生误报。 就错误的遗漏而言,我们没有观察到这样的异常或限制。

  1. 参数调整:DBSCAN 算法只需要三个主要的输入参数。 它们是 epsilonmin_sample 和 haversine 度量函数。 除了这些参数,当您在系统上尝试此解决方案时,还可以添加一些更多的参数。

有关其他参数的更多信息,请访问以下链接的文档:scikit-learn.org/stable/modules/generated/sklearn.cluster.DBSCAN.html

由于本书的范围有限,我不会专注于优化模型,因为它在聚类方面工作得相当不错。

  1. 预测感染:现在模型已经准备好从 MóiBit 获取实时数据,并使用先前的参数对数据点进行聚类,以预测潜在的感染情况。 当然,由于模型尚未完全调整,对于相邻数据点的误报率可能高达 10 米,这超出了本书仅关注优化样本解决方案的范围。

本节中的所有截屏都来自 Madhusudhan Kumble 的 Jupyter 笔记本。 笔记本的完整实现可在他的 GitHub 上找到:github.com/madatpython/PRANA/blob/packt/prana_contact_tracing_using_DBSCAN.ipynb

现在我们已经了解了如何将 DBSCAN 算法应用于我们的用例,并且对其局限性有了一定的了解,让我们将这个模型合并到后端 API 中。

后端开发

在本节中,我们将讨论接触追踪后端 API 的设计和结构。后端 API 负责通过读取钱包地址并返回任何其他潜在受感染传感器的钱包地址来执行接触追踪。

与传感器应用代码类似,我将使用 Python 语言实现接触追踪后端 API,因为它更容易弥合 AI、物联网和区块链社区之间的语言差距。

像往常一样,我们首先记录下所有必要的 import 语句,以便继续进行 API 的开发:

import os
import sys
import flask
from flask import request, jsonify
from web3 import Web3
import web3
import json
import http
from flask_cors import CORS
import datetime as dt
import pandas as pd
from sklearn.cluster import DBSCAN
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

请确保您通过 pip install 命令安装了所有外部软件包。

为了开发接触追踪后端 API,我将使用 Flask 框架。您可以在此处阅读有关 Flask Web 应用程序框架的更多信息:flask.palletsprojects.com/en/1.1.x/

我们通过定义 flask Web 应用程序来初始化 API,如下所示:

app = flask.Flask(__name__)
CORS(app)
app.config["DEBUG"] = True
  • 1
  • 2
  • 3

正如您所见,API 允许互联网上的任何来源查询该 API。这是通过使用 CORS(app) 实现的。另外,我已经将应用设置为调试模式,以帮助您在按照这些说明操作时更多地接触到 API。

通过以下脚本指令来制作此 API 脚本的入口点:

app.run()
  • 1

对于那些不熟悉 Flask 框架的人来说,这相当于我们在讨论传感器的 IoT 客户端代码时所讨论的 main 函数。

与其他程序类似,此 API 也以单个 Python 脚本的形式表现。因此,我们将不得不使用一些变量。

让我们在以下代码块中查看它们:

blockchain_url = 'https://kovan.infura.io/v3/' + \
   os.environ['WEB3_INFURA_PROJECT_ID']

abi = """[{"anonymous": false,"inputs": [{"indexed": false,"internalType": "address","name": "deviceID","type": "address"},{"indexed": false,"internalType": "string","name": "latestCID","type": "string"}],"name": "MappingUpdated","type": "event"},{"inputs": [{"internalType": "address","name": "deviceID","type": "address"},{"internalType": "string","name": "latestCID","type": "string"}],"name": "setLatestCID","outputs": [],"stateMutability": "nonpayable","type": "function"},{"inputs": [],"name": "getDeviceIDsLength","outputs": [{"internalType": "uint256","name": "","type": "uint256"}],"stateMutability": "view","type": "function"},{"inputs": [{"internalType": "uint256","name": "index","type": "uint256"}],"name": "getIDByIndex","outputs": [{"internalType": "address","name": "","type": "address"}],"stateMutability": "view","type": "function"},{"inputs": [{"internalType": "address","name": "deviceID","type": "address"}],"name": "getLatestCID","outputs": [{"internalType": "string","name": "latestCID","type": "string"}],"stateMutability": "view","type": "function"}]"""
  • 1
  • 2
  • 3
  • 4

正如您从前面的代码块中可以观察到的,我们正在使用与传感器应用相同的技术来访问区块链网络,并通过 ABI 访问智能合约。

同样,我们还重用了与 MóiBit 交互所需的变量:

conn = http.client.HTTPSConnection("kfs2.moibit.io")
moibit_url = 'https://kfs2.moibit.io/moibit/v0/'
moibit_header_obj = {
   'api_key': os.environ['MOIBIT_API_KEY'],
   'api_secret': os.environ['MOIBIT_API_SECRET'],
   'content-type': "application/json"
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

正如您从前面的代码块中可以观察到的,相同的变量用于从 MóiBit 访问资源。与传感器应用不同,这些变量将用于此脚本中读取每个传感器的位置历史记录并构建数据集以进行进一步分析。总而言之,所有这些变量都用于只读目的。

当运行脚本时,它按照以下方式逐步回退到定义的主页函数:

@app.route('/', *methods*=['GET'])
def home():
   return "<h1>DICTAO - Decentralized Intelligent Contact Tracing of Animals and Objects</h1><p>This is a simple demonstration of applying blockchain, decentralized storage and AI to solve the COVID-19 crisis.</p>"
  • 1
  • 2
  • 3

如名称所示,home 函数是用于响应发送到 API 根的基于 GET 的 API 请求的处理程序函数。在这种情况下,我正在返回简单的 HTML 内容。

为了确保我们对任何非法请求或无效请求发送正确的响应,我们已经定义了 page_not_found 处理程序函数,如下所示:

@app.errorhandler(404)
def page_not_found(*e*):
   return "The given ID could not be found", 404
  • 1
  • 2
  • 3

如前面的代码块所示,此函数返回一个字符串响应和一个 HTTP 响应代码 404,表示文件/资源未找到

除了非法或无效的客户端请求,我们还需要涵盖可能发生的一些内部错误。这可以通过定义internal_server_error函数来实现,如下所示:

@app.errorhandler(500)
def internal_server_error(*e*):
   return e, 500
  • 1
  • 2
  • 3

正如前面的代码块所示,当 API 程序调用internal_server_error函数时,除了错误或异常之外,还将将其返回给客户端,同时返回 HTTP 响应代码 500,这意味着服务器上发生了内部错误。

现在,我们已经通过设计相关通信来涵盖了 API,让我们专注于 API 程序的主要逻辑。我们的 API 将响应在/api/v0/get_infections端点向 Web 客户端发出的请求。例如,如果 API 托管在example.com上,则 API 调用必须发送到以下 URL:example.com/api/v0/get_infections

现在,让我们继续支持此类 API 调用的逻辑。以下是代码链接github.com/PacktPublishing/Hands-On-Artificial-Intelligence-for-Blockchain/blob/master/Chapter08/backend-contact-tracing/server.py

现在为/api/v0/get_infections端点设置了新的应用程序路由器。此路由器接受的 API 调用类型已设置为GET。这意味着服务器正在等待 Web 客户端的响应。 get_infections是处理抵达该端点的 API 调用的处理程序函数。正如您可能从代码中预测的那样,get_infections正在将潜在感染的钱包地址列表返回给 Web 客户端。

在本节中,钱包地址被表示为ID,因为它与后端和数据集的设计相一致。

当 API 从 Web 客户端接收到钱包地址时,会检查是否存在任何可能的数据损坏或丢失。如果收到的 ID 不是空字符串,则 API 通过检索智能合约上注册的所有钱包地址来进行下一步操作。对于在智能合约中注册的每个钱包地址,都会从区块链中检索到每个钱包的最新位置历史 CID。此外,每个 CID 都用于从 MóiBit 检索每个已注册传感器的位置历史数据。

相应的代码可以在以下代码块中看到:

def getLatestCID(*id*):
   w3 = Web3(Web3.HTTPProvider(blockchain_url))
   contract = w3.eth.contract(
       os.environ['PROOF_SMART_CONTRACT_ADDRESS'], *abi*=abi)
   cid = ""
   try:
       cid = contract.functions.getLatestCID(id).call()
   except web3.exceptions.ValidationError:
       print("ID does not exist!")

       return ""
   except:
       print("Some other error occured!")
       return ""
   else:
       print(cid)
       return cid
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

从上述代码块中,您可以观察到getLatestCID函数用于获取传感器的相应钱包地址的最新 CID,一旦get_infections函数检索到每个钱包地址。从智能合约中读取的 CID 值将返回给调用方函数get_infections

现在get_infections处理函数包含了每个已注册传感器对应的钱包地址的 CID 哈希,它被用于从 MóiBit 检索位置历史数据,如下所示:

def getJsonDataFromMoiBit(*cid*):
   pre_payload = {"hash": cid}
   payload = json.dumps(pre_payload)
   conn.request("POST", moibit_url+"readfilebyhash",
                payload, moibit_header_obj)
   res = conn.getresponse()
   if res.status == 200:
       responseObject = json.loads(res.read())
       print(
           "updateLocationHistory(): Appending the captured data to historic data.")
       return responseObject
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

从前面的代码块中,你可以看到从getLatestCID函数检索到的cid被传递到getJsonDataFromMoiBit函数中。这个 CID 被用于检索相应传感器的最新位置历史数据。

现在数据可供分析后,我们在前一节中设计的基于 AI 的接触追踪算法就会出现。

AI 模型被纳入以下功能中:

def get_infected_ids(*input_id*):
   basePath = os.path.dirname(os.path.abspath('live_dataset.json'))
   dflive = pd.read_json(basePath + '/' + 'live_dataset.json')

   epsilon = 0.0018288 # a radial distance of 6 feet, which is medically presribed
   min_sample = 2
 model = DBSCAN(*eps*=epsilon, *min_samples*=2, *metric*='haversine').fit(dflive[['latitude', 'longitude']])
   dflive['cluster'] = model.labels_.tolist()

   input_id_clusters = []
   for i in range(len(dflive)):
       if dflive['id'][i] == input_id:
           if dflive['cluster'][i] in input_id_clusters:
               pass
           else:
               input_id_clusters.append(dflive['cluster'][i])

   infected_ids = []
   for cluster in input_id_clusters:
       if cluster != -1:
           ids_in_cluster = dflive.loc[dflive['cluster'] == cluster, 'id']
           for i in range(len(ids_in_cluster)):
               member_id = ids_in_cluster.iloc[i]
               if (member_id not in infected_ids) and (member_id != input_id):
                   infected_ids.append(member_id)
               else:
                   pass
   return infected_ids
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

如你所见,get_infected_ids函数可以被调用来获取所有潜在感染的 ID。当调用时,该函数基本上会对在运行时生成的实时数据集进行聚类,并检查给定的 ID 是否存在于任何一个聚类中。如果 ID 存在于聚类中,则认为所有相邻的 ID 受到冠状病毒感染的影响。同一聚类中的每个相邻 ID 都会被附加到一个数组中,并且对潜在感染的 ID 的搜索会继续,直到函数达到最后一个聚类。一旦识别出潜在感染的 ID,它们就会被返回给调用方函数get_infections

开发前端

在本节中,我们将讨论接触追踪仪表板 Web 应用程序的设计和结构。简而言之,我们称之为仪表板。仪表板的目的是帮助我们通过输入疑似与动物或物体相关联的传感器的 ID 或钱包地址来识别所有潜在感染的 ID。

仪表板应用程序仅由两个组件组成:托管静态文件的 Express 服务器和一个index.html HTML 文件,该文件从用户那里读取输入,调用接触追踪 API,并打印后端 API 返回的所有 ID。

仪表板 Web 服务器代码如下:

const express = require('express')
const app = express()
const port = 3000
app.use(express.static('public'));
app.get('/', (*req*, *res*) => res.send('Welcome to DICTAO: Contact tracing web app!'))
app.listen(port, () => *console*.log(`DICTAO: Contact tracing web app listening at http://localhost:${port}`))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

正如你从前面的代码块中所观察到的那样,这是一个简单的基于 Express 的 Node.js 应用程序,它在本地端口 3000 上启动一个 Web 服务器,并开始为访问服务器根目录的用户托管index.html文件。Web 服务器还记录客户端发出的所有请求。

你可以访问仪表板的标记代码github.com/PacktPublishing/Hands-On-Artificial-Intelligence-for-Blockchain/blob/master/Chapter08/frontend-tracking-dashboard/public/index.html

从上述代码块中,我们可以观察到标记代码index.html托管了一个简单的表单,用于从用户那里获取疑似传感器的钱包地址。用户点击提交按钮时,输入将被确认。点击提交按钮时,将调用 JavaScript 的getInfectedIDs函数。getInfectedIDs函数负责执行基本表单验证,并在出现任何故障输入时向用户发出警报。如果没有故障输入,则该函数负责调用接触追踪后端 API 以检索潜在感染传感器的列表。如果它从 API 收到非空响应,则会在表中填入收到的 ID 或钱包地址。

现在,让我们来看看可用于测试我们的示例 DIApp 的一些测试工具。

测试示例 DIApp

不幸的是,由于本书的范围有限,我们无法在测试方面涉及太多内容,所以在本节中我将指引您查阅一些相关资源。

  • 智能合约测试:Truffle 是 Solidity 智能合约开发中最著名的工具链之一。您可以按照其文档中提到的测试说明进行操作,文档链接在这里:www.trufflesuite.com/docs/truffle/testing/testing-your-contracts

  • 传感器实现测试:传感器应用是使用基本的 Python 编程技能实现的。您可能已经观察到脚本与 Google 地图地理定位 API、以太坊和 MóiBit 进行交互。因此,我建议您对 HTTP 客户端代码进行大量测试。我强烈建议您使用尽可能多的测试用例进行单元测试。您可以通过查看以下链接上提供的 Python 文档来了解有关测试基本 Python 代码的所有信息:docs.python-guide.org/writing/tests/

  • 测试 AI 模型的准确性:使用平均绝对误差MAE)测试 AI 模型非常简单直接。但是,在我们的示例 DIApp 中,我们并未使用回归器或分类器。因此,我建议您通过添加新数据点来对数据集进行调整,以便手动验证结果。您可以检查模型在此类边缘情况下是否会出现假阳性或假阴性。这是您熟悉地理空间分析的机会!根据我的经验,在计算无监督聚类算法的准确性方面,找到相关内容非常少见。

然而,还有一些隐藏的资源。我建议你阅读 www.cs.kent.edu/~jin/DM08/ClusterValidation.pdf 以了解更多关于通过各种方法测量聚类算法准确度的内容。您还可以访问 scikit-learn 文档,其中强调了一些聚类性能方面:scikit-learn.org/stable/modules/clustering.html#clustering-performance-evaluation

  • 测试接触追踪后端 API:由于我们使用 Flask 框架编写了我们的 API,我强烈建议你访问 Flask 官方测试文档以获取有关测试 Flask Web 应用程序的更多信息:flask.palletsprojects.com/en/1.1.x/testing/。我建议你为脚本中定义的每个路由和处理程序函数测试每个路由,使用超过一个测试用例进行测试。

  • 测试 Web 仪表板前端应用程序:最后,前端 Web 应用程序是一个简单的实现。由于 Node.js 端没有太多需要测试的内容,我建议你在 index.html 中测试内联 JavaScript 函数,以获得更好的表单验证、分页和其他可以改善用户体验的边缘情况。

现在你已经基本了解了测试工具和技术,让我们部署样本 DIApp 解决方案。

部署样本 DIApp

到目前为止,在本章中,我们已经能够解释问题陈述,设计解决问题的方案,构建解决方案,并就测试提出了一些建议。如果你自己部署此应用程序,整个努力将会是有意义的。因此,在接下来的几节中,我将建议你注册所需的适当服务,以部署此样本 DIApp。我还会指导你使用另一个重要的特殊配置管理软件在本地系统上设置运行这些程序所需的内容。

注册 Google 地图 API

正如你所知,我们使用 Google 地图地理位置 API 获取传感器的当前纬度和经度坐标。因此,请按照以下文档中的说明操作,并获取自己的 API 密钥:developers.google.com/maps/premium/apikey/geolocation-apikey。确保不要与任何人共享您的 API 密钥。重要的是,您不要在开源代码托管平台上传播 API 密钥。如果您的 API 密钥被暴露且仍然有效,有人可能会利用此凭据,并且这将给您带来一张昂贵的发票。如果您认为您的 API 密钥可能已经暴露,您可以删除或禁用它,并为我们的样本 DIApp 重新生成一个新的 API 密钥。

注册 MóiBit

正如你所知,我们使用 MóiBit 分布式文件存储 API 来存储每个传感器的位置历史数据。因此,你需要注册 MóiBit API。MóiBit 的注册流程非常简单。你可以在以下链接注册 MóiBit:account.moibit.io/#/signup。一旦你验证了你的电子邮件地址和密码,将为你生成一个新的 API 密钥。

使用这些凭据,你应该在根文件夹下创建一个新文件夹。请在那里创建一个新文件夹,并将其命名为 dictao,因为它已经硬编码到我们当前的实现中。这样可以确保所有文件都将被保存在一个专用文件夹中。这也将帮助你在不烦乱或混乱的情况下使用 MóiBit 用于其他应用程序。再次确保你的 API 密钥不可见或对公共可访问。

注册 Infura

我们使用 Infura 连接到以太坊 Kovan 区块链。你需要创建一个新的 Infura 账户并创建一个新项目。一旦你创建了一个新项目,你将需要复制项目的凭据,并使用它们来获得使用 Infura 基础设施的专用访问权限连接到区块链。Infura 的注册流程也非常简单。你可以在这里注册 Infura 账户:infura.io/register

更新你的本地 justfile

正如你可能已经观察到的,我们在样本 DIApp 中使用了很多凭据。为了确保这些凭据得到安全管理,我建议你在主机上管理一个隔离的文件,可以将这些凭据私下共享给相应的进程。为了实现这一点,我们将使用 just 命令。你可以通过遵循 GitHub 上提供的说明安装 just 命令:github.com/casey/just#installation。请按照最适合你系统的安装说明操作,并确保你创建一个 justfile,该文件不受 git 协议跟踪。这可以通过将名称 justfile 添加到 .gitignore 文件中实现。

通过用适当的凭据替换问号填写必要的字段,填写你现在已经注册的服务的凭据:

export GMAPS_API_KEY := "?"
export MOIBIT_API_KEY := "?"
export MOIBIT_API_SECRET := "?"
export WEB3_INFURA_PROJECT_ID := "?"
export PROOF_SMART_CONTRACT_ADDRESS := "?"
export WALLET_PRIVATE_KEY := "?"
export WALLET_ADDRESS := "?"

run-client:
    python iot-client-code/python/main.py

run-web:
    cd frontend-tracking-dashboard && node index.js

run-server:
    python backend-contact-tracing/server.py

install-dependencies:
    pip install --user -r requirements.txt
    cd frontend-tracking-dashboard && npm install
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

根据你编写源代码的位置,你可能还需要更改源代码文件的相对路径。只需确保 justfile 在项目文件夹的根目录中,你可以在该目录中管理本章的所有源代码。

现在,你的 justfile 已经准备好启动必要的应用程序,以及你的凭据。

部署智能合约

将最终的智能合约代码粘贴到remix.ethereum.org/并在以太坊 Kovan 测试网区块链上部署合约。如果您对 Remix IDE 或智能合约开发不太熟悉,我建议您按照官方 Remix 文档提供的说明进行操作,官方 Remix 文档链接:remix-ide.readthedocs.io/en/latest/create_deploy.html

部署客户端代码到传感器

在本节中,我将向您展示如何部署传感器应用程序。您可以通过运行以下just命令来部署传感器应用程序:

just run-client
  • 1

如果您输入的凭据有效并且在服务配额内,您的客户端应用程序将运行。另外,请确保 justfile 中 Python 脚本的相对路径已更新。

部署后端 API

在本节中,我将帮助您启动接触追踪后端 API。您可以通过运行以下just命令来部署接触追踪后端 API:

just run-server
  • 1

如果您输入的凭据有效并且在服务配额之内,您的后端 API 将运行。另外,请确保 justfile 中 Python 脚本的相对路径已更新。

部署 Web 仪表板

在本节中,我将帮助您启动前端 Web 仪表板,该仪表板可用于查询任何潜在感染的后端。您可以通过运行以下just命令来部署 Web 仪表板应用程序:

just run-web
  • 1

如果您输入的凭据有效并且在服务配额内,您的仪表板应用程序将运行。另外,请确保 justfile 中 Node.js 脚本的相对路径已更新。

如果您对设置过程或代码感到困惑,您可以在以下 GitHub 链接中找到完整的实现,包括 justfile 模板:github.com/PacktPublishing/Hands-On-Artificial-Intelligence-for-Blockchain/tree/master/Chapter08。在 justfile 的相应字段中添加您的凭据,然后您应该可以轻松部署。如果您在理解代码或运行代码时遇到困难,请随时提出问题。您还可以通过分叉存储库并创建包含建议更改的拉取请求来提出对分支的改进。

回顾样品 DIApp

在本节中,我们将尝试分析所提议的样品 DIApp 的优缺点。

样品 DIApp 的优点

下面是我们提议的样品 DIApp 解决方案的一些优点:

  • 它涵盖了除人类之外的其他感染源。

  • 它有助于恢复全球经济和正常状态。

  • 它允许保险公司和组织评估供应链风险。

然而,我们必须承认和理解样品 DIApp 中的一些限制。

样品 DIApp 的限制

以下是我们提出的示例 DIApp 解决方案的一些局限性:

  • AI 算法可能存在一些误报的情况。需要进行优化。

  • 由于缺乏硬件精度、软件准确性和更好的计算复杂度方法,当前的 DIApp 实现无法投入生产使用。

  • 由于 GPS 无法识别传感器当前所在的楼层,DIApp 无法追踪室内感染。可以考虑其他替代方案,如 Wi-Fi、蓝牙、手动签到登记和 CCTV 图像分析,以提高模型的准确性。

现在,让我们来看看一些未来的增强。

未来的增强

我认为提出的示例 DIApp 仅仅是新革命的开始。您可以考虑对代码进行以下增强:

  • 除 GPS 外,使用其他输入模式获得更好的精度

  • 通过优化模型以防止误报获得更好的准确性

  • 更好的数据保留管理以保护隐私

  • 安装信标以开发热图并评估风险

你可以通过为每个建议创建新的问题或参与现有问题线程,在 GitHub 上随时与我联系。

摘要

AI 和区块链都是重要的技术,正在催化创新的步伐。这两种技术的结合预计将重新设计整个工业范式。本章阐述了我们如何使用各种 AI 技术和模型来赋能区块链及其分布式应用。我们涵盖了应用程序的演变并对比了不同类型。我们还解释了 COVID-19 大流行带来的最新问题,并讨论了如何通过以接触追踪为例的使用案例来解决这些问题。我们介绍了问题陈述、解决方案方法和技术架构,以开发一个使用 DIApp 设计模式的示例接触追踪应用程序。我们还突出了测试每个解决方案组件所需的工具,并使其更加健壮。最后,我们解释了如何注册使用解决方案的每个依赖服务。本章使您能够形成一种思维范式,即结合 AI 和区块链技术,开发旨在为下一代互联网带来生产力和健壮性的应用程序。

如果本章中 DIApp 教程激发了您的灵感,我强烈建议您将所学内容贡献给一个名为 Tracy 的实际用例。Tracy 是一个保护隐私的移动应用套件,为公民、企业和政府机构提供许多功能,以便他们处理 COVID-19 大流行及其后续。要了解有关如何为 Tracy 做出贡献的更多信息,请加入 Telegram 社区,网址为telegram.me/ProjectTracy

在下一章中,我们将覆盖构建 DIApps 的潜在用例,其中区块链、人工智能和分布式存储可用于解决具有挑战性的问题。

第九章:人工智能与区块链的未来

“让我们用区块链和人工智能言行一致!”

在本书的最后一章,我们将一窥人工智能和区块链技术的未来。我们将探讨如何将这些技术结合起来,以解决影响许多行业和我们星球的一些最大问题。在本章中,我还提出了多个建议,可作为感兴趣的学生和教职员工新项目的新想法。如果您是一名职业人士或爱好者,您仍然可以考虑将这些想法作为一个副业项目,并与愿意在闲暇时间进行新想法头脑风暴的人合作。

在本章中,我们将涵盖以下主题:

  • 人工智能和区块链的融合

  • 人工智能与区块链的未来

  • 企业中融合人工智能和区块链

  • 政府中融合人工智能和区块链

  • 金融服务中融合人工智能和区块链

  • 人力资源中融合人工智能和区块链

  • 医疗保健中融合人工智能和区块链

  • 供应链管理中融合人工智能和区块链

  • 其他领域中融合人工智能和区块链

技术要求

本章需要对区块链和人工智能有基本的概念性理解,这些理解在第一章,区块链入门,和第二章,AI 景观介绍中有所阐述。本章还需要您在第三章,AI 和区块链的特定领域应用,以及第五章,利用人工智能增强区块链中,进行新想法的头脑风暴和推测以观察结果。

本章还要求您重新应用从第七章学到的设计模式,DIApp 的开发生命周期。最后,本章可以通过提出构建能够解决许多现实世界挑战的 POC 的想法来帮助您深入研究区块链和人工智能开发。如果您能够按照第八章中阐述的步骤构建基于区块链和人工智能的智能应用程序,也将是有益的。

人工智能和区块链的融合

由于您已经到达本书的末尾,人工智能和区块链技术不再只是口头禅。以太坊等公共区块链网络上的创新金融工具管理着数十亿美元的资产。人工智能应用于预测性医疗保健、癌症研究和接触追踪 COVID-19 感染。这两种技术都以间接的方式服务于人类。正如第五章中所解释的,利用人工智能增强区块链,人工智能和区块链的结合应用正在帮助解决许多当今关键用例。

现在,您已经掌握了这两种技术的基本概念和实际技能,让我们通过一些想法,来解决一些现实世界的问题,将人工智能和区块链融合起来。

人工智能和区块链的融合未来

目前正在进行多项实验,旨在构建新一波的数字解决方案,其中人工智能和区块链可以共存,以提供能够加快决策速度并为所有利益相关方提供所需透明度的最佳解决方案。一些公司已经发布了产品和商业解决方案,为消费者和企业业务提供了这两种技术的融合。

我们需要明白,这种融合刚刚开始,因为我们还没有探索最佳的人工智能技术与可行的区块链和去中心化存储网络的结合。

在下图中,我提供了 DIApp 的混合解决方案架构的一般表示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 9.1:DIApp 的参考解决方案架构

上图是 DIApp 解决方案的参考架构的图示表示。我已经确认了解决方案中涉及的所有主要资源和利益相关方,跨越五个层面。我以分层格式呈现了这一点,类似于开放系统互联OSI)模型,以便更好理解这个概念。我们已经了解了如何在第八章中使用多个区块链平台和人工智能技术,DIApp 的实施。在本章中,我们将以一个涉及所有共同利益相关方和主要技术组成部分的解决方案的方式来呈现相同的知识。

OSI 是一个在上世纪 70 年代末构思的网络模型。它由国际标准化组织ISO)于 1984 年发布。ISO 模型由七层组成:物理层,数据链路层,网络层,传输层,会话层,表示层和应用层。

在探索现实世界的挑战之前,让我们从上图中了解解决方案架构的所有五个层面。

这些层次如下:

  • 应用层:应用层包括端用户和安装在手机、笔记本电脑和设备上的客户端软件。用户将通过中间件签署交易,并通过演示工具访问数据。应用层还代表了更广泛的部署设施,并通过特殊工具如身份和访问管理IAM)管理器对 DIApp 进行管理。

  • 表示层:表示层包括对终端用户不可见的客户端中体现的后端功能。这一层包括了启用应用程序中区块链功能所需的所有支持工具和软件,如签署交易、传播已签署的交易和接收结果。该层还包含了用于启用用户从应用程序中获取洞察力的人工智能相关功能所需的工具,如可视化和报告。

  • 网络层:顾名思义,网络层由包含在软件包中运行的区块链验证节点组成的服务网络,用于验证用户交易和区块。类似地,网络层还包括基于机器学习ML)算法和深度学习DL)算法的多个人工智能服务。其中一些人工智能服务也可能使用人工神经网络ANNs)、卷积神经网络CNNs)等。

  • 数据层:数据层定义、持续保存并提供应用程序访问用户数据、网络数据和其他处理后数据的接口。数据层是网络层和物理层之间的连接层。应用程序、验证软件和人工智能模型将通过管理员配置的适当身份验证方法从这一层访问关键信息。

  • 物理层:物理层代表了所有图形处理单元GPU)节点、虚拟机VM)和存储节点,用于存储数据并执行复杂的计算。这一层还通过各种 DevOps 实践,解决了基础设施的核心管理问题。

现在我们深入了解了参考架构的细节,让我们在接下来的部分中讨论一些真实世界的挑战。我在这些部分提供了一些想法,你可以用它们来构建 POC。

企业中融合人工智能和区块链

未来 5 年,企业资源规划ERP)软件的全球市场规模预计将达到约 700 亿美元。在过去的十年里,领先的 ERP 软件市场公司,如 SAP 和 Oracle,一直在积极推动使用云和其他新兴技术。几个试点项目也在推出,以降低成本并提高在各种解决方案空间中整体生产力,包括客户关系管理CRM)和供应链管理SCM)。有一些利基用例可以利用人工智能和区块链技术以及其他周边技术的优势,如分散式数据管理和去中心化身份DID)管理。

现在让我们探讨一些使用区块链和人工智能技术来增强当前企业软件的用例。

客户服务

当涉及到客户服务时,人们普遍认为包括印度在内的发展中国家的公司和品牌在为客户提供服务方面表现不佳。这种看法可能是正确的,原因如下:

  • 缺乏必要的人才

  • 缺乏适当的员工培训

还存在一些问题,比如激励和无休止的轮班可能会阻止人员发挥出最佳水平。使用区块链和人工智能技术的组合可以解决这个问题。

让我们看看目前客户服务请求通常是如何进行的,特别是在电子行业。

现状

客户服务机构和呼叫中心通常会遇到以下问题:

一般缺乏上下文:作为高端手机品牌的客户和用户,您可能想要访问他们的服务中心,并了解您的手机出了什么问题。但是,代表可能会要求您填写一张表格,并包括与您当前手机问题相关的所有细节。通过为服务台带来上下文,可以很容易地解决此问题。

现在,让我们看看通过人工智能和区块链解决同样问题的未来场景。

未来场景

利用区块链和人工智能的力量,服务台人员应该能够自动识别和验证手机的所有者。如果可以使用私钥签名或通过复杂的零知识证明ZKP)成功验证相同的所有者,则相同的人员应自动获得访问手机日志的权限,以执行基本的诊断。我还想提议使用去中心化的数据存储服务,例如 MoiBit (www.MoiBit.io) 来存储必要的诊断文件。这些文件可以由手机所有者托管,并由人员用于进一步检查问题,所有者设置了严格的共享选项。MoiBit 还可以由人员用于通过销售契约或购买收据验证手机的所有权。

现在,让我们在下一节中讨论一些可以促进这一场景的架构思想。

可能的解决方案

我们可以使用去中心化标识符DIDs)来识别移动公司供应链管理软件的零售端每个手机所有者。这种供应链不再是一个独立的系统,而是一群手机制造商的联盟,他们也可以识别这款高端手机的所有者,这意味着一个 DID 可以代表一个或多个手机的所有权。

在需要持久保存文档和文件的情况下,我们可以使用 MoiBit,因为它易于使用,而且可以提供细粒度的访问控制,以确保给手机所有者提供隐私(在购买手机之前和之后)。

这也意味着我们可以使用 MoiBit 安全地存储手机所有者的日志,无论是在他们自己的专用基础设施上还是在一个共享网络上,都不会为中心化或非法数据挖掘活动铺平道路。一旦手机能够记录所有数据,我们只需应用预测性维护机器学习算法,即可确保在用户确定需要帮助之前即可提供客户服务。

以下图表总结了我们在分隔式参考结构中的方法,以帮助您更好地理解解决方案:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 9.2:解决客户服务问题的参考解决方案架构

如前面的参考解决方案架构图所示,建议的解决方案分为四个组件,首先是以下内容:

  • 用户应用程序:可能有一个应用程序允许用户提出问题工单。该应用程序还可以请求用户允许访问日志,以便提供安全备份,并在 MoiBit 的分散式存储中访问日志。

另一方面,我们可能有另一个应用程序,可以将工单委派给服务执行人员。服务执行人员可以收到分配给他们的新工单的通知。

这两个应用程序都需要用户通过钱包进行操作,这在下面的组件中进行了讨论。

  • 区块链:用户应用程序应允许客户分享更多关于他们所面临问题的细节。与问题相关的细节可能包括产品信息和技术规格。如果问题持续存在,用户应该能够分享启动日志或任何其他敏感信息。为了在审计中强制透明度并给予对此类敏感数据的访问带来责任感,我们要求所有经过验证的人员通过特定的钱包地址执行与服务相关的操作。这些钱包地址可以通过 DID 和诸如以太坊名字服务ENS)等名称服务进一步增强。

    区块链网络不仅将为客户和服务人员提供钱包,还将记录每个操作,这意味着每次对日志的更新()都将记录在一个新的哈希中,并嵌入一个事务中。同样,每当服务人员的成员访问用户的日志时,都会发出一个事务以及通知。

    一旦服务工单解决,服务人员将提供适当的证据并押注资源,以声明和验证服务工作已关闭。如果网络中的大多数人无法通过给定的证据验证该声明,那么押注将被稀释,给那些行为不端的人造成经济损失。

  • 存储: 我们需要一个去中心化的存储服务,可以安全地记录个人信息和其他证据,以支持前述逻辑。我们可以使用 MoiBit 来存储信息,仅在用户和服务人员之间进行加密。服务人员现在可以使用其指定的钱包来访问日志,进行分析,并提供适当的支持。有关分析的具体细节将由以下组件涵盖。

  • 人工智能: 现在信息已安全存储在 MoiBit 上,我们可以构建一个简单的模型,对数据进行基本诊断,然后进行多元测试。可以通过使用 MoiBit API 以及已在区块链上的票证合同中注册的服务专业人员的凭据来使数据可访问。API 不会允许服务人员或未分配票证的其他用户无权访问数据。

这个想法可以应用于许多需要积极维护的产品,而不会损害用户隐私或公司的知识产权。因此,范围可以扩展到汽车、车间机器、3D 打印机、军队中的重要系统,以及其他消费电子产品,如冰箱、空调和安全摄像头。

现在让我们探讨企业软件领域的另一个领域,称为绩效管理,并尝试解决一些现实世界中的挑战。

绩效管理

企业公司需要董事会及其高管的全力支持,以管理各种绩效因素。这些因素推动着收入和利润的增长,并通过关键绩效指标KPI)进行沟通,用于识别业务中的任何潜在增长或陷阱。随着公司朝着实现一系列业务目标迈进,了解可能出现的问题至关重要。这些问题可能会减缓实现业务目标所需的势头,或者在最糟糕的情况下,彻底破坏该目标。

在对企业绩效管理进行简要介绍之后,让我们了解今天企业面临的一些问题。

现状

在过去的几年里,上一个十年已经进行了大量研发R&D)工作,用于分析关键绩效指标,使董事会能够较短时间内做出有效决策。然而,用于变革企业模式或优化它们的数据质量可能需要重新审视。今天数字化的每个业务过程都具有优点和缺点。优点在于自动化以及实现目标所需的时间和精力减少。然而,缺点在于透明度不足,与流程内部合规性相关问题等更广泛的问题。数字化业务过程中可能存在隐藏的盲点,可能无法有效产出长期所需的关键数据。

让我们以食品送货应用为例。有多个应用程序让用户可以选择远程订购食物,并在 30 分钟内将其送达。从用户应用程序订购食物的过程,到达餐厅厨房,再将烹饪好的食物从餐厅送到用户地址,这一数字化过程已经在今天实现。毫无疑问,没有人会用笔和纸记录您的远程订单。

许多食品送货应用公司已建立了一些关键绩效指标,如取消订单数延迟交付数下单数。这些关键绩效指标在内部取决于我上面提到的过程的结果,并且 AI 已经在通过大数据分析监控此类关键绩效指标。

围绕收集有限数据以分析业务的一些问题包括以下内容:

缺乏激励:仅依靠指标数据存在一些问题。消费者面向应用程序只有在他们积极倾听用户意见时才能持续发展。让我们都想一想,有多少次我们真诚地在应用程序中评价了食品配送体验?即使我们花时间提供有价值的反馈,应用程序又有多少次激励我们这样做?大多数人对后一个问题至少可能回答是否定的。

因此,有必要对这一数字化过程进行游戏化,以从最终用户获取真实信息并优化过程以获得更好的结果。

未来情景

消费者面向公司总是渴望增长并提供更好的客户服务。在未来,应用程序应该考虑奖励客户,通过加密货币支付他们每次成功提交评论。这将有助于激励用户对应用程序提供每项服务实例的真实反馈。在收集用户评论的过程中,公司还将能够解决一些当前的低效问题,并削减与特定类型服务相关的成本,并做出商业决策。

可能的解决方案

您可以考虑构建一个新颖的食品配送应用程序,不仅可以处理正常操作,而且可以使用分散式标识符 DID 识别每个用户。这是通往用户隐私的第一步。有了 DID,您可以关联一个钱包,用于在每次成功审阅后汇款数字货币。您还可以考虑应用表单验证和速率限制技术,以确保不良行为者不会操纵此系统只为了获取奖励。如果应用程序的规则认为审阅内容足够引人入胜,那么可以使用机器人快速汇款数字货币,并与用户开始对话,通知他们非常感谢他们的反馈。

之后,如果用户愿意,机器人也可以用来沟通,稍微介绍一下问题。这被称为交互式反馈系统。用户通过聊天机器人接收到的任何扩展信息以后可以通过叙述分析和内容分析被令牌化并发送到模型。使用这种方法,应用程序的新增强版本有望获得更多的反馈,提升服务质量,并在服务中减少不必要的成本。

下图概括了我们在分隔式参考结构中的方法,以帮助您更好地理解解决方案:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 9.3:为了增加产品或服务的性能而将用户反馈系统变成游戏化的参考解决方案架构

如前面的参考解决方案架构图所示,建议的解决方案分为四个组件,即:

  • 用户应用程序:可以有一个应用程序或现有应用程序内的页面来促进用户反馈系统。该系统将要求用户就用户所使用的产品或服务提供有价值的反馈,以换取加密货币。这是一种新的激励用户的方法,使用流动资产,而不是可能附带条件的忠诚度积分。

    还可能需要为公司和产品或服务的受益人开发单独的仪表板,他们需要提供有关反馈的概要信息。除了提供诸如关键绩效指标和关键风险指标等概要信息外,仪表板还需要提供一个界面,以深入了解反馈的上下文。

  • 区块链:为了使用加密货币使反馈过程变成游戏,并限制不良行为者和西比尔攻击,我们需要使用区块链网络。区块链网络将用于为同意提供反馈的产品或服务的每个用户指定一个钱包。当在客户端级别验证反馈时,需要由用户指定的钱包签署数据以验证和确认其操作。当钱包用于签署数据时,生成的交易然后发送到区块链网络。

    网络验证和执行一个 oracle 或一个 webhook,以便将反馈数据存储在辅助网络中。存储方面将在以下重点中涵盖:

  • 存储:我们需要一种去中心化的存储服务,使用户能够以自由的方式存储他们的反馈数据。在今天我们使用的大多数反馈系统中,一旦数据离开应用程序,用户就失去了对反馈数据的控制。这需要改变,以便为用户提供更多的控制权。我们可以使用任何基于 IPFS 的网络,如 MoiBit,以自由的方式持久化反馈。反馈数据将加密给用户和公司,渲染所述产品或服务。现在,公司可以以自由的方式使用这些数据来评估、评估和增强其对客户的服务。

  • 人工智能:一旦反馈数据安全地存储在 MoiBit 中,并与各自的公司共享,您可以构建一个使用 MoiBit API 远程获取数据的人工智能模型,并进行适当的身份验证。数据加载后,我们可以使用多种自然语言处理技术,如内容和上下文分析,以在无需人类努力的情况下获得初步理解。一旦模型设定了优先级,我们可以使用聊天机器人来启动解决反馈的过程。在对话进行的同时,我们还可以使用叙述分析来获得更丰富的情境。如果经过经过良好训练的聊天机器人未能解决问题,我们可以向人类代表提供整个分析的结果,以便识别和纠正任何差距。人类代表将根据人工智能模型提供的支持数据做出最终决定来解决反馈问题。

现在让我们探索企业景观中的另一个领域,称为数据安全,并尝试解决一些现实世界的挑战。

数据安全

保护日益发展的企业的商业机密、关键市场数据和其他敏感信息对于维护公司在竞争对手中的战略和战术地位至关重要。尽管以前一代为企业提供了几种特殊的安全软件,但只有少数几种能够保护信息免受利用尖端技术发起的新一波攻击的影响。

下一波信息或数据安全软件可能将由区块链和人工智能驱动,以赋予企业力量,并尽可能减少潜在攻击。我们将在以下章节中探讨这一点。

现状

企业数据管理的传统模式从本地知识管理系统KMSs)转移到数据仓库。后来,我们看到更多的创新发生在云端,公司被鼓励从现场基础设施转移到由云服务提供商CSP)如 Azure 和 Amazon Web Services 管理的服务器上远程存储所有信息的混合模型。随着对云的采用,提出了一种更为实际的方法,即相关数据可以存储在云端或本地(on-premises)以提供灵活性。

尽管云计算在使用方面越来越受欢迎,但市场中仍有相当大的份额尚未迈出向完全云迁移的大胆步伐。诸如对数据的控制所有权等问题可能会引起一些决策者的担忧,从而抑制了这种运动。

在公共云上管理数据安全面临的首要问题如下:

**细粒度访问控制和加密:**企业应用程序主要处理有关公司财务数据、商业机密、设计文件和潜在客户的线索的关键信息。由于所使用和传播的信息的性质,需要特别警惕地处理知识的分享。如果公司的信息泄漏到错误的人手中,可能会对公司的业绩造成毁灭性的影响。

未来情景

尽管区块链技术本身可能不是企业的关键推动因素,但它为公司提供了去中心化基础设施的曝光。在这种去中心化基础设施中,公司可以共享、交易和交换资源,形成更强大的业务网络。基于区块链的这种新型基础设施共享方法对网络攻击的影响较小,而且肯定不会受到恶意用户意图的数据破坏的影响。我们将从竞争模式转变为协作模式,在这种模式下,所有利益相关者可以共同汇集非关键资源,以实现共同的业务目标。

未来,企业应用程序应该能够利用区块链实现完全的问责制和对公司信息访问的透明视图。这些应用程序还可以配备商业智能BI)工具和人工智能服务,根据访问模式提供洞察,以消除任何网络威胁。

可能的解决方案

您可以考虑使用分散数据库和数据服务,如 MoiBit 来构建一个可以有效设计的以文档为中心的应用程序,以确保商业文档的数据完整性将保持完好。我们也可以单独使用区块链来存储文件的元数据并维护访问日志。结合使用区块链,您还可以构建新的可视化工具和基本回归模型,允许用户从所存储在该分散式数据库中的数据中获取见解。随着几个 DIDs 和名称解析器的出现,用户身份验证可以得到显着增强。

以下图表总结了我们在一个分隔的参考结构中的方法,以帮助您更好地理解解决方案:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 9.4:借助区块链和人工智能识别 ERP 系统中安全威胁的参考解决方案架构

如前所示的参考解决方案架构图表所示,建议的解决方案分为四个组件,首先是:

  • 用户应用程序:与往常一样,应用程序组件将包括员工和管理员使用的客户端应用程序。员工应用程序可以是一个简单的 客户关系管理CRM)应用程序,在像 MoiBit 这样的基于 IPFS 的宽松网络上安全地存储潜在客户数据。在 CRM 应用程序中,我们可以有一个基本功能,允许员工基于销售员收集的信息创建一个新的潜在客户。应用程序可以依赖自定义名称解析器来验证员工。

    另一方面,我们还需要一个管理员仪表板,以便密切监视网络的健康状况,随后是员工最近访问的列表。根据可视化工具提供的可视化,管理员可以采取必要的行动来确保网络的稳定性。管理员仪表板还可以具有基于多重签名的功能,从而确保 权力 不授予单个人。

    系统的整体安全性可以通过至少三个方面得到增强,具体如下:

  • 1 步验证:公司电子邮件 ID 和密码。

  • 2 步验证:来自员工手机和/或验证器的 OTP。

  • 3 步验证:验证属于特定名称服务的钱包的所有权。例如,您可以确保应用程序仅在您拥有的钱包地址可以解析为 companyxyz.eth 时才允许访问。公司 XYZ 的员工 ABC 女士将获得由名称 abc.companyxyz.eth 解析的钱包地址。如果用户无法证明他们拥有由 abc.companyxyz.eth 解析的钱包,则应用程序不应授予访问权限。

值得一提的是,上述的改进可以与快速身份验证联盟FIDO)密钥等企业身份验证机制一起作为增强措施。

  • 区块链:区块链网络将解析名称服务以确认钱包的所有权。一旦钱包得到授权,区块链网络还负责在次级网络中存储信息。一旦存储操作完成,区块链中的智能合约将对每次成功或失败的文档访问发出交易。这些访问数据主要存储在区块链上,以后会复制到次级存储网络以进一步分析资源失败访问情况。你将在下一节中了解它的用途。

  • 存储:我们需要一个可以缓存所有访问日志的分散式存储服务,以便人工智能系统可以更快地访问数据,而不会在主区块链网络中创建瓶颈。通过使用基于 IPFS 的网络,我们保留了区块链的不可变特性,并保留了验证缓存内容的能力。

  • 人工智能:现在访问日志已被复制并缓存到 MoiBit 中,管理员可以选择自定义的训练模型或使用无监督的机器学习技术来检测对一些关键文档的访问是否异常。一旦生成并分析出一个模式,就能识别出异常情况以便采取行动应对攻击。

现在让我们来探讨企业景观中的另一个领域,名为财务管理,并尝试解决他们的问题。

财务管理

大多数企业公司都是依靠成熟产品线带来的稳定收入来维持生计。根据产品或服务的不同,这些公司可能每年都能产生从百万到数十亿美元不等的收入。这样庞大的收入规模需要相应的成本支出,需要定期审计以确保账目完整。还需要注意的是,大部分能够产生如此巨额收入的大型公司都是上市公司,因此有许多公众利益相关者密切关注公司销售的增长。

现状

传统的会计软件允许像文员或会计这样的员工手动为商品销售开具发票。然而,在当今的财务软件中,会计模块已经与各种前端模块密切结合,包括销售点POS),用于销售物品并生成发票。

尽管大多数会计操作现在正在从手动输入转变为条形码驱动的自动化,但账目中可能存在高风险的金融欺诈和数字篡改。

企业在财务管理中面临的主要问题如下:

会计丑闻:会计丑闻被定义为故意策划的过程,通过操纵公司的财务报表以达到欺骗他人的目的。大多数国家都认为这是一种犯罪行为,因为它使个人员工和公司能够过分强调资产或误报当前的财务责任,从而使利益相关者面临风险。

未来情景

将来,会计软件不仅将与其他模块自动化。透明度可能会通过使用区块链来实现,以便为感兴趣的各方提供更简单和更便宜的审计。此外,会计应用程序应该能够利用深度学习技术来识别公司现金流交易中的任何潜在异常。

可能的解决方案

您可以考虑构建一个会计应用程序,根据规范记录虚拟分类帐。如果公司愿意,会计应用程序还可以透明地广播虚拟分类帐。与此同时,该区块链应用程序还将负责管理每个钱包的状态,以便监视部门内的任何不良行为者。该应用程序还可以利用深度学习模型来检测财务报表中的异常,并确保没有进行任何欺诈行为。

以下图表总结了我们在分隔的参考结构中的方法,以帮助您更好地理解解决方案:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 9.5:管理支出并识别任何欺诈交易的参考解决方案架构

如前述参考解决方案架构图所示,建议的解决方案分为四个组件,即:

  • 用户应用程序:员工可能会使用一种表格来申请费用。您可以简单地构建一个安全的应用程序,如前文的数据安全部分所述,并允许用户提出费用。

    财务部门可能还可以使用另一种形式来审查和解决索赔。虽然您今天可以自动化此部分的大部分内容,但我们可以借助区块链和人工智能重新思考透明度和欺诈检测。

  • 区块链:区块链网络将为每个员工提供钱包,包括财务部门,以管理公司的资金。基于区块链的智能合约还可以用来以民主方式挑战一些可疑的交易,以解决部门内的支出。

  • 存储:我们需要一个分散式存储服务,可以存储由提出费用申请的员工提供的账单副本、收据、采购订单以及许多其他支持性文件。这些支持文件将由会计进行审核,同时还有一个减少人力的 AI 模型,用于追踪交易的起源并验证员工所做交易的真实性。我们需要一个基于 IPFS 的网络,可以持久保存这些文档,而不会受到任何网络攻击或发布具有篡改值的发票。这些支持文件可以加密并在会计部门之间共享以进一步审核。

  • AI:现在支持文档存储在像 MoiBit 这样基于 IPFS 的网络中,我们可以使用 API 和财务部门的凭据,将费用数据加载到机器学习算法中,以识别潜在的欺诈费用。基于规则的专家系统也可以用于识别任何超出公司政策范围的索赔,以便在不耗费太多精力的情况下拒绝该索赔。

在对企业景观中几个领域的问题进行了详细的步行后,现在让我们来探讨政府面临的问题。

将人工智能和区块链融入政府

在撰写本文时,预计未来 3 到 5 年政府软件业务的总市场规模将达到约 150 亿美元。社会的许多进步取决于地方政府以及国家级政府提供的服务。一些国家,如美国,将其称为联邦政府。公民在某种程度上依赖政府提供基本服务,如身份注册以及获取出生和死亡证明。

在接下来的章节中,让我们试着了解当今全球各地政府面临的一些现实挑战。我们还将观察如何通过区块链和人工智能技术来解决这些挑战。

让我们开始探讨政府在税收领域面临的挑战。

税收

为了发展持久的经济并提供公共服务,政府依靠对公民和企业征收直接和间接税收。直接税收是对个人公民或企业收入征税。间接税收以关税的形式对商品和服务征税。在撰写本文时,预计销售税软件的全球市场规模将在 2026 年达到约 112.5 亿美元。

现状

税收被认为是世界上大多数政府的主要收入来源之一。在印度 2018-2019 财政年度,据报道,印度直接税委员会CBDT)据称收集了大约 11.17 万亿卢比(INR)。尽管这个数字似乎令人震惊,但据报道,收集的金额仍然缺额约 8300 亿卢比,约占设定的收集目标的 7.4%。同样,间接税也将在服务点收取。收取的间接税金额可能直接取决于经济状况,其中购买者有足够的购买力来购买产品或服务。支付方式也会直接影响间接税的征收,因为在国家的每个角落都进行现金交易,这变得极其难以追踪。

让我们来看看政府在税收方面面临的首要问题:

逃避:在服务提供给客户但未通过应税销售发票认可的情况下,税收可能严重减少。不幸的是,如果客户和服务提供者互相同意用现金交换服务,仍可能发生这种情况,从而逃避支付税款。

未来情景

未来,企业可能会被鼓励使用一个区块链启用的应用程序,以不可替代令牌NFT)的形式跟踪所有库存,以区分原材料。服务提供商可能会被要求在区块链网络中转移或核算所述 NFT。这可以帮助识别库存中物品的输入和输出,并跟踪货物在多个利益相关者之间的流动。根据这些资源的转移或销售,智能合约可以自动生成发票,并要求客户付款。通过将整个供应链流程和销售生命周期引入区块链之上,我们可能能够显著减少间接税收逃避。

可能的解决方案

你可以使用任何区块链网络来建立一个由业务所有者和相关税务机构管理的公共或许可网络。所有进货原材料都可以视为输入,每单位原材料都分配了一个 NFT。后来,一旦产品从原材料制成,相应的 NFT 可能会被销毁,并创建一个新的 NFT,该 NFT 是由产品中使用的所有原材料的 NFT 组合而成。产品的销售现在是网络上持久的可审计记录,明确建立了组成关系。这不仅会使记录输入和输出税更容易,还将在路上增加更多的税收征收。

以下图表总结了我们的方法,以分隔的参考结构的形式,帮助您更好地理解解决方案:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 9.6: 减少逃税的参考解决方案架构

如前面的参考解决方案架构图所示,建议的解决方案分为四个部分,即:

  • 用户应用: 与之前提出的解决方案架构不同,我们在这个用例中有三个主要参与者。可能有一个应用程序可供最终客户使用,允许在零售层级购买成品。可能有另一个应用程序允许供应商互相销售原材料,也销售成品给最终用户。用户销售的所有商品都可以是以太坊等区块链网络上的 NFT。在销售过程中,可能需要税务机构使用专门的应用程序以匿名格式监控 B2B 和 B2C 交易。每次销售都可以细化,因为每次销售都可以记录为区块链上的一个交易,并在第二网络上提供大量支持文件的丰富上下文。

  • 区块链: 区块链网络将为所有三个参与者提供钱包。客户需要一个钱包来支付产品或服务。供应商需要钱包来进行业务并收到报价金额。税务机构需要一个钱包以转移在销售点扣除的间接税额。供应商的钱包不仅会持久化卢比或其他当地货币,还会持久化他们手头的原材料余额。这个余额对每单位原材料以一种独特的方式指定。一旦原材料转化为成品,NFTs 可以被销毁以铸造一个可以代表所述成品的新 NFT。无论是客户和供应商之间的销售(B2C),还是供应商之间的销售(B2B),每次销售都会作为一个交易记录在区块链网络上,由各自应用程序中的支付操作触发。

  • 存储:我们需要一个分散化的存储服务,可以持久保存这个过程的文档流程,从采购订单到发票。我们需要一个基于 IPFS 的受许可网络,尊重公司隐私,但仍然可以与当局分享相关数据。

    每次向供应商账户添加纸质文档时,都会在网络中发出一个新的带有相关优先级的交易。只有网络中符合条件的参与者才能查看交易。这是设计的一个重要部分,以保留市场中所有参与者之间的竞争精神。

  • 人工智能: 现在我们有了文档流程和分类帐余额,我们可以运行基于规则的专家系统来识别应收税额。为了确定任何缺失的税收目标,我们还需要使用启发式方法来识别潜在的逃避行为。深度学习也可以用于识别任何洗钱活动。

现在让我们探索治理领域的另一个领域,投票,并尝试解决与该领域相关的问题。

投票

选举被视为民主的庆祝活动,在这里,每个公民都有机会行使自己选择合适代表进入职位的权利。因此,至关重要的是选举以无党派的方式进行,不偏向任何候选人或政党。此外,观察技术界的最新变化并将相关技术应用于选举的有效和公平进行是有益的。

现状

目前,大多数选举都是离线进行的,这意味着公民们被期望自行注册并在由各自选举当局宣布的指定投票站投票。这个传统的流程被一些人认为已经过时了。基于全球互联网的日益普及,客户可以在任何电子商务网站上下订单购买产品或服务。同样,允许公民使用自己的手机从家里或办公室投票可能是方便的。这不仅通过数字平台更容易地访问投票,而且还将选举结果的宣布时间从几天或几小时缩短到几乎立即。

政府在投票中面临的最重要问题如下:

加快结果:许多民主国家为了确保人们能够到当地选区办公室投票并等待结果而放假。尽管政府可以促进投票,但该过程主要是手动的。因此,在指定的安全位置处理、转移、验证和计算所有选票需要一段时间,这涉及大量资源。

未来

在未来,政府和公民应该被鼓励使用安全的移动应用程序为他们的候选人投票,这些应用程序可以非常简单易用。每个选票都是通过应用公民的私钥来投出的,该私钥可以解析为生物特征签名,从而证明公民在投票期间的存在。

可能的解决方案

您可以在移动设备或网络上构建一个样本投票应用程序,该应用程序与部署在区块链网络上的智能合约进行通信。每个用户都可以通过证明拥有与该帐户关联的私钥来投票。此外,该应用程序可以利用几种模式识别技术和计算机视觉来识别站在手机设备或浏览器前面的人是否是真实的人,而不是系统生成的图形。这可以通过使用基于**生成对抗网络(GAN)**的分类器来实现。一旦投票完成,我们可以仔细检查数字并宣布虚拟选举的获胜者。

以下图表总结了我们的方法,采用了分区参考结构,以帮助您更好地理解解决方案:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 9.7:通过改革选举技术来节省时间和成本的参考解决方案架构图

如前面的参考解决方案架构图所示,建议的解决方案分为四个组件,即:

  • 用户应用程序:可以有一个移动应用程序供公民或用户使用。为了防止伪造攻击,该应用程序必须与一个 SIM 卡紧密绑定。该客户端应用程序还需要能够拍摄投票者的照片身份证明,然后是视频,以确保票只能由该人投出。

    同样,可以有一个网络应用程序或仪表板来监控整体选民投票率,并处理可疑投票。网络仪表板还可以提供每个参与者或候选人获得的投票的概要信息。

  • 区块链(Blockchain):区块链网络将为每个公民或用户提供钱包。投票是在智能合约中进行的,其中存在映射来计算为每个候选人投出的票数。区块链还可以用于在 AI 识别或警告用户提供的虚假证明时提供冲突管理。

  • 存储(Storage):我们需要一个可以存储照片证明的去中心化存储服务,这些证明可以作为用户在投票期间参与的法律证据。非常重要的一点是视频由各自的公民上传,这是参与者的又一自我声明。此类数据必须存储在 IPFS 网络上,以确保数据不会被损坏。

  • 人工智能(AI):现在,公民或用户的照片身份证明和视频已经提供,我们可以使用基于任何 IPFS 网络的 API 来审查与当局共享的证明。随着基于 GAN 的深度伪造技术的最新发布,我们可以考虑通过仅使用基于 GAN 的先进分类器来未雨绸缪这个示例应用程序。

现在让我们探索治理中的另一个领域,立法改革,并尝试解决它们的问题。

立法改革

立法改革是政府的关键结果领域之一。尽管法案已经通过成为法令,但这些法令的执行有时可能并不有效。许多改革会导致财务规划、认可和权利的变化。社会保障就是一个例子。

由于由执政机构通过的一个或多个法案可能需要立即快速采纳,因此在这种情况下,我们需要确保这些改革的受益者能够在没有显着延迟的情况下享受他们的权益。

现状

社会保障改革,比如提高养老金水平,可能需要一段时间才能在支票上反映出来。这种转变可能需要时间,也不一定保持透明度。一旦适当的立法通过,我们就可以解决社会保障改革的问题。

政府在管理立法改革方面面临的主要问题如下:

  • 执行:更新的法律规定很少被普通公民通知和承认。这种信息差可能会造成问题。此外,我们需要确保更新的剩余金额不被价值链中的任何人私自占有。

  • 文档:一旦政府的立法机构制定了修正计划,所有相关文件都必须被捆绑在一个单一的存储库下。这将有助于所有成员达成对法案背景、目标和目的的共同理解。

未来预期情景

未来,政府可以鼓励使用区块链和人工智能解决立法改革中的许多问题。您可以建立一个试点解决方案来应对对社会保障计划的更改。此外,人工智能还可以用于检测受益人和赞助人的功能中的任何异常。人工智能还可以使用深度学习技术识别任何资金的非法使用。

可能的解决方案

您可以使用任何适用的区块链平台记录对提议法案的投票。您还可以使用区块链根据一定的条件锁定和解锁养老金资金。区块链平台还可以通过钱包识别每个受益人,并利用基于人工智能的人脸识别模型确保资金安全地收到各自的受益人手中。

以下图表总结了我们在一个分隔式参考结构中的方法,以帮助您更好地理解解决方案:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 9.8:快速支持社会保障立法改革的参考解决架构

正如前面的参考解决架构图所示,建议的解决方案分为四个组件,即:

  • 用户应用程序:可能会有一种表格供享有社会保障计划的公民使用。还可能会有另一种表格供政府机构和立法机构投票对任何变化,并在开放环境中监督资金拨款。

  • 区块链:区块链网络将为每个受益人以及立法者提供钱包。它还将托管两个单独的合约:一个投票合约可用于促进对该法案的赞成反对投票。一个养老金合约也可以用于在设定条件下促进资金转移给各自受益人。受益人只需证明自己的存在即可享受养老金。

  • 存储:我们需要一个可以存储上述证明的分散式存储服务。这些证明可能会作为法定文件提交给当局。这些证明将由用户拥有,并可以在预定的时间内与当局分享,以检查潜在的欺诈或任何其他边缘情况。一旦证明被验证,当局可以放弃权限。

  • 人工智能:现在我们在基于 IPFS 的网络上安全存储了受益人的存在证明,我们可以将它们输入基于 GAN 的分类器和深度学习算法中,以识别任何可疑活动。模型可以标记任何可疑或欺诈交易,供后端团队争议解决,从而涉及人力。

现在让我们探索治理的另一个领域,即人口普查,并试图解决此处遇到的问题。

人口普查

人口普查是政府组织的一项计划性的、有组织的过程,旨在计算特定地区的最新人口统计数字。人口普查还有助于识别特定地区的文化和经济多样性。正如您可能已经知道的那样,在印度,每 10 年进行一次人口普查。最新一次人口普查由印度政府于 2011 年组织,并导致观察到的最新人口数量为 12,101,934,22 人。

现状

印度政府正在 2020-2021 年组织第 16 次人口普查,其关键不同之处在于普查操作将是数字化的,完全通过移动界面驱动。普查员可以选择使用移动应用程序,也可以选择传统的纸质记录方式,然后进行数字化提交。

政府在进行人口普查时面临的主要问题如下:

  • 结果时间:尽管普查员提交的内容可能是数字化的,但可能需要一些手动工作来验证普查员记录的数据的真实性。此外,减少与验证相关的时间是至关重要的,因为这直接影响发布结果所需的周转时间。

  • 透明度:人口普查过程就是要了解某一地区文化、社会和经济多样性方面的变化。作为一个社区,建立一些基本参数和流程检查点,并在开放网络上发布,以满足每个人的好奇心,是一个健康且值得推荐的做法。

待定情景

未来,人口普查操作不仅应该数字化,而且还应强调使社区以公平方式了解自己的基本做法。这可以通过使用公共区块链网络透明地传达进展来实现。未来的人口普查操作可以通过人工智能来实现,以节省成本并通过深入挖掘收集的大量数据来了解社区的见解。

可能的解决方案

您可以考虑构建一个由区块链和人工智能驱动的试点智能普查应用程序。该应用程序可以使用合适的区块链记录和沟通人口普查操作中的所有检查点。区块链钱包与分散的数据存储也可以用于确保普查员在一线收集的信息无法在另一媒介中复制。该应用程序还可以利用可视化工具和深度学习模型,让机构和感兴趣的第三方深入挖掘积累的数据,获得人口统计信息。

下图总结了我们在分隔的参考结构中的方法,以帮助您更好地理解解决方案:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 9.9:引入安全透明数字人口普查的参考解决架构

如上述参考解决架构图所示,建议的解决方案分为四个组件,即:

  • 用户应用:在提议的系统中有三个参与者:普查员、普查当局和国家公民。为了构建这个样本项目,我建议使用三种不同的表格。一种表格由普查员使用,他们在草根层面从每个家庭收集数据。第二种表格将由当局使用,以监测人口普查操作的进展,并解决任何可疑记录的争议。第三种表格将由对我们社会的文化、经济和人口统计方面感兴趣的普通公民使用。

  • 区块链:区块链网络将为每个普查员提供一个钱包。普查员将收到一个指定的钱包地址,用于在其应用程序中签署记录。由于每个钱包是唯一的,它有助于维护流程中的问责制。每个记录都是一个交易,带有代表添加到基于 IPFS 的网络的数据哈希的签名消息。

  • 存储:我们需要一个分散的存储服务,可以以确保隐私的方式持久保存所有公民的信息。可保留可疑记录的证据,并放弃对其余记录的访问。

  • 人工智能:现在,由于基于 IPFS 的不可变记录保存网络上提供了记录的凭证,我们可以使用几种监督式机器学习算法来检测重复记录。我们还可以使用表单启发式评估数据质量,并在几个住房统计区块HLB)之间进行比较。

HLB 是人口普查领域广泛使用的术语,用于标识特定的地理栖息地区域。每个普查员被分配一个或多个 HLB 来执行普查并提交所有必需的信息。

在详细介绍了治理领域中几个领域的问题之后,现在让我们来探讨金融服务面临的问题。

在金融服务中融合 AI 和区块链

金融服务业如今为机构、组织和个人在一个良好定义的数字环境中操作提供经济支柱。尽管金融服务在早期采用各种技术方面保持良好声誉,但区块链技术可能不适用。这可能是因为透明过程中出现的复杂性。然而,我们必须理解,目前几乎不可避免地会应用区块链与人工智能,因为大部分科技公司开始为客户提供银行和保险解决方案。这显然正在使人们脱离传统银行和保险公司。为了未来的使用,我建议您考虑在以下用例中开发应用程序。

在接下来的部分中,我们将涵盖金融服务领域保险行业面临的问题,并尝试解决它们的问题。

保险

保险软件的市场规模正在迅速增长。在保险业中,我们可能会发现相当多的多样化。随着最新的冠状病毒 COVID-19 爆发,全球各地对健康保险的需求多次增加。

现状情况

我们生活在一个波动不确定复杂模糊VUCA)的世界,迫切需要保护免受各种意外后果的影响。您可能会有兴趣了解,保险并不仅限于人类、动物、器官和车辆。如今,您还会发现,几个区块链网络上的智能合约也经过保险,以防止黑客攻击或滥用。因此,重温保险管理如今是如何运作的,与未来的技术使数字化流程相比很重要。

保险业面临的主要问题之一是:

索赔管理: 让我们以健康保险为例,它占据了保险行业的重要部分。根据入院的情况以及疾病或意外的性质,提出索赔可能变得复杂。

这需要采取急剧的措施来管理索赔。

作为将来的情景

未来,医院和保险公司可以考虑密切合作,以减少成本并缩短理赔的处理时间。医院、诊断中心和保险公司可以形成一个财团,创建代币,并使用相同代币进行结算以获得流动性。鉴于与大流行病爆发相关的严峻局面,我们需要找到最佳机制来维持。让我们探讨一种解决方案的方法,可以更好地管理索赔。

可能的解决方案

如果患者被送往医院接受治疗,这一事件可以通过零知识证明记录在区块链上,而不向任何人透露个人身份信息。也许简单的生物特征签名在这里会有帮助。一旦医疗程序结束,可以通过能够直接与区块链进行通信并在多个层面建立出处的设备进行定期的医疗检查。此外,还可以利用几种基于人工智能的高级技术来识别任何欺诈索赔。如果保险公司能够期望医生或任何相关的认证者在批准任何索赔之前在区块链上押注资金,这将是一个值得注意的努力。这也可能大大减少欺诈索赔所导致的损失。如果某项索赔被确认为欺诈,买方的保险可能会被禁止,并且医生或认证者的押金可能会被清算,从而使他们无法正常运作。

以下图表总结了我们在分隔式参考结构中的方法,帮助您更好地理解解决方案:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 9.10:优化健康保险理赔流程以提高透明度和准确性的参考解决方案架构

如前面的参考解决方案架构图所示,建议的解决方案分为四个组成部分,即:

  • 用户应用程序:在这个用例中,我提议使用三种不同的应用程序。一种应用程序是由已购买保险的客户或患者使用的。他们可以填写表格并附上必要的信息,以成功创建索赔。

    建议使用第二个应用程序的是治疗患者的住院医生。每次创建新的索赔时,医生被要求验证并证明索赔。在这里重要的是要理解,医生需要在进行认证时押注他们薪水的一大部分。如果系统确定医生已经证明了一个欺诈索赔,押金将被清算。

    第三个应用程序是为保险公司提出的一个仪表板应用程序,以监控一些重要信息,例如过去 24 小时内的总付款金额,以及过去 24 小时内的可疑索赔情况。

  • 区块链:区块链网络将提供一个钱包给保险公司管理他们的资金。用户可以通过这样的钱包支付保费,并期望从中获得赔付。该网络还将为医生提供一个钱包,以让他们在其中押注他们薪水的一部分。同样的钱包可以用于向医生支付在有效索赔情况下的报酬。最后,该网络还需要为消费者或患者提供钱包。他们将在钱包中收到赔付。

值得注意的是,区块链网络还需要借助智能合约来为符合条件的索赔提供自动支付。索赔的有效性将根据附加到索赔的支持文件来决定。

  • 存储:我们需要一个分散式存储服务,可以存储与索赔相关的所有支持文件。一旦文件被持久化,我们可以使用相关的人工智能模型和技术来验证索赔,并识别潜在的欺诈性索赔。我们需要使用任何基于 IPFS 的网络,以不可变的方式存储这些文件,以防止对账单金额、日期和其他细节的任何更改。

  • 人工智能:在次要存储网络上存储了关键的与索赔相关的文件后,我们可以使用基于规则的专家系统来验证索赔的结构和格式。我们还可以使用机器学习技术来识别索赔中的任何重复,并识别类似的模式以对比成本。如果条件令人满意且低于设定的风险水平,就可以触发自动支付。如果模式观察看起来可疑,模型可以在网络上发布有关索赔的帖子以投票并解决索赔问题。

在对金融服务领域的几个领域的问题进行了详细的介绍之后,现在让我们来探讨人力资源管理面临的问题。

在人力资源领域融合人工智能和区块链

招聘新人才和留住现有人才已经成为各个规模组织的重要议程之一。在撰写本文时,美国的失业率是近十年来最高的之一。这一前所未有的失业率可以归因于 COVID-19 疫情爆发。随着经济的复苏,未来几年将在多个公共和私营部门组织中创造数十万个新工作岗位。虽然就业机会以指数级增长,但也存在难以找到能够与薪水匹配技能的合适人才的困难。

特别是在科技领域,管理两个层面的人才正在变得极为困难:

  • 留住现有人才:这意味着当前员工为了更高的薪水和更好的福利而跳槽。通过积极的公司文化和诱人的薪水可以缓解这种情况。

  • 引入新人才:这意味着越来越难以雇佣最近加入行业的新人。通过完善现有的传统流程来识别潜在的招聘者可以缓解这种情况。

虽然人力资源专家正在努力解决上述的第一个挑战,但我认为欢迎新一代人才进入科技行业是很重要的。虽然其他行业也同样值得拥有新一代人才,但让我们将范围限制在我们的 IT 行业内。

在下一节中,我们将看到如何解决在 IT 行业对一些关键技术资源进行背景检查的问题。我们将讨论当前行业经理面临的挑战。我们还将通过适当使用区块链和人工智能来解决这些挑战。我们还将通过使用技术启用和对过程中的一些检查点进行游戏化来解决吸纳新一波人才的问题。

背景检查

背景检查是正式验证求职者提供信息的过程。这是由人力资源经理进行的过程,可能根据何时进行此过程而有所不同。一些公司和人力资源经理在申请人成功录用后进行背景检查。但是,有一些公司要求在确认申请之前严格遵守背景检查。

以下是背景检查过程中常见所需文件的一些:

  • 犯罪记录:一些公司可能法律要求检查和核实申请人是否有犯罪行为。这些文件由各自的法律和执法部门访问。一旦确认申请人没有参与任何刑事诉讼,公司可以确认雇佣该候选人。

  • 财务文件:一些公司可能要求申请人确认公司现有职位所提供的当前薪水。如果申请人提供了财务文件,如银行对账单,则可以进行验证。

  • 毒品测试:一些公司可能对滥用药物有严格的政策,因此可能要求申请人进行药物测试。根据此测试的结果,申请人可能根据公司政策或适用的法律规定被确认或拒绝。

  • 身体素质:全球政府机构中有一些工作可能要求严格遵守一些身体素质标准。因此,公司可能要求候选人接受新的身体素质测试。根据身体素质测试的结果,雇主可以做出适当的决定。

  • 以前的工作记录:雇主通常需要保存所有员工的工作记录。雇主可能要求申请人提供真实证明,作为认证证据。

通过对背景检查过程和涉及其中的常见文件有基本了解,现在让我们了解一下人力资源经理和申请人所面临的问题。

现状

目前,前述的大多数文件都是由求职者通过电子邮件提供的。申请人发送的文件被人力资源经理收到。值得指出的是,像毒品测试结果和身体健康报告这样的文件可能由进行测试的第三方供应商在内部与人力资源经理共享。一些涉及申请人的文件可能包含敏感和可以识别个人身份的信息。

困扰招聘流程和人力资源管理的主要问题如下:

  • 申请人没有数据所有权:前述的大多数文件是由求职者通过电子邮件提供的。申请人发送的文件被人力资源经理收到。值得一提的是,像毒品测试结果和身体健康报告这样的文件可能由进行测试的第三方供应商在内部与人力资源经理共享。一些涉及申请人的文件可能包含敏感和可以识别个人身份的信息。

  • 无法进行强有力的自动背景验证:一旦文件被人力资源经理收到,根据公司的政策,文件将接受审查。值得注意的是,大多数经理进行的验证工作都涉及手动流程,这意味着这需要时间,而且也可能出错。

现在我们已经确定了流程中的一些漏洞,让我们来看一下一个简单的解决方案提案,可以解决背景调查流程中的一些关键挑战。

未来场景

未来,政府和公司应鼓励使用基于区块链的去中心化身份(DID),来控制申请人与雇主分享的数据。如果申请人没有被提供工作,申请人会很愿意使用这样一个系统,其中申请人的数据可以被编辑。此外,使用光学字符识别OCR)来读取测试结果和其他重要文件,比如财务报表,来通过 AI 启用的自动化优化整个流程非常重要。如果有一个专门的 OCR 程序能够读取银行对账单以确认申请人的当前薪水并立即编辑该文件,则申请人会更加放心。这种背景验证流程的转变不仅可以节省公司的时间和金钱,还能提供一个更加安全、更为申请人友好的环境。

可能的解决方案

我们可以使用适当的区块链平台,并构建一个智能合约,允许申请人与公司或人力资源经理安全地签署声明表格。此外,我们可以通过允许申请人将数据存储在个人数据存储介质(如 MoiBit)上,从而将数据与此过程分开,以便自定义雇主在流程中所需的所有文件的访问。我们还可以使用 OCR 程序,并精心设计一个基于零知识证明ZKP)的系统,该系统可以确认文档的若干属性,而不会导致人力资源经理无必要地访问数据。

以下图表总结了我们在分隔式参考结构中的方法,以帮助您更好地理解解决方案:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 9.11:优化面试候选人背景检查流程的参考解决方案架构

如前述参考解决方案架构图所示,建议的解决方案分为四个组件,即:

  • 用户申请:在这个用例中,我建议使用三种不同的应用程序。第一个应用程序可供申请人申请公司和分享其生物数据以及已存储在其个性化数据空间中的所有支持文件。在这种情况下,我建议使用基于 IPFS 的网络,例如 MoiBit,以便为用户提供访问权限。第二种类型的应用程序可供第三方进行药物测试等使用。它也可由以前的雇主和推荐人使用,以确认申请人声明的数据。一旦第三方或推荐人提供信息,就可以进行验证,并且可以激励他们的努力。然而,为了激励良好的参与者,需要实施锁仓。我们将在下一节讨论这个问题。最后,第三种类型的应用程序用于人力资源经理发布职位描述,列出候选人,审查自动验证结果等。

  • 区块链:区块链网络将用于为所有四个角色提供钱包:申请人、人力资源经理、推荐人和第三方服务提供商。为了防止永久访问信息,我们可以使用钱包,并临时向潜在公司的人力资源经理提供只读访问权限。同样,推荐人和第三方服务提供商所投入的努力必须受到激励。因此,钱包可以用于直接向他们转移他们选择的代币。除了钱包之外,所选择的区块链网络还应能够促进智能合约以记录生物数据的更新。我们还可以使用智能合约以公开方式解决争端。

  • 存储:我们需要一个分散的存储服务,可以存储申请人的生物数据,并根据需要与相应的人力资源经理共享。申请人存储的每个文件都将被网络识别,并形成交易。

  • 人工智能:通过在次级网络上提供的文件,我们可以使用自定义启发式方法验证生物数据。我们还可以考虑使用社交图识别相关参考文献。如果发现异常,我们可以让系统在网络上报告以解决问题。

在详细讨论了人力资源管理领域多个领域中的问题之后,现在让我们来探讨医疗行业面临的问题。

在医疗行业融合人工智能和区块链

医疗行业已经从一个机构化系统转变为由许多技术驱动的服务型系统。许多医疗服务,包括诊断、治疗和预防性药物,已经数字化并以个性化方式与患者进行交流。健康设备,如健身手环、跟踪器和药物泵正在取代我们依赖的一些医务人员。客户层面的这种转变也可以借助新药物的帮助而加强。让我们了解一下医疗行业在成功制造药物方面面临的一些问题。

在接下来的几节中,我们将讨论医疗行业面临的一些主要问题。我们不仅会观察这些问题,还将针对使用区块链和人工智能进行试点项目提出一些创新建议。

药物警戒

药物警戒PV)可定义为包括药物配方、测试新配方药物、评估风险以及在药物引入市场之前防止任何副作用的一系列活动。药物警戒的主要重点是确保消费者的用药安全。

这些活动由许多人员执行,并且需要跨行业的利益相关者,在当地药品监管机构的仔细监督下进行。因此,需要一种可以以数字方式促进这些流程、降低成本,并且基于现有数据识别任何潜在风险的软件。此外,重要的是使用药物可能引起的任何不良反应通常报告给当地药品监管机构。药物警戒软件被用于报告这些案例。截至撰写本文时,药物警戒软件的全球市场规模预计将在 2027 年超过估计的 250 亿美元。

现状

任何药物警戒软件的基本要求可能是收集和评估与药物实验有关的数据。此类软件的另一个显著要求是自动化一些流程并补充对人员的需求。此类软件还应准备符合当地法规和法律规定的明确定义和结构化报告。今天大多数成功的药物警戒软件都提供灵活的功能,以促进大多数这些要求并降低成本。

药物安全将经历几个阶段进行评估。该软件用于收集反应数据,对其进行分析,并将其报告给适用的药物管理机构。该软件还可以提供所需的见解,以使药物更安全,并在此过程中减少相关成本。

药物监管软件面临的主要问题如下:

受试者的个人信息:参与药物试验的人通常被称为受试者。在受试者接受这样的试验时,他们被指示消耗给定药物的规定量。药物消耗将在一段时间内进行监控,以观察反应,了解副作用,并从测试中收集有用信息。这些信息可能会传递给药物制剂团队,在接下来的迭代中改进产品。在测试过程中,受试者可能会经历一些不良反应,包括死亡。当地的药物管理机构可能要求药物制造商确认这样的情况,并以规定的格式详细说明原因。由于受试者个人信息的敏感性,不是所有的报告数据都可以向一般公众或其他相关机构提供访问权限。

医疗保健的未来在于采用先进的透明度,允许利益相关者向市场上可能已存在的药物提供更大范围的不良数据暴露。

未来情景

在未来,地方药物管理机构可能会鼓励以匿名方式发布所有不良反应数据,其中对于药物试验受试者所面临的每一种不良情况都进行简要说明,但已经经历副作用的所有受试者的个人身份将被匿名化。在这里,区块链可以用于药物监管软件,以确立由各利益相关者发布的报告的透明度和出处。人工智能也可以用于分析报告中的关键数据点,并帮助确认不良情况(例如受试者的死亡)是仅由药物引起的,还是由其他健康状况引起的。

可能的解决方案

我们可以选择任何适合的区块链平台,具有以公开和许可方式处理数据报告的能力。可能会有几份报告严格限制在少数利益相关者之间,从而防止泄露商业机密。同样,我们可以使用人工智能模型来预测药物试验期间的任何副作用,因为三分之一的受试者可能会因药物之间的相互作用而出现副作用。

以下图表总结了我们在分隔的参考结构中的方法,以帮助您更好地理解解决方案:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 9.12:参考解决方案架构,以实现高效的药物批准和药物警戒透明度

如前所示的参考解决方案架构图,建议的解决方案分为四个组件,即:

  • 用户应用程序:在这种情况下,我想提出三个应用程序。一个应用程序可供受试者使用,以上传药物反应以及由当局指定的适当照片或重要信息。信息将存储在一个匿名钱包下,不会向公众透露太多个人信息。药品公司可以使用另一个应用程序来审查受试者提交的反应。这些数据对公司制定更好、副作用更少甚至没有的药物非常有帮助。最后,我们可能需要一个独立的仪表板供地方药品机构监测任何紧急情况,报告药物测试期间的死亡案例,并批准或拒绝一种药物。

  • 区块链:区块链网络将为所有三个角色提供钱包:受试者、药品公司和监管机构。药物反应数据将安全地共享到所有三个钱包中。此外,维护药物经历的所有测试的可追溯性非常重要。这可能有助于未来的调查,并有助于确定有责任的行为者。我们还将需要在网络中使用智能合约来促进通过智能合约批准药物。这个智能合约可以简单地在监管机构的监督下运行,或者通过数字签名共同展示群体的利益,使用网络中超过一个钱包的私钥共同在批准请求交易上签名。这种方法通常被称为多重签名。

  • 存储:我们需要一个分散式存储服务,能够存储受试者对药物反应的确切不变版本。我再次建议使用基于 IPFS 的网络,以便定制对数据的访问。

  • 人工智能:现在,药物反应数据已经在基于 IPFS 的网络(如 MoiBit)上提供,我们需要能够使用深度学习技术和药物反应启发式。如果发现严重伤害或死亡,我们可以使用模型重新生成药物配方以解决副作用问题。

在对医疗保健行业中几个领域的问题进行了详细的分析之后,现在让我们来探讨供应链行业面临的问题。

在供应链管理中融合人工智能和区块链

供应链管理被定义为一组活动,用于简化为生产成品所需的所有商品和原材料的流动。它涉及原材料的存储和运输,库存监控以及将成品交付到消费点。所有这些过程都需要进行数字化监控,并实时通知任何中断。因此,需要灵活准确的智能供应链管理软件。预计到 2025 年,供应链管理软件的市场规模将达到约 250 亿美元。

有多种方法和解决方案架构可用于构建智能供应链管理SCM)软件。我在第三章中提到了一些这样的供应链管理软件,AI 和区块链的领域特定应用。因此,我们将涵盖供应链行业面临的一个简单问题,并尝试用基于区块链和人工智能的解决方案解决这个问题。

在接下来的章节中,我们将探讨供应链行业面临的主要问题,并尝试解决它们的问题。

波动性

波动性可以在商品价格中体现,这是由于供需变化所导致的。地缘政治问题、生物危害问题、法律和其他经济问题也可能影响商品价格。管理商品价格的波动性是供应链管理中的关键要素。相反,任何与供应链相关的风险都可能扰乱商品价格。

我们需要能够解决导致价格波动的一些因素的智能供应链软件。让我们在下一节中解决这个问题。

现状情况

供应链中商品价格的波动性可能会造成损失。目前,供应链利益相关者可能会因软件无法识别价格的快速变化而遭受这些损失。

未来情景

未来,供应链利益相关者应该组成联盟,提前识别流动性问题,并利用区块链和人工智能促进贸易和物流。

可能的解决方案

我们可以使用任何适合的区块链平台,通过可扩展的智能合约支持,来促进所有供应链活动。我建议在深入开发之前,你仔细了解区块链的能力以及它可以处理的交易量。这样简单的研究可以在开始项目之前节省时间和精力。另外,你可以考虑使用去中心化的数据存储选项,如 MoiBit,用于存储所有必要的重要文书,以维护审计目的并建立来源。最后,可以开发人工智能模型来利用透明账本,以识别当前原材料的数量并做出必要的安排。然而,如果供应受阻,模型可以进行对冲,以覆盖剩余成本并继续进行操作。

以下图表总结了我们的方法在一个分隔式参考结构中,以帮助你更好地理解解决方案:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 9.13:用于减少供应链波动风险并更快结算的参考解决方案架构

如前面的参考解决方案架构图所示,建议的解决方案分为四个组件,分别是:

  • 用户应用程序:我建议一个简单的应用程序,可以供买家和卖家使用。也许你可以考虑增强一个现有的市场应用程序,并加入真实的交易数据。

  • 区块链:区块链网络将为买家和卖家提供钱包。与将本地货币转换为全球储备不同,你可以考虑使用自定义的稳定币进行交易,这些稳定币可能数量充足且转换费用较低。

  • 存储:我们需要一个去中心化的存储服务,可以捕获交易对,而不泄漏交易的具体内容。这可以通过仅保留那些可以向任何人提供而不损害任何人隐私的交易对来实现。

  • AI:现在交易对已经可用,我们可以运行监督式机器学习算法,优化寻找那些能以更低价格出售稳定币的交易者的搜索。这有助于减少在转换货币时的波动问题,从而减少结算所需的总时间和成本。

在这里列出跨多个领域供应链行业的问题的详细解决方案之后,现在让我们探索其它领域所面临的问题。

在其它领域融合人工智能和区块链

在本节中,我将概述问题以及带来好处的未来情景。但是,你不会看到解决方案方法。我期望你进一步研究这些挑战,扩充分析,并自行提出解决方案架构作为练习。

针对每个领域提出的预期现状情况,鼓励您提出自己的解决方案。您可以参考本章节提出的各个部分中我提出的潜在解决方案的格式。

现在让我们探讨法律与秩序管理机构所面临的问题,并试图解决这些问题。

法律与秩序

警察局、地方政府以及司法系统密切合作,以保护人们免受诈骗、暴力和其他形式的犯罪活动。这些政府机构集体被称为法律与秩序

现状情况

在发展中国家监视人、实体和组织的行为可能会因资源有限而变得繁琐。我们需要考虑改革当前体系中的一些关键流程,以保持社会稳定并促进企业发展。

法律与秩序管理机构所面临的首要问题如下:

冲突和仲裁管理:当通过一项法案时,作为公民追踪和理解何时该规定将生效变得困难。您可能也注意到,尽管上议院通过了一项法律,却需要很长时间才能看到其实施。有时,一项普遍的法律可能会影响两个或更多的政府机构,从而导致更多关于执行规定的混淆。这些问题将导致为公民提供服务的延迟。

预期情况

未来,法律与秩序需要在人类智能与机器和网络效率之间取得平衡。通过紧密结合行政、立法和司法部门,这是可能的。优化某些重复进行的一组决策流程的流程可以更好地为社区服务。政府机构的财团不仅可以帮助行政履行预期的绩效,还可以大幅减少执法成本。

现在让我们探讨实现国家安全所面临的问题,并试图解决这些问题。

国家安全

对每个国家而言,国家安全至关重要。对于发展中国家,努力是为了确保他们在全球政治舞台上占据更好的位置。同样,发达国家可能会努力确保他们不会失去在全球政治舞台上相对较高的地位。在这两个目标之间存在着通过代理战争、内部政治动荡和间谍活动潜在破坏另一个国家努力的利益。我们必须找到一种方式来识别困扰许多国家的此类问题,并尝试借助区块链和人工智能来解决。

现状情况

印度的地缘政治地位相对较高,这是因为一些对手面临的地理挑战,以及该国作为发达国家正在取得的经济进步。在这样的显著进展中,我们可能会遇到一些试图破坏国家行政机构所采取的举措的努力。因此,我们必须识别这些问题,并以适当的方式处理它们。

在应对国家安全事务方面面临的主要问题是:

无人机UAV):许多以四轴飞行器形式飞行的国内无人机在技术上被称为无人机。无人机对平民和军队都构成威胁。因此,重要的是识别在印度进口、操作和销毁的所有无人机。

待定情景

未来,政府可以鼓励当局借助区块链注册所有无人机和任何其他支持设备。此外,各机构可以在城市每个地区设立本地无人机应对中心,以减轻无人机带来的任何实时风险。这些应对中心可以使用基于人工智能的技术分析来自无线传感器的信号,以预测无人机的非计划飞行。这种情报可以帮助评估攻击风险在发生之前。

现在让我们探讨保护环境面临的问题,并尝试解决在这个领域遇到的问题。

环境保护

我相信保护地球,我们唯一的家园,是一项根本的义务和道德责任。保护地球的一种方法是通过保护对我们星球稳定性有贡献的生态多样性。你可能已经知道,气候变化在世界各地以不同的方式可见。尽管它可能没有达到毁灭性的程度,但它很快将达到不可逆转的毁灭点。为了防止这种情况发生,我们可以尽最大努力保护我们的陆地和水域的野生动植物以及生态多样性。

现状

目前,包括一氧化碳(CO)、二氧化碳(CO2)和甲烷在内的几种温室气体在我们的大气中很常见,这是由于燃烧化石燃料、养殖牲畜以及制造许多工业产品造成的。

阻碍节能努力的主要问题是:

碳定价:碳定价是通过对燃料征收溢价或设置单位实体可排放气体的限额来减少温室气体排放的方法。根据《巴黎协定》,许多国家已经自愿支持碳定价。然而,一些国家尚未支持这一运动。尽管许多国家已经自愿支持,但如果这些变化不以透明的方式呈现出来,沟通这一运动的进展可能会变得困难。

待定情景

将来,所有自愿加入《巴黎协定》的国家都可以将所有的碳抵消数据记录到区块链中。这些信息可以从基本消费者转移到供应商,一直到政府,然后回到可能加入联合体的巴黎协定成员手中。

现在让我们探讨一下农业行业面临的问题,并试图解决它们的问题。

农业

农业是印度经济的支柱。在撰写本文时,它是我们国内生产总值GDP)的主要贡献者之一,全球市场规模估计将在未来 3 年达到近 12 万亿美元。

现状

在过去的几年里,印度农业行业面临着一些严重问题。除了由于不规律的季风、洪水和饥荒而导致的农民困境外,我们将在接下来的章节中介绍农民面临的一些经济问题。

困扰农业行业的主要问题如下:

  • 为农民公平确定价格:随着互联网的出现,通过一些决定产量价格的合作系统更容易发现价格。农民还能够从邻近市场发现产量的价格。然而,如果经纪人计划合作以支持他们的个人动机,这可能是一个更大的游戏。这是通过经纪人以低价从本地采购产量并将其出口到可能不了解本地产量价格的市场实现的。

  • 即时锁定和付款:即使农民接受经纪人设定的价格,但一旦产量存放在仓库中,也不能保证立即付款。一旦产量被囤积在仓库中,经纪人可能会找到合适的买家,从中抽成,然后将款项支付给农民。在印度,这可能需要很多天,甚至几周。如果付款延迟,农民的义务可能无法履行。一些农民已经失去了他们的资产,而另一些人则选择了自杀,这是一个非常悲伤的局面。

应当情景

将来,所有农民都应考虑加入托管在区块链网络上的价格发现应用程序,以便在地区和州级别共享所有产量的价格信息。农民还应考虑在短期内相互交易产量并作为抵押品获得贷款。

总结

本章详细阐述了我们如何利用各种人工智能技术和模型来赋予区块链及其分布式应用程序力量。本章还向您介绍了企业、政府、金融服务、人力资源管理、医疗保健和供应链管理等领域面临的一些真实挑战。本章的目的是激发您在即将到来的项目中使用这些想法。您也可以将本章的思维重新应用于您在区块链和人工智能研究中遇到的其他未来问题。

人工智能和区块链是推动创新步伐的两大主要技术。预计这两种技术的结合将重塑 IT 行业的创新。我希望这本书能够使您通过结合这两种技术来开发一种思维范式,以开发面向下一代互联网及其用户的高效且健壮的应用程序。

恭喜您完成了这本书,并鼓励您保持对这两项革命性技术的关注。我希望这本书能帮助您在许多方面取得进步。感谢您的阅读。祝愿您在未来的区块链和人工智能事业中身体健康、幸福和成功。南无。

第十章:前行 - 为您提供的资源

在这个附录中,我们附上了一份重要的链接列表,其中包含互联网上可以访问的各种区块链和人工智能AI)相关资源。以下资源应该有助于您在本书范围之外进一步学习。

这些资源将通过识别在线的新资源、为您提供更深入的见解来帮助您进一步获取区块链和 AI 方面的技能和经验。通过这种技能提升,您可以将本书中提出的概念和技术与现实问题相连接,并借助附录中提到的区块链和 AI 社区以合作方式解决这些问题。

在这个附录中,我们将涵盖以下主题:

  • 区块链资源

  • AI 资源

区块链资源

我们希望这本书为您提供了区块链基本概念的基础知识,接着是构建以太坊和超级账本等区块链应用所需的实践知识。为了进一步帮助您,我们分享了一些更重要的资源,以深入了解其他区块链平台和协议。

在接下来的章节中,您将通过详尽的互联网资源列表,了解超越本书所学内容所需的技能。

Awesome Blockchain

这个 GitHub 仓库是一个为顶级区块链平台提供资源的策划清单。它还列出了最佳的研究文章、案例研究、书籍等链接。您可以使用以下链接访问 GitHub 上的 Awesome Blockchain 仓库:github.com/yjjnls/awesome-blockchain

新闻

区块链是最敏捷的行业之一,几乎每天都在变化。如果您对保持最新信息感兴趣,以下是我建议随时关注的一些最佳新闻室:

  • 以太坊新闻周报:如果您是一名有抱负的以太坊开发者,我建议您订阅这份精彩的新闻周报。埃文·范·内斯(Evan Van Ness)非常出色地收集了最佳链接,使您随时了解以太坊社区的最新发展。您可以在这里订阅以太坊新闻周报:www.weekinethereum.com/

  • 区块新闻:由印度班加罗尔的伊山和施里卡共同创立,区块新闻是了解最新市场趋势的首选网站之一。我建议您随时关注区块新闻网站以保持更新。网站链接是https://blockmanity.com/

  • Cointelegraph:Cointelegraph 是我个人订阅的最早的加密货币新闻媒体之一,提供行业各个领域的所有区块链新闻的最新信息。我建议您也随时关注这里。网站链接是https://cointelegraph.com/

社区

如果没有全球范围内的社区存在,区块链将一无所有。成为您所在地区社区的一部分非常重要,这样您可以发现工作机会、了解最新的技术和商业动态,其中一些不会被主要新闻机构放在聚光灯下。根据我的观察,我推荐在孟买举办的一些最佳见面会,这是印度的区块链之都。除了孟买的见面会,我还分享了一些便捷的链接,帮助您全球范围内识别区块链见面会:

  • Blockchained India:自 2016 年和 2017 年印度区块链发展之初以来,这个区块链社区一直是最活跃的之一。您可以关注他们的电报社区,获取关于您附近即将举行的开发者见面会或会议的更新。该社区的网站是 https://blockchainedindia.com/** 。

  • Namma Blockchain:这是孟买一个紧密联系在一起的区块链开发者和初创企业社区,专注于技术、去中心化,并展示最新产品。由 Aicumen Technologies Inc. 主办,这是印度最早的一个从事区块链和人工智能(AI)研发的机构,自 2017 年起一直在进行工作。如果您就在孟买附近,我建议您加入这个见面会小组。如果我在附近,您会看到我偶尔参加这个见面会!加入 Namma Blockchain 见面会请访问 https://www.meetup.com/Namma-Blockchain/** 。

  • 印度以外读者的区块链见面会:如果您在印度以外阅读本书,Meetup.com 链接, www.meetup.com/topics/blockchain/ ,可以帮助您识别附近的区块链见面会小组。一些最佳的国际区块链见面会小组遍布纽约、伦敦、新加坡、多伦多、苏黎世、旧金山、柏林等主要 IT 中心。

精华博客

阅读博客可以帮助我们与全球各地区的区块链技术最新趋势联系起来。在这一部分中,我推荐了一个必读博客网站,您可以在闲暇时间浏览,了解新的设计模式,用户体验UX)观点,并且了解在几个区块链上开发去中心化应用DApps)的发展。

Hackernoon:Hackernoon 是我更新区块链最新动态的首选网站。它不仅局限于技术文章,该网站还关注区块链技术的经济方面和其他各个方面。请访问 Hackernoon 网站 https://hackernoon.com/** 。

设计

现在让我们探索一下保持您的 DApp 设计技能敏锐所需的资源。

ConsenSys Design:如果你是一名有抱负的开发者,希望在区块链领域找到工作,或者是一名产品经理,希望领导一个区块链团队,那么了解设计一个面向客户的用户体验中的挑战是至关重要的。ConsenSys Design 的使命是为区块链应用程序的更好用户体验策略揭示这些障碍。在 ConsenSys Design 网站上,你会发现一些很棒的文章和一些开源项目,包括产品演示。该网站位于 https://consensys.design**。

开发和操作指南

接下来,我们将探索保持你的 DApp 开发技能所需的资源。

Simple as Water:Simple as Water 是一个由社区驱动的网站,为所有人提供易于理解的教程,从初学者到专家。由 Hackernoon 的顶级贡献者之一 Vaibhav Saini 创立,该网站是开发者理解并构建基于不同 web3 栈(包括以太坊、比特币、IPFS、Libp2p 等)应用的首选网站。你也可以在这里找到我的一些文章。该网站可在 https://simpleaswater.com/** 访问。

现在我们已经介绍了区块链资源,让我们来探索一下人工智能的学习材料和社区。

人工智能资源

人工智能是一个庞大的海洋,正在成长为一个独立的行业。我们希望本书向你介绍了理解为下一个经济建立智能应用的背景所需的基础知识和基本信息。在接下来的章节中,我将为你提供链接和信息,帮助你深入了解使用不同人工智能技术构建创新复杂应用的方法。

人工智能入门综合列表

现在让我们探索一些将帮助你获得更多实用人工智能知识的资源。

Awesome AI:这个 GitHub 上的存储库是你的一站式链接。它致力于以协作方式记录所有在线人工智能资源。你可以在 https://github.com/owainlewis/awesome-artificial-intelligence** 访问 GitHub 存储库。

案例研究

现在让我们探索一些将帮助你理解人工智能在改变生活场景中的影响的资源。

Experiments with Google:这是 Google 的一个专页,展示了一系列经过精心挑选的人工智能案例研究,这些案例研究在观察人类和人工智能如何共同解决有趣挑战方面非常有帮助。该网站位于 https://experiments.withgoogle.com/collection/ai**。

社区

现在让我们探索一些将帮助你与印度一些最好的社区联系起来的资源。除了总部位于班加罗尔的聚会之外,我还分享了一些有用的链接,帮助你在全球范围内找到人工智能聚会:

  • Applied Singularity:作为印度一个紧密联系的社群,Applied Singularity 是一个由志同道合的人组成的群体,他们利用人工智能、物联网和生物技术,旨在为技术奇点创造一个完美的生态系统,并利用其技术进步。他们的应用程序提供关于最新期刊和最佳阅读材料的信息,并积极发布印度的任何相关工作机会。您可以在此处访问该应用程序以探索更多功能,并与一个活跃的社区联系:appliedsingularity.com/app/

  • AI meetup for readers outside India:如果您在印度以外的地方阅读本书,Meetup.com 链接,www.meetup.com/topics/ai/,将有助于确定您附近的人工智能聚会小组。一些最好的国际区块链聚会小组分布在纽约、圣保罗、伦敦、巴黎、特拉维夫、伊斯坦布尔、多伦多、加利福尼亚州的山景城、柏林和其他主要的 IT 中心。

最核心的博客

现在让我们探索一些资源,这些资源将帮助您提升数据科学领域的能力。

Towards Data Science:作为一名技术专家,我更喜欢一篇博客,它可以让我了解人工智能技术的最新趋势,而不需要一直深入研究。Towards Data Science 是全球人工智能社区驱动的最佳媒体出版物之一,用于分享人工智能领域的想法、代码和最佳实践。该博客可在此处访问:https://towardsdatascience.com/

研究

现在让我们探索一些资源,这些资源将帮助您及时了解人工智能领域的最新研究和发展进展:

  • arXiv 最新 AI 提交:如果您是一位研究学者,并且需要及时了解人工智能领域的最新论文,这是您的首选网站。该网站按日期分类列出了所有 AI 论文提交。以下是访问 arXiv 最新 AI 相关论文的特定 URL:https://arxiv.org/list/cs.AI/recent

  • AITopics:这是我获取人工智能市场趋势最新信息的首选链接。如果您是一位决策者,我强烈建议您保持对这个网站的关注!该网站可在此处访问:https://aitopics.org/

开发和操作指南

现在让我们探索 Kaggle 上的资源,这将帮助您提升作为数据科学家所需的实际实现能力。它们如下:

  • Kaggle 上的 Python 实践教程:作为一个想进入人工智能行业的人,你需要熟练掌握 R 或 Python。最近,对 Python 的需求增长非常迅速。因此,我建议你熟练掌握编程,并且变得精通 Python。虽然有很多 Python 教程可以搜索到,但我认为 Kaggle 的这个教程会为你提供足够的基本 Python 经验,以及如何使用 Kaggle 平台的基本功能的知识。你可以在https://www.kaggle.com/learn/python**上报名参加这门课程。

  • Kaggle 上的机器学习入门课程:这是 Dan Becker 制作的入门课程,概述了机器学习的基本概念。该课程教授了构建模型使用 Kaggle 平台功能的基本实践技能。你将学会如何验证模型并进行优化。你还将了解 Kaggle 上可用的竞赛以及如何提交作品。你可以在https://www.kaggle.com/learn/intro-to-machine-learning**上报名参加这门课程。

  • Kaggle 上的中级机器学习课程:这个由 Alexis Cook 制作的微课程让你接触到数据科学中的真实场景。它将帮助你解决数据泄露问题,编写更好的测试程序并优化你的模型。在参加面试之前不要错过学习这门课程,因为它可以帮助你为一些基于优化的高质量问题陈述做准备。你可以在https://www.kaggle.com/learn/intermediate-machine-learning**上报名参加这门课程。

  • Pandas 微课程:Pandas 被誉为数据分析的瑞士军刀。这个由 Aleksey Bilogur 制作的实践课程教你如何使用该库进行数据操作。你可以在https://www.kaggle.com/learn/pandas**上报名参加这门课程。

  • Kaggle 上的深度学习课程:这是我向想学习深度学习的人推荐的课程之一。这个由 Dan Becker 制作的微课程将教会你使用 TensorFlow 和 Keras 进行图像处理以及深度学习技术的其他方面的新实践技能。你可以在https://www.kaggle.com/learn/deep-learning**上报名参加这门课程。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/864037
推荐阅读
相关标签
  

闽ICP备14008679号