软件工程第一次作业
| 这个作业属于哪个课程 | 202601 软件工程 |
|---|---|
| 这个作业要求在哪里 | 2026秋软件工程个人作业(第一次) |
| 这个作业的目标 | 了解自己会什么、不会什么,完成 Hugging Face API 调用实践,搭建个人技术博客与 GitHub 主页 |
| 学号 | 102401119 |
软件工程实践第一次作业
一、Hugging Face API 调用:用 Flux 模型生成真实感图像
1.1 任务描述
调用 Hugging Face 上的 Flux Realism 模型(XLabs-AI/flux-RealismLora),生成一张贴近真实世界的图像,并结合前端实现交互生成。
1.2 准备工作
- 打开 huggingface.co 注册个人账号
- 右上角头像 → Settings → Access Tokens → Create new token,选择 Inference 类型,复制保存
hf_开头的 Token
📷 截图 1:Hugging Face Access Token 创建页面
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:前端页面完整截图(含输入框、参数、结果图和调用记录)
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 调用记录面板截图
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 |
校园小路 + 黄昏光线 + 单反参数,光影层次丰富,质感真实 |
设计心得:
- 主体越具体越好,"college student walking on campus path" 比 "a man" 能生成更多真实细节
- 光线决定氛围,golden hour 比"光线充足"更接近真实摄影的光影
- 镜头参数是真实感密码,DSLR photo + depth of field 有效抑制 AI 塑料感
- 质感词收尾,8K + ultra detailed + realistic skin texture 强化真实度
📷 截图 4:最终生成图像特写
1.7 体验与心得
- API 调用门槛低:HF 把复杂模型封装成接口,几十行代码就能调用最先进的图像生成模型,不需要本地 GPU。
- 提示词工程是真正的门槛:模型能力再强,提示词不好输出依然平庸。五要素法对真实感提升非常显著。
- 前后端分离是解决跨域的标准方案:纯前端直接调第三方 API 会遇到 CORS 限制,加一个本地后端代理就能解决,这让我理解了 Web 开发为什么普遍采用前后端分离架构。
- 排障方法论比单个知识点更有价值:过程中遇到了 CORS、SSL、网络代理、API 参数等一系列问题,逐层排查、仔细读错误信息的思路比记住某个 API 更重要。
二、GitHub 个人主页搭建
2.1 方案选择
采用方案一:创建与 GitHub ID 同名的仓库(Lqh5/Lqh5),在根目录 README.md 中撰写个人介绍。
2.2 操作步骤
- 在 GitHub 注册账号,用户名:
Lqh5 - 新建仓库,名称与用户名完全相同:
Lqh5 - 勾选 Add a README file,创建仓库
- 编辑 README.md,写入个人介绍、技能树、三年规划等内容
- 提交保存后,访问 GitHub 个人主页即可看到效果
2.2.1 README.md 核心内容
# 👋 你好,我是 Lqh5
## 📖 关于我
- 🏫 学校:福州大学
- 📚 专业:软件工程
- 💡 兴趣爱好:打篮球、看电影、写代码
## 🛠️ 技能与成果
- 编程语言:C/C++、Python、Java
- 掌握的知识:数据结构、面向对象编程、数据库基础
- 实践经历:本次完成了基于 Hugging Face API 的 Flux 图像生成应用
## 🎯 未来三年规划
- 短期:打好专业基础,积累代码量
- 中期:找实习,深入学习后端开发
- 长期:考研/就业,成为合格的软件工程师
📷 截图 5:GitHub 个人主页截图(显示 README 内容)
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 万行以上,能独立完成中小型完整项目
五、本课程最期待学习的知识与收获
最期待学习的知识
- 软件需求分析方法:怎么把模糊的想法变成清晰的规格说明
- 设计模式:常见的设计模式和适用场景
- 测试与质量保障:单元测试、集成测试、覆盖率怎么用
- 团队协作流程:Git 协作规范、敏捷开发流程
希望获得的收获
- 完整经历一次"从需求到上线"的项目开发过程
- 建立工程化思维:代码不仅要能跑,还要可维护、可协作
- 提升文档撰写和表达汇报的能力
六、AI 工具生成的软件工程学习指南
我用 DeepSeek 生成了一份软件工程课程学习指南:
软件工程课程学习指南
- 基础阶段:掌握一门编程语言 → 数据结构 → 算法设计,打好底层基础
- 设计阶段:学习面向对象设计 → 设计模式 → 架构设计,提升抽象思维
- 工程阶段:学习版本控制(Git)→ 自动化测试 → CI/CD,建立工程化思维
- 实践阶段:参与真实项目 → 团队协作 → 代码评审,积累实战经验
建议学习顺序:先把一门语言学透,再学数据结构和算法,然后接触 Git 和 Web 开发,最后通过完整项目串起所有知识。
我的分析
这份指南整体是合理的,它遵循了"基础 → 设计 → 工程 → 实践"的递进顺序,和我自己的学习节奏比较匹配。尤其是"通过完整项目串起所有知识"这个思路,和本课程的实践导向一致。
但它也有不足之处:内容偏笼统,没有提到具体的课程项目、作业节奏和时间安排,也没有针对不同方向(前端/后端/算法)给出差异化的建议。对我来说,最有价值的是它提醒了我工程化实践(测试、CI/CD)的重要性,这是我之前比较忽视的部分。

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





浙公网安备 33010602011771号