npm 包 botframework-streaming 使用教程

AI 编程助手,豆包旗下的编程助手,提供智能补全、智能预测、智能问答等能力,节省开发时间,释放脑海中的创造力,支持 VSCode,点击体验 AI

前言

当今互联网时代,人工智能技术的飞速发展让聊天机器人在人机交互领域扮演着重要的角色。Microsoft Bot Framework 是一个众所周知的完整机器人建造平台,该平台包含了 BotBuilder SDK、Bot Framework Portal、Bot Framework CLI 等工具,可以让开发人员轻松地构建和部署聊天机器人。

botframework-streaming 是 Microsoft Bot Framework 中新推出的一个 npm 包,它可以让开发人员更加方便地进行浏览器和服务器之间的实时双向通信。在本篇文章中,我们将介绍如何使用 botframework-streaming 进行聊天机器人的开发,并提供详细的指导和示例代码。

安装

我们可以通过命令行工具快速安装 botframework-streaming,命令如下:

--- ------- ----------------------

使用

要使用 botframework-streaming,我们必须先创建一个 adapter 对象来处理连接和消息传递操作,代码实现如下:

----- - ------------------- - - ----------------------------------

----- -------------- - ----- ------------ -- -
  ----- ---- - --- ----------------------
  ----- ---------------
  ----- -------- - ----- ----------------------
  ------ ---------
--

在以上代码中,我们创建了一个名为 StreamingHttpClient 的类,并通过 sendActivities 方法来发送消息,并通过 response 变量来获取返回结果。

当 adapter 对象被创建后,我们需要启动它来监听客户端的请求,代码如下:

----- - --------------- - - ----------------------------------

----- ------- - ----- -- -- -
  ----- ------ - --- ------------------
  ----- ---------------
  ----------------------------
--
------------------- -- --------------------

在以上代码中,我们通过 WebSocketServer 类创建了一个名为 server 的 websocket 服务器,通过 start 方法来启动它并监听客户端请求,最后在控制台输出“Listening...”表示服务器已成功启动。

示例

在本节中,我们将演示如何使用 botframework-streaming 实现简单的聊天机器人。在该机器人中,我们将使用 LUIS(Language Understanding Intelligent Service)作为 NLU(自然语言理解)引擎,通过对用户的输入进行分析来推断对应的意图和实体,并针对不同的意图提供不同的回复。

步骤一:创建 HTTP 服务器

首先,我们需要创建一个 HTTP 服务器,代码如下:

----- ---- - ----------------

----- ---- - ---------------- -- -----
----- ------ - ----------------------- ----- ---- -- -
  -------------------- --------------
  ------------------ - --------------- ------------ ---
  -------------- ---------
---

------------------- -- -- -
  ------------------- ------- -- ---- -----------
---

在该代码中,我们创建了一个名为 server 的 HTTP 服务器,并通过 listen 方法将其绑定到指定的端口号。当有请求到达服务器时,服务器将通过 createServer 方法创建一个请求处理器,返回一个响应内容“Hello World!”并发送到客户端。

步骤二:实现 WebSocket 服务器

然后,我们需要使用 WebSocket 服务器来处理实时的消息通信,在之前的代码基础上,我们增加以下代码:

----- -- - --------------
----- - --------------- - - ----------------------------------

----- --------------- - --- ------------------
-------------------- --------- ------- ----- -- -
  ---------------------- --------------
  ---------------
    ------------------- -------- ------- ---- --
    ---------------- -- -- -
      ---------------------- -------------
    ---
---

----------------------------- --------- -- -
  -------------------- --------------
  ---------------------
  ---------------------- ----- ---------- ----- ---- ----- - - --------------------- ---
---

----- ------- - ----- -- -- -
  ----- ------------------------
  ---------------------- ------ ---------------
--
------------------- -- --------------------

在以上代码中,我们首先引入了 ws 模块,该模块用于创建基于 WebSocket 的双向通信。通过 WebSocketServer 类创建了一个名为 streamingServer 的 websocket 服务器,并通过 createConnection 方法来创建一个 websocket 连接,当建立连接后通过 connected 事件输出提示信息。

streamingServer 对象上,通过 on 方法监听 receive 事件,该事件用于在服务器接收客户端消息时进行触发。在该事件中,我们利用 context 上下文对象来获取客户端发送的消息,并返回消息内容“ You said: + context.activity.text ”,表示服务器已成功接收到客户端发送的消息。

步骤三:连接到 LUIS 并分析消息

接下来,我们需要连接到 LUIS 并分析客户端发送的消息,为此,我们需要安装 botbuilder-aibotbuilder-streaming-extensions 两个 npm 包,命令如下:

--- ------- ------------- -------------------------------

接着,我们需要通过 LuisRecognizer 类实现与 LUIS 的通信,代码如下:

----- - -------------- - - -------------------------
----- - -------------------- ------------- - - -------------------------------------------

----- -------------- - --- ----------------
  -------------- ---------
  ------------ ---------------
  --------- --------------
---

----------------------------- ----- --------- -- -
  -------------------- --------------
  ---------------------

  ----- ----------- - - --------- -------------- --
  ----- ---- - --- ----------------------
  ----- ------ - --- ----------------
  --------------------------- -- -
    ----------------- ------- ------------
    ----------------------
    ---------------------- ----- ---------- ----- ------------- ---
  ---

  ----- ---------------
  ----- -----------
    - ----- --------- ----- ------------ ----------- --- ---------- --- ----- --- ---------- -- --
    - ----- ----------- ----- ---------------------- ----- --- ---------- -- -
  -- - ----------- ------------ -------------- ------ ---
---

在以上代码中,我们首先创建了一个名为 luisRecognizer 的 LUIS 分析器,通过 LUIS 的 API 将用户输入的文本转化为理解层输入(Cognitive Services LUIS 输出的数据)。

随后,我们通过 StreamManager 类创建了一个名为 stream 的流通道,将 LUIS 分析结果通过 stream 传送到客户端。其中 subscribe 方法将在上下文中注册一个 activity 处理程序,以对流式源信息进行处理。当对话结束时,此方法还将呈现一个最近的消息。

最后,在 streamingServer.on('receive') 中,我们使用 StreamingHttpClient 类创建 HTTP 客户端,并通过 send 方法将输入消息传递给 LUIS 分析器,如下所示:

----- -----------
  - ----- --------- ----- ------------ ----------- --- ---------- --- ----- --- ---------- -- --
  - ----- ----------- ----- ---------------------- ----- --- ---------- -- -
-- - ----------- ------------ -------------- ------ ---

其中,第一条命令类型为 invoke,用于在 LUIS 识别器中声明语言识别的服务。第二条命令类型为 activity,用于传输输入活动数据。

步骤四:集成 Bot Framework

最后,我们需要将以上所有的模块组合到一起并创建聊天机器人。对于这个机器人,我们需要做的是实现 onTurn 函数来处理对话,代码如下所示:

----- - --------------- - - ----------------------

----- --- ------- --------------- -
  ------------- -
    --------
    ----------------- --------- ----- -- -
      -- ---------------------- --- ---------- -
        ----- ----------- - - --------- -------------- --
        ----- ---- - --- ----------------------
        ----- ------ - --- ----------------
        --------------------------- -- -
          ----------------- ------- ------------
          ----------------------
          ---------------------- ----- ---------- ----- ------------- ---
        ---

        ----- ---------------
        ----- -----------
          - ----- --------- ----- ------------ ----------- --- ---------- --- ----- --- ---------- -- --
          - ----- ----------- ----- ---------------------- ----- --- ---------- -- -
        -- - ----------- ------------ -------------- ------ ---
      -
      ----- -------
    ---
  -
-

----- --- - --- ------
-------------------- --------- ------- ----- -- -
  ---------------------- --------------
  ----- --------------- - --- ------------------
  ---------------
    ------------------- -------- ------- ---- --
    ---------------- -- -- -
      ---------------------- -------------
    --
    -----------
---

----- ---- - ---------------- -- -----
------------------- -- -- -
  ------------------- ------- -- ---- -----------
---

在以上代码中,我们继承了 ActivityHandler 类,并重写了 onTurn 方法,该方法将在每一个机器人的交互中被调用。当 context 中 activity 的类型为 'message' 时,我们将调用 LUIS 分析器来处理用户输入的消息和意图。

我们在服务器的 WebSocket 服务器代码中,使用了一个 pipe 方法来把消息流从 botBuilder 子协议管道映射到 botBuilder 适配器上,实现了更加完整的机器人聊天应用。

总结

本篇文章详细介绍了如何使用 botframework-streaming 包来构建聊天机器人,并提供了示例代码和详细的指导。当然,这只是 botframework-streaming 的一部分,还有更加完整的 API 可以使用,感兴趣的读者可以参考 Microsoft 官方文档进行深入的学习。

使用 botframework-streaming 可以让开发人员更加方便地进行聊天机器人的开发,同时也可以拿来进行其他基于 WebSocket 的通信应用,属于一个比较好用的工具包。希望读者学习本文后,能够更加熟练地掌握 botframework-streaming 的使用方法,并在实际开发中取得更好的效果。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/5eedb6eeb5cbfe1ea0611688


猜你喜欢

  • npm 包 @types/jsonld 使用教程

    在前端开发中,经常需要根据某些规范生成特定格式的数据,例如在使用 JSON-LD(JavaScript Object Notation for Linked Data)时就需要编写标准的 JSON-L...

    4 年前
  • npm 包 @types/rdf-js 使用教程

    在前端开发中,我们经常会遇到需要处理 RDF 格式数据的情况。@types/rdf-js 是一款专门为 RDF-JS 格式编写的 TypeScript 声明文件库,提供了一系列的类型定义和 API,方...

    4 年前
  • npm 包 definition 使用教程

    在前端开发中,npm 包是不可或缺的一部分。npm 包为开发人员提供了可重用的代码库,为项目开发节省了时间和精力。然而,如何使用 npm 包是一个需要掌握的技能。 在本篇文章中,我们将介绍 npm 包...

    4 年前
  • npm 包 @solid/acl-check 使用教程

    在前端开发中,安全性是非常重要的一环,其中权限控制更是必不可少的一部分。而 @solid/acl-check 就是一款能够让我们更加简单地实现权限控制的 npm 包。

    4 年前
  • npm 包 @solid/oidc-rs 使用教程

    简介 @solid/oidc-rs 是一个基于 Web 逆向认证技术 OpenID Connect 的 JavaScript 库,用于实现用户登录和授权,轻松实现 Single-Sign-On (SS...

    4 年前
  • npm包 @solid/solid-multi-rp-client 使用教程

    本文介绍npm包@solid/solid-multi-rp-client的使用方法,它是一个Solid标识提供者的多个Relying Party(RP)的JavaScript客户端库。

    4 年前
  • npm 包 kvplus-files 使用教程

    简介 kvplus-files 是一个基于 Node.js 的 key-value 存储系统,可以用于在前端中存储数据和文件,同时支持热更新和版本控制。kvplus-files 的设计目标是尽可能简单...

    4 年前
  • npm 包 @solid/oidc-auth-manager 使用教程

    OAuth 2.0 是一种用于授权的流程,它使用户能够向第三方应用授权访问他们存放在其他服务提供者处的资源,而不需要将他们的用户名和密码提供给该服务提供者。OpenID Connect(OIDC)是基...

    4 年前
  • npm 包 @solid/jose 使用教程

    前言 在现代化的 Web 应用开发中,安全性是非常重要的一个方面。JWT(JSON Web Token)是一个常用的身份验证标准,它是将 JSON 数据打包并进行加密签名的一种方式,可以用在多种场合中...

    4 年前
  • npm 包 @solid/keychain 使用教程

    什么是 @solid/keychain @solid/keychain 是一个基于 Solid 项目的 npm 包,可以在前端应用中安全地存储用户的私钥和证书等信息。

    4 年前
  • npm 包 b64-lite 使用教程

    在前端开发中,处理 base64 编码是常见的需求。npm 上有很多用于处理 base64 编码的包,b64-lite 是其中一个比较小巧的 npm 包,其提供了对 base64 编码的加密和解密功能...

    4 年前
  • npm 包 b64u-lite 使用教程

    随着前端技术的不断发展,我们经常需要在浏览器中对二进制数据进行编码和解码,以便在网络上传输。Base64 是一种常见的编码方式,而 b64u-lite 是一个非常流行的 npm 包,它提供了一组简单易...

    4 年前
  • npm 包 msrcrypto 使用教程

    什么是 msrcrypto? msrcrypto 是一个 JavaScript 加密库,它允许你使用各种加密算法处理二进制数据。msrcrypto 支持的加密算法包括:AES、RSA、HMAC、SHA...

    4 年前
  • npm包str2buf使用教程

    #npm包str2buf使用教程 ##1.什么是str2buf? str2buf是一个Node.js的npm包,可以方便地将字符串转换成Buffer类型。 ##2.为什么需要str2buf? 在Nod...

    4 年前
  • npm包 webcrypto-shim 使用教程

    在现代前端开发中,安全性和隐私保护越来越受到重视。WebCrypto API为开发人员提供了许多加密和解密操作的函数,以执行各种加密算法。但是,WebCrypto API并不是所有浏览器都支持的,特别...

    4 年前
  • npm 包 karma-virtualbox-edge-launcher 使用教程

    Karma 是一个测试运行器,它可以用于在多个浏览器或平台上运行 JavaScript 单元测试。而 karma-virtualbox-edge-launcher 就是基于 VirtualBox 的...

    4 年前
  • npm 包 eslint-config-holy-grail 使用教程

    简介 eslint-config-holy-grail 是一个基于 ESLint 的配置包,主要用于前端开发中的代码规范检测。它采用了 Holy Grail 的思想,将多个著名的前端规范标准整合在一起...

    4 年前
  • npm 包 grunt-sh 使用教程

    在进行前端开发过程中,我们经常需要执行一些命令行操作,如压缩代码、打包资源、上传文件等。这时候,我们可以使用 grunt-sh 这个 npm 包,它可以让我们在 Grunt 构建过程中调用 shell...

    4 年前
  • npm 包 karma-virtualbox-ie11-launcher 使用教程

    在前端开发过程中,我们经常需要进行自动化测试,以确保代码质量和稳定性。而 karma-virtualbox-ie11-launcher 可以帮助我们在 VirtualBox 虚拟机中启动 Intern...

    4 年前
  • 前端开发中的必备工具:npm 包 @erquhart/browserify-fs 的使用教程

    在前端开发工作中,我们经常会使用到各种 npm 包,而 @erquhart/browserify-fs 是一款非常实用的 npm 包,它可以帮助我们实现浏览器端的文件系统操作,极大地方便了前端开发工作...

    4 年前

相关推荐

    暂无文章