2026年秋软件工程第一次个人作业随笔
| 这个作业属于哪个课程 | https://edu.cnblogs.com/campus/fzu/2026-01SoftwareEngineeringandSoftwareEngineeringPractice |
|---|---|
| 这个作业要求在哪里 | https://edu.cnblogs.com/campus/fzu/2026-01SoftwareEngineeringandSoftwareEngineeringPractice/homework/16716 |
| 这个作业的目标 | 掌握HuggingFace-API调用方法,搭建Github个人主页,在博客园撰写随笔,梳理个人技术技能树,完成能力自我评估,明确软件工程课程学习预期;借助AI生成软件工程学习指南,练习Markdown写作,养成技术记录习惯 |
| 学号 | <102402138> |
一、 huggingface-API的调用
作业要求
在hugging face官网注册个人账号并获取API,调用Flux模型生成一张最贴近真实世界的图像,在调用模型的代码基础上结合前端接口,实现交互生成。
我的代码结构
hf-flux-homework/
├─ app.py # Python后端代码
└─ templates/
└─ index.html # 前端交互网页
app.py 后端完整代码
from flask import Flask, render_template, request, jsonify
from huggingface_hub import InferenceClient
import base64
from io import BytesIO
from PIL import Image
app = Flask(__name__)
HF_TOKEN = "hf_xxxxxxxxxxxxxxxxxxxx"#我的HF Token
MODEL_ID = "XLabs-AI/flux-RealismLora"
client = InferenceClient(model=MODEL_ID, token=HF_TOKEN)
@app.route("/")
def index():
# 返回前端页面
return render_template("index.html")
@app.route("/generate", methods=["POST"])
def generate():
try:
# 获取前端传来的提示词
data = request.get_json()
prompt = data.get("prompt", "")
negative_prompt = data.get("negative_prompt", "")
if not prompt:
return jsonify({"error": "提示词不能为空!"})
print(f"开始调用模型,prompt: {prompt}")
# 调用HF云端API生成图片
image = client.text_to_image(
prompt=prompt,
negative_prompt=negative_prompt,
width=1024,
height=1024
)
print("✅ API调用成功!")
# 将图片转为base64编码传回前端网页展示
buf = BytesIO()
image.save(buf, format="PNG")
img_base64 = base64.b64encode(buf.getvalue()).decode("utf-8")
return jsonify({
"success": True,
"image": img_base64
})
except Exception as e:
print(f"❌调用失败:{str(e)}")
return jsonify({"error": str(e)})
if __name__ == "__main__":
app.run(debug=True)
templates/index.html 前端网页完整代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>Flux RealismLora 写实图像生成器</title>
<style>
body {
max-width: 900px;
margin: 30px auto;
padding: 0 20px;
font-family: system-ui;
background: #f5f7fb;
}
.container {
background: #ffffff;
padding: 25px;
border-radius: 12px;
box-shadow: 0 4px 14px rgba(0, 0, 0, 0.08);
}
h1 {
text-align: center;
color: #222;
margin-bottom: 20px;
}
.tip {
color: #666;
margin: 8px 0;
font-size: 14px;
}
textarea {
width: 100%;
height: 100px;
padding: 10px;
font-size: 16px;
margin-bottom: 10px;
border: 1px solid #ddd;
border-radius: 6px;
resize: vertical;
box-sizing: border-box;
}
button {
width: 100%;
padding: 12px;
font-size: 16px;
cursor: pointer;
background: #2385bb;
color: white;
border: none;
border-radius: 6px;
font-weight: 500;
}
button:hover {
background: #1f75a3;
}
#loading {
display: none;
margin-top: 15px;
text-align: center;
color: #2385bb;
font-size: 15px;
}
#result-img {
margin-top: 20px;
max-width: 100%;
border: 1px solid #ddd;
border-radius: 8px;
}
</style>
</head>
<body>
<div class="container">
<h1>HuggingFace Flux RealismLora 写实图片生成</h1>
<div class="tip">正向提示词:描述你想生成的真实世界画面</div>
<textarea id="prompt">
photorealistic photo, a person walking along the roadside while sweeping fallen leaves, autumn street scene, yellow and brown leaves covering the sidewalk, natural sunlight, soft shadow, real street environment, candid shot, shot on Sony A7M4, 8k, ultra detailed, real material texture, depth of field, natural color
</textarea>
<div class="tip">反向提示词:排除卡通、动漫、插画、畸形、模糊等效果</div>
<textarea id="negative">
cartoon, anime, painting, drawing, illustration, deformed, blurry, low resolution, ugly, extra limbs, unrealistic pose, overexposed, bad anatomy
</textarea>
<button onclick="generateImage()">生成图片</button>
<div id="loading">正在请求API,生成图片,请等待20~40秒...</div>
<img id="result-img">
</div>
<script>
async function generateImage() {
const prompt = document.getElementById("prompt").value.trim();
const neg = document.getElementById("negative").value.trim();
const loading = document.getElementById("loading");
const imgDom = document.getElementById("result-img");
if (!prompt) {
alert("提示词不能为空!");
return;
}
loading.style.display = "block";
imgDom.src = "";
try {
const resp = await fetch("/generate", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
prompt: prompt,
negative_prompt: neg
})
});
const res = await resp.json();
loading.style.display = "none";
if (res.success) {
imgDom.src = `data:image/png;base64,${res.image}`;
} else {
alert("出错:" + res.error);
}
} catch (err) {
loading.style.display = "none";
alert("网络异常:" + err);
}
}
</script>
</body>
</html>
API成功调用的记录

前端页面生成图像的截图


最后生成的图像

提示词设计思路和修改过程
因为作业要求是一张最贴近真实世界的图像
所以我采取的提示词是:一个人走在马路边扫落叶,并强化了真实摄影质感。
修改过程中加入加入了更贴近真实世界的关键词:
photorealistic photo
autumn street scene
natural sunlight
soft shadow
real street environment
candid shot
real material texture
depth of field
以及反向提示词
cartoon, anime, painting, drawing, illustration, deformed, blurry, low resolution, ugly, extra limbs, unrealistic pose, overexposed, bad anatomy
API 调用体验与心得
本次任务使用 HuggingFace 云端推理 API 调用 Flux 写实模型,不需要本地部署大模型,对计算机硬件门槛低,可以快速验证 AI 图像模型效果。
API 调用存在一定等待时间,Flux 模型计算量大,单次生成图片大约需要 30 秒,免费 API 同时存在调用频率限制,短时间多次请求会触发限流。
提示词工程是图像生成的关键,想要贴近真实世界,不能只简单描述主体,还需要补充光线、相机、材质细节;反向提示词用来剔除错误画风和畸形物体。
本项目采用前后端分离思想:前端负责用户交互,接收输入提示词;后端作为中间层,调用第三方 HuggingFace API,把 AI 生成图片返回前端。完整流程演示了软件从构思需求、设计接口、编码实现、调优测试的完整落地过程。
二、Github个人主页搭建
个人主页建设,我两种方法都尝试了
截图如下
1.https://github.com/Xun1342/Xun1342

三、软件工程随笔
一、技能树梳理与自我评估
✅ 已具备的专业知识与能力
1.已掌握基础C语言,python,java三门编程语言,学习了计算机网络,操作系统等专业课程
2.使用AI大模型辅助编程
🎯 感兴趣的技术方向
AI大模型应用开发、数据采集与大数据分析技术。
❌ 还欠缺的能力
- 软件工程体系知识:不熟悉软件需求分析、UML建模、软件测试、项目管理等工程化流程。
- Web后端进阶能力:数据库、接口规范、异常处理、并发开发经验不足。
- 前端开发:CSS、JavaScript复杂页面交互能力薄弱。
- 团队协作开发:缺少多人Git协作、代码评审、大型项目文档编写经验。
二、代码量统计与学期目标
- 当前累计代码量:约3000行
- 本学期课程结束希望达到代码量:6000行。
三、本课程最期待学习的知识与希望收获
最期待学习的知识:
- 软件完整开发全流程:需求分析、系统设计、编码实现、软件测试、交付维护。
- 团队项目协作方法:Git多人协作、任务拆解、项目沟通。
希望获得的收获:
- 掌握软件工程方法论,能够独立把一个想法落地成完整软件项目。
- 提升团队协作能力,适应小组项目开发模式。
- 学会软件测试方法,减少程序BUG,提升代码质量。
- 坚持撰写技术博客,持续记录学习过程。
四、AI生成软件工程课程学习指南以及合理性分析
本次选用AI工具:DeepSeek,让它生成一份软件工程课程学习指南。
AI生成:软件工程课程学习指南
提示词:帮我生成一份简要的软件工程课程学习指南,需要发布在博客园随笔# 软件工程课程学习指南(简要版)
软件工程 = 工程化方法 + 团队协作 + 持续交付。
核心不是背概念,而是把“需求—设计—实现—测试—维护”串起来。
1. 课程主线
需求分析 → 软件设计 → 编码实现 → 测试验证 → 交付维护
贯穿:过程模型、项目管理、质量保证、配置管理、团队协作。
2. 核心知识模块
| 模块 | 重点 | 产出物 |
|---|---|---|
| 概述与过程 | 软件危机、生命周期、瀑布/敏捷/Scrum/DevOps | 过程选择说明 |
| 需求工程 | 获取、分析、规格、确认、变更 | 用例图、SRS |
| 软件设计 | 架构、模块、耦合/内聚、设计模式、UML | 架构图、类图、时序图 |
| 实现 | 编码规范、版本控制、代码评审、重构 | Git 仓库、可运行代码 |
| 测试 | 单元/集成/系统/验收、黑盒/白盒、TDD | 测试用例、测试报告 |
| 项目管理 | 进度、成本、风险、配置、质量 | 计划、看板、风险清单 |
| 维护与演化 | 纠错、适应、完善、预防 | 变更记录、复盘 |
3. 推荐学习节奏
- 第 1—2 周:软件工程概念、过程模型,理解瀑布与敏捷差异。
- 第 3—4 周:需求工程,练用例图、用户故事、需求规格说明书。
- 第 5—6 周:软件设计,练 UML、架构图、模块划分。
- 第 7—8 周:编码、Git、代码评审、单元测试。
- 第 9—10 周:项目管理、质量保证、CI/CD。
- 第 11—12 周:综合项目、答辩、复习。
4. 学习方法
- 项目驱动:选一个 3—5 人能做完的小系统,如博客、图书管理、选课系统。
- 画图表达:用例图、类图、时序图、ER 图、架构图,比死记概念更有效。
- 文档精简:需求、设计、测试文档写关键内容,避免形式主义。
- 工具上手:Git/GitHub、PlantUML、draw.io、Jira/Trello、JUnit、Postman、GitHub Actions。
- 迭代复盘:每 1—2 周迭代一次,演示可用软件,记录问题和改进。
5. 常见误区
- 只背理论,不参与项目。
- 先写代码,后补需求,导致返工。
- 测试留到最后,缺陷修复成本高。
- 不用版本控制,代码丢失、冲突难解。
- 文档只求模板完整,不解决沟通问题。
- 把敏捷当成“不写文档、不计划”。
6. 考试复习要点
- 会解释:软件生命周期、耦合与内聚、验证与确认、黑盒与白盒。
- 会对比:瀑布 vs 敏捷、Scrum vs XP、单元测试 vs 集成测试。
- 会画图:用例图、类图、时序图、状态图。
- 会设计:根据需求写测试用例,根据模块画架构图。
- 会举例:用课程项目说明需求变更、风险管理、版本控制。
7. 推荐资源
- 教材:《软件工程:实践者之路》《软件工程导论》
- 拓展:《人月神话》《代码大全》《重构》《敏捷软件开发》
- 工具:Git、PlantUML、draw.io、JUnit、Postman、Docker、GitHub Actions
8. 一句话总结
软件工程课程最好的学法:用一个小项目贯穿始终,把需求、设计、编码、测试、协作和复盘都做一遍。
9.个人分析
这份指南很清晰,有用,让我对软件工程课程学习有了大的轮廓,让我能按图索骥。
后台博文编辑页面的截图



浙公网安备 33010602011771号