| 这个作业属于哪个课程 | H202601软件工程与软件工程实践 |
|---|---|
| 这个作业要求在哪里 | 第一次个人作业要求 |
| 这个作业的目标 | 通过搭建个人博客与 GitHub 主页、调用 HuggingFace API 生成图像,初步体验软件工程实践中的工具链使用与大模型能力 |
| 学号 | 052404147 |
软件工程实践第一次作业——从环境搭建到工具链的完整实践
本次作业我完整走了一遍"注册账号 → 搭建博客与主页 → 调用大模型 API → 生成图像 → 复盘技能树"的流程。下面按五个部分记录我的完成过程与思考。
一、基础筹备与环境搭建
1.1 注册 GitHub 账号
我在 GitHub 官网注册了账号,用户名 QG-LHZ,并完善了头像、昵称(枪的王道)、简介(热爱编程,打羽毛球)、学校(福州大学)等个人信息。GitHub 后续既用于搭建个人主页,也是我今后管理代码仓库的核心工具。
1.2 注册博客园账号并开通博客
-
在博客园注册账号后,申请开通博客(约 15 分钟审核通过)。
-
完善了昵称(实名"刘怀正")、头像等个人信息,并设置了博客页面样式。
-
关注了任课老师 黄兆武、助教 李怡涵、焦圣蒙 的博客。
-
加入班级:H202601软件工程与软件工程实践,使用实名,确认自己出现在班级成员列表中。
1.3 注册 HuggingFace 账号并获取 Access Token
- 在 Hugging Face 官网注册账号,用户名 liuhaizheng。

- 进入 Settings → Access Tokens → Create new token,创建一个名为
flux hw的 token,权限选择 Read(遵循最小权限原则,只读即可满足调用模型的需求,也更安全)。
1.4 本地开发环境
-
开发环境:PyCharm(Python)
-
依赖包:
flask、huggingface_hub、pillow -
安装命令:
pip install flask huggingface_hub pillow
二、硬核实操——Hugging Face API 调用
2.1 模型简介
我使用的是 XLabs-AI/flux-RealismLora 模型,这是一个基于 Flux 的真实感 LoRA 模型,专门用于增强图像的照片级真实感。本部分目标:通过 HuggingFace 推理 API 调用该模型,并结合前端接口实现交互式生成。
2.2 后端代码(app.py)
采用 Flask 搭建后端,接收前端提示词并调用 HuggingFace 推理 API 生成图像:
import os
import io
from flask import Flask, render_template, request, send_file
from huggingface_hub import InferenceClient
app = Flask(__name__)
# HuggingFace Token(从环境变量读取,避免明文泄露)
HF_TOKEN = os.environ.get("HF_TOKEN", "hf_你的token")
# 初始化推理客户端,指定作业要求的 Flux RealismLora 模型
client = InferenceClient(model="XLabs-AI/flux-RealismLora", token=HF_TOKEN)
@app.route("/")
def index():
"""前端首页"""
return render_template("index.html")
@app.route("/generate", methods=["POST"])
def generate():
"""接收前端提示词,调用 HuggingFace 推理 API 生成图像"""
prompt = request.form.get("prompt", "").strip()
if not prompt:
return "提示词不能为空!", 400
try:
# text_to_image:HuggingFace 推理 API 的文生图接口
image = client.text_to_image(prompt=prompt)
# 把生成的图像写入内存,返回给前端显示
buf = io.BytesIO()
image.save(buf, format="PNG")
buf.seek(0)
return send_file(buf, mimetype="image/png")
except Exception as err:
return f"生成失败:{err}", 500
if __name__ == "__main__":
app.run(debug=True, port=5000)
2.3 前端代码(templates/index.html)
前端提供一个输入提示词的交互页面,通过 fetch 把提示词以 POST 方式发给后端 /generate 接口,再以 Blob 形式接收生成结果并展示:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>Flux 真实感图像生成</title>
</head>
<body>
<h1>Flux 真实感图像生成</h1>
<p>模型:XLabs-AI/flux-RealismLora</p>
<textarea id="prompt" placeholder="请输入图片描述(提示词)">
A photorealistic portrait of a Chinese college student reading in a library, soft natural light, warm tone, 4k, highly detailed
</textarea>
<button id="btn" onclick="generate()">生成图像</button>
<div id="status"></div>
<img id="result" alt="生成结果">
<script>
async function generate() {
const prompt = document.getElementById('prompt').value.trim();
const status = document.getElementById('status');
const btn = document.getElementById('btn');
const img = document.getElementById('result');
status.textContent = '正在生成,请稍候...';
btn.disabled = true;
img.style.display = 'none';
const formData = new FormData();
formData.append('prompt', prompt);
try {
const res = await fetch('/generate', { method: 'POST', body: formData });
if (!res.ok) { status.textContent = await res.text(); return; }
const blob = await res.blob();
img.src = URL.createObjectURL(blob);
img.style.display = 'block';
status.textContent = '生成成功!';
} catch (err) {
status.textContent = '请求出错:' + err;
} finally {
btn.disabled = false;
}
}
</script>
</body>
</html>
2.4 运行与调用成功记录
在 PyCharm 中运行 app.py,控制台日志如下,说明 Flask 服务成功启动并正确响应了请求:
* Serving Flask app 'app'
* Debug mode: on
* Running on http://127.0.0.1:5000
127.0.0.1 - - [11/Sep/2026 21:31:49] "GET / HTTP/1.1" 200 -

浏览器打开 < http://127.0.0.1:5000 ,输入提示词后点击"生成图像",页面显示"生成成功!"并返回生成的图像,说明> API 调用链路(前端 → Flask 后端 → HuggingFace 推理 API → 图像回传)整体打通。


最终生成的图像如下——一位在图书馆阅读的中国大学生,柔和自然光、暖色调,具有较高的照片级真实感:

2.5 提示词设计思路与修改过程
最终使用的提示词为:
A photorealistic portrait of a Chinese college student reading in a library, soft natural light, warm tone, 4k, highly detailed
我的设计思路是把提示词拆成几个要素,逐个补充:
| 要素 | 内容 | 作用 |
|---|---|---|
| 风格 | photorealistic portrait | 指定照片级真实感肖像 |
| 主体 | a Chinese college student reading | 明确人物身份与动作 |
| 场景 | in a library | 明确环境背景 |
| 光线 | soft natural light, warm tone | 营造柔和、温暖的氛围 |
| 画质 | 4k, highly detailed | 提升清晰度与细节 |
修改过程:一开始我倾向于只写一句简单描述(如 "a student reading"),但那样模型会给出内容随机、细节粗糙的结果。于是我逐步补充了"人物身份""具体场景""光线氛围"和"画质要求"这几个维度,最终才得到这张真实感较强、符合预期的图像。这让我直观体会到:对这类真实感文生图模型,提示词的具体程度直接决定生成质量。
2.6 体验与心得
- 门槛比想象低:借助
huggingface_hub的InferenceClient,几行代码就能调用大模型,把复杂的模型推理封装成了简单的函数调用。 - 提示词是一种"新语言":同一模型的输出质量差异,很大程度取决于提示词写得是否具体、结构是否完整。
- 安全意识:学会了用 Access Token 做身份认证,并意识到 token 不能明文提交、应使用环境变量管理。
- 前后端协同:这次实践把"后端调用 AI 能力"与"前端交互"结合起来,让我感受到工程化地把大模型能力产品化的完整链路。
三、个人名片——GitHub 个人主页搭建
3.1 方案选择
我选择了**创建个人资料自述文件(README)**的方案:新建一个与 GitHub ID 同名的仓库,在仓库根目录的 README 中撰写个人介绍。
我的 GitHub 用户名为 QG-LHZ,因此创建了同名仓库 QG-LHZ/QG-LHZ。GitHub 会把这个仓库的 README 自动展示在我的个人主页上。
3.2 主页内容
README 中包含了以下内容:
-
自我介绍:姓名、学校、专业、兴趣爱好;并附上我担任的学生职务(学院学习部部长、校委会党服副部长、班级文体委员)。
-
技能与成果:以表格列出我掌握的编程语言、后端、前端、数据/AI 与工具。
-
自我评估:梳理已掌握的专业知识与能力、感兴趣的技术方向、最希望学习的知识。
-
未来三年发展规划:明确目标为考研,并说明理由与分阶段规划。
主页展示效果如下:

个人主页链接:https://github.com/QG-LHZ
四、自我审视——技能树与课程规划
4.1 技能树与技术偏好
已具备的专业知识与能力:
-
能力 A:Python 编程与 Web 基础——能用 Python 编写脚本,使用 Flask 搭建 Web 服务,使用 urllib / requests 进行网络请求,理解 HTTP 协议中 GET、POST 等方法。
-
能力 B:版本控制与协作——熟悉 Git 与 GitHub 的基本操作,能用它管理自己的代码仓库。
-
能力 C:数据与机器学习基础——作为数据科学与大数据专业学生,具备一定的数据处理和机器学习基础,了解大模型 API 的基本调用方式。
感兴趣的技术方向:后端开发与系统架构、人工智能/机器学习与大模型应用开发、Web 前端与移动端。
还欠缺的能力:较大规模项目的工程化组织与设计能力不足;数据库、微服务、容器化等后端进阶技术掌握不够;深度学习与模型微调实操经验较少;高质量代码规范与单元测试习惯尚未养成。
4.2 代码量说明
-
截至目前的代码量:约 5000 行
-
本学期课程结束后希望达到的代码量:10000 行以上
我希望通过本学期的课程项目与日常练习,把代码量提升到 10000 行以上,同时重点补足工程能力和代码规范。
4.3 最期待的课程知识与收获
-
最期待学习的知识:软件工程的全流程方法,包括需求分析、系统设计、测试与项目管理;以及如何把大模型等新工具融入开发流程。
-
希望获得的收获:
- 建立工程化交付的意识,而不只是"会写代码";
- 掌握 Git / 团队协作等真实工作流;
- 通过完整项目提升独立解决问题的能力。
4.4 AI 生成的学习指南及分析
以下是我让 DeepSeek 生成的软件工程课程学习指南:
一、学习目标
软件工程的核心不在于会写几行代码,而在于用工程化的方法系统、可靠地交付软件。二、核心知识体系
- 软件开发流程:需求分析、设计、编码、测试、维护
- 经典开发模型:瀑布模型、迭代模型、敏捷开发(Scrum)
- 需求工程:如何挖掘、分析和管理需求
- 系统设计:架构设计、模块划分、设计模式
- 软件测试:单元测试、集成测试、系统测试
- 项目管理:团队协作、版本控制(Git)、持续集成
三、实践建议
- 用 Git / GitHub 管理每一个练习项目
- 学习写单元测试,养成"先测试后编码"的习惯
- 参与一个真实的小项目,体会团队协作
- 多阅读优秀开源项目的代码
四、学习资源
教材:《软件工程——实践者的研究方法》
Git 官方文档、GitHub
敏捷开发相关书籍与文章
我对这份指南的分析:
- 合理之处:抓住了软件工程的本质是"工程化交付",而不是单纯写代码;覆盖了需求、设计、编码、测试、维护的完整生命周期;给出的实践建议(用 Git、写单元测试、参与项目、读开源代码)具体且可操作。
- 不足之处:内容偏宏观,缺少针对本学期课程的具体节奏安排;没有结合我个人的专业背景给出差异化建议;学习资源偏传统,较少提及大模型辅助开发等新工具。
结论:这份指南能帮我建立软件工程的整体认知框架,但具体落地还需要结合课程进度和自己的薄弱项来调整。我会把"用 Git 管理项目""先测试后编码"等建议落实到本次及后续作业中。
五、格式规范与提交
5.1 使用 Markdown 编写
本次作业使用 Markdown 编写。我把博客园的编辑器切换成了 Markdown 编辑器,正文的表格、代码块、列表、图片均通过 Markdown 语法呈现。
5.2 开头信息表格
按照作业要求,我在随笔最前面加上了包含"课程链接、作业要求链接、作业目标、学号"的信息表格(见本文开头)。
5.3 后台编辑页面截图
