使用 Amazon Bedrock 从自己的讲座内容构建无服务器考试生成器应用程序 机器学习博客
使用 Amazon Bedrock 构建无服务器考试生成应用程序
重点要点
在此文章中,我们介绍了如何利用 Amazon Bedrock 和 AWS Lambda 构建一个自动化的考试生成解决方案。该应用程序能够基于教师的讲义内容快速生成符合课程大纲的测验,简化了考试创建过程,提高了教学效率。教师仅需上传讲义,应用程序便会自动生成多选和是非问题,并将反馈结果发送至教师邮箱。
在教育领域,创建考试和测验问题通常是一项繁琐且耗时的任务。所需的时间因学科、题型、经验水平和班级情况而异。尤其是多项选择题,需要花费大量时间来生成质量高的干扰项,并确保只有一个明确的答案。而有效的真伪判断题则要求在内容上深入分析,以避免模糊性并评估更深层次的理解。所有格式的高质量评估问题都需要教师细致入微的关注,以确保学生评估的公平和有效。为了简化这一繁杂的过程,我们提出了一种基于 Amazon Bedrock 的自动化考试生成解决方案。
在本文中,我们将探讨如何构建一个能够根据教师讲义内容生成测验的应用程序。我们将使用 Anthropic Claude 大型语言模型 (LLM) 在 Amazon Bedrock 上进行技术实现,并与 AWS Lambda一同通过 AWS 无服务器应用程序模型 (AWS SAM) 部署。这项解决方案使教师能够轻松快速地创建符合课程要求的评估,学生则可以进行个性化测验,并获得即时反馈。此解决方案简化了考试创建流程,同时惠及教师和学习者。
Amazon Bedrock
Amazon Bedrock 是一项完全托管的服务,提供来自领先人工智能AI公司的高性能基础模型FMs,如 AI21 Labs、Anthropic、Cohere、Meta、Mistral AI、Stability AI 和 Amazon,且通过单一 API 提供所需的多种功能,让您可以构建安全、隐私且负责任的生成式 AI 应用程序。在此文中,我们重点介绍文本生成用例,可选择 Amazon Titan Text G1 以及其他 Amazon Bedrock 模型,包括 Anthropic Claude、AI21 Labs Jurassic、Meta Llama 2 和 Cohere Command。
可以扩展至 200000 字符的上下文窗口的 Anthropic Claude v21 是我们这一篇文章的首选。它在处理冗长文件如整个书籍时尤为有用。当提到“标记”时,我们指的是语言模型中最小的单个“原子”,可能对应于单词、子词、字符,甚至是字节以 Unicode 为例。在 Amazon Bedrock 上,Anthropic Claude 的平均标记长度约为 35 个英文字母。Anthropic Claude v21 支持的 200000 个标记大约相当于 150000 个单词或超过 500 页的文档。
本文演示了如何利用高级的 提示工程 控制 LLM 的行为和响应。它展示了如何从讲义文件随机生成问题和答案,作为一个简单的无服务器应用程序实现。
解决方案概述
以下图示展示了应用程序的架构。我们区分了教育者路径1和学习者路径2。
作为首次用户,教育者和学习者都需要完成注册过程,分别由两个不同的 Amazon Cognito 用户池 完成。对于教育者,注册完成后,Amazon Cognito 将调用名为 CognitoPostSignupFn 的 Lambda 函数,以将教育者订阅到 Amazon Simple Notification Service Amazon SNS主题。教育者必须批准此主题的订阅,以便通过电子邮件接收每位学习者参加生成考试的成绩单。
图 1:考试生成器应用程序的架构图
工作流程包含以下步骤:
教育者通过 Amazon Route 53 打开生成考试的登陆页面,地址为 genexamltyourdomainnamegt,请求被重定向到应用程序负载均衡器 (ALB)。11 ALB 与 Amazon Cognito 进行通信,以认证教育者在教育者用户池中的身份。
12 教育者在考试生成前端上传讲义 PDF 文件。
13 运行在 AWS Fargate 上的 Amazon Elastic Container Service Amazon ECS容器将文件上传至 Amazon Simple Storage Service Amazon S3中的 Examgen 存储桶下的 exams 前缀。
14 S3 存储桶使用事件通知进行配置。每当新文件上传时,将激活 PutObject 事件以将文件发送至 ExamGenFn Lambda 函数。
15 Lambda 函数 ExamGenFn 调用 Amazon Bedrock 上的 Anthropic Claude v21 模型生成考试问题和答案,并以 JSON 文件格式返回。
16 Amazon Bedrock API 将输出 QampA JSON 文件返回给 Lambda 函数。
17 ExamGenFn Lambda 函数将输出文件保存在同一 S3 存储桶下的 Questionsbank 前缀中您也可以选择将其保存到不同的 S3 存储桶。
18 ExamGenFn Lambda 函数通过 SNS 主题向教育者发送电子邮件通知,告知考试已生成。
闪连vnp加速器学习者通过 Route 53 打开参加考试的登陆页面,地址为 takeexamltyourdomainnamegt,请求被重定向到 ALB。21 ALB 与 Amazon Cognito 进行通信,以认证学习者在学习者用户池中的身份。
22 学习者访问前端并选择要参加的测试。
23 容器镜像向 Amazon API Gateway 发送 REST API 请求使用 GET 方法。
24 API Gateway 与 TakeExamFn Lambda 函数进行通信作为 代理。
25 Lambda TakeExamFn 函数从 S3 存储桶下的 Questionsbank 获取可用考试的 JSON 格式。
26 JSON 文件返回给 API Gateway。
27 API Gateway 将 JSON 文件传输到前端的 ECS 容器中。
28 容器使用 Streamlit 框架将考试呈现为用户界面。学习者完成后提交答案,ECS 容器检测所提供的答案与正确答案的比较,随后向学习者显示分数结果。
29 ECS 容器将成绩单存储在 Amazon DynamoDB 表中。
210 Lambda DynamoDBTriggerFn 函数检测到 DynamoDB 表中的新成绩单记录,并向教育者发送电子邮件通知,附上学习者的成绩单。
这构成了一个事件驱动架构,由多个 AWS 服务构成,各个服务之间松散集成,每个服务负责特定功能。它采用 AWS 无服务器技术,让开发人员无需管理自己的服务器即可构建和运行应用程序。所有服务器管理均由 AWS 完成,提供自动扩展和内建高可用性等多项优势,让您能够快速将创意推向生产。
前提条件
在您设置此解决方案之前,有几个前提条件需要完成。
通过 Amazon Bedrock 启用模型访问
您可以通过 Amazon Bedrock 控制台添加模型访问。在本次操作中,您需要申请对 Anthropic Claude 模型的访问权限。更多信息请参考 模型访问。
安装必要的软件包
您需要安装以下工具:
AWS Command Line InterfaceAWS CLI,一个开源工具,可让您通过命令行与 AWS 服务互动。安装说明请查阅 安装或更新到最新版本的 AWS CLI。AWS SAM CLI,这是您在 AWS 上构建和运行无服务器应用的工具包。Streamlit,一个用于构建前端的开源 Python 框架。Docker 引擎。Python。Git。注册 DNS 域名并创建证书
如果您还没有注册 DNS 域名,您需要创建一个,以避免暴露 ALB 的 DNS。在此可以参考 注册新域名。
您还需要申请两个公有证书,每个前端一个,分别为 genexamltyourdomainnamegt 和 takeexamltyourdomainnamegt。有关如何申请公有证书的信息,请参考 申请公有证书 。
保存 genCertificateArn 和 takeCertificateArn 的值。
如果您想在开发环境中构建应用而不使用自己的域名,可以在 sam 模板中取消注释以下部分:
yaml
uncomment if you need to test with HTTP traffic and no certifcate
ExamGenALBHTTPListener
Type AWSElasticLoadBalancingV2Listener
Properties
LoadBalancerArn !Ref ExamGenALB
Protocol HTTP
Port 80
DefaultActions
Type forward
TargetGroupArn !Ref ExamGenTG
思路链 (CoT) 提示
在构建应用之前,让我们深入探索 提示工程。我们使用 思路链 (CoT) 提示,该方法允许模型将复杂推理分解为更小、更易处理的步骤。通过为 AI 提供中间提示,以逐步引导其推理过程,思路链提示使模型能够解决复杂的推理任务。以这种方式引导 AI 进行分析链思考,使其能够发展出复杂的推理能力,这是其无法单独完成的。
在 ExamGenFn Lambda 函数中,我们使用以下提示来指导模型的推理步骤。您可以更改提示,并为其赋予不同的人物角色和指令,观察其行为。
pythontemplateinstruction = fHuman 您是一名在考试期间的教师,负责从学生学习书籍中创建考试问题。在创建问题之前 分析在 标签之间的书,识别出不同的章节、部分或主题,供问题生成使用。 对于真/假问题,选择可以根据书本内容明确识别为真或假的陈述。 对于多选题MCQ,提出挑战理解材料的问题,确保一个正确答案和 {nmcqoptions1} 个相关但错误的干扰项。 随机选择页面或主题进行每次运行,以产生一组新的问题,确保没有两个问题集是相同的。请按照此格式提供 MCQ 的问题: 输出应如下所示:question 书中的车是什么颜色?options [蓝色 绿色 黄色 灰色]correctanswer 黄色对于真/假问题: 输出应如下所示:question 天空是蓝色吗?options [真 假]correctanswer 真
生成 {ntfq} 个真/假和 {nmcq} 个多选题MCQs,确保每个问题都涉及书中不同的页面或主题。对于 MCQ,提供 [nmcqoptions] 个选项。专注于创建涵盖书本内容广泛的独特问题,避免重复,并确保多样化。请遵循以下指南:
真/假问题:根据书本中的事实陈述或关键概念制作每个真/假问题。确保每个问题涵盖广泛主题,以完整覆盖书本内容。
多选题MCQs:
制定每个 MCQ以评估对重要主题、事件或事实的理解。为每个 MCQ 包含 {nmcqoptions} 个选项,确保一个正确,其他选项是合理但错误的。多样化内容领域和每个 MCQ 的页面/主题,以避免重叠和重复。构建考试生成应用程序
本文中展示的应用程序可在以下 GitHub 仓库 中找到构建块代码。让我们在仓库上执行 git pull。
我们推荐使用 AWS CLI 临时凭证 来以编程方式请求 AWS 资源。
使用 Streamlit 和 Docker 构建前端
您需要构建两个容器,一个用于生成考试,另一个用于参加考试。让我们先构建生成考试的 Docker 镜像:
转到仓库中的以下路径并构建您的 Docker 镜像:bashuser@examgen cd examgenaiblog/frontend/generateexamfeuser@examgen generateexamfe docker build t ltyourimagenamegttag
认证 Docker CLI 到 Amazon Elastic Container Registry (Amazon ECR):bashaws ecr getloginpassword region ltyourregiongt docker login username AWS passwordstdin ltyouraccountidgtdkrecrltyourregiongtamazonawscom
在 Amazon ECR 中创建新仓库:bashaws ecr createrepository repositoryname ltyourrepositorynamegt
将您的 Docker 镜像标记为 ECR 仓库 URI:bashdocker tag ltyourimagenamegttag youraccountiddkrecrltyourregiongtamazonawscom/ltyourecrrepositorygttag
将标记后的 Docker 镜像推送到 ECR 仓库中:bashdocker push ltyouraccountidgtdkrecrltyourregiongtamazonawscom/ltyourecrrepositorygttag
导航到此路径以构建您参加考试的 Docker 镜像:
bashuser@examgen cd examgenaiblog/frontend/takeexamfe
因为认证和 ECR 仓库已经完成,直接运行以下命令:bashuser@examgen takeexamfe docker build t ltyourimagenamegttag docker tag ltyourimagenamegttag youraccountiddkrecrltyourregiongtamazonawscom/ltyourecrrepositorygttagdocker push ltyouraccountidgtdkrecrltyourregiongtamazonawscom/ltyourecrrepositorygttag
复制 GenExamImageUri 和 TakeExamImageUri 的值。现在您已经准备好运行这两个容器,让我们使用 AWS SAM 构建其余组件。
使用 AWS SAM 构建解决方案组件
AWS SAM 包含两个部分:
AWS SAM 模板规范 一个开源框架,可让您定义 AWS 上的无服务器应用程序基础设施。AWS SAM CLI 一个命令行工具,可与 AWS SAM 模板和支持的第三方集成一起使用
亚马逊 Q 现在在 Amazon QuickSight 中全面可用,为整个组织带来了生成性商业智能功
Amazon Q 正式在 Amazon QuickSight 中推出,为整个组织带来生成性BI能力关键要点Amazon Q 现在在 Amazon QuickSight 中正式上线,为所有用户角色带来生成性BI能力。新增功能包括多视觉化的问题与回答QampA、故事生成、执行摘要等,提升沟通和数据分析的效率。支持快速构建仪表板的自然语言功能使得分析工作更加便捷。我们很高兴地宣布,早在 AWS reIn...
使用基于资源的策略简化跨账户访问控制的 Amazon DynamoDB 数据库博客
使用基于资源的策略简化Amazon DynamoDB的跨账户访问控制关键要点Amazon DynamoDB引入了基于资源的策略,以简化跨账户资源访问控制。基于资源的策略允许为DynamoDB表、索引或流指定权限,简化了 IAM 身份管理。减少了在处理多租户应用程序时所需的角色和策略数量。支持与IAM访问分析器和阻止公共访问BPA功能的集成。Amazon DynamoDB 是一种无服务器、NoSQL...