这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/2026-01SoftwareEngineeringandSoftwareEngineeringPractice
这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/2026-01SoftwareEngineeringandSoftwareEngineeringPractice/homework/16716
这个作业的目标 搭好三个平台(GitHub/博客园/Hugging Face) / 跑通一个 AI 图像生成 Demo / 写一篇展示自我认知的随笔 / 建一个含三年规划的个人主页并通过博客园班级入口正式提交。
学号 102402104

自我介绍

  1. 👐Hello,我是王可人(asakinza)

    福州大学2024级大数据专业本科生,来自江苏省南通市

    关于我

    ✅掌握Python、c++等基础编程语言

    ✅能够搭建简易web平台并且完成相关项目

    ✳️对数据处理以及流媒体与大数据的融合充满兴趣

  2. 个人爱好 家里蹲爱好者,喜欢绘画和看番,正在制作自己的作品集

  3. 未来规划 备考研究生,聚焦大数据与流媒体技术方向,系统学习分布式计算、实时数据处理与视频传输优化。

一、个人主页搭建

  1. https://asakinza.github.io/

  1. https://home.cnblogs.com/

二、huggingface-API的调用

  1. 背景与方案选择

本次作业原计划通过 Hugging Face 官方 API 调用 XLabs-AI/flux-RealismLora 模型生成写实图像。 实际操作中遇到两个障碍:

  • Hugging Face 官网无法打开,在线 API 无法访问;
  • 本地硬件不足:设备为 Intel Iris Xe 核显(无 CUDA 支持),内存仅暂时不足,远低于 FLUX.1-dev 基础模型的运行要求,本地部署不可行。

因此改用国内可直接访问的硅基流动(SiliconFlow)平台完成 API 调用,模型选用免费可用的 Kwai-Kolors/Kolors,并通过 Gradio 搭建交互式前端。 以下记录完整操作流程。

2、API 调用操作步骤

  • 配置 Python 环境
    由于系统 Python 3.14 过新、且 Anaconda base 环境受保护,创建独立的 conda 环境:

cmd

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 支持的负面提示词字段,用于排除不想要的特征。
  1. 运行并生成图像
python siliconflow_flux.py

终端输出 Running on local URL: http://127.0.0.1:7860 ,浏览器访问该地址,输入提示词点击生成。

  1. 遇到的问题与解决
问题 报错信息 解决方法
模型被禁用 403 原 FLUX.1-schnell 免费额度已结束

| 模型不存在 | 400 {"code":20012,"message":"Model does not exist."} | 模型名需严格匹配平台列表 |

最终解决:改用 Kwai-Kolors/Kolors 该模型当前免费可用,调用成功

三、提示词设计思路与修改过程

  1. 设计思路
    图像内容为“桌面上的笔筒”。由于目标是贴近真实世界的图像,提示词不采用艺术化描述,而是模拟摄影师的拍摄说明,包含以下要素:
要素 作用
主体与场景 明确拍摄对象(木质笔筒 + 桌面)
光线条件 决定真实感(自然窗光、暖色晨光)
镜头参数 模拟真实拍摄(50mm、f/2.0、浅景深)
设备/胶卷 增加摄影质感(Fujifilm X-T4、film grain)
构图与背景 控制画面层次(candid still life、blurred background)
  1. 修改过程

初稿:

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.

改进:加入光线方向、镜头参数、氛围描述,方向正确,但生成结果仍存在:笔太多且色块模糊、桌面杂乱、色调偏冷的问题。

修改版:

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.

  1. 改进要点:
  • 用 exactly three pens and two pencils 限定数量,避免模型随意填充;
  • 用 clean desk、no clutter、minimalist composition 约束构图;
  • 强化暖色光(warm morning sunlight、warm color tone),修正原图偏冷的问题;
  • 加入 professional product photography,提升产品级画质。

四、API 调用体验与心得

  1. 调用体验
  • 接口设计友好:硅基流动的 /images/generations 接口采用标准 RESTful 风格,请求体为 JSON,返回图片 URL,requests 库即可直接调用,无需额外 SDK。
  • 图片 URL 时效性:生成图片的链接仅 1 小时有效,必须在代码中立即下载保存(本代码已用 Image.open(BytesIO(...)) 处理)。
  • 模型选择是关键:同一接口下不同模型可用性差异很大。FLUX.1-schnell 曾限时免费但现已禁用,Kolors 当前免费可用,切换模型是解决问题的核心。
  1. 遇到的问题与收获
  • 环境问题是第一道坎:Python 版本过新、Anaconda base 环境受保护、无 CUDA 支持,这些问题都需要通过创建独立 conda 环境、安装 CPU 版 PyTorch 来解决。
  • 模型可用性需要主动确认:不能假设某个模型一定可用,遇到 Model disabled 或 Model does not exist 时,应及时查阅平台“模型广场”或 API 文档,切换到当前可用模型。
  • 提示词的具体程度决定生成质量:写实模型对数量、光线方向、构图约束的敏感度远高于泛泛的“high quality”。加入 exactly three pens、no clutter 等约束后,可控性显著提升。
  • 负面提示词很有价值:Kolors 支持 negative_prompt,显式排除“杂乱、冷光、模糊”等特征,比单纯堆叠正向词更有效。
  1. 方案对比反思
方案 优点 缺点
Hugging Face 在线 API 模型丰富、官方支持 官网访问受限,无法使用
本地部署 FLUX.1-dev 无调用次数限制 需 GPU(≥8GB 显存)和 32GB+ 内存,硬件不满足
硅基流动 API 国内可访问、免费模型可用、接口简单 模型可用性会调整,需及时切换

总结:在硬件和网络条件受限的情况下,选择国内可访问的 API 平台是务实之举。本次作业不仅完成了“API 调用 + 前端交互”的技术目标,更在实践中理解了模型选择、提示词设计、参数调优三者的关系——提示词决定“拍什么”,参数决定“怎么拍”,模型决定“拍得好不好”。

三、软件工程随笔

  1. 技能树与技术偏好

已具备的专业知识与能力:

  • 能力 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行。
  1. 本课程最期待学习的知识与收获

最期待学习的知识:

  • 软件生命周期与工程化流程:一个软件从需求到上线到底要经历哪些阶段,每个阶段产出什么文档、用什么工具。
  • 版本控制与团队协作:Git 分支模型(如 Git Flow)、Pull Request、Code Review 的实际操作。
  • 设计模式与架构基础:如何写出可扩展、可维护的代码,而不是“一次性脚本”。
  • 测试与质量保障:单元测试、集成测试怎么写,如何保证代码质量。
  • 项目管理与敏捷实践:Scrum、看板、Issue 管理、迭代规划等真实团队做法。

希望获得的收获:

  • 从“会写代码”到“会做软件”:不再只是完成一个函数或一个页面,而是能独立或协作交付一个完整的、可用的软件产品。
  • 工程思维:遇到问题时,能用工程化的方式拆解、设计、验证,而不是上来就写代码。
  • 协作能力:能在一个多人团队中清楚表达自己的设计、理解他人的代码、有效参与 Review。
  • 一份拿得出手的项目经历:希望期末能做出一个自己愿意放进简历、能讲清楚设计取舍的项目。
  • 对“软件工程”这个专业的真实认知:知道它和“写代码”的区别,也明白自己未来想往哪个方向深入。

四、软件工程课程学习指南生成及分析

学习指南采用deepseek生成

  1. 课程核心目标 掌握软件从需求分析、设计、编码、测试到维护的完整生命周期,理解软件工程思想、开发流程、建模方法与项目管理,能够规范完成小型软件项目开发,区分编程实现和软件工程的差异(软件工程不止写代码,更强调流程、质量、协作)。

  2. 重点知识模块

    软件工程基础概念:软件危机、软件工程定义、软件生命周期、软件模型(瀑布、增量、原型、敏捷),区分各类模型适用场景。

    需求工程:需求分类(功能性、非功能性),需求获取方法,编写需求规格说明书,需求评审。

    软件设计:概要设计(模块划分、架构设计)、详细设计;UML建模:用例图、类图、时序图、活动图;高内聚低耦合设计原则。

    软件实现与编码:编码规范、代码评审、版本控制(Git),面向对象开发思想。

    软件测试及测试分类:单元测试、集成测试、系统测试、验收测试;黑盒测试、白盒测试;测试用例设计。

    软件维护与项目管理:四种维护类型;项目计划、进度管理、风险管理、质量保证。

    敏捷开发

    敏捷宣言、Scrum核心角色、迭代开发,对比传统瀑布模型。

  3. 学习建议

    理论结合实践:不要只背概念,尽量动手做小项目:用UML画图表、写需求文档、编写测试用例,体会完整开发流程。

    重视建模工具:熟练看懂、绘制UML图,这是考试和课程设计高频考点。

  4. 常见考点

    软件危机产生原因与解决途径

    各软件开发模型优缺点与适用场景

    软件需求分类,需求规格说明书

    UML各类图识别与绘制

    内聚、耦合概念

    测试的各个阶段,黑盒/白盒测试

    软件维护分类、敏捷开发核心思想

  5. 学习资源

    教材:软件工程经典教材,重点看生命周期、UML、测试部分

    工具:Draw.io(画UML)、Git(版本管理)

    练习:做历年习题,多做项目文档练习

  6. 学习误区提醒

    ❌误区:软件工程就是学写代码

    ✅正确:代码只是其中一环,课程重点是流程、文档、质量、团队协作。

合理性分析 合理之处:

  1. 知识模块从基础概念 → 需求 → 设计 → 实现 → 测试 → 维护 → 项目管理,符合经典教材主线。
  2. 强调“软件工程不止写代码”,点出了课程核心。
  3. 突出 UML 建模、模型对比、测试分类等高频考点。
  4. 误区提醒切中要害,能纠正“软件工程 = 写代码”的错误认知。

不足之处:

  1. 偏理论复习提纲,实践指导较少(如测试用例设计方法、Git 协作流程未展开)。
  2. 缺少工具链建议(只提了 Draw.io 和 Git)。
  3. 没有涉及课程实际作业体系(博客园、GitHub Pages、API 调用等)

总结 有帮助,但需结合自身情况调整。