【AI落地应用实战】Amazon Bedrock + Amazon DynamoDB 数据设计与建模

一、Amazon DynamoDB简介

在当今数字化转型的浪潮中,企业对数据处理能力的需求日益增长,为了应对大规模数据和高并发访问的挑战,选择一款合适的数据库解决方案变得尤为重要。

Amazon DynamoDB,作为亚马逊云科技提供的一种完全托管式、无服务器的NoSQL键值数据库,凭借其高性能、高可用性和可扩展性,成为了构建现代化应用程序的理想选择。

  • 高性能:DynamoDB以其卓越的性能著称,能够在个位数毫秒级的时间内响应高并发请求。这种低延迟的特性对于如实时交易系统、在线游戏和即时通讯应用等需要快速响应的应用至关重要,通过优化其分布式架构和内部算法,DynamoDB确保了即使在面对大规模数据集时也能保持稳定的性能表现。
  • 高可用性:高可用性是DynamoDB的另一大亮点。通过跨多个亚马逊云科技可用区自动复制数据,DynamoDB提供了高达99.999%的服务可用性保证,这种高可用性设计不仅增强了数据的可靠性,还确保了即使在面对区域性的故障时,应用也能持续运行并对外提供服务。此外,DynamoDB还提供了多种故障恢复机制,如自动故障转移和快速故障恢复等,进一步提升了系统的稳定性和可用性。
  • 可扩展性:DynamoDB数据库支持无缝扩展,能够根据应用的需求自动调整计算资源和存储容量。无论是初创公司的小型项目还是大型企业的复杂应用,DynamoDB都能提供灵活的资源管理方案。
    在这里插入图片描述

大规模应用中,DynamoDB不仅支持快速数据访问和实时数据处理,还能够处理大规模数据集的存储和检索。

电商领域,DynamoDB可以高效地存储和管理用户购物车、订单历史、产品信息等关键数据,其高并发处理能力和低延迟特性确保了用户在购物过程中的流畅体验。

对于社交媒体平台而言,DynamoDB凭借其高性能和可扩展性,能够支持大规模的社交互动和数据交换。

实时分析领域,DynamoDB能够存储和检索实时数据流,为实时分析和决策支持系统提供强有力的支持,通过快速处理和分析实时数据,企业能够更准确地了解市场动态和用户行为,从而做出更加精准的决策和优化策略。

二、Amazon Bedrock + Amazon DynamoDB数据设计与建模实践

在智能体对话场景中,对话记忆存储是实现流畅、个性化交互的关键。智能体需要记住用户的历史对话内容、偏好和行为模式,以便提供更加精准和贴心的服务。然而,随着对话数据量的激增,如何高效地存储、管理和检索这些数据,同时确保对话的实时性和准确性,成为设计智能体对话系统时面临的主要挑战。

2.1、Amazon Bedrock + Amazon DynamoDB架构图

在智能体对话系统中,Amazon Bedrock提供了强大的数据湖和分析服务,而Amazon DynamoDB则提供了高性能的NoSQL数据库服务。结合这两者,可以构建一个既能够处理大规模数据,又能够实现快速响应的智能体对话平台。智能体通过Amazon EKS运行的服务接收用户的输入,利用Amazon Bedrock进行数据分析和处理,然后将结果存储在Amazon DynamoDB中,以供后续的对话使用。

在这里插入图片描述
架构图展示了智能体与用户交互的流程:

  1. 用户发起对话请求。
  2. 智能体应用,部署在Amazon EKS上,接收并处理请求。
  3. 应用查询Amazon DynamoDB以获取会话历史,整合当前会话信息。
  4. 将整合信息发送至Amazon Bedrock上的Claude智能体模型,生成回答。
  5. 应用将智能体的回答返回给用户。

2.2、数据查询/存储方案

2.2.1、表设计和实体关系详解

在理清业务需求和技术实现架构之后,需要针对会话历史信息的存储和查询,进行详尽的技术拆解。为满足智能体对话场景中的高并发、低延迟和稳定性需求,Amazon DynamoDB的数据查询/存储方案主要包括以下几个方面:

  • 会话记录存储:使用Amazon DynamoDB的基表chat_session来存储用户和智能体之间的聊天会话记录。每条记录包括聊天ID(chat_id)、用户ID(user_id)、智能体ID(ai_id)、会话创建时间(create_time)等关键信息。
  • 活跃会话标记:通过特定格式的排序键(SK)前缀#ACTIVE#来标记当前活跃的聊天会话,确保查询时能迅速定位到最新会话。
  • 历史会话保留:用户可以选择删除旧的聊天会话,但这些记录会被软删除(即在数据库中保留记录,但增加delete_time时间戳来表示历史状态)。

2.2.2、ERD(数据库实体关系图)分析

在智能体对话场景中,数据的有效存储与查询是确保系统高效运行的关键。通过设计合理的数据库实体关系图(ERD),我们可以清晰地定义各个实体之间的关系,为智能体对话系统提供坚实的数据支撑。
在这里插入图片描述
在智能体对话系统中,主要涉及以下几个实体:

  1. 用户(User):代表与系统交互的个体或组织,通过唯一标识符user_id进行区分。
  2. 智能体(AI digital persona):指生成式AI驱动的对话实体,每个智能体具有唯一的ai_id
  3. 聊天会话(Chat Session):记录用户与智能体之间的对话过程,通过chat_id唯一标识每一次会话

实体之间的实体关系为多对多关系,即用户与智能体之间存在多对多的关系,即一个用户可以与多个智能体进行对话,同时一个智能体也可以与多个用户进行交互。这种关系通过聊天会话实体进行关联。

2.3、访问模式实现

  1. 创建新的聊天会话(CreateChat)
  • 当用户与生成式AI数字人开始新的对话时,系统需要创建一个新的聊天会话记录。这涉及到在DynamoDB的基表(如chat_session)中插入一条新记录,包括会话ID(chat_id)、用户ID(user_id)、AI数字人ID(ai_id)、会话状态(如标记为#ACTIVE#)以及其他可能需要的元数据(如会话开始时间)。
  1. 获取指定聊天会话(GetChatByUser_Id_and_AI_Id)
  • 当用户继续之前的对话时,系统需要根据用户ID和AI数字人ID查询当前活跃的聊天会话。这通常通过DynamoDB的全局二级索引(GSI)来实现,因为直接通过主键查询可能无法直接获取到最新的活跃会话(如果会话ID是动态生成的)。GSI可以设计为以user_id和ai_id为键,同时包含会话状态和其他相关信息的投影,以支持高效的查询。
  1. 删除聊天会话(DeleteChat)
  • 用户可以选择删除旧的聊天会话记录。在DynamoDB中,这通常通过更新会话记录的状态来实现,而不是直接删除记录(实现软删除)。可以在会话记录中添加一个时间戳字段(如delete_time),并将其设置为当前时间以标记会话为已删除。这种方式保留了会话的历史记录,同时允许通过查询排除已删除的会话。
  1. 重启聊天会话(RenewChat)
  • 当用户想要重新开始与AI数字人的对话时,系统可以创建一个新的聊天会话记录,并同时标记旧的活跃会话为已删除或失效。这涉及到插入一条新的会话记录到DynamoDB,并更新或删除旧的会话记录的状态。
  1. 更新指定会话的AI版本(UpdateAIVersionByChat_Id):
  • 随着AI数字人模型的更新,可能需要更新特定会话中使用的AI版本。这可以通过DynamoDB的更新操作来实现,即根据会话ID(chat_id)更新会话记录中的AI版本字段。这种操作确保了在继续对话时,系统使用的是最新的AI模型版本。

在DynamoDB中实现这些访问模式时,关键是要合理设计基表和GSI的键以及属性投影,以支持高效的数据插入、查询、更新和删除操作。同时,还需要考虑数据一致性、可用性和成本效益等因素,以确保系统的整体性能和可靠性。
综上所述,Amazon Bedrock和Amazon DynamoDB的结合为生成性AI应用程序提供了强大的数据支持和存储解决方案,Bedrock提供了高性能的基础模型,而DynamoDB则提供了可靠、可扩展且高性能的存储服务,这种组合使得用户能够轻松构建和部署复杂的AI应用程序。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3.表的操作

目录 创建表 创建表案例: 查看表结构 修改表 1.增加新列 2.修改列的属性 3.删除列 4.修改表名 5.修改列 删除表 创建表 语法: CREATE TABLE [IF NOT EXISTS] table_name(field1 datatype1 [COMMENT 注释信息],field2 datatype2 [COMMENT 注释…

k8s(六)---pod

六、pod(k8s中最小的调度单元) pod中可以有一个或多个容器 1、官网 2、简介 Pod是k8s中最小的调度单元、Pod具有命名空间隔离性 3、如何创建一个Pod资源(主要两种方式) 1)kubctl run ①kubectl run nginx–imagereg…

【vulnhub】DC-2靶机

信息收集 靶机扫描 nmap 192.168.93.1/24 端口扫描 网页访问 发现访问不到,根据显示考虑IP未遵循重定向到域名 在本机的C:\Windows\System32\drivers\etc 修改hosts⽂件,添加192.168.93.136 dc-2 再次进行访问,可以访问到 点击flag&#x…

测试GPT4o分析巴黎奥运会奖牌数据

使用GPT4o快速调用python代码,生成数据图表 测试GPT4o分析巴黎奥运会奖牌数据 测试GPT4o分析巴黎奥运会奖牌数据 1.首先我们让他给我们生成下当前奥运奖牌数 2.然后我们直接让GPT帮我们运行python代码,并生成奥运会奖牌图表 3.我们还可以让他帮我们…

数组——对数组进行更加全面的理解

1.数组的概念 数组是一组相同类型元素的集合。数组可分为一维数组和多维数组,多维数组常见的是二维数组。 2.一维数组的创建和初始化 2.1 数组的创建 一维数组的创建的基本语法是: type arr_name[常量值] 例如,我们现在想要存储某个班级…

一拖三无线充底座-带给你极致的便利生活

随着科技的不断进步,无线充电技术已经逐渐渗透到我们日常生活的方方面面,一拖三无线充底座作为其中的佼佼者,以其高效、便捷的特点受到广大用户的青睐。本文将从电磁感应原理、多线圈设计、频率匹配、电能传输、功率分配以及充电管理六个方面…

原生PHP/JS自主开发的交友内核框架婚恋交友系统V10

本文来自:婚恋交友系统V10 - 源码1688 应用介绍 原生PHP/JS自主开发的交友内核框架,极高性能、无捆绑、自主权、无流水扣点、独立全开源 01脱单盲盒:脱单盲盒类似于漂流瓶,先将自己《投放》到盲盒中,另一伴有缘将您取…

【链表OJ】常见面试题 2

文章目录 1.[链表分割](https://www.nowcoder.com/practice/0e27e0b064de4eacac178676ef9c9d70?tpId8&&tqId11004&rp2&ru/activity/oj&qru/ta/cracking-the-coding-interview/question-ranking)1.1 题目要求1.2 哨兵位法 2.[链表的回文结构](https://www.…

Shell编程 --流程控制

Shell编程 Shell是一种程序设计语言。作为命令语言,它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构&#…

跨optimistic rollup原子互操作:Shared Validity Sequencing

1. 引言 Succinct Labs团队CEO和CTO,以及Ellipsis Labs合伙人一起,于2023年6月22日发布博客 Shared Validity Sequencing,认为: 以太坊扩容的未来之一就是拥有成千上万个 rollup。 如今,主流的 rollup 都是 optimis…

Unity3D 物体圆周运动

Unity3D 实现一个 2D 物体沿着圆周进行运动。 物体圆周运动 前段时间在开发一个小游戏时,需要实现火箭沿着一个圆形轨道进行圆周运动。 以前面试的时候也被问到过这类问题(如何让一个 2D 物体做圆周运动),所以还是记录一下实现…

【区块链】控制台的配置、操作及常用命令②

常用命令-账户管理 常用命令-区块信息 在控制台中编译部署智能合约 启动节点 在fisco目录下 bash nodes/127.0.0.1/start_all.sh启动控制台 cd ~/fisco/console && bash start.sh部署合约 deploy HelloWorldtransaction hash: 交易的哈希值 contract address&#x…

Linux:基础操作指令

Linux的操作特点:纯命令行(虽然也有图形化界面,但主要是工程师使用,意义不大) windows的操作特点:图形化界面(也有纯命令行的形式,但其更贴近大众,命令行学习成本高&…

Android之复制文本(TextView)剪贴板

效果图&#xff1a; 功能简单就是点击“复制”&#xff0c;将邀请码复制到 剪贴板中 布局 <androidx.constraintlayout.widget.ConstraintLayoutandroid:id"id/clCode"android:layout_width"dimen/dp_0"android:layout_height"dimen/dp_49"…

LTrack:实现夜间多目标追踪,并开放低光多目标追踪数据集LMOT

摘要 低光场景在现实应用中很常见&#xff08;例如&#xff0c;夜间的自动驾驶和监控&#xff09;。最近&#xff0c;多目标跟踪在各种实际用例中受到了很多关注&#xff0c;但黑暗场景中的多目标跟踪却很少被考虑。在本文中&#xff0c;我们专注于黑暗场景中的多目标跟踪。为…

Java | Leetcode Java题解之第313题超级丑数

题目&#xff1a; 题解&#xff1a; class Solution {public int nthSuperUglyNumber(int n, int[] primes) {int[] dp new int[n 1];int m primes.length;int[] pointers new int[m];int[] nums new int[m];Arrays.fill(nums, 1);for (int i 1; i < n; i) {int minN…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第五篇 文件系统构建篇-第七十四章 buildroot构建文件系统

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

CnosDB 元数据集群 – 分布式时序数据库的大脑

CnosDB 是一个分布式时序数据库系统&#xff0c;其中元数据集群是核心组件之一&#xff0c;负责管理整个集群的元数据信息。 1. 概述 CnosDB 是一个分布式时序数据库系统&#xff0c;其中元数据集群是核心组件之一&#xff0c;负责管理整个集群的元数据信息。元数据包括数据库…

回文链表(Leetcode)

题目 给你一个单链表的头节点 &#xff0c;请你判断该链表是否为 回文链表。如果是&#xff0c;返回 &#xff1b;否则&#xff0c;返回 。 解题 class ListNode:def __init__(self, val0, nextNone):self.val valself.next nextdef isPalindrome(head: ListNode) -> …

rpc框架怎么使用

这是我们提供RPC的服务类&#xff1a; class MprpcApplication { public:static void Init(int argc, char **argv);static MprpcApplication& GetInstance();static MprpcConfig& GetConfig(); private:static MprpcConfig m_config;MprpcApplication(){}MprpcApplica…