软工作业1--由实践开始的软工学习

这个作业属于哪个课程 H2026软件工程与软件工程实践
这个作业要求在哪里 2026秋软件工程个人作业(第一次)
这个作业的目标 1.梳理当前自己的技能树,明确未来的发展方向
2.调用huggingface-API,并结合前端接口交互生成贴近现实生活图像
3.创建自己的github主页,填写相关的个人信息
4.使用ai工具生成软件工程课程学习指南,并判断是否合理
学号 102401514

由huggingface api调用开启的软件工程实践

一、自我介绍

images

Hello!大家好!!我叫曾子瑞,是福州大学计算机科学与技术专业的一名大三学生,目前对DA、DS等方向比较感兴趣,希望未来能成为一名数据科学家😇。在课余时间我喜欢弹钢琴、听歌、打游戏(fps moba 种田等等等等)。目前规划是准备升学。

1.当前技能树

  • 编程语言:熟悉c/c++、python的语法,能写基本的算法题
  • python后端:学习过FastAPI框架,熟悉MYSQL数据库操作
  • 数据分析:掌握pandas,numpy语法,Matplotlib绘图以及Tableau可视化工具

2.感兴趣的方向

我对数据分析,数据科学方向比较感兴趣,未来想往这方面学习,成为一名数据科学家。

3.欠缺的能力

  • 缺乏项目开发经验,没有实战经历
  • 对于学习过的技能掌握的不够熟练,缺乏训练
  • 对完整的开发流程不熟悉

4.代码量以及本学期目标

  • 目前代码量大概4000-5000行,动手写代码的时间很少,本学期希望能通过项目实战积累开发经验,把自己学过的知识运用到实践中,希望这学期能够累积到10000行代码💪

5.对本学期本课程的期望

  • 希望通过软件工程课程的学习,提升自己动手做项目的能力,同时希望系统的了解软件开发的流程架构,建立对完整软件生命周期的全面认知

6.未来的规划

  • 未来一年努力争取升学,同时积累自己的项目经历,接着多参加实习再进入社会之前努力多积攒实习经历。然后有空了就学jazz钢琴,我超喜欢这种风格,希望有一天能够即兴演奏🤘

二、Hugging Face API 调用与前端实现

欧克,接下来就进入这次作业的主要内容

1.实现方案

我的实现这个项目整体分为五个部分

  • 配置管理: 由于我的程序代码都写在一个文件中,为了防止把密钥直接写进代码,我创建.env来保存访问令牌,在程序启动时可以直接读取
  • 前端交互: 我的前端并没有使用传统的Vue或React,而是通过Gradio的python 组件快速完成页面结构和交互,再用HTML/CSS提升界面美观度
  • 后端处理: 后端使用Python实现,通过Gradio将前端输入传给generate_image()函数--可以调用Hugging Face上的FLUX模型生成图片并返回给前端
  • 模型调用: 使用 huggingface_hub.InferenceClient,通过 fal-ai 推理服务调用 XLabs-AI/flux-RealismLora,将文本描述转换为写实图片。
  • 结果和异常处理: 模型返回图片后在页面展示生成结果并且将图片保存到output文件夹中,并且将提示词、参数、耗时、状态等信息记录到JSONL日志中,如果调用失败的话则记录错误并在页面上显示提示。

如下是调用步骤
网页输入正向提示词、负向提示词和生成参数
 → Gradio 按钮触发 generate_image()
 → huggingface_hub.InferenceClient.text_to_image()
 → 通过 fal-ai 推理服务调用 Hugging Face
 → 运行 XLabs-AI/flux-RealismLora 模型
 → 返回 PIL 图片对象
 → 保存为 PNG 图片到 outputs 文件夹
 → 在网页中显示图片和调用状态
 → 将参数、耗时及结果写入 logs/api_calls.jsonl

2.提示词设计与修改

因为我想生成一个贴近我们学生生活的图片,然后我就想到了每个学期最痛苦的期末复习,据此来写了提示词
以下是我的第一版提示词:

A candid documentary photograph of a young East Asian woman buying fresh vegetables at a neighborhood morning market in Shanghai after light rain. Eye-level composition, natural morning light filtered through fabric awnings, authentic skin texture and pores, slightly messy hair, subtle fabric wrinkles, wet asphalt reflections, realistic background pedestrians, shot on a full-frame camera with a 50mm lens at f/2.8, natural depth of field, neutral color grading, unretouched, lifelike, highly detailed, photorealistic

这段提示词包括了主题动作,场景环境,人物细节,光线氛围,画面构图,摄像参数,图像风格以及背景细节,但我发现生成的图片仍让我有些不满意,所以我又在以上基础上加上了如下的负向提示词:

cgi, 3d render, illustration, anime, doll, plastic skin, over-smoothed face, excessive makeup, deformed hands, extra fingers, duplicate people, text, logo, watermark, oversaturated colors, excessive HDR

3.API调用成功截图以及成果展示

  • 这是API成功调用并生成图片的记录---包括调用时间提示词耗时以及图片保存位置
    fee78cc684be41fe0be3ac3d7937da99

  • 这是前端页面以及所生成的图片展示
    5b0e86dc85f56b828a0a547d977ca409

4.核心代码

  • 提交提示词和生成参数
image = client.text_to_image(
    prompt=prompt,
    negative_prompt=negative_prompt.strip() or None,
    width=int(width),
    height=int(height),
    num_inference_steps=int(steps),
    guidance_scale=float(guidance_scale),
    seed=int(seed),
    model=MODEL_ID,
)

作用: 把正向提示词、负向提示词、图片尺寸、推理步数、引导强度和随机种子提交给 API。

  • 指定推理服务和模型
MODEL_ID = "XLabs-AI/flux-RealismennialsLora"

client = InferenceClient(
    provider="fal-ai",
    api_key=HF_TOKEN,
)

作用: 指定使用 fal-ai 推理服务,并调用 Hugging Face 上的 flux-RealismLora 模型。

  • 保存生成图片
filename = (
    "flux_"
    + datetime.now().strftime("%Y%m%d_%H%M%S")
    + ".png"
)

output_path = OUTPUT_DIR / filename
image.save(output_path)

作用: 按照当前时间创建唯一文件名,并将生成结果以 PNG 格式保存到 outputs 文件夹。

  • 记录 API 调用日志
log_data = {
    "status": "success",
    "model": MODEL_ID,
    "provider": "fal-ai",
    "prompt": prompt,
    "negative_prompt": negative_prompt,
    "width": int(width),
    "height": int(height),
    "steps": int(steps),
    "guidance_scale": float(guidance_scale),
    "seed": int(seed),
    "output_file": str(output_path),
}

write_log(log_data)

作用: 记录调用状态、模型、提示词、生成参数和图片保存位置,便于后续检查。

  • 将结果返回前端
status = (
    "API 调用成功\n\n"
    f"- 模型:{MODEL_ID}\n"
    f"- 推理服务:fal-ai\n"
    f"- 文件:{output_path}"
)

return image, status

作用: 将生成的图片和调用状态返回给 Gradio,由网页显示最终结果。

5.体验和心得

通过这次作业,我体验了从界面设计、参数配置到 API 调用和结果保存的完整 AI 应用开发流程。我学会了使用 Gradio 搭建网页、调用 Hugging Face 上的 FLUX 模型,并认识到提示词的具体程度会直接影响生成效果。开发中也遇到了网络访问和 API 调用失败的问题,通过错误提示与日志记录完成了排查。总体来说,这次作业让我更深入地理解了前端交互、后端处理和 AI 模型推理之间的联系,也提升了我的调试和实践能力。

三、Github个人主页建设

我采用了老师提供的第一个教程,创建了与自己用户名一样的公开仓库,并在仓库根目录下编写了README.md文件
我的Github个人主页链接: Sqarxx的个人主页
image

四、AI 生成的软件工程课程学习指南

我选择 ChatGPT 生成一份简要的软件工程课程学习指南,生成内容如下:

1. 软件工程基础

理解软件工程的目标和软件生命周期:

需求分析 → 设计 → 编码 → 测试 → 部署 → 维护

重点掌握:

  • 软件危机
  • 软件生命周期
  • 软件质量

2. 软件开发模型

常见模型:

  • 瀑布模型:按阶段顺序开发
  • 敏捷开发:快速迭代、响应需求变化
  • 增量模型:分阶段交付功能
  • 螺旋模型:强调风险分析

3. 需求分析

需求分为:

  • 功能需求:系统需要实现什么功能
  • 非功能需求:性能、安全、可靠性等要求

常见需求描述方法:

  • User Story
  • Use Case

4. UML建模

重点掌握:

  • Use Case Diagram:描述用户与系统功能
  • Class Diagram:描述类及其关系
  • Sequence Diagram:描述对象交互顺序
  • Activity Diagram:描述业务流程

5. 软件设计

了解:

  • MVC
  • 分层架构
  • SOLID设计原则
  • 常见设计模式

6. 软件测试

主要测试类型:

  • Unit Test:单元测试
  • Integration Test:集成测试
  • System Test:系统测试
  • Acceptance Test:验收测试

常见方法:

  • 黑盒测试
  • 白盒测试
  • 等价类划分
  • 边界值分析

7. 项目管理与开发工具

重点了解:

  • Agile / Scrum
  • Git版本控制
  • 团队协作
  • 风险管理
  • CI/CD
  • DevOps

8. 推荐学习顺序

软件工程基础

开发模型

需求分析

UML

软件设计

软件测试

Git与项目管理

CI/CD与DevOps

9. 考试重点

重点记住以下区别:

  • Waterfall vs Agile
  • 功能需求 vs 非功能需求
  • User Story vs Use Case
  • Unit Test vs Integration Test vs System Test
  • Verification vs Validation
  • CI vs CD

学习时重点理解每个概念的作用、使用阶段和实际应用场景,不要只背定义。

  • 我对这份指南的评价:我觉得这份学习指南对我非常有帮助,它结构清晰、内容精炼,涵盖了软件工程的主要知识点和学习顺序,重点突出,很适合快速了解课程框架和进行考前复习。但后面的学习中我还要结合题目和实践进行学习,才能真正掌握软件工程这门课程。

五、总结

通过这次作业我学会了非常多的知识,更重要的是参与了一次真正的实践,收获了很多,我将我在本次作业中学到的东西在下方进行了总结:

  • 首先便是通过hugging face api调用这个项目,学会了如何进行前后端交互,如何做一个小项目
  • 然后便是进行了一次markdown实操,虽然很早以前我就学习过如何使用markdown,但我一直没有真正实践过,这次作业真正提升了我对这个工具使用的能力,而不是只是了解
  • 通过建立github个人主页仓库,我对github这个十分重要的网站更加熟悉,以前只是用它来搜学习资料和项目,这是第一次建设自己的账号
    总而言之,我认为在这次作业中我学到了很多,还积累了珍贵的实操经验😃

六、后台编辑页面截图

按照作业要求我将后台编辑页面截图展示
image

给读者的话

非常感谢大家阅读我的第一篇blog!!!虽然我觉得现在的我写这篇blog还十分青涩,但我相信在不断练习下,未来的我能写出高质量的博客给大家💪
会赢的_manga221

posted @ 2026-09-09 16:58  Sqar  阅读(18)  评论(0)    收藏  举报