软件工程第1次作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/2026-01SoftwareEngineeringandSoftwareEngineeringPractice
这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/2026-01SoftwareEngineeringandSoftwareEngineeringPractice/homework/16716
这个作业的目标 熟悉开发社区工具、掌握云端模型API调用与全栈交互、梳理个人技术成长路径与学期规划
学号 052405110

1. 准备工作完成情况

  • 博客园设置:已开通个人博客,头像与个人主页样式已配置完毕;已将默认编辑器设置为 Markdown 模式
  • 关注与实名:已关注任课老师(黄兆武)及助教(李怡涵、焦圣蒙);已加入「202601 软件工程」班级群,并完成班内实名制绑定。
  • GitHub 准备:已完善个人 Profile 基本资料。

2. GitHub 个人主页搭建

我选用了 个人资料自述文件(Profile README) 方案进行搭建。新建了与自己 GitHub 用户名同名的特殊公开仓库,并在根目录下的 README.md 中进行了排版展示。

  • 个人主页地址https://github.com/zzzoe116/ZZZOOE116
  • 页面包含要素
    1. 个人兴趣爱好及经历简介;
    2. 个人技能清单、掌握的技术栈与自我评估;
    3. 对未来三年的学业与职业规划(目标与选择理由)。

主页展示截图:

image


3. Hugging Face API 的调用与交互式图像生成

本次实验通过调用 Hugging Face 官方的 Serverless Inference API,部署并调用了指定的 XLabs-AI/flux-RealismLora 模型,结合 Python 生态的 Gradio 框架构建了轻量级的前端交互系统,实现了从 Prompt 构思到写实图像生成的完整工程闭环。

3.1 操作步骤与实现方案

  1. 账号准备与鉴权:在 Hugging Face 官网注册账号,在个人设置(Access Tokens)中生成了具备推理调用权限(Read)的 API Key。
  2. 环境依赖搭建:本地部署 Python 运行环境,安装 huggingface_hubgradiopillow 等关键工程库。
  3. 接口封装与前端交互:通过 InferenceClient 实例向模型节点发送请求,并将推理生成的二进制图像流转换为 PIL 对象;利用 Gradio 封装出包含“输入区、生成按钮、预设示例、图像展示窗、日志回显面板”的可视化 Web 页面。

核心调用与前端交互代码:

import gradio as gr
from huggingface_hub import InferenceClient
from PIL import Image

# 1. 配置 Hugging Face API 凭据(此处已进行脱敏处理)
HF_TOKEN = "hf_********************************"
MODEL_ID = "XLabs-AI/flux-RealismLora"

client = InferenceClient(token=HF_TOKEN)

def generate_realistic_image(prompt: str):
    if not prompt or prompt.strip() == "":
        return None, "错误:提示词不能为空!"
    
    try:
        # 调用官方推理端点
        image = client.text_to_image(
            prompt=prompt,
            model=MODEL_ID
        )
        status_info = (
            f"✅ 调用成功!\n"
            f"目标模型: {MODEL_ID}\n"
            f"图像尺寸: {image.size[0]}x{image.size[1]}\n"
            f"响应状态: HTTP 200 OK"
        )
        return image, status_info

    except Exception as e:
        error_msg = str(e)
        if "503" in error_msg:
            return None, f"⚠️ 模型正在云端冷启动加载中(503),请稍等 1-2 分钟后再重试!\n详细信息: {error_msg}"
        elif "401" in error_msg:
            return None, f"❌ 认证失败(401):Token 无效或权限不足。"
        else:
            return None, f"❌ 调用出现异常:\n{error_msg}"

# 2. 构建可视化交互前端
with gr.Blocks(title="FLUX RealismLora 图像生成系统") as demo:
    gr.Markdown("# 🎨 FLUX RealismLora 真实感图像交互生成")
    gr.Markdown("软件工程个人作业:调用 Hugging Face Inference API 实现前端交互生成")
    
    with gr.Row():
        with gr.Column(scale=1):
            prompt_input = gr.Textbox(
                lines=4,
                placeholder="请输入写实风格英文提示词...",
                label="Prompt(提示词输入区)"
            )
            submit_btn = gr.Button("🚀 生成写实图像", variant="primary")
            
            gr.Examples(
                examples=[
                    ["A cinematic close-up shot of an old ceramic mug of black coffee on a weathered dark oak desk, natural morning window light, high detail, 8k photorealistic, depth of field"],
                    ["A photorealistic medium close-up photograph of a university student studying in a library, warm desk lamp lighting, fine skin texture, shot on 35mm lens, f/1.8, 8k"]
                ],
                inputs=prompt_input
            )
            
        with gr.Column(scale=1):
            image_output = gr.Image(label="生成的写实图像", type="pil")
            log_output = gr.Textbox(label="API 交互日志与状态", lines=4)
            
    submit_btn.click(
        fn=generate_realistic_image,
        inputs=prompt_input,
        outputs=[image_output, log_output]
    )

if __name__ == "__main__":
    demo.launch()

3.2 运行效果与调用成功记录

1. 前端交互界面与写实图像生成展示

在本地前端界面输入设计好的 Prompt,调用 XLabs-AI/flux-RealismLora 模型成功生成高写实度的图像:

c48cfd572dfa385ce0d2a6acccf388a4

2. API 调用成功记录与状态日志

从交互面板的响应日志可以看出,接口请求顺利返回 HTTP 200 OK,模型端点匹配正确,图像数据流解码渲染无异常:

29485576cfd908cd75b2edfcc97fb5f2

3.3 提示词(Prompt)设计思路与修改过程

为了充分激发出 flux-RealismLora 在消除“AI 塑料感”、渲染微观写实材质上的优势,提示词经过了针对性的工程迭代:

初始版本(Prompt v1):

A cup of coffee on the desk.

存在问题:描述过于单薄,模型缺乏具体的环境光照与构图引导,生成的杯体边缘过于光滑,质感扁平,具有明显的数字插画涂抹痕迹。

第二版(引入构图与基础环境):

A close-up shot of a cup of coffee on an old wooden desk, morning window light.

修改反馈:光影立体感有所提升,但物体表面微观肌理与镜头纵深依然不够细腻,AI 感仍然存在。

最终版本(Prompt v3 - 摄影级写实参数约束):

A cinematic close-up shot of an old ceramic mug of black coffee on a weathered dark oak desk, natural morning window light, high detail, 8k photorealistic, depth of field

迭代思路与优化效果:

镜头与景深控制:采用 cinematic close-up shot(电影特写)与 depth of field(浅景深),使焦点精准聚集于咖啡杯身与液面漫反射,背景自然虚化。

物理光照建模:使用 natural morning window light(自然晨曦侧光),形成了明暗交界线清晰的真实阴影与光泽过渡。

材质纹理特化:引入 old ceramic mug(带细微做旧质感的陶瓷杯)与 weathered dark oak desk(风化黑橡木纹理),成功激发了 LoRA 权重对复杂物理表面微观结构的渲染能力,生成了一张最贴近真实世界的照片级图像。

3.4 API 调用体验与心得体会

服务解耦与算力轻量化:通过 Hugging Face 提供的 Serverless 推理 API,开发者可以在本地完全不具备昂贵 GPU 显存资源(FLUX 模型通常需极高显存)的情况下,通过轻量级 SDK 迅速拉起高精度的模型服务,真正体会到了“模型即服务(MaaS)”带来的工程敏捷度。

工程鲁棒性思考:在实际调试过程中体会到,云端免费共享算力存在“冷启动等待(HTTP 503)”的现象。在工业级软件工程交付中,单纯的“调通接口”是远远不够的,前端与业务层必须设计好完备的超时重试机制、状态反馈(如 Loading 骨架屏)及异常捕获兜底方案。

4. 技能树梳理与个人成长评估

4.1 当前技能树与技术偏好

按核心维度梳理如下:

已掌握的知识与能力:

能力 A(编程语言基础):熟练掌握 C/C++ 语言核心语法与指针内存操作,具备 Python 脚本编写及基础数据处理能力。

能力 B(专业理论根基):系统学习过数据结构与基础算法,能够完成链表、栈、二叉树、图结构的设计以及常见排序、检索算法的实现。

能力 C(开发工具与环境):掌握 Git 基础命令行版本管理(commit, push, pull, 分支管理);熟悉 VS Code 开发环境调试与 Linux 常用操作指令。

技术偏好与感兴趣的方向:

对计算机系统底层架构与高性能后端服务设计抱有极大兴趣。

关注现代生成式 AI 原生应用工程(LLM / Diffusion Agent 的实际业务编排与落地)。

当前欠缺与短板:

缺乏面向大规模生产环境的架构设计能力,对常见设计模式(如工厂、观察者、单例)的实战沉淀不足。

尚未建立成熟的软件工程全生命周期观念,对自动化测试驱动开发(TDD)、CI/CD 持续集成部署的规范化实践较为欠缺。

4.2 代码量统计与课程预期

目前累计代码量:约 8,000 行(主要由大一、大二的专业基础课、算法题解及小型课设脚本构成)。

完成本学期课程后希望达到的代码量:目标新增 6,000 ~ 8,000 行,累计突破 15,000 行。相比单纯的代码行数增长,更注重代码的结构规范、模块化内聚性以及高覆盖率的单元测试代码占比。

4.3 课程期待与收获目标

在本次《软件工程》课程中,我最希望能够:

跳脱“单兵作战”的局限:真正体验工业界标准的敏捷协同开发(Scrum)、规范的代码审查(Code Review)流程与需求工程变更管理。

建立全链路工程化工程素养:不再只写局部的功能函数,而是完整走一遍从“需求分析与规格说明”、“系统架构设计”、“代码协同实现”到“自动化测试与交付”的完整软件生命周期,为未来深造与工程实践打下坚实的地基。

5. AI 生成的软件工程课程学习指南与合理性分析

5.1 AI 生成的学习指南内容

使用 AI 工具(DeepSeek)输入提示词:“请为一名计算机科学与技术专业大三学生定制一份《软件工程》课程的一学期学习指南,涵盖理论学习、工程实践与团队协同三个方面。”

AI 生成的简要指南如下:

第一阶段:理论认知与需求建模(第 1-4 周)

深入掌握瀑布模型、增量模型与敏捷开发(Scrum)的适用场景与优缺点。

掌握用户故事(User Story)与需求规格说明书编写规范,熟练使用 UML 工具(类图、时序图、用例图)表达系统设计。

第二阶段:工程规范与持续交付(第 5-10 周)

建立标准 Git Flow 分支协作规范,杜绝直接向主干分支随意推送。

学习并落地测试驱动开发(TDD),引入自动化单元测试(如 pytest / GoogleTest)及集成测试。

探索 CI/CD 工具链,实现代码提交后的自动化构建与代码风格检查。

第三阶段:团队协同与项目冲刺(第 11-16 周)

实施每日站会与看板(Kanban)任务管理,动态跟进 Sprint 迭代进度。

推行严格的 Pull Request 与 Code Review 制度,控制技术债务积累,确保团队最终交付高内聚、低耦合的可运行软件成果。

5.2 合理性分析与个人思考

合理且带来帮助之处:

结构层次清晰:指南打破了“纯背理论概念”的传统误区,将软件工程理论与工程界的实际落地工具(Git Flow、CI/CD、看板)紧密绑定,为本学期的实操指明了关键里程碑。

聚焦工程规范:指南特别突出了测试覆盖与代码审阅,这正是我个人目前技能树中最为薄弱、也最需在团队作业中补全的软硬件规范。

局限性与实际工程考量:

AI 给出的指南存在理想化假设,忽略了真实学生团队在协作初期可能遇到的“技术栈割裂”、“沟通摩擦与需求频繁变更(Scope Creep)”以及“考试周冲刺时的任务推迟”。

落地应对策略:在团队大作业开展前,不能盲目堆叠高大上的工具链,而应先在团队内部确立统一的代码格式化规约(Linter)与最小可用接口文档协议,采取“小步快跑、频繁集成”的策略,以防在最后交付期出现系统级联调崩溃。


6. 后台博文编辑页面截图

已将博客园后台默认编辑器切换为 Markdown 编辑器进行本次作业的撰写与排版:

image

posted @ 2026-09-11 17:49  zzzoeq  阅读(10)  评论(0)    收藏  举报