新闻详情

新闻详情

首页 / 资讯中心 / 详情

使用 AWS SDK for Ruby 部署 Feedback Sentiment Analyzer(FSA)跨服务应用

发布时间:2026/9/28 12:34:53来源:尧图网络
使用 AWS SDK for Ruby 部署 Feedback Sentiment Analyzer(FSA)跨服务应用
示例工程教程后端【免费下载链接】aws-doc-sdk-examplesWelcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below.项目地址https://gitcode.com/gh_mirrors/aw/aws-doc-sdk-examples点击查看免费下载导读Feedback Sentiment AnalyzerFSA是 AWS Code Examples 仓库中的一个示例应用它模拟了一家纽约酒店接收多语言宾客反馈卡片的场景宾客的反馈卡片以图片形式上传应用通过 Amazon Textract 提取文字、Amazon Comprehend 判断情感倾向、Amazon Translate 翻译为英文、Amazon Polly 合成语音最终在网页上同时呈现原始图片、英文译文与可播放的音频。本文以 Ruby 实现的自述文档 为骨架结合 Ruby Lambda 处理器源码 与 应用主 README 与 CDK 基础设施代码系统讲解在 Ruby 语言分支下部署 FSA 的前置条件、环境变量配置、CDK 部署流程以及四个 Lambda 函数基于 SDK for Ruby 的底层实现原理。读完本文你将掌握如何从零部署一个由 Step Functions 编排的跨服务机器学习应用并理解其中每个 AWS SDK for Ruby 调用的输入输出契约。应用概览一次上传四重 AI 处理FSA 的核心业务流程是图片上传 → 文本提取 → 情感分析 → 翻译 → 语音合成 → 结果回显。完整的端到端流程定义在应用主 README 中技术规格细节API 契约、状态机配置、DynamoDB 表结构则记录在 SPECIFICATION.md。应用依赖的 AWS 服务分为两个层次机器学习服务Amazon Textract提取图片文字、Amazon Comprehend检测情感、Amazon Translate翻译为英文、Amazon Polly合成拟人语音支撑服务Amazon S3存储评论卡片图片、Amazon EventBridge转发 S3 事件、AWS Lambda执行业务逻辑、AWS Step Functions编排多个 Lambda、Amazon DynamoDB存储每条评论的元数据、Amazon API Gateway前后端路由、Amazon CloudFront全球分发、Amazon Cognito用户认证。值得注意的是从 Ruby 分支目录 的文件结构可以推断Ruby 实现只包含四个 Lambda 处理器comprehend_lambda_handler.rb、polly_lambda_handler.rb、textract_lambda_handler.rb、translate_lambda_handler.rb其余的 API、数据库、认证、静态网站等基础设施全部由 CDK 目录 中的 TypeScript 代码统一创建这一设计让所有语言分支共享同一套基础设施是理解本部署流程的关键。部署前置条件根据 Ruby 实现的自述文档正式部署前需要准备以下内容AWS 账户文档特别说明本教程涉及的 AWS 服务大多包含在 AWS Free Tier 免费额度内但并非所有服务在所有区域都可用运行代码可能产生费用务必在教程结束后删除创建的全部资源。Ruby 依赖需满足 Ruby 示例代码 README 中列出的全部依赖。该文档明确要求 Ruby 版本为 3.1.2可通过ruby -v检查版本随后从/ruby目录执行依赖解析gem install bundler bundle install开发环境正确配置 AWS SDK for Ruby 的本地凭证与区域信息具体可参考 AWS 官方Get started with the AWS SDK for Ruby开发指南。AWS 凭证获取可供 CDK 使用的 AWS 凭证。关于资源创建原文档强调了一个重要约定所有 AWS 资源均由 AWS CDK 脚本创建无需使用 AWS Management Console 手动创建任何资源。这正是 FSA 作为示例应用的可复现性所在——一条命令即可拉起整套环境。部署 Ruby 分支环境变量与 CDK 命令设置三个环境变量部署的第一步是为 CDK 脚本设置三个环境变量它们会被 CDK 环境配置 在启动时强制校验——任何变量缺失都会导致脚本直接报错退出process.exit(1)变量名取值要求用途FSA_NAME任意不超过 10 个字符的文本作为资源命名前缀的一部分CDK 中会转换为小写并拼入fsa-${APP_NAME}-${APP_LANG}前缀FSA_EMAIL你拥有且有效的邮箱地址用于创建 Cognito 用户池并生成临时登录密码FSA_LANG已实现的语言分支之一决定 Step Functions 状态机中四个 Lambda 的运行时与代码来源Ruby 分支取值ruby三种常见 shell 的配置示例如下Bashexport FSA_NAMEana export FSA_EMAILanaexample.com export FSA_LANGrubyWindows cmdset FSA_NAMEana set FSA_EMAILanaexample.com set FSA_LANGrubyWindows Powershell$Env:FSA_NAME ana $Env:FSA_EMAIL anaexample.com $Env:FSA_LANG ruby从源码看FSA_LANG直接决定了函数清单的选取CDK 的 functions.ts 中定义了FUNCTIONS映射表ruby键对应RUBY_FUNCTIONS——四个函数分别指向textract_lambda_handler.lambda_handler、comprehend_lambda_handler.lambda_handler、translate_lambda_handler.lambda_handler、polly_lambda_handler.lambda_handler统一使用Runtime.RUBY_3_2运行时与 30 秒超时配置。执行 CDK 部署在仓库根的 应用主 README 中部署命令以cdk目录为工作目录cd cdk npm install cdk deploy部署完成后观察终端输出中的Output段复制名称中包含websiteurl的 CloudFront 分发 URL在浏览器中打开即可启动应用。应用使用指南登录、上传与播放登录在页面选择Sign in在Username字段中输入FSA_EMAIL对应的邮箱地址在Password字段中输入发送到该邮箱的临时密码按提示重设密码。这一流程背后是 CDK 认证构造 创建的 Cognito 用户池与托管 UI前端通过GET /api/env获取COGNITO_SIGN_IN_URL与COGNITO_SIGN_OUT_URL完成跳转。上传评论卡片登录后着陆页显示No data found选择Upload选择Select a file可选用仓库 comments 目录中的示例图片也可以自行准备一张包含正向评论的 PNG 或 JPEG 图片。注意负面评论会被保存但不会返回给前端选择Upload。播放处理结果等待 12 分钟让图片处理完成。由于 CloudFront 会对 API 响应缓存 5 分钟如需加速可创建 CloudFront 失效invalidation点击Refresh按钮页面出现一张卡片包含原始图片、翻译后的英文文本与播放按钮点击播放按钮即可收听翻译文本对应的语音。深入源码Ruby 分支的四个 Lambda 处理器FSA 的业务逻辑全部封装在四个 Ruby Lambda 处理器中它们被 Step Functions 状态机按固定顺序调用。下面结合源码逐一拆解每个处理器的输入、输出与 SDK 调用细节。这些处理器遵循统一的lambda_handler(event:, context:)签名并在开头使用Logger.new($stdout)记录事件与上下文便于在 CloudWatch Logs 中排查。ExtractTexttextract_lambda_handler.rb源码文件 的职责是调用 Amazon Textract 的detect_document_text从图片中提取文字client Aws::Textract::Client.new(region: event[region]) params { document: { s3_object: { bucket: event[bucket], name: event[object] } } } response client.detect_document_text(params)其输入直接使用 S3 事件对象 中的bucket、region、object三个字段无需前端额外传参。返回的response.blocks中处理器只筛选block_type包含LINE的块并把每个块的text收集后以空格拼接作为状态机传给下一阶段的source_text。例如输入图片文字为法语 CET HÔTEL ÉTAIT SUPER输出即为该字符串。CDK 侧为这个函数额外授予了textract:DetectDocumentText权限并开放了上传桶的读取权限详见 stack.ts。AnalyzeSentimentcomprehend_lambda_handler.rb源码文件 依次调用 Amazon Comprehend 的两个方法先识别语言、再检测情感comprehend_client Aws::Comprehend::Client.new(region: event[region]) source_text event[source_text] response comprehend_client.detect_dominant_language({ text: source_text }) language_code response.languages[0].language_code response comprehend_client.detect_sentiment({ text: source_text, language_code: }) { sentiment response.sentiment, language_code language_code }输入为上一阶段的source_text与region输出则是一个同时包含sentiment取值POSITIVE、NEUTRAL、MIXED或NEGATIVE和language_code如fr-FR的 Ruby Hash。状态机中的ContinueIfPositive状态会检查该输出只有情感为正向时才继续执行翻译与语音合成负向评论直接跳过。CDK 为该函数授予了comprehend:DetectDominantLanguage与comprehend:DetectSentiment两个动作stack.ts。TranslateTexttranslate_lambda_handler.rb源码文件 调用 Amazon Translate 将文本翻译为英文目标语言固定为enclient Aws::Translate::Client.new(region: event[region]) client.translate_text({ text: event[extracted_text], # required source_language_code: event[source_language_code], # required target_language_code: en })其输入包含上一阶段输出的source_language_code如fr-FR、extracted_text与region。输出对象中的translated_text字段即为英文译文如THIS HOTEL WAS GREAT随后作为 Polly 的合成文本。对应权限为translate:TranslateTextstack.ts。SynthesizeAudiopolly_lambda_handler.rb源码文件 是处理链的最后一环调用 Amazon Polly 合成语音并把 MP3 写入 S3polly_client Aws::Polly::Client.new(region: event[region]) resp polly_client.synthesize_speech({ engine: neural, output_format: mp3, text: event[translated_text], voice_id: Ruth }) bucket_name event[bucket] object_key #{event[object]}.mp3 s3_client Aws::S3::Client.new(region: event[region]) s3_client.put_object( bucket: bucket_name, key: object_key, body: resp.audio_stream )该函数固定使用neural引擎与Ruth音色输出格式为mp3。合成后的resp.audio_stream通过put_object直接写入 S3 媒体桶对象键为原图片对象名 .mp3例如image.jpg→image.jpg.mp3。最终返回的对象键会被存入 DynamoDB 的audio_key字段前端再通过该键从 S3 直接拉取音频文件。CDK 为它授予了polly:SynthesizeSpeech与对媒体桶的写入权限stack.ts。背后的编排与存储状态机、EventBridge 与 DynamoDBStep Functions 状态机当图片在 S3 媒体桶中被创建或更新时Step Functions 状态机被触发执行序列为Start → ExtractText → AnalyzeSentiment →ContinueIfPositive情感为NEGATIVE时跳过后续直接结束→ TranslateText → SynthesizeAudio →DynamoDB:PutItem→ Stop。状态机的完整定义见 SPECIFICATION.md四个 Lambda 的调用权限由 app-lambdas.ts 的grantInvokeAll统一授予。EventBridge 规则触发状态机的是一个 EventBridge 规则事件模式限定为aws.s3来源的Object Created事件并且对象键必须以.png、.jpeg或.jpg结尾——这意味着只有这三类图片格式才会进入后续处理链路。DynamoDB 表结构最终结果写入 DynamoDB 表SPECIFICATION.md 定义的字段如下key用途attribute值comment_key扫描图片的对象键SS3 对象键source_text图片提取的原始文字S提取文本sentimentComprehend 情感评分SComprehend JSON 对象source_language检测到的文本语言S语言代码translated_text文本的英文版本S翻译文本audio_keyPolly 生成的音频文件键SS3 对象键前端通过GET /api/feedback接口读取该表CDK 内联的 GetFeedback Lambda见 stack.ts执行dynamodb:Scan并使用过滤表达式只返回sentiment POSITIVE的记录这正解释了负面评论不会被返回给前端的行为。接口返回的 JSON 结构与 SPEC 中的示例一致{ feedback: [ { sentiment: POSITIVE, text: THIS HOTEL WAS GREAT, audioUrl: PXL_20230710_182358532.jpg.mp3, imageUrl: PXL_20230710_182358532.jpg } ] }验证与运行边界根据 Ruby 示例代码 README仓库使用 RSpec 测试单元测试通过 stubbed 响应避免产生 AWS 费用rspec --tag ~integ集成测试会真实调用 AWS 并可能产生费用rspec --tag integ。原文档同时给出两条重要的运行边界提醒本教程代码并未在所有 AWS 区域测试过部分服务仅在特定区域可用教程产生的资源务必在结束后清理以免持续产生费用。由于 CDK 栈以fsa-${FSA_NAME}-${FSA_LANG}前缀命名并定义了销毁级删除策略RemovalPolicy.DESTROY可执行cdk destroy统一清理整套资源。进一步阅读跨语言实现总览应用主 README其中列出了 JavaScript、Java、.NET 等其他 SDK 分支技术细节规范SPECIFICATION.md包含完整 HTTP API 契约与状态机 Lambda 的输入输出定义开发与部署说明DEVELOPMENT.mdRuby SDK 全局配置Ruby 示例代码 README。赞分享示例工程教程后端【免费下载链接】aws-doc-sdk-examplesWelcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below.项目地址https://gitcode.com/gh_mirrors/aw/aws-doc-sdk-examples点击查看免费下载相关推荐Feedback Sentiment AnalyzerFSA实战指南基于 AWS 多语言 SDK 构建跨服务评论情感分析应用Feedback Sentiment AnalyzerFSA实战指南基于 AWS 多语言 SDK 构建跨服务评论情感分析应用 Feedback Senti示例工程教程后端Feedback Sentiment AnalyzerFSA跨语言部署指南前置条件、环境配置与 AWS SDK 实现要点Feedback Sentiment AnalyzerFSA跨语言部署指南前置条件、环境配置与 AWS SDK 实现要点 导读 本指南面向需要在自有 AW示例工程教程后端使用 AWS CDK 部署 Feedback Sentiment AnalyzerFSA从环境变量到基础设施即代码全解析使用 AWS CDK 部署 Feedback Sentiment AnalyzerFSA从环境变量到基础设施即代码全解析 Feedback Sentime示例工程教程后端上一篇手把手搞定DeepWiki-Open环境变量配置告别报错30分钟生成你的第一个AI仓库Wiki下一篇AdGuardian-Term终极终端监控工具实时掌握AdGuard Home流量动态创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Substrate区块链开发框架详解:从理解核心架构到动手搭建自定义链 2026/9/28 21:56:58

Substrate区块链开发框架详解:从理解核心架构到动手搭建自定义链

1. substrate到底是什么:从一张实验台布说起很多刚接触区块链底层开发的朋友,看到"substrate"这个词都会愣一下——这到底是个框架、一个库、还是一条链?我第一次接触它的时候也绕了不少弯路,这里先给大家一个最直白的说…

阅读更多 →
S500无人机新手入门:Pixhawk4与FS-IA6B对码接线及飞控配置全攻略 2026/9/28 21:56:58

S500无人机新手入门:Pixhawk4与FS-IA6B对码接线及飞控配置全攻略

1. 为什么S500这套配置值得新手拿来练手S500机架配Pixhawk4飞控再加FS-IA6B接收机,这个组合在入门级四轴里算是相当经典的搭配。S500的轴距500mm,机架空间足够大,装起来不憋屈,炸机了维修成本也低。Pixhawk4作为一款成熟的开源飞控…

阅读更多 →
JSP+MySQL在线音乐管理系统:从数据库设计到部署全解析 2026/9/28 21:56:51

JSP+MySQL在线音乐管理系统:从数据库设计到部署全解析

简介:一个基于 JSP 技术栈开发的在线音乐信息管理系统完整项目,采用 Java Web JSP MySQL JavaScript 实现,适合正在学习 Java Web 开发、需要课程设计或毕业设计参考的学生。系统区分管理员与普通用户两类角色:前台支持歌曲查询…

阅读更多 →
从零构建分布式调度平台:任务编排、重试幂等与高可用实践 2026/9/28 21:56:51

从零构建分布式调度平台:任务编排、重试幂等与高可用实践

搞了一年多的“ax调度”,总算有底气拿出来给大家说说。有人一听“调度”两个字就发怵,觉得离自己很远,其实说白了就一句话:把该做的事,按正确的时间和顺序,安排好、跑起来、只执行一次。AX 这个名字是我早年…

阅读更多 →
Agent-Native架构实战:主循环、工具设计与稳定落地的工程指南 2026/9/28 21:56:51

Agent-Native架构实战:主循环、工具设计与稳定落地的工程指南

去年我开始认真梳理手里几个 AI 项目的时候,发现一个很扎心的现象:大家都说自己在做 AI 应用,但绝大多数产品本质上只是“套了一个聊天框的数据库”,真正把 agent 放在主流程里的几乎没几个。而“agent-native”这个热词的流行&am…

阅读更多 →
S500装机第一步:FS-IA6B接收机与Pixhawk4对码接线全攻略 2026/9/28 21:56:14

S500装机第一步:FS-IA6B接收机与Pixhawk4对码接线全攻略

1. 为什么S500装机第一步是搞定接收机对码S500这套四轴机架在入门到进阶的航模圈子里热度一直不低,轴距500mm、支持折叠、能挂云台也能挂运动相机,属于那种“既能练手又能干活”的机型。但很多新手拿到套件之后,第一道坎不是焊电调、不是调PI…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉