Azure开发者社区 - 致力于Azure技术分享

Azure是由微软推出的云计算平台,目前提供超过200多种服务。涵盖IaaS服务,PaaS服务,以及SaaS服务。 覆盖了多种业务领域:传统的N层应用架构、基于Web架构、大数据、物联网、机器学习等各领域。 Azure提供的各种服务旨在帮助客户将新解决方案落地实施,解决遇到的难题,同时为客户创造未来。 利用所选的工具和框架,方便客户在多个云中,在本地以及边缘设备中生成,运行和管理应用程序。



这是一个基于Azure Bot Framework SDK开发聊天机器人的入门文章,根据这篇文章step by step, 配置官方提供的Sample, 相信很快你就可以成为聊天机器人的开发高手:

 

使用Azure Bot Service开发聊天机器人
手把手教你开发一个简单的聊天机器人
创建一个全功能的聊天机器人项目模板
聊天机器人里的消息和Activity
基于Azure Bot Framework SDK开发的聊天机器人如何管理状态
使用Dialog库控制聊天机器人的会话流程
深入理解Bot Framework SDK Dialog系统
聊天机器人项目中使用Dialog实现分支任务
聊天机器人项目中使用Dialog实现循环任务
聊天机器人项目中将状态管理数据存储到数据库中
开发基于微信公众号的聊天机器人

Have Fun!



基于Azure Bot Framework SDK开发的聊天机器人如何管理状态

我们之前已经讨论过了Azure Bot Framework SDK的应用是构建于Web API的应用之上,同样也是基于Asp.net Core的框架,这样带来一个问题就是每一个Bot应用实际上是无状态的应用,因为HTTP协议天然就是无状态,为了在Web应用上实现状态的管理,每个开发的框架都有实现自己的会话管理机制(Session), 大多数Web应用会基于Cookie或者是Header或者是查询字符串在每次请求的时候带上唯一的id, 用这个ID来标识每一个会话。基于这样的构想,Azure Bot Framework SDK也同样使用了类似的原理来管理状态,和Web应用不同,Bot的状态管理因为场景的差异,加入了更多的设计。

阅读更多>>



聊天机器人里的消息和Activity

我们之前的文章讨论了一个Bot应用实际参与的几个组件。

物理组件:

  • Channel: 就是一个物理的应用,例如微信,Teams
  • Bot Service: 用于和Channel相连,转发消息到Bot
  • 运行Bot的资源。

逻辑组件:

  • Channel endpoint
  • Adapter
  • Bot Turn Context Handle
  • Activity
  • TurnContext

一个消息的流入路径是:用户 -> Channel -> Adapter -> Adapter middleware -> Bot Turn handle

阅读更多>>



创建一个全功能的聊天机器人项目模板

相比于上一节我们介绍的"简单"机器人,我们本章先创建一个功能更为全面的机器人模板,后面的文章逐渐完善下述功能:

  • 给机器人会话添加上认证的功能。
  • 给机器人的会话和用户添加状态跟踪的机制
  • 使用卡片丰富Activity的通讯。
  • 使用Dialog系统丰富交互。

阅读更多>>



Hello, Bot!

我们之前的文章简单的介绍了一下由微软提供的Azure Bot Framework SDK以及Azure Bot Service服务,比较不妙的是看起来这个服务真没啥人用,不能排除微软之后就不支持这个服务。但是Azure Bot Framework SDK是开源的,而且还有一个开源的社区,因此即便微软不支持Azure Bot Service了,Azure Bot Framework SDK还会以开源的形式继续存在,如果要做聊天机器人,还是可以继续使用这个框架,也可以考虑参与开源的开发。我为了自己的项目也尝试参与了两个开源的项目,一个是Bot基于SQL ServerIStore实现,另外一个是WeChatAdapter, 这两个项目之前都是有的,但是太老,几年没有更新了,不能支持.Net6,因此我做的工作就是修改了一下他们,让他们支持.Net6, IStore我已经提交了PR,但是还没有被接受,不过可用了,WeChatAdapter我还在调试,完成后也提交一下PR, 我PR估计比较严格,如果大家想用用看,也可以访问:

这个两个都是我的fork

阅读更多>>



使用Azure Bot Service开发聊天机器人

聊天机器人在电商时代有很多的应用,各种自动客服,订单系统,电话语音等。它适用各种重复的,枯燥的工作。在和人的交互过程中,聊天机器人可以通过语音,文字,图片,甚至是视频完成交互工作。同时可以接入自然语言处理模型,问答模型等等各种基于AI的组件,使得聊天机器人更像人类,更好,更自然的完成交互的工作。

要设计一个聊天机器人的基础框架是繁复的,需要考虑很多场景,例如多场景对话,连续对话,跳跃性对话等都需要认真的考虑,技术上也受制各种技术集成,拔高了难度。推荐大家可以使用微软推出的Azure Bot Service来简化聊天机器的开发,节省成本,何乐而不为。

我们先看一下Azure Bot Service的介绍。

阅读更多>>



MVVM桌面应用中使用Asp.net CoreGeneric Host模型

熟悉Asp.net Core的同行应该都非常了解它的Host模型,特别是Generic HostHost将一系列的功能全部压缩的这个模型里,这包括依赖注入,配置管理,日志管理,生命周期管理等等。如果你想对Host多了解一下,您可以参考如下的文档:

这些文章是对.Net Host模型介绍比较全面,可以加深一些了解。
阅读更多>>



async/waitConfigureWait(false)在异步编程中有什么关系?

我喜欢.Net的最大原因就是.Net是真的提供了很多工具简化编程的难度,并提供了健壮性。尤其是异步编程模式的提出。

.Net使用asyncawait两个关键字来简化异步编程,不过需要注意的是:

  • 异步编程不是并行编程,和我们提到的多线程编程虽然有联系,但是异步编程不是多线程的那种多任务编程。
  • 异步编程要注意编程任务是基于CPU计算多,还是基于IO多,特别是在基于Asp.net Core Genric Host进行后端服务编程时(例如:写基于Windows或者基于Linux的服务程序,不是指Web编程),特别需要注意区分你的任务是基于IO的还是基于CPU计算的任务。基于CPU计算的任务都需要Task.Factory.new放入runtime的线程池中运行。
  • 在基础的编程模型中我们有多进程,多线程分别利用的是CPU的特性,例如分时CPU,多核等等,但是还有一个概念就是可阻塞IO的模型,可以将异步编程模型的基础理念架构在可阻塞IO上。

阅读更多>>



Azure IoT Edge Runtime升级到了1.4

今天无意中发现Azure IoT Edge Runtime升级到了1.4了,升级速度是蛮快的,其中有一个特性引起了我的兴趣:系统模块在Host上的Storage权限终于可以自动管理了。

这里系统模块主要指的是模块EdgeAgentEdgeHub, 这两个模块一个负责整个系统上除它自己所有模块的安装配置,一个负责系统上所有模块和IoT Hub或者子设备和模块之间的通讯,EdgeHub就是一个缩小版的IoT Hub, 所有的SDK都可以直接把EdgeHub当成是IoT Hub就好了。

之前我们所有的文章中一再强调EdgeAgentEdgeHub在生产环境中是非常重要的,因为它们都会有不少数据,在这两个镜像从设备上拉起来之后,如果docker的运行的instance一直不发生变化还不会出什么问题,但是一旦instance停止或者删除,那么原有的数据基本都会丢光,这主要包括针对模块的配置,以及EdgeHub上可能存有的离线数据(注:EdgeHub会在连接不上IoT Hub的时候将数据临时存在storage里,上线后重发), 这种情况很容易发生,例如你有一个新的部署,这个部署里调整了OnCreate的值等,都可能会引发这个问题。

阅读更多>>



Azure IoT Edge的部署

Aure IoT的产品和解决方案中,部署(Deployment)是一个专有的名词,它是专用于IoT Edge的名词,只有IoT Edge有部署(Deployment)的概念,同时需要注意的是一个IoT Edge设备只有在应用了一个部署之后才能正常的运作,如果仅仅是将一个IoT Edge设备通过配置链接到IoT Hub, 而没有应用一个部署,设备还是会报错。

一个部署在实际应用中体现为一个部署清单(deployment mainfest), 微软使用Json文档来描述部署清单的详细内容,这些内容主要包括:

  • IoT Edge Agent的孪生模块定义(module twin:可以理解为逻辑模块, 保存在Azure IoT Hub服务端), 包括如下的内容:
    • 应用于IoT Edge设备的模块定义, 包括系统模块EdgeAgentEdgeHub
    • 定义用于保存模块的镜像库的地址, 以及可选的认证信息。
    • 配置模块的创建和管理规则(EdgeAgent模块主要的作用是管理设备上的模块, EdgeHub模块主要用于管理模块、子设备、 IoT Hub之间的通讯。)
  • IoT Edge EdgeHub孪生模块定义,主要定义预期属性(desired property), 定义模块、子设备,IoT Hub之间的消息如何传递的。
  • 其他模块的预期属性的定义。

阅读更多>>



Azure IoT Edge Hub模块的消息路由

Azure IoT Edge两个系统模块Edge AgentEdge Hub, edge Agent主要是管理模块的安装和监控,Edge Hub用于模块或者子设备和IoT Hub之间的通讯。

我们可以把Edge Hub模块认为是缩小版的IoT Hub, 它拥有很多的IoT Hub的特性,在IoT Edge设备不在线的时候,它可以充当部分的IoT Hub的功能。 为了将模块或者子设备的消息路由到IoT HubEdge Hub提供了消息路由的功能。在用户使用部署的时候可以对消息路由进行定义,如果你不熟悉部署,请参考文章:<>

当我们使用Azure Portal添加部署的时候,无论是标准的自动部署,还是分层部署,都需要配置消息的路由。

阅读更多>>



Windows Server 2022 Core迁移记录

开始之前要了解的是:什么是Windows Server Core,它之前发现的版本有什么不一样。Windows server core不是一个新鲜的东西,早在windows server 2016发布的时候,就已经发布了基于core的版本。Core和完整的发行版主要的区别就是Core拿掉了GUI的部分,但是保留了完整的服务功能,要管理和操作Core,需要使用很多的命令行工具,之前熟悉的几乎全部的在Windows Server上的基于GUI的工具全部没有,这就要求用户必须要熟悉基于Windows的命令行工具以及PowerShellRemote Desktop Service(Terminal Service)还是保留的(通过3389端口连接),另外其他的远程管理工具和接口都是完全具备的,例如WinRM等等。

详细的介绍,请参考微软官方文档:https://learn.microsoft.com/en-us/windows-server/administration/server-core/what-is-server-core


阅读更多>>



MVVM项目中使用async/await - 数据绑定

本篇讨论在WPF & Net MAUI & WinUE3 MVVM项目中使用Async & await进行多任务编程,是基于大牛Stephen Cleary于2014年3月份左右发表的博客。原始页面已经找不到了,进入了微软MSDN杂志的存档了。

之前在网络上搜索了不少文章,这些文章讨论如何在UI环境中使用多线程时无一例外的都是利用例如wpfdispatcher将长时间运行的线程放置到后台线程中,并通过Dispatcher来更新UI, UI线程无需等待。看到这些代码我都有一个问题,为什么不可以直接使用async/await而避免使用dispatcher来配合多任务编程呢?找了不少方案,自己也尝试设计一些思路,但都不理想,一直到我看到了Stephen的文章,顿时感觉茅塞顿开,在这里将Stephen的经验也分享给大家。

阅读更多>>



Azure翻译服务入门

 

总结了Azure翻译服务入门的系列的文章,可以通过如下的链接学习:

点解链接:Azure翻译入门系列



Azure入门系列

 

为了帮助哪些想了解Azure但是对Azure又没有了解的用户,特地整理了一系列的基础文章,希望可以帮助到有需要的用户。

阅读更多>>



Azure Digital Twins入门

 

请参考文件列表:Azure Digital Twins入门



Azure Windows 虚拟机

 

使用Azure Windows虚拟机部署基于.Net的站点以及优化经历,给需要的用户参考:

阅读更多>>



安装Web角色和服务

 

注意
本章是跟随前一章的内容,请先仔细阅读前一章的内容,前一章的地址在这里:
https://www.azuredeveloper.cn/article/build-web-by-azure-vm-create-azure-resource

可以通过Azure Portal找到我们创建的虚拟机,拿到公网IP, 或者直接运行如下的脚本(上一篇文章我们创建好的)得到公网IP:

 $ $public_ip.IpAddress

然后使用Windows的远程登录登录到虚拟机上,虚拟机默认启动服务器管理器, 如下图:

 

阅读更多>>



使用脚本创建Azure资源

 

我们前一篇讨论我们的工具的选择,这篇开始我们就开始开工了,我们先来创建Azure的资源,为了契合我们使用Azure的理念,使云管理人员也参与到整个系统的架构中来, 我们使用脚本工具来帮助管理员创建基于Azure的资源,这样可以将创建和管理资源的脚本使用github管理起来,方便未来可以快速部署和快速扩充的需要。

先来看一下我们目标:

  • 在本地创建脚本运行环境,并记录成文档。
  • 使用脚本创建虚拟机,并设定虚拟机的公网地址为静态地址,方便网站域名的绑定。
  • 使用脚本配置Network Security Group用来放行我们需要的端口。
  • 使用脚本创建Azure Stoarge账户和一个用于备份的blob
  • 使用脚本创建Azure Cognitive Service资源,并保留创建的凭据。
  • 使用脚本创建Azure沉浸式阅读服务。
  • 讨论将来的扩展性,如何满足扩展性。

阅读更多>>



选择创建网站的工具

 

学习Azure有长一段时间了,计划使用Azure来做一些有趣的事情,开始计划之前,我们先可以想想Azure可以帮我们完成哪些事情?

  • 使用Azure的虚拟机或者应用服务可以快速搭建各种站点,例如Web站点,FTP站点,邮件列表等等传统的互联网项目。
  • 使用AzureAI技术可以快速搭建各种人脸识别,语音识别,以及配音等新兴的项目。
  • 使用Azure的物联网技术可以快速让自己的设备随时连上自己创建的小型物联网,可以升级自己家里的智能家居。
  • 使用AzureMedia Service可以快速搭建直播项目。
  • 使用Azure的机器人服务创建一个聊天机器人。
    ......

我们可以在这里列一个很长的单子,为了简便(实际上内容也不少)我们选择先使用Azure的虚拟机搭建一个功能完备的Web站点,作为一个博客记录自己学习Azure的点点滴滴。

阅读更多>>



实现自己的IHostedService

我们前面使用.NetWorker模板实现.Net Host的服务模型的时候,都使用了BackgroundService这个抽象类,如果想对于自己的后端应用有更多的定制,可以从接口IHostedService直接继承,然后实现更多的细节,我们这个实例直接实现接口IHostedService以及接口IAsyncDisposable, 同时向.Net Host模型注册服务都是使用的相同的扩展方法AddHostedService<T>()方法。

我们这一节实现使用System.Threading.Timer来实现一个定时的任务。

创建项目

使用.Net Cli来创建项目:

dotnet new worker -o CustomHostedService
cd CustomHostedService
code .

使用了Vs Code打开该目录之后,开始进行编辑。

阅读更多>>



使用Host编程模型编写Windows服务应用

 

.Net 5之前用户如果想编写运行在Windows上的服务应用,只能通过.Net Framework来编写,现在可以直接通过.Net来编写Windows的服务应用了。我们本章尝试使用.Net 6worker模板来编写Windows的服务应用。

完成本教程您将了解:

  • 如何将基于.Networker模板应用发布为一个exe可执行文件。
  • 创建一个Windows服务
  • 启动和停止Windows服务
  • 查看该服务的事件日志
  • 管理Windows服务

创建项目

你可以visual studio来创建基于Worker模板的项目,或者是使用.Net cli工具来创建。

dotnet new worker -o WindowsService
cd WindowsService

要编写Woindows的服务应用,需要额外添加必须要的包:

阅读更多>>



使用Host模型创建一个基于队列的服务

 

对我们即将创建的类作如下的说明:

  • 接口IBackgroundTaskQueue: 用于定义后台使用的队列模型,该接口提供两个方法:QueueBackgroundWorkItemAsync, 用于向队列添加项目,DequeueAsync,用于从队列中取出项目
  • DefaultBackgroundTaskQueue, 实现了接口IBackgroundTaskQueue, 同时可以注册到依赖注入容器中,用于向需要队列服务的代码提供队列服务。该服务会被注册为Singleton模式。
  • QueuedHostedService: 该类从BackgroundService继承,并且会通过扩展方法注册到Host里,由Host开始运行该服务。这个也是用户开发基于Host模型的入口。
  • MonitorLoop: 该类实现了监听键盘事件,同时注入Queue, 并根据键盘的输入向队列中添加新的task.

接下来我们开始创建这个项目。

创建项目

请使用如下的命令行来创建项目:

dotnet new worker -o QueueService
cd QueueService
code .

至此完成了项目的创建。

阅读更多>>



Azure IoT Edge问题排查

 

本节介绍一些常用的Azure IoT Edge设备问题排查的基本手段和工具。

首先需要说明的是之前微软的文档是有些问题的,之前的文档讨论一个环境变量RuntimeLogLevel用于设置runtime的日志级别,实际上应该是设置在模块edgeHubedgeAgent上。对于rumtime的日志输出建议使用命令sudo iotedge system logs -f (注意这个命令是用在iotedge runtime 1.2), 或者直接使用Linux命令journalctl -fu iotedge来查看日志。

  1. edgeAgent或者edgeHub模块日志级别设置为debug

    使用合适的工具登录到设备所有的系统里,例如Linuxssh客户端。
    编辑文件:/etc/iotedge/config.yaml 或者文件/etc/aziot/config.yaml (前面这个配置文件适合1.1版本,后面是1.2以以上。)

    agent:
        name: edgeAgent
        type: docker
        env:
            RuntimeLogLevel: debug
        config:
            image: mcr.microsoft.com/azureiotedge-agent:1.1
            auth: {}
    

    需要注意的是edgeHub模块也可以设置环境变量RuntimeLogLevel, 但是建议仅仅在您开发Edge模块时在EdgeHub上开启这个选项。

    阅读更多>>


©2021 AzureDeveloper.cn  沪ICP备16007820号-5 联系我们
"