最小可行架构实践:创建家庭保险聊天机器人——可持续架构(四)

前言

  • 即使像聊天机器人这样的简单应用也需要一个最小可行产品(MVP)和最小可行架构(MVA),因为正确开发聊天机器人应用并不容易,而开发失败可能会极大地影响客户满意度。
  • MVP是产品开发策略的一个有用组成部分,与单纯的原型不同,MVP并不打算被“抛弃”。
  • 对于更复杂的应用程序,MVA需要解决的问题因MVP的目标而异。虽然MVP测试了产品是否从客户的角度具有价值,但MVA通常会检查是否在技术和经济上能够交付该解决方案给客户,并在其预期寿命内支持该解决方案。
  • MVA还必须超越MVP,至少提供处理问题的选项,如果MVP成功,否则成功的MVP可能导致组织无法负担长期维护产品的费用。

我们之前的文章最小可行产品需要最小可行架构探讨了最小可行架构(MVA)的概念。本文探讨了如何运用最小可行架构概念,以一个虚构的例子——一个与传统保险系统(如保单管理系统)以及可能在企业外部的其他数据源(如重建成本数据、房屋估价)进行交互的聊天机器人——来回答房主可能对其保单和保险范围感兴趣的问题。为了说明问题,我们将专注于涉及住宅重建成本的房主问题。

使用MVA方法实现聊天机器人

我们选择了聊天机器人作为示例,因为它具有简单的用户界面,隐藏了一系列涉及数据完整性、并发性、延迟和响应性的复杂问题。聊天机器人是一种软件服务,可以通过文本或文本转语音提供在线聊天对话,作为现场人类代理的替代品。

这是许多软件系统范围内的一个很好的候选对象,比如被保险人使用的家庭保险系统。保险机构和保险公司的家庭保险专家通常会接到大量来自客户的电话和电子邮件查询,尤其是在受到野火等自然灾害影响时。受自然灾害影响的房主希望及时得到答案,但大量的电话意味着代理人无法及时回答紧急房主的问题。在更正常的时候,房主通常有一些简单但不紧急的问题要问,但不想给代理人添麻烦。聊天机器人可以通过提供更及时的信息来提高客户满意度,同时让代理人处理需要非常规决策能力的更复杂的任务。

初始 MVA:一个简单的菜单驱动的聊天机器人

我们创建 MVA 的第一步是就聊天机器人的工作方式做出基本的选择,这些选择足以实现最小可行产品(MVP)。在我们的示例中,MVP 只具有必要的最小功能,以测试聊天机器人能否实现我们为其设定的产品目标的假设。如果没有人想使用它,或者它不能满足他们的需求,我们就不希望继续构建它。因此,我们打算将 MVP 部署到有限的用户群体中,采用简单的基于菜单的界面,我们假设由于访问外部数据源收集数据可能会引起的延迟是可接受的。因此,我们希望避免添加更多的需求,无论是功能性需求还是质量属性需求(QARs),都不需要来验证我们对要解决的问题的假设。这导致了一个初始设计,如下所示。如果我们的 MVP 被证明有价值,我们将在后续步骤中为其添加功能,并逐步构建其架构。MVP 是产品开发策略的一个有用组成部分,与仅仅是原型不同,MVP 不打算被“抛弃”。

一个开源、可重用的框架(如 RASA)可以用于实现一系列客户服务聊天机器人,从简单的基于菜单的机器人到使用自然语言理解(NLU)的更高级机器人。使用这个框架,初始的 MVA 设计支持实现一个基于菜单的单一用途聊天机器人,能够处理简单的查询。这个简单的聊天机器人向用户呈现一个简单的选择列表,在智能手机、平板电脑、笔记本电脑或台式电脑上都可以使用。其架构如下图所示:

聊天机器人与以下后端服务进行交互:

  • 被保险覆盖范围:这项服务是保险公司内部的。它将通过 API 进行访问,其延迟预计为低到中等。
  • 重建成本:这项服务是外部的,与保险公司无关,将通过 API 进行访问。其延迟未知。
  • 房屋估值:这项服务也是外部的,与保险公司无关,同样通过 API 进行访问。其延迟也未知。

正如我们在之前的文章中最小可行产品需要最小可行架构所描述的,我们通过做出一系列关于解决方案的基本选择来启动MVA过程,并使用一个简单的检查清单来确保我们做出了适当的架构决策。我们的检查清单包括以下项目:

  • 安全性 —— 对于MVP,需要考虑安全性要求。用户应被授权访问聊天机器人正在检索的信息,因此聊天机器人应捕获用户凭据并将这些凭据传递给后端服务进行访问验证。
  • 监控 —— 我们认为每个应用程序都应提供基本的监控功能,以监控性能并收集有关在初始部署期间可能遇到的大多数潜在系统问题的信息。
  • 平台 —— 我们决定MVP将托管在商业云平台上。
  • 用户界面 —— 我们认为一个简单的基于菜单的界面对于MVP来说是足够的,但这一项目可能需要根据我们最初用户的反馈进行重新评估。MVP用户界面可在智能手机、平板电脑、笔记本电脑和台式电脑上使用。
  • 延迟和响应速度 —— 虽然我们暂时不太担心延迟和响应速度,因为MVP的部署将仅限于一个小用户群,但我们知道如果MVP成功,我们将需要扩大其用户群。延迟和响应速度可能成为潜在问题,需要解决。延迟指标将作为基本监控功能的一部分包含在内。

目前以下选择并不引起关注,但如果用户基数和使用量显著增长,可能会在以后成为问题。

  • 并发性 —— 目前没有担忧,假设用户基数不会变得太大。
  • 吞吐量 —— 目前没有担忧,因为查询处理的数据量非常小。
  • 可扩展性 —— 目前没有担忧,但如果聊天机器人的用户基数显著扩大,可能会成为问题。
  • 持久性 —— 目前没有担忧,因为聊天机器人存储的数据量非常少。

对于你自己的应用程序,将这个清单视为一个合理的起点,根据你正在探索的技术问题,可能需要进行调整或扩展。

在MVP交付后,用户似乎对产品的功能比较满意,但表达了他们对基于菜单的界面过于受限的观感;即使是MVP中使用的简单菜单也相当繁琐,扩展菜单选项只会加剧用户的体验,特别是在智能手机和平板电脑上。他们希望能够更熟悉地与聊天机器人交流,使用自然语言。

实现自然语言接口

用于MVP实现的开源聊天机器人框架包括对自然语言理解(NLU)的支持,因此我们将继续使用它来为聊天机器人的功能添加NLU。使用NLU将简单的聊天机器人转变为一个机器学习(ML)应用程序。

切换到NLU接口会改变聊天机器人的架构,如下图所示。离线模式下的数据摄入和数据准备用于训练数据,这两个是架构上重要的步骤,还有模型部署和模型性能监控。对语言识别准确度以及吞吐量和延迟的模型监控尤为重要。业务用户使用某些“行业术语”,随着时间的推移,聊天机器人在理解这些术语方面变得更加精通。


演进的架构包括两个需要在沙盒环境中进行训练,并部署到一组IT环境中以供最终在生产中使用的模型。这两个模型可以看作是与用户问题相关的NLU模型,以及与聊天机器人回答相关的对话管理(DM)模型。更具体地说,NLU模型用于聊天机器人理解用户的意图,而DM模型用于构建对话,使得聊天机器人可以满意地回应消息。这两个模型及其使用的数据应被视为一流的开发工件,并进行版本控制。

访问后端延迟

重建成本和房屋估价数据,至少在最初阶段,由其他组织维护和存储;只有投保范围信息在保险公司的控制之下。即使在低水平的使用情况下,用户可能会在聊天机器人从两个外部数据服务中收集必要数据时经历不良的延迟。假设延迟是可接受的,这一点可以并且应该在MVP阶段的早期进行测试,使用最初的基于菜单的用户界面。

如果由于访问外部服务而导致的延迟似乎不受欢迎,那么架构必须进行调整,将外部服务数据缓存在本地(或者至少与投保范围数据位于相同的位置),并定期更新缓存数据。假设房屋估价和重建成本在短时间内几乎不会变化,对这些数据进行缓存似乎是一个合理的权衡。然而,这一假设也需要进行测试,并且应该比较延迟对客户体验的影响成本与保持缓存一致性的成本,以确定缓存是否值得投入时间和精力。此外,应经常重新审查MVA检查表,以确保在此过程开始时所做的假设仍然有效,并且随着MVP发展为完整的产品,架构选择仍然令人满意。

总结

乍一看,聊天机器人应用似乎不需要太多的架构思考;提供大量构建块的框架层出不穷,开发应用似乎只需要训练一些自然语言理解模型并集成一些现成的组件。但是,任何经历过从许多聊天机器人获取有用信息的挑战的人都会知道,要正确开发聊天机器人应用并不容易,而出错的成本可能会极大地影响客户满意度。即使是像聊天机器人这样的简单应用也需要MVP和MVA。

对于更复杂的应用程序,MVA需要解决的问题将根据MVP的目标而异。虽然MVP测试的是产品从客户角度是否值得,但MVA通常会考虑从技术角度是否可行地将解决方案交付给客户,并且是否可以进行有效支持。MVA还必须超越MVP,至少提供处理必须处理的问题的选项,以防MVP的成功导致组织无法长期维护产品的情况出现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2905077.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

1.java openCV4.x 入门-环境搭建

专栏简介 💒个人主页 📖心灵鸡汤📖大家 📰专栏目录 点击上方查看更多内容 环境搭建 一、开发环境二、环境搭建1.openCV安装1.下载程序包 2.程序包安装3.搭建项目 三、非必要资源1.扩展库2.cmake 一、开发环境 开发工具 i…

VSCode 插件 EditorConfig for VS Code

1. 前言 点击下载 EditorConfig for VS Code 插件 VSCode 编辑器本身是不支持 EditorConfig 代码格式化的,需要安装插件才可以正常使用 EditorConfig 格式化代码 2. 配置 Mac 使用【⇧ ⌘ P】,输入【editorconfig】,按下回车键&#xff0…

如何查看局域网IP?

在日常使用计算机和网络时,我们经常需要查看本地设备在局域网中的IP地址,以便进行一些网络配置或者连接其他设备。本文将介绍如何查看局域网中的IP地址,以及相关技术中的天联组网优势。 查看局域网IP 在Windows操作系统中,我们可…

基于Python的电商特产数据可视化分析与推荐系统

温馨提示:文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 利用网络爬虫技术从某东采集某城市的特产价格、销量、评论等数据,经过数据清洗后存入数据库,并实现特产销售、市场占有率、价格区间等多维度的可视化统计分析,并…

计算机网络链路层

数据链路 链路是从一个节点到相邻节点之间的物理线路(有线或无线) 数据链路是指把实现协议的软件和硬件加到对应链路上。帧是点对点信道的数据链路层的协议数据单元。 点对点信道 通信的主要步骤: 节点a的数据链路层将网络层交下来的包添…

【spring】FileSystemXmlApplicationContext 类学习

上一篇我们一起学习了 FileSystemXmlApplicationContext介绍AnnotationConfigApplicationContext 。 【spring】AnnotationConfigApplicationContext 类学习_annotationconfigapplicationcontext方法-CSDN博客 FileSystemXmlApplicationContext是一个用于加载和刷新基于XML配…

四种常用限流算法、固定窗口限流算法、滑动窗口限流算法、漏桶限流算法和令牌桶限流算法

什么是限流? 限流可以被视为服务降级的一种形式,其核心目标是通过控制输入和输出流量来保护系统。通常,一个系统的处理能力是可以预估的,为了确保系统的稳定运行,当流量达到预定的阈值时,必须采取措施限制进…

【MagicDrive环境配置】新手配俩星期版

1.创建一个新的环境conda create -n newdrive python3.8 2.激活该环境conda activate newdrive 3.下载MagicDrive源码 git clone --recursive https://github.com/cure-lab/MagicDrive.git,如果出现时间超时八成是网的问题,直接自己下载解压就好 3.我的…

WinServer启用Hyper-V新建虚拟机没有网络、无法开启增强模式

没有网络问题如下: 原因:没有在Hyper-V中新增交换机 操作—虚拟交换机管理器—新建虚拟网络交换机-外部-允许管理员操作系统共享此网络适配器 无法开启增强模式:

Nginx第三方模块---nginx-sticky-module的使用(基于cookie的会话保持)

目录 Nginx和Sticky介绍 编译安装sticky的nginx环境 安装过程碰到的问题和编译安装过程遇到的错误: (1)第一个错误:修改源代码ngx_http_sticky_module.c (2)第二个错误:修改源代码ngx_http_s…

李宏毅【生成式AI导论 2024】第5讲 让语言模型彼此合作,把一个人活成一个团队

GPD4,它也有非常强大的能力。但是GPT4如果跟其他的语言模型合作,他们其实可以发挥1加1大于二的力量。 为什么要让模型合作? 那怎么让模型彼此合作呢?有很多不同的方式。一个可能性是假设你现在手边就有一堆语言模型,他们可能有不同的能力使用,他们可能有不同的成本局来…

骗子查询系统源码

源码简介 小权云黑管理系统 V1.0 功能如下: 1.添加骗子,查询骗子 2.可添加团队后台方便审核用 3.在线反馈留言系统 4.前台提交骗子,后台需要审核才能过 5.后台使用光年UI界面 6.新增导航列表,可给网站添加导航友链 7.可添加云黑类…

Obsidian插件-高亮块(Admonition)

在插件市场里面搜索Admonition并安装插件,就可以使用高亮块了。 添加高亮块 用法稍微有一些不同。按照下面的格式,输入Markdown就可以创建一个高亮块。 内容内容内容输入*ad-*会出现相应的类型可以选择

linux 内存介绍

大致共有四类:VSS、RSS、PSS、USS ,通常情况下,VSS > RSS > PSS > USS 1.VSS(Virtual Set Size)虚拟耗用内存(包含共享库占用的内存) VSS表示一个进程可访问的全部内存地址空间的大小。这个大小包括了进程已…

Mysql数据库-DQL查询

Mysql数据库-DQL基本查询 1 DQL基本查询1.1 基础查询1.2 WHERE子句1)算术运算符2)逻辑运算符3)比较运算符A)BETWEEN... AND ...B)IN(列表)C)NULL值判断 4)综合练习 2 DQL高级查询2.1 LIKE 模糊查…

Linux:Jenkins:参数化版本回滚(6)

上几章我讲到了自动集成和部署 Linux:Jenkins全自动持续集成持续部署(4)-CSDN博客https://blog.csdn.net/w14768855/article/details/136977106 当我们觉得这个页面不行的时候,需要进行版本回滚,回滚方法我这里准备了…

【C语言】编译和链接----预处理详解【图文详解】

欢迎来CILMY23的博客喔,本篇为【C语言】文件操作揭秘:C语言中文件的顺序读写、随机读写、判断文件结束和文件缓冲区详细解析【图文详解】,感谢观看,支持的可以给个一键三连,点赞关注收藏。 前言 欢迎来到本篇博客&…

Swagger添加JWT验证(ASP.NET)

文章目录 JWT1、解析2、配置JWT JWT 1、解析 1)客户端向授权服务系统发起请求,申请获取“令牌”。 2)授权服务根据用户身份,生成一张专属“令牌”,并将该“令牌”以JWT规范返回给客户端 3)客户端将获取到的…

【C语言基础】:数据在内存中的存储

文章目录 一、整数在内存中的存储二、大小端字节序和字节序判断1. 为什么有大小端?2. 练习 三、浮点数在内存中的存储1. 浮点数的存储1.1 浮点数的存储过程1.2 浮点数取的过程 四、题目解析 书山有路勤为径,学海无涯苦作舟。 创作不易,宝子们…

牛客NC26 括号生成【中等 递归 Java,Go,PHP】

题目 题目链接: https://www.nowcoder.com/practice/c9addb265cdf4cdd92c092c655d164ca 思路 答案链接:https://www.lintcode.com/problem/427/solution/16924 参考答案Java import java.util.*;public class Solution {/*** 代码中的类名、方法名、参…