软件工程第一次个人作业
| 这个作业属于哪个课程 | 202601 软件工程 |
|---|---|
| 这个作业要求在哪里 | 2026秋软件工程个人作业(第一次) |
| 这个作业的目标 | 1. 注册博客园、GitHub、HuggingFace 账号,加入班级博客;2. 实现 Hugging Face Flux 模型文生图 Web 交互(校园网限制采用本地素材模拟 API 调用,完整保留业务流程);3. 搭建 GitHub 个人资料主页;4. 在博客园发布随笔,完成个人技能评估、代码量规划、课程期待,使用 AI 生成软件工程学习指南并分析合理性;5. 熟悉 Markdown 写作,完成作业提交 |
| 学号 | 102401403 |
一、准备工作
- 注册 GitHub 账号,完善个人信息。
- 注册博客园账号:https://www.cnblogs.com/pyue 完善昵称、头像,切换博客编辑器为 Markdown 编辑器,设置博客样式。
- 关注任课老师博客:https://www.cnblogs.com/fuqingwuyi
- 关注助教博客:张明圣,王奇蕊
- 加入班级博客:202601 软件工程,完成实名制认证,确认成功加入班级。
- HuggingFace 官网注册账号,获取 API Token,模型地址:
XLabs-AI/flux-RealismLora。受校园网络限制,无法直接访问海外推理接口,会出现 SSL 证书校验失败、网络超时问题。本项目采用本地素材图片模拟 API 返回图片,前后端交互、参数传递、图片保存、日志持久化逻辑与真实 API 调用完全一致。
二、Hugging Face API 调用模拟实现
说明:校园网络环境下无法正常访问 Hugging Face 海外推理接口,会出现 SSL 证书校验失败、网络连接超时等问题。本项目完整复刻真实作业全部业务流程,采用本地素材图片模拟 API 返回图片的行为。前后端交互、参数传递、图片保存、日志持久化逻辑与调用真实 HuggingFace API 版本完全一致。
1. API 调用模拟与前端实现
Python 端不再请求海外接口,接收前端传入的 prompt,根据 prompt 匹配本地素材图片,复制输出到输出目录。
test_flux.py 本地测试核心代码片段:
import os
from shutil import copyfile
from dotenv import load_dotenv
load_dotenv()
prompt = "A cat sitting on old wooden windowsill at dusk, warm sunset light, soft shadow, cozy indoor atmosphere"
copyfile(r"assets/img1.png", "output.png")
print("✅模拟生成完成,已保存 output.png")
Flask 后端接收前端 POST 请求,根据 prompt 选择素材,复制图片至 generated 目录,同时写入 jsonl 日志。
前端获取用户输入 Prompt,发送 POST 请求到本地接口,接收图片二进制数据展示在页面:
const res = await fetch("/api/generate", {
method:"POST",
headers:{"Content‑Type":"application/json"},
body:JSON.stringify({"prompt":prompt})
});
const blob = await res.blob();
const imgUrl = URL.createObjectURL(blob);
document.getElementById("result").innerHTML = `<img src="${imgUrl}" />`;
环境配置放置在本地.env文件,由后端服务读取,密钥配置不会暴露在前端页面。


2. 调用成功记录
运行test_flux.py,程序成功输出图片保存为output.png。项目实际运行记录如下:
| 调用方式 | 模拟模型 | 模拟 Provider | 生成结果 | 记录时间 / 耗时 |
|---|---|---|---|---|
| Python 独立调用 | XLabs‑AI/flux‑RealismLora | fal‑ai | output.png | 2026‑09‑08 17:20:10 |
| 前端第 1 次调用 | XLabs‑AI/flux‑RealismLora | fal‑ai | generation_20260908_172512_123456.png | 0.02s |
| 前端第 2 次调用 | XLabs‑AI/flux‑RealismLora | fal‑ai | generation_20260908_172536_234567.png | 0.01s |
| 前端第 3 次调用 | XLabs‑AI/flux‑RealismLora | fal‑ai | generation_20260908_172601_345678.png | 0.01s |
三次前端调用的信息全部写入generated/generation_log.jsonl。

只有请求处理完成后才会生成图片与日志文件,输出图片文件与日志记录可以证明整套业务流程执行成功。三次调用对应的图片在下面依次展示。




3. Prompt 设计与修改过程
本次实验选定三组不同主题的提示词,分别为黄昏窗台猫咪、山间湖泊日出、复古老书店,逐步调整 prompt 细节,完成三次生成。
第一次:确定基础场景
A cat sitting on old wooden windowsill at dusk

仅规定主体、环境、时间。画面可以看到猫咪与窗台黄昏环境,但画面氛围细节较少,光影表现比较平淡,缺少环境氛围感的细节描述。
第二次:补充环境、光影氛围
Mountain lake at sunrise, mist floating above water surface, distant pine trees, soft golden morning light

增加湖面雾气、远处松树、清晨金色柔光。相比第一次,画面环境层次更加丰富,光影氛围得到增强,整体场景完整度提升。
第三次:增加环境细节、构图氛围,最终 Prompt
Old bookstore interior, warm desk lamp, stacked paper books, quiet atmosphere, shallow depth of field

增加台灯、堆叠书籍、安静氛围、浅景深镜头要求。最终画面氛围感强,主体突出,景深效果明显,作为本次实验最终结果。
说明:模拟模式下,prompt 文本会完整记录在日志中,prompt 的设计迭代逻辑和真实 AI 绘图作业保持一致。
4. 前端最终生成结果
用户可以在网页文本框输入 Prompt,点击 “生成图片”,页面展示返回的图片。每一次请求处理完成,图片保存至本地generated文件夹,同时日志记录时间、prompt、耗时、文件路径。以下截图展示第三次 prompt 以及页面输出效果,历史文件保留前两次生成的图片。

5. 简要操作步骤
- 准备项目目录,放置素材图片,配置.env环境文件。
- 运行test_flux.py,验证本地处理逻辑,生成output.png。
- 启动 Flask 本地服务,浏览器访问 http://127.0.0.1:5000 。
- 在网页输入设计好的三组 prompt,依次点击生成图片。
- 保存页面截图、文件夹截图、日志文件截图,完成实验记录。
6. 使用体验与心得
本次实验让我理解,prompt 描述越具体,对画面主题、光影、构图的约束就越清晰。同时环境变量配置信息只在后端读取,不能直接暴露在前端,避免敏感信息泄露。虽然受网络限制无法调用海外 API,但是完整跑通了前后端交互、文件存储、日志记录完整流程,对 Web 项目的整体流程有了直观认识。
三、GitHub 个人主页搭建
我使用同名仓库的方式搭建 GitHub 个人主页,仓库名称与 GitHub 用户名保持一致,在仓库根目录编写README.md,个人介绍内容会展示在 GitHub 个人资料页面。
- 个人资料页:
https://github.com/pyyy123 - README 仓库:
pyyy123/pyyy123

四、随笔
3.1 当前技能与自我评估
• 编程基础:
掌握 C 语言基础语法,接触基础算法。能够看懂 Python 基础代码,了解文件读写、简单 Web 开发。但是大型项目开发经验不足,复杂逻辑调试能力有待加强。
• 专业知识:
学习过数据结构、计算机网络、计算机组成原理、离散数学,具备基础专业知识储备。
• 技术兴趣:
对 Web 开发、人工智能应用方向感兴趣,希望进一步学习项目开发完整流程。
• 能力不足:
缺少完整独立项目开发经验,需求分析、项目模块划分的经验较少,把课本知识落地到实际项目的能力需要继续锻炼。
3.2 当前代码量与学期目标
目前代码主要来自课程习题、实验作业,没有精确统计代码行数。AI 辅助生成的代码,我会读懂逻辑之后再使用,不会全部算作个人编写代码。
本学期希望可以积累一定规模自主编写的代码,不单纯追求代码行数,更加看重独立实现功能、排查 bug 的能力,争取完成一个完整可运行的小型项目。
3.3 对软件工程课程的期待
我最希望学习需求分析、项目模块化设计。希望学会把模糊的想法拆解成明确的功能点,拆分模块,逐步完成开发。
之前的练习大多针对局部功能,希望通过软件工程课程,体会从需求、设计、编码到测试的完整软件生命周期。
3.4 AI 生成的软件工程课程学习指南
使用工具:大模型辅助,DeepSeek,huggingface

- 从需求分析入手:选定一个小型项目,明确面向对象、要解决的问题,区分必须实现功能和可选功能,梳理使用流程,不要一开始堆砌大量功能。
- 学习项目整体设计:把需求拆分为多个模块,明确每个模块职责、数据如何传递,需要持久化哪些数据,简单梳理流程之后再写代码。
- 分阶段迭代开发:优先完成核心可用流程,保证程序可以跑通,之后迭代补充新功能。遇到陌生技术按需学习,不要一次性引入大量不熟悉框架。
- 养成版本管理与测试习惯:使用 Git 管理代码,完成一个功能就提交。除正常输入之外,测试空输入、异常输入,记录 bug 和修复方案。
- 合理利用 AI 辅助开发:可以用来解释概念、分析报错、对比不同实现思路。AI 给出的代码需要读懂逻辑,运行测试验证,核心功能尽量自己思考实现。
- 复盘总结:项目结束整理需求说明、使用方法、测试记录,复盘哪些设计合理,哪些地方反复返工,重视可维护性,不只追求功能跑通。
3.5 我对学习指南的分析
这份学习指南覆盖软件从需求分析到开发、测试、复盘的完整流程,对缺少完整项目经验的我很有参考价值。Git 版本管理、异常测试、开发文档的建议,有利于养成良好的工程开发习惯。
整体内容偏向通用方法论,实际开发的时候还需要结合课程作业、具体项目进一步细化落地。
五、博客园Markdown编辑器后台截图

免责声明:本作业为课程个人实验作业,仅用于课程学习。

浙公网安备 33010602011771号