软件工程第一次作业
软件工程课程开篇随笔:自我梳理与学习展望
| 这个作业属于哪个课程 | https://edu.cnblogs.com/campus/fzu/2026-01SoftwareEngineeringandSoftwareEngineeringPractice |
|---|---|
| 这个作业要求在哪里 | https://edu.cnblogs.com/campus/fzu/2026-01SoftwareEngineeringandSoftwareEngineeringPractice/homework/16716 |
| 这个作业的目标 | 完成 HuggingFace API 调用实践、GitHub 个人主页搭建,梳理个人技能树与课程学习规划,熟悉博客园 Markdown 写作规范 |
| 学号 | 102401635 |
一、HuggingFace API 调用实践
本次调用的模型为 XLabs-AI/flux-RealismLora,这是基于 Flux 模型微调的真实感图像生成 LoRA 模型,擅长生成贴近真实世界光影与质感的高清图像。
1.1 API 密钥获取
在 Hugging Face 官网注册账号后,进入 Settings → Access Tokens 页面,创建一个具有 Read 权限的 API Token,命名为 flask-api,用于后续后端代码中的鉴权调用。
1.2 目标模型确认
在 Hugging Face 模型库中搜索并确认目标模型 XLabs-AI/flux-RealismLora,该模型基于 FLUX.1-dev 微调,专注于照片级真实感图像生成,支持 Text-to-Image 推理调用。
1.3 前后端实现代码
后端接口(Python + Flask)
使用 Flask 搭建轻量后端,封装 Hugging Face Inference API 调用逻辑,接收前端传来的提示词,调用模型生成图像并以 base64 格式返回。
from flask import Flask, request, jsonify
from huggingface_hub import InferenceClient
import base64
import io
from flask_cors import CORS
app = Flask(__name__)
CORS(app)
# 替换为自己的 HuggingFace API Token
HF_TOKEN = "hf_xxxxxxxxxxxxxxxxxxxxxxxx"
MODEL_ID = "XLabs-AI/flux-RealismLora"
client = InferenceClient(token=HF_TOKEN)
def generate_image(prompt):
try:
image = client.text_to_image(
prompt,
model=MODEL_ID
)
buf = io.BytesIO()
image.save(buf, format="PNG")
img_b64 = base64.b64encode(buf.getvalue()).decode("utf-8")
return {"code": 200, "image": img_b64}
except Exception as e:
return {"code": 500, "msg": str(e)}
@app.route("/api/generate", methods=["POST"])
def api_generate():
body = request.get_json()
prompt = body.get("prompt", "").strip()
if not prompt:
return jsonify({"code": 400, "msg": "提示词不能为空"})
return jsonify(generate_image(prompt))
if __name__ == "__main__":
print("后端服务已启动: http://127.0.0.1:5000")
app.run(host="127.0.0.1", port=5000, debug=True)
前端交互页面(HTML + JS)
单页交互界面,包含提示词输入框、生成按钮和图像展示区域,支持用户输入自定义提示词并触发生成。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>HuggingFace Flux 图像生成演示</title>
<style>
body { font-family: sans-serif; background: #f5f5f5; padding: 40px; }
.container { max-width: 800px; margin: 0 auto; background: #fff;
border-radius: 12px; padding: 40px; box-shadow: 0 2px 12px rgba(0,0,0,0.08); }
h1 { text-align: center; margin-bottom: 30px; }
textarea { width: 100%; min-height: 100px; padding: 12px; border: 1px solid #ddd;
border-radius: 8px; font-size: 14px; margin-bottom: 20px; }
button { width: 100%; padding: 14px; background: #4a90d9; color: #fff;
border: none; border-radius: 8px; font-size: 16px; cursor: pointer; }
button:hover { background: #357abd; }
.result { margin-top: 30px; }
.result img { width: 100%; border-radius: 8px; }
</style>
</head>
<body>
<div class="container">
<h1>HuggingFace Flux 图像生成演示</h1>
<textarea id="prompt" placeholder="请输入提示词...">photorealistic portrait of a young woman with freckles, soft window light, shallow depth of field, 8k, ultra detailed, cinematic lighting</textarea>
<button onclick="generate()">生成图像</button>
<div class="result">
<h2>生成结果</h2>
<img id="resultImg" style="display:none;">
</div>
</div>
<script>
async function generate() {
const prompt = document.getElementById('prompt').value.trim();
if (!prompt) { alert('请输入提示词'); return; }
const res = await fetch('http://127.0.0.1:5000/api/generate', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ prompt })
});
const data = await res.json();
if (data.code === 200) {
const img = document.getElementById('resultImg');
img.src = 'data:image/png;base64,' + data.image;
img.style.display = 'block';
} else {
alert('生成失败: ' + data.msg);
}
}
</script>
</body>
</html>
启动后端服务后,在浏览器中打开前端页面,输入提示词点击生成,即可调用 Flux 模型生成图像。
1.4 调用结果与提示词优化过程
提示词设计思路
目标是生成贴近真实世界的图像,因此提示词围绕「具体主体 + 光影质感 + 画质参数」三个维度构建,明确场景主体、环境氛围、画质要求,避免模糊笼统的描述。
-
初始提示词:
a cute rabbit sitting on the floor问题:场景过于简单,生成的图像偏卡通风格,真实感不足,毛发纹理和光影细节缺失。
-
优化后提示词:
photorealistic portrait of a young woman with freckles, soft natural window light, shallow depth of field, 8k resolution, ultra detailed skin texture, cinematic lighting, film grain补充了主体细节、光影条件、画质与质感描述,大幅提升画面真实度与氛围感。
此外,还尝试了校园场景的生成,提示词为 cinematic shot of a young asian male student walking on autumn campus path, golden hour, backpack, falling leaves, photorealistic, 8k,画面呈现出秋天校园街道的电影感氛围。
调用效果
后端控制台成功返回 200 状态码,前端页面正常加载生成的图像,画面呈现出真实的光影质感,皮肤纹理、环境光的细节都较为自然,符合真实世界的视觉效果。
1.5 调用步骤总结
- 在 Hugging Face 官网注册账号并创建访问令牌,获取 API 密钥。
- 确认目标模型
XLabs-AI/flux-RealismLora支持 Inference API 调用。 - 编写 Python 后端,封装 API 请求逻辑,提供 HTTP 接口给前端调用。
- 编写前端页面,实现提示词输入、生成交互与结果展示。
- 启动后端服务,打开前端页面,输入提示词测试生成效果,优化提示词直至达到预期。
1.6 体验与心得
通过本次 API 调用实践,熟悉了 Hugging Face 模型推理 API 的调用规范与鉴权方式,也体会到了 AI 生成模型中提示词工程的重要性——精准的场景与细节描述是输出高质量结果的关键。同时,前后端分离的简单交互实现,也让我对"模型能力封装为接口、前端负责交互"的开发模式有了更直观的理解。过程中遇到了模型排队加载、请求超时的情况,了解到了公有推理 API 的资源限制特性,后续如果需要稳定生成,可以考虑本地部署模型或者使用付费推理端点。
二、GitHub 个人主页搭建
本次选择方案一:创建个人资料自述文件,搭建 GitHub 个人主页。新建一个与 GitHub ID 同名的仓库 kwndl108,在仓库根目录的 README.md 中撰写个人介绍、技能评估、兴趣方向与未来规划。
个人主页包含以下内容:
- 自我介绍:福州大学计算机科学技术专业学生,兴趣爱好踢足球,在校认真完成各学期课程学习与实验作业。
- 专业能力与自我评估:已掌握 C/C++ 编程、计算机基础理论、Git/GitHub 基础操作,能够独立完成课程实验。
- 研究兴趣方向:希望深耕 C++ 方向,学习底层开发相关知识。
- 未来三年发展规划:【如 README 中有则保留,如没有请补充一段】
- 联系方式:GitHub、博客园链接。
三、技能树梳理与课程学习展望
3.1 技能树与技术偏好、自我评估
已具备的专业知识与能力
- C/C++ 编程能力:可以完成基础代码编写、调试,理解面向对象基础思想,能够完成课程实验、课后作业代码编写。
- 计算机基础理论:掌握计算机组成原理、操作系统等计算机专业基础课程概念。
- 版本控制工具:熟悉 Git、GitHub 基础操作,能够完成仓库创建、提交版本等基础版本控制工作。
- 课程实践能力:可以独立完成学校各学期布置的课程实验与课程作业,能按照要求完成课内编程任务。
感兴趣的技术方向
希望深耕 C++ 方向,学习底层开发相关知识。
目前欠缺的能力
- 缺少真实项目实战经验,没有独立完成完整的个人项目,代码大多局限于课内实验。
- 工程化开发能力不足,不熟悉大型项目的编码规范、项目架构设计。
- 对软件工程完整流程(需求分析、项目设计、测试、版本迭代)理解比较浅显。
- 技术知识面广度不足,很多知识点停留在课本理论,缺少落地实践。
3.2 代码量统计与规划
- 截至目前代码量:代码主要来自校内课程实验、课程作业,累计代码量约 2000 行左右,以 C/C++ 练习代码为主。
- 完成本学期课程后期望达到的代码量:希望本学期结束累计代码量达到 5000 行以上。除课内作业外,额外做小型练习项目,持续写代码积累实战经验。
3.3 本课程最期待学习的知识与收获
期待学习的知识
- 软件工程完整开发流程:需求分析、概要设计、详细设计、软件测试、项目迭代维护。
- 规范的工程化编码习惯、项目文档编写方法。
- 团队协作开发模式,如何使用工具完成多人协同开发。
- 软件项目管理、版本管理的实战方法。
希望获得的收获
- 摆脱单纯写练习题的思维,学会从工程角度思考软件项目。
- 掌握完整项目开发的思路,可以独立完成小型完整项目。
- 学会写规范的项目文档,提升团队协作能力。
- 补齐工程开发短板,为后续实习、求职打下基础。
3.4 AI 生成学习指南与分析
本次选择 AI 工具生成软件工程课程学习指南,内容如下:
软件工程课程入门学习指南
一、课程学习核心目标
软件工程不是单纯写代码,核心是学习如何高质量、可维护、可协作地开发软件。学习重点是流程、规范、文档、团队协作,而不只是语法。
二、分阶段学习计划
阶段1:理论基础(前半学期)
- 掌握软件生命周期:可行性分析、需求分析、概要设计、详细设计、编码、测试、维护。
- 理解常见开发模型:瀑布模型、敏捷开发、Scrum。
- 重点练习:需求文档、UML图、概要设计文档的阅读与编写。
阶段2:实践工具与工程规范(中期)
- 熟练 Git 版本控制,掌握分支、合并、提交规范。
- 学习编码规范,命名、注释、代码结构,避免"能跑就行"的坏习惯。
- 学习软件测试基础:单元测试、黑盒测试、白盒测试概念。
阶段3:项目实战(后半学期)
- 尽量参与小组项目,体验团队分工。
- 完整走完一个小型项目:写需求→做设计→编码→测试→写文档。
- 复盘项目遇到的问题,总结经验。
三、学习建议
- 不要只背概念,理论一定要结合小项目练习。
- 重视文档,软件工程中文档和代码同等重要。
- 多阅读优秀开源项目的结构,学习别人的工程化思路。
- 遇到问题优先思考工程层面,不只是调试代码bug。
对这份学习指南的分析
合理之处
- 指南抓住软件工程课程核心:软件工程重点是流程、文档、协作,不是单纯写代码,纠正很多同学只看重编码的误区。
- 划分学习阶段,从理论→工具→实战,学习路径逻辑通顺,贴合大学软件工程课程教学节奏。
- 重点强调 Git、文档、小组项目,正好对应我们课程的作业与实践要求,对课程学习有指导意义。
不足
- 这份指南偏向通用理论,缺少针对 C++ 方向的实践建议,没有结合我个人的技术栈。
- 缺少学习资源、练习小项目的具体例子,比较宏观。
对我个人的帮助
这份指南可以当作我的学习大纲。我会参考这份指南,在课程学习中重点重视文档编写、项目流程,同时结合我自己 C++ 的技术方向做实践。对于里面提到的不足,我会自己补充小型练习项目,把理论落地到代码实践中。
四、作业说明
本次作业全程使用 Markdown 格式编写,已将博客园编辑器切换为 Markdown 编辑器模式,提交时附上后台编辑页面截图。后续每次作业都会严格遵循要求,在正文最前置入作业信息表格,统一写作规范。


浙公网安备 33010602011771号