软件工程第一次作业

这个作业属于哪个课程 202601 软件工程
这个作业要求在哪里 2026秋软件工程个人作业(第一次)
这个作业的目标 了解自己会什么、不会什么,完成 Hugging Face API 调用实践,搭建个人技术博客与 GitHub 主页
学号 102401119

软件工程实践第一次作业

一、Hugging Face API 调用:用 Flux 模型生成真实感图像

1.1 任务描述

调用 Hugging Face 上的 Flux Realism 模型(XLabs-AI/flux-RealismLora),生成一张贴近真实世界的图像,并结合前端实现交互生成。

1.2 准备工作

  1. 打开 huggingface.co 注册个人账号
  2. 右上角头像 → Settings → Access Tokens → Create new token,选择 Inference 类型,复制保存 hf_ 开头的 Token

📷 截图 1:Hugging Face Access Token 创建页面
cda092fe7a3271438695a3b5eb818804

1.3 技术方案

flux-RealismLora 是一个 LoRA 微调模型,不能单独运行,需要挂载在 Flux.1-dev 基础模型上。由于 HF 官方推理 API 已弃用 FLUX.1 系列,最终采用 Hugging Face Space 社区部署的应用(DamarJati/FLUX.1-RealismLora),通过 Python gradio_client 调用。

采用前后端分离架构:前端 HTML 提供交互界面,后端 Python 做代理调用 HF Space API(解决浏览器跨域问题)。

1.4 操作步骤

步骤 1:在 Hugging Face 注册账号并获取 Access Token

步骤 2:编写后端代理脚本(server.py),使用 gradio_client 连接 HF Space

步骤 3:编写前端页面(flux-realism-generator.html),包含提示词输入、参数调节、结果展示

步骤 4:启动后端服务,浏览器打开前端页面,填入 Token,输入提示词,点击生成

步骤 5:等待 30~60 秒(ZeroGPU 排队 + 模型推理),查看生成结果

1.4.1 后端核心代码(server.py)

from gradio_client import Client
import base64
import http.server
import json
import os

# 连接 HF Space(匿名访问)
client = Client("DamarJati/FLUX.1-RealismLora")

# 调用 /run_lora 接口
result = client.predict(
    prompt,          # 提示词
    cfg_scale,       # 引导系数 3.5
    steps,           # 采样步数 28
    True,            # 随机种子
    0,               # 种子值
    width,           # 宽度 1024
    height,          # 高度 1024
    lora_scale,      # LoRA 强度 1.0
    api_name="/run_lora"
)

# result 格式: (图片路径, 随机种子)
image_path = result[0]
used_seed = result[1]

# 读取图片转 base64 返回给前端
with open(image_path, 'rb') as f:
    img_base64 = base64.b64encode(f.read()).decode('utf-8')

1.4.2 前端核心代码(JavaScript)

// 调用本地后端 API
const response = await fetch('/generate', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
        hf_token: token,
        prompt: promptText,
        cfg_scale: parseFloat(cfg.value),
        steps: parseInt(steps.value),
        width: parseInt(width.value),
        height: parseInt(height.value),
        lora_scale: parseFloat(loraScale.value)
    })
});

const result = await response.json();

// 显示生成的图片
const img = document.createElement('img');
img.src = `data:image/png;base64,${result.image_base64}`;
imageContainer.appendChild(img);

📷 截图 2:前端页面完整截图(含输入框、参数、结果图和调用记录)
0b095c6faacc570a476918738039ffae

1.5 API 调用成功记录

字段
目标服务 DamarJati/FLUX.1-RealismLora (HF Space)
模型 XLabs-AI/flux-RealismLora
提示词 photograph of a college student walking on campus path, golden hour, natural soft lighting, realistic skin texture, DSLR photo, 8K, ultra detailed, sharp focus, depth of field
图片尺寸 1024 × 1024
采样步数 28
引导系数 3.5
实际随机种子 188375083
调用时间 2026-09-10 14:55:09
耗时 33.88 秒

📷 截图 3:API 调用记录面板截图
71d586baa38f80e824b2b7e2aba41bf4

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

一条高质量的写实风格提示词包含五个要素:主体 + 场景 + 光线 + 镜头参数 + 质感词

迭代过程:

版本 提示词 效果与问题
初版 a man 画面笼统,场景、光线都不明确,缺乏氛围感
最终版 photograph of a college student walking on campus path, golden hour, natural soft lighting, realistic skin texture, DSLR photo, 8K, ultra detailed, sharp focus, depth of field 校园小路 + 黄昏光线 + 单反参数,光影层次丰富,质感真实

设计心得:

  1. 主体越具体越好,"college student walking on campus path" 比 "a man" 能生成更多真实细节
  2. 光线决定氛围,golden hour 比"光线充足"更接近真实摄影的光影
  3. 镜头参数是真实感密码,DSLR photo + depth of field 有效抑制 AI 塑料感
  4. 质感词收尾,8K + ultra detailed + realistic skin texture 强化真实度

📷 截图 4:最终生成图像特写
image

1.7 体验与心得

  1. API 调用门槛低:HF 把复杂模型封装成接口,几十行代码就能调用最先进的图像生成模型,不需要本地 GPU。
  2. 提示词工程是真正的门槛:模型能力再强,提示词不好输出依然平庸。五要素法对真实感提升非常显著。
  3. 前后端分离是解决跨域的标准方案:纯前端直接调第三方 API 会遇到 CORS 限制,加一个本地后端代理就能解决,这让我理解了 Web 开发为什么普遍采用前后端分离架构。
  4. 排障方法论比单个知识点更有价值:过程中遇到了 CORS、SSL、网络代理、API 参数等一系列问题,逐层排查、仔细读错误信息的思路比记住某个 API 更重要。

二、GitHub 个人主页搭建

2.1 方案选择

采用方案一:创建与 GitHub ID 同名的仓库(Lqh5/Lqh5),在根目录 README.md 中撰写个人介绍。

2.2 操作步骤

  1. 在 GitHub 注册账号,用户名:Lqh5
  2. 新建仓库,名称与用户名完全相同:Lqh5
  3. 勾选 Add a README file,创建仓库
  4. 编辑 README.md,写入个人介绍、技能树、三年规划等内容
  5. 提交保存后,访问 GitHub 个人主页即可看到效果

2.2.1 README.md 核心内容

# 👋 你好,我是 Lqh5

## 📖 关于我
- 🏫 学校:福州大学
- 📚 专业:软件工程
- 💡 兴趣爱好:打篮球、看电影、写代码

## 🛠️ 技能与成果
- 编程语言:C/C++、Python、Java
- 掌握的知识:数据结构、面向对象编程、数据库基础
- 实践经历:本次完成了基于 Hugging Face API 的 Flux 图像生成应用

## 🎯 未来三年规划
- 短期:打好专业基础,积累代码量
- 中期:找实习,深入学习后端开发
- 长期:考研/就业,成为合格的软件工程师

📷 截图 5:GitHub 个人主页截图(显示 README 内容)
0a655e1c3f925464632063e615eebc6b

2.3 个人主页内容

主页包含三个部分:

  • 关于我:学校、专业、兴趣爱好
  • 技能与成果:已掌握的编程语言、实践经历、自我评估
  • 未来三年规划:短期、中期、长期目标

GitHub 主页地址:https://github.com/Lqh5


三、技能树与自我评估

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

能力 A:程序设计基础

  • 掌握 C/C++、Python 基本语法,能编写中等规模程序
  • 掌握常见数据结构(数组、链表、栈、队列、树),理解基本算法思想
  • 数据结构课程成绩良好,具备 LeetCode 简单题解题能力

能力 B:面向对象与数据库

  • 学习过 Java 面向对象编程,理解类、继承、多态的概念
  • 了解 MySQL 基本操作(增删改查),能设计简单的数据库表

能力 C:Web 开发入门

  • 了解 HTML/CSS/JavaScript 基础,能编写简单的静态页面
  • 本次作业完成了基于 Hugging Face API 的图像生成 Web 应用(前端 + 后端)

3.2 对哪些技术方向感兴趣

  • AI 应用开发:对调用大模型 API、做 AI 小工具很感兴趣
  • Web 全栈开发:喜欢从前端到后端完整做一个产品的感觉
  • 软件工程方法:想学习怎么把一个项目从需求做到上线

3.3 还欠缺的能力

  • 代码量不足,实际项目经验少
  • 不了解单元测试、代码评审等工程化实践
  • 团队协作经验少,Git 协作流程不熟练
  • 对操作系统、计算机网络等底层知识掌握不深

四、代码量统计与目标

  • 截至目前代码量:约 3000 行
    • C/C++ 课程作业:约 1500 行
    • Python 脚本与小项目:约 800 行
    • 其他课程作业:约 700 行
  • 本学期课程后期望达到:8000~10000 行
  • 三年后目标:2 万行以上,能独立完成中小型完整项目

五、本课程最期待学习的知识与收获

最期待学习的知识

  1. 软件需求分析方法:怎么把模糊的想法变成清晰的规格说明
  2. 设计模式:常见的设计模式和适用场景
  3. 测试与质量保障:单元测试、集成测试、覆盖率怎么用
  4. 团队协作流程:Git 协作规范、敏捷开发流程

希望获得的收获

  • 完整经历一次"从需求到上线"的项目开发过程
  • 建立工程化思维:代码不仅要能跑,还要可维护、可协作
  • 提升文档撰写和表达汇报的能力

六、AI 工具生成的软件工程学习指南

我用 DeepSeek 生成了一份软件工程课程学习指南:

软件工程课程学习指南

  1. 基础阶段:掌握一门编程语言 → 数据结构 → 算法设计,打好底层基础
  2. 设计阶段:学习面向对象设计 → 设计模式 → 架构设计,提升抽象思维
  3. 工程阶段:学习版本控制(Git)→ 自动化测试 → CI/CD,建立工程化思维
  4. 实践阶段:参与真实项目 → 团队协作 → 代码评审,积累实战经验

建议学习顺序:先把一门语言学透,再学数据结构和算法,然后接触 Git 和 Web 开发,最后通过完整项目串起所有知识。

我的分析

这份指南整体是合理的,它遵循了"基础 → 设计 → 工程 → 实践"的递进顺序,和我自己的学习节奏比较匹配。尤其是"通过完整项目串起所有知识"这个思路,和本课程的实践导向一致。

但它也有不足之处:内容偏笼统,没有提到具体的课程项目、作业节奏和时间安排,也没有针对不同方向(前端/后端/算法)给出差异化的建议。对我来说,最有价值的是它提醒了我工程化实践(测试、CI/CD)的重要性,这是我之前比较忽视的部分。

a7d9fde6e8906d1e4cc7b5dca9556af7


七、总结

第一次软件工程实践作业,从注册账号到完成 API 调用、搭建 GitHub 主页、整理博客随笔,完整走了一遍技术博客写作的流程。最大的感受是:真正的门槛不是调用 API,而是把自己的思路和成果清晰地表达出来。写博客的过程也是梳理知识的过程,把做过的事情用文字讲清楚,比单纯做出来更有价值。

posted @ 2026-09-10 16:16  LLLqh  阅读(12)  评论(0)    收藏  举报