2026秋软件工程第一次个人作业
| 这个作业属于哪个课程 | https://edu.cnblogs.com/campus/fzu/2026-01SoftwareEngineeringandSoftwareEngineeringPractice |
|---|---|
| 这个作业要求在哪里 | https://edu.cnblogs.com/campus/fzu/2026-01SoftwareEngineeringandSoftwareEngineeringPractice/homework/16716 |
| 这个作业的目标 | 搭好三个平台(GitHub/博客园/Hugging Face) / 跑通一个 AI 图像生成 Demo / 写一篇展示自我认知的随笔 / 建一个含三年规划的个人主页并通过博客园班级入口正式提交。 |
| 学号 | 102402104 |
自我介绍
-
👐Hello,我是王可人(asakinza)
福州大学2024级大数据专业本科生,来自江苏省南通市
关于我
✅掌握Python、c++等基础编程语言
✅能够搭建简易web平台并且完成相关项目
✳️对数据处理以及流媒体与大数据的融合充满兴趣 -
个人爱好
家里蹲爱好者,喜欢绘画和看番,正在制作自己的作品集 -
未来规划
备考研究生,聚焦大数据与流媒体技术方向,系统学习分布式计算、实时数据处理与视频传输优化。
一、个人主页搭建


二、huggingface-API的调用
- 背景与方案选择
本次作业原计划通过 Hugging Face 官方 API 调用 XLabs-AI/flux-RealismLora 模型生成写实图像。
实际操作中遇到两个障碍:
- Hugging Face 官网无法打开,在线 API 无法访问;
- 本地硬件不足:设备为 Intel Iris Xe 核显(无 CUDA 支持),内存仅暂时不足,远低于 FLUX.1-dev 基础模型的运行要求,本地部署不可行。
因此改用国内可直接访问的硅基流动(SiliconFlow)平台完成 API 调用,模型选用免费可用的 Kwai-Kolors/Kolors,并通过 Gradio 搭建交互式前端。
以下记录完整操作流程。
- API 调用操作步骤
- 配置 Python 环境
由于系统 Python 3.14 过新、且 Anaconda base 环境受保护,创建独立的 conda 环境:
conda create -n flux python=3.10 -y
conda activate flux
安装依赖(CPU 版 PyTorch,因无 NVIDIA 显卡):
pip install torch torchvision --index-url https://download.pytorch.org/whl/cpu
pip install diffusers transformers accelerate gradio huggingface_hub requests pillow
- 获取硅基流动 API 密钥
访问 siliconflow.cn 注册账号,在控制台“API 密钥”页面新建密钥(以 sk- 开头),保存到本地。
- 编写调用代码 + Gradio 前端
完整代码保存为 siliconflow_flux.py:
import os
import requests
import gradio as gr
from PIL import Image
from io import BytesIO
# 配置区
API_KEY = os.environ.get("SILICONFLOW_API_KEY", "sk-vtkqefnwbjhozjmveultlknakafyeysnlfdstdfergddhgnd"
)
API_URL = "https://api.siliconflow.cn/v1/images/generations"
MODEL = "Kwai-Kolors/Kolors"
#调用
def generate_image(prompt, image_size="1024x1024"):
if not prompt.strip():
raise gr.Error("请输入提示词")
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json",
}
payload = {
"model": MODEL,
"prompt": prompt,
"image_size": image_size,
"num_inference_steps": 20,
"guidance_scale": 3.5,
}
resp = requests.post(API_URL, json=payload, headers=headers, timeout=120)
if resp.status_code != 200:
raise gr.Error(f"API 返回错误 {resp.status_code}: {resp.text[:200]}")
data = resp.json()
image_url = data["images"][0]["url"]
img_resp = requests.get(image_url, timeout=60)
image = Image.open(BytesIO(img_resp.content))
image.save("flux_output.png")
return image
# Gradio 前端
with gr.Blocks(title="Flux 写实图像生成器") as demo:
gr.Markdown("# Flux 写实图像生成器(硅基流动 API)")
gr.Markdown("输入英文提示词,生成贴近真实世界的图像。")
with gr.Row():
with gr.Column():
prompt_input = gr.Textbox(
label="提示词(建议英文)",
lines=4,
placeholder="photorealistic photo, quiet city street at sunrise, soft golden sunlight, shot on Sony A7M4, 35mm lens, f/1.8",
)
size_input = gr.Dropdown(
choices=["1024x1024", "768x1024", "1024x768", "576x1024", "1024x576"],
value="1024x1024",
label="图像尺寸",
)
btn = gr.Button("生成图片", variant="primary")
with gr.Column():
output_image = gr.Image(label="生成结果")
btn.click(generate_image, inputs=[prompt_input, size_input], outputs=output_image)
demo.launch(server_name="127.0.0.1", server_port=7860)
说明:
- API_URL 为硅基流动统一的图像生成端点;
- 请求头 Authorization: Bearer
完成鉴权; - negative_prompt 是 Kolors 支持的负面提示词字段,用于排除不想要的特征。
- 运行并生成图像
python siliconflow_flux.py
终端输出 Running on local URL: http://127.0.0.1:7860 ,浏览器访问该地址,输入提示词点击生成。
- 遇到的问题与解决
| 问题 | 报错信息 | 解决方法 |
|---|---|---|
| 模型被禁用 | 403 | 原 FLUX.1-schnell 免费额度已结束 |
| 模型不存在 | 400 {"code":20012,"message":"Model does not exist."} | 模型名需严格匹配平台列表 |
最终解决:改用 Kwai-Kolors/Kolors 该模型当前免费可用,调用成功
- 提示词设计思路与修改过程
- 设计思路
图像内容为“桌面上的笔筒”。由于目标是贴近真实世界的图像,提示词不采用艺术化描述,而是模拟摄影师的拍摄说明,包含以下要素:
| 要素 | 作用 |
|---|---|
| 主体与场景 | 明确拍摄对象(木质笔筒 + 桌面) |
| 光线条件 | 决定真实感(自然窗光、暖色晨光) |
| 镜头参数 | 模拟真实拍摄(50mm、f/2.0、浅景深) |
| 设备/胶卷 | 增加摄影质感(Fujifilm X-T4、film grain) |
| 构图与背景 | 控制画面层次(candid still life、blurred background) |
-
修改过程
初稿:
Photorealistic close-up photograph of a wooden pen holder on a tidy desk, filled with a few pens and pencils. Soft natural window light from the left, shallow depth of field, 50mm lens, warm morning atmosphere.
改进:加入光线方向、镜头参数、氛围描述,方向正确,但生成结果仍存在:笔太多且色块模糊、桌面杂乱、色调偏冷的问题。
![屏幕截图 2026-09-11 213213]()
修改版:
A single wooden pen holder on a clean desk, containing exactly three pens and two pencils. Soft warm morning sunlight from the left window, gentle shadows. Shot with a 50mm lens at f/1.8, shallow depth of field. The background is blurred, showing only a white coffee mug. Fujifilm film simulation, warm color tone, natural wood grain texture, minimalist composition, no clutter, professional product photography.
![屏幕截图 2026-09-11 213810]()
-
改进要点:
用 exactly three pens and two pencils 限定数量,避免模型随意填充;
用 clean desk、no clutter、minimalist composition 约束构图;
强化暖色光(warm morning sunlight、warm color tone),修正原图偏冷的问题;
加入 professional product photography,提升产品级画质。
- API 调用体验与心得
调用体验
- 接口设计友好:硅基流动的 /images/generations 接口采用标准 RESTful 风格,请求体为 JSON,返回图片 URL,requests 库即可直接调用,无需额外 SDK。
- 图片 URL 时效性:生成图片的链接仅 1 小时有效,必须在代码中立即下载保存(本代码已用 Image.open(BytesIO(...)) 处理)。
- 模型选择是关键:同一接口下不同模型可用性差异很大。FLUX.1-schnell 曾限时免费但现已禁用,Kolors 当前免费可用,切换模型是解决问题的核心。
遇到的问题与收获
- 环境问题是第一道坎:Python 版本过新、Anaconda base 环境受保护、无 CUDA 支持,这些问题都需要通过创建独立 conda 环境、安装 CPU 版 PyTorch 来解决。
- 模型可用性需要主动确认:不能假设某个模型一定可用,遇到 Model disabled 或 Model does not exist 时,应及时查阅平台“模型广场”或 API 文档,切换到当前可用模型。
- 提示词的具体程度决定生成质量:写实模型对数量、光线方向、构图约束的敏感度远高于泛泛的“high quality”。加入 exactly three pens、no clutter 等约束后,可控性显著提升。
- 负面提示词很有价值:Kolors 支持 negative_prompt,显式排除“杂乱、冷光、模糊”等特征,比单纯堆叠正向词更有效。
方案对比反思
| 方案 | 优点 | 缺点 |
|---|---|---|
| Hugging Face 在线 API | 模型丰富、官方支持 | 官网访问受限,无法使用 |
| 本地部署 FLUX.1-dev | 无调用次数限制 | 需 GPU(≥8GB 显存)和 32GB+ 内存,硬件不满足 |
| 硅基流动 API | 国内可访问、免费模型可用、接口简单 | 模型可用性会调整,需及时切换 |
总结
- 在硬件和网络条件受限的情况下,选择国内可访问的 API 平台是务实之举。本次作业不仅完成了“API 调用 + 前端交互”的技术目标,更在实践中理解了模型选择、提示词设计、参数调优三者的关系——提示词决定“拍什么”,参数决定“怎么拍”,模型决定“拍得好不好”。
三、软件工程随笔
- 已具备的专业知识与能力:
-
能力 A:编程语言基础
掌握 C/C++ 和 Python 的基本语法,能独立完成数据结构与算法的课程作业,理解面向对象编程思想(类、继承、多态)。Java 有初步了解,能读懂简单项目代码,但独立开发经验较少。 -
能力 B:前端开发入门
了解 HTML/CSS/JavaScript 基础,能搭建静态页面,使用过 Bootstrap 做简单响应式布局。本学期刚接触 Gradio 和 Hugging Face API 调用,能完成“模型调用 + 前端交互”的最小闭环(如用 Gradio 封装文生图模型)。 -
能力 C:开发工具与协作
熟悉 Git 基本操作(clone/fork/commit/push),能在 GitHub 上进行仓库管理和 Pages 部署。会用 VS Code、PyCharm 等 IDE,了解 Markdown 写作和基础命令行操作。 -
能力 D:算法与数据结构
掌握数组、链表、栈、队列、树、图等基本结构,能实现常见排序和查找算法,理解时间/空间复杂度分析。LeetCode 简单题可独立完成,中等题需要参考思路。
- 感兴趣的技术方向
- AI 应用开发:尤其是大模型 API 调用、提示词工程、AI 与前端结合的交互产品(如本次作业中的 Flux 模型调用)。
- 全栈开发:希望打通“前端界面 + 后端逻辑 + 数据库”的完整链路,做出可上线的 Web 应用。
- 软件工程方法论:对需求分析、架构设计、敏捷开发、代码规范等工程化实践感兴趣,想了解真实项目是如何从 0 到 1 推进的。
还欠缺的能力 - 工程化能力不足:能写“能跑”的代码,但缺乏模块化、可维护、可测试的意识;不会写单元测试,没用过 CI/CD。
- 后端与数据库经验薄弱:没独立搭过服务器、写过 API 接口,SQL 只会基础增删改查,不了解 ORM、缓存、消息队列等。
团队协作开发经验少:Git 只停留在个人仓库操作,没经历过多人分支协作、Code Review、Issue 跟踪的完整流程。 - 系统设计能力欠缺:面对一个稍复杂的项目,不知道如何拆解模块、设计接口、权衡技术选型。
- 调试与排错能力有限:遇到报错常靠搜索和试错,缺乏系统性的定位思路和工具使用经验(如断点调试、日志分析)。
- 代码量说明与目标
- 截至目前代码量:约 1500行(含课程作业、算法练习、零星小项目)。
- 本学期课程后希望达到的代码量:5000行。
- 最期待学习的知识:
- 软件生命周期与工程化流程:一个软件从需求到上线到底要经历哪些阶段,每个阶段产出什么文档、用什么工具。
- 版本控制与团队协作:Git 分支模型(如 Git Flow)、Pull Request、Code Review 的实际操作。
- 设计模式与架构基础:如何写出可扩展、可维护的代码,而不是“一次性脚本”。
- 测试与质量保障:单元测试、集成测试怎么写,如何保证代码质量。
- 项目管理与敏捷实践:Scrum、看板、Issue 管理、迭代规划等真实团队做法。
- 希望获得的收获:
- 从“会写代码”到“会做软件”:不再只是完成一个函数或一个页面,而是能独立或协作交付一个完整的、可用的软件产品。
- 工程思维:遇到问题时,能用工程化的方式拆解、设计、验证,而不是上来就写代码。
- 协作能力:能在一个多人团队中清楚表达自己的设计、理解他人的代码、有效参与 Review。
- 一份拿得出手的项目经历:希望期末能做出一个自己愿意放进简历、能讲清楚设计取舍的项目。
- 对“软件工程”这个专业的真实认知:知道它和“写代码”的区别,也明白自己未来想往哪个方向深入。
四、软件工程课程学习指南生成及分析
学习指南采用deepseek生成
-
课程核心目标
掌握软件从需求分析、设计、编码、测试到维护的完整生命周期,理解软件工程思想、开发流程、建模方法与项目管理,能够规范完成小型软件项目开发,区分编程实现和软件工程的差异(软件工程不止写代码,更强调流程、质量、协作)。 -
重点知识模块
软件工程基础概念:软件危机、软件工程定义、软件生命周期、软件模型(瀑布、增量、原型、敏捷),区分各类模型适用场景。
需求工程:需求分类(功能性、非功能性),需求获取方法,编写需求规格说明书,需求评审。
软件设计:概要设计(模块划分、架构设计)、详细设计;UML建模:用例图、类图、时序图、活动图;高内聚低耦合设计原则。
软件实现与编码:编码规范、代码评审、版本控制(Git),面向对象开发思想。
软件测试及测试分类:单元测试、集成测试、系统测试、验收测试;黑盒测试、白盒测试;测试用例设计。
软件维护与项目管理:四种维护类型;项目计划、进度管理、风险管理、质量保证。
敏捷开发
敏捷宣言、Scrum核心角色、迭代开发,对比传统瀑布模型。 -
学习建议
理论结合实践:不要只背概念,尽量动手做小项目:用UML画图表、写需求文档、编写测试用例,体会完整开发流程。
重视建模工具:熟练看懂、绘制UML图,这是考试和课程设计高频考点。 -
常见考点
软件危机产生原因与解决途径
各软件开发模型优缺点与适用场景
软件需求分类,需求规格说明书
UML各类图识别与绘制
内聚、耦合概念
测试的各个阶段,黑盒/白盒测试
软件维护分类、敏捷开发核心思想 -
学习资源
教材:软件工程经典教材,重点看生命周期、UML、测试部分
工具:Draw.io(画UML)、Git(版本管理)
练习:做历年习题,多做项目文档练习 -
学习误区提醒
❌误区:软件工程就是学写代码
✅正确:代码只是其中一环,课程重点是流程、文档、质量、团队协作。
合理性分析
合理之处:
- 知识模块从基础概念 → 需求 → 设计 → 实现 → 测试 → 维护 → 项目管理,符合经典教材主线。
- 强调“软件工程不止写代码”,点出了课程核心。
- 突出 UML 建模、模型对比、测试分类等高频考点。
- 误区提醒切中要害,能纠正“软件工程 = 写代码”的错误认知。
不足之处:
- 偏理论复习提纲,实践指导较少(如测试用例设计方法、Git 协作流程未展开)。
- 缺少工具链建议(只提了 Draw.io 和 Git)。
- 没有涉及课程实际作业体系(博客园、GitHub Pages、API 调用等)
总结:有帮助,但需结合自身情况调整。


浙公网安备 33010602011771号