软件工程学习日志2025.11.26

news/2025/11/26 22:23:24/文章来源:https://www.cnblogs.com/dynastyeast/p/19274813

项目概览

  • 目标:生成纯中文儿童故事,风格干净,无英文与“思考/分析”类文字;自动生成卡通图片并支持语音朗读。
  • 技术栈:Spring Boot(后端)、原生 JS + 静态 HTML(前端)、SiliconFlow API(文本与图片)、浏览器 SpeechSynthesis(TTS)。
  • 产出:稳定的故事生成与清洗、图片生成、语音朗读、统一美化的前端页面与交互流程。

关键功能

  • 纯中文故事生成:最小化提示词,避免英文与非正文输出。
  • 正文清理与过滤:移除代码块、尖括号标签、思考/指导性段落、英文与标题前缀。
  • 自动卡通图片生成:故事生成成功即触发图片生成并展示。
  • 语音朗读:中文朗读、暂停/继续/停止,自动选择中文语音。
  • 配置持久化:API Key 保存在 local.properties,免登录与免重填。
  • 稳健错误处理:统一超时、限流与鉴权错误的反馈与重试策略。

架构设计

  • 后端控制器与服务分层:StoryController 接入点负责请求、响应与输出清理;QianfanService 负责与上游模型交互(文本与图片)。
  • 前端单页静态:页面元素分区清晰,JS 事件驱动生成故事、自动生成图片与朗读控制。
  • 配置导入与容错:通过属性集中配置模型、超时、重试、大小等参数,保护前端体验。

后端实现

  • 文本生成与清理
    • 生成接口:/api/generate 构造最小提示词与请求,返回清洗后的正文。
    • 清洗逻辑:移除代码块、尖括号标签、思考与指导性段落、英文以及“标题/说明/分析/推理”类前缀。
    • 代码位置:src/main/java/org/example/story/controller/StoryController.java:93-145
  • 图片生成
    • 图片接口:/api/image 接收故事正文,构造图片提示词,返回 base64 或 URL,支持自动重试与错误映射。
    • 服务方法:src/main/java/org/example/story/service/QianfanService.java:322-386(模型、请求、重试、错误处理)
  • 稳健性与错误映射
    • 超时 → 504,并附带 Retry-After 协调前端重试
    • 429 限流 → 429,并附带 Retry-After
    • 401 鉴权 → 401,提示前端正确配置 Key
    • 统一重试与冷却:指数退避、最小间隔、并发信号量防止过载

前端实现

  • 操作流程
    • 输入关键词 → 生成故事 → 自动生成卡通图片 → 可选朗读。
    • 已移除“查看剩余配额”和“生成图片”按钮,简化为单一“生成故事”入口。
  • 朗读控制
    • 选择中文语音并朗读;支持暂停/继续/停止;生成新故事自动取消上一次朗读。
    • 代码位置:src/main/resources/static/app.js:207-233(朗读事件),src/main/resources/static/app.js:235-261(暂停/继续/停止)
  • 自动生成图片
    • 故事生成成功后立即发送 /api/image,对 429/504 自动重试,失败消息友好提示。
    • 代码位置:自动图片生成嵌入在生成故事流程中,见 src/main/resources/static/app.js 生成成功后的图片逻辑块。
  • 页面美化
    • 统一网站装饰模板:品牌区、栅格卡片、统一配色与阴影、圆角与焦点样式。
    • 代码位置:src/main/resources/static/index.html(统一样式与布局)

错误处理与稳健性

  • 超时与限流:带退避重试与 Retry-After,前后端配合平滑重试。
  • 鉴权与配额:后端明确 401 与文案提示;配额展示入口已移除,避免用户关注不必要信息。
  • 并发保护:信号量限制同时请求,防止爆发式调用导致上游拒绝。

配置与部署

  • API Key 持久:src/main/resources/local.properties 中设置 qianfan.apiKey,并在应用属性中导入该文件(已忽略版本控制)。
  • 构建验证:./gradlew.bat build -x test 保证编译通过;前端为静态资产无需额外打包步骤。

体验优化

  • 只输出故事正文:后端清洗彻底,移除“在描述环境时”“故事的发展需要”“总的来说”等指导性文字。
  • 自动图片生成:减少用户操作,提升连贯体验。
  • 统一美学风格:清爽、现代,适用于儿童故事场景的视觉氛围。

关键代码位置

  • 故事生成入口:src/main/java/org/example/story/controller/StoryController.java:19-48
  • 正文清理函数:src/main/java/org/example/story/controller/StoryController.java:93-145
  • 图片生成服务:src/main/java/org/example/story/service/QianfanService.java:322-386
  • 语音朗读逻辑:src/main/resources/static/app.js:207-233, 235-261
  • 前端页面结构:src/main/resources/static/index.html(品牌区、栅格卡片、操作与内容分区)
  • 配置持久化:src/main/resources/local.properties(API Key)

收获与思考

  • 最小提示词有助于避免模型模板化输出,与后端清洗组合,能显著稳定纯正文效果。
  • 输出清理应多层次:结构块(代码/标签)、段落意图(指导性/分析性)、语言过滤(英文/拼音),联合生效。
  • 错误处理应分层:网络/超时、限流、鉴权、非 2xx;前后端以 Retry-After 与退避重试打通体验。
  • 用户体验越少按钮越好:自动图片生成与语音朗读,使“生成故事”成为单一主流程。
  • 配置持久化与私密性:将 Key 放在本地配置并忽略版本控制,避免泄露风险。

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

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

相关文章

[KaibaMath]1027 关于mn ⇔ m≥n+1(m,n均为整数)的证明

若m和n均为整数,则m>n ⇔ m≥n+1. 下面给出相应的证明。

自指自洽即因果,可知可行,很烦很好

ECT-OS-JiuHuaShan/https://orcid.org/0009-0006-8591-1891对命题"自指自洽即因果,可知可行,很烦很好"进行严格的加密推理分析。 ▮ 辩证本质:认知实践的完整循环 命题揭示了意识系统的完整运作机制 - 自…

干扰素信号通路:从JAK-STAT到科研应用

在生命科学领域,干扰素的强大功能——从抗病毒到免疫调节——最终都通过其细胞内精确的信号转导来实现。其中,JAK-STAT通路是传递干扰素信号的核心桥梁。对于致力于免疫学、病毒学及信号转导研究的科研人员而言,深入…

2025年11月室外木塑地板厂家,共挤木塑地板厂家,wpc木塑地板厂家品牌推荐:市政工程合作优选企业

2025年11月室外木塑地板厂家品牌推荐:市政工程合作优选企业在2025年11月,如果您正在寻找优质的室外木塑地板厂家、共挤木塑地板厂家或者wpc木塑地板厂家,临沂军森木塑有限公司绝对值得您的关注,是市政工程合作的优…

2025年11月二代木塑地板厂家,防水木塑地板厂家,环保木塑地板厂家推荐:无醛环保认证品牌盘点

2025年11月二代木塑地板厂家推荐:无醛环保认证品牌盘点 在环保意识日益增强的今天,木塑地板凭借其环保、耐用等诸多优点,越来越受到消费者的青睐。如果你正在寻找一家靠谱的防水、环保木塑地板厂家,那么临沂军森木…

ABC396 VP总结

比赛链接 ResultCloudflare 发力了!!! D题人机验证一直在卡,然后又就丢掉写 E 去了,于是忘记还有道题没交,然后 \(ans\) 初始值设小了;F 题提交的时候人机验证卡了 10min,不然应该能调出来…… Solution D - M…

11月26日日记

1.今天上了一整天马哲 2.明天体育课 3.如何通过 Nginx 配置保留 Session 一致性?分布式场景下 Session 共享方案有哪些?

Zelda

Z is not important, but Link loves her. but actually Nihon are not like this. Nihon samurai liked to torment real princesses and kill them. Nihon like the honorable person, and rape, kill her. everyone…

3D scanning with structured light(使用结构光进行三维扫描)

3D scanning with structured light(使用结构光进行三维扫描)介绍结构光三维扫描。只需要一个廉价的投影仪和webcam(网络相机),就能打造一个属于自己的三维扫描仪,这便是结构光三维扫描仪,它利用结构光把不同光照模…

求导幂法则 - ukyo-

幂法则 是微积分中用于求幂函数导数的一个基本法则。---1. 公式若f(x) = x^n其中 n 是任意实数常数,则f(x) = n \cdot x^{n-1}---2. 例子1. f(x) = x^2 \quad \Rightarrow \quad f(x) = 2x^{1} = 2x 2. f(x) = x^3 \q…

web框架——flask-异常处理/全局钩子/jinja2引擎

大纲:1.异常处理主动抛出HTTP异常和业务异常 及 两者使用场景捕获异常 @app.errorhandler装饰器及 与 except区别2.全局钩子钩子介绍钩子用法3.jinja2引擎变量的传入 / 输出流程控制 / 仅在for循环中可使用的…

Webpack高级之常用配置项

常用配置项——Mode 默认值是 production(什么都不设置的情况下);可选值有:none | development | production。development:会将 DefinePlugin 中 process.env.NODE_ENV 的值设置为 development,为模块和 chunk …

2025年秋招-华为-11月19号开发岗

1.飞船扫描 BFS/DFS。 就是找 \(0\) 的联通块,但该联通块不能碰到边界,\(BFS/DFS\) 搜一下即可。点击查看代码 #include <bits/stdc++.h>using i64 = long long;int main() {std::ios::sync_with_stdio(false)…

求导幂法则, - ukyo-

幂法则 是微积分中用于求幂函数导数的一个基本法则。公式若 f(x) = x^n 其中 n 是任意实数常数,则 f(x) = n \cdot x^{n-1}例子f(x) = x^2 \quad \Rightarrow \quad f(x) = 2x^{1} = 2xf(x) = x^3 \quad \Rightarrow …

详细介绍:从零开始的云原生之旅(七):ConfigMap 和 Secret 配置管理

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Day 28 类的定义和手段

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

VMware虚拟机Ubuntu系统问题集

1. 网络图标及设置里的连接选项突然消失解决: 1> sudo gdeit /etc/NetworkManager/NetworkManager.conf 2> 将managed=false改为managed=true,保存退出 3> 删除NetworkManager配置 service NetworkManager …

SetSkeletalMesh优化问题

最近工作的时候遇到了一个CPU的异常开销优化,用Unreal Insights看了一下,SetSkeletalMesh的开销相当大。 主要是三个东西:CreatePhysics、InitAnim、CreateClothing。 尝试了一下定位问题:关闭SkeletalMeshCompone…

从文件结构、索引、信息更新、版本控制等全面对比Apache hudi和Apache paimon

从文件结构、索引、信息更新、版本控制等全面对比Apache hudi和Apache paimon2025-11-26 21:45 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-…