在实践中认识自己,在项目中理解软件工程——软件工程实践第一次个人作业
| 这个作业属于哪个课程 | <H202601软件工程与软件工程实践> |
|---|---|
| 这个作业要求在哪里 | <2026秋软件工程个人作业(第一次)> |
| 这个作业的目标 | 通过本次作业梳理自己的专业技能、技术兴趣与不足,了解软件工程课程的学习方向;实践 Hugging Face API 与 AI 图像生成,并结合前端完成交互式应用;搭建 GitHub 个人主页,培养项目展示与版本管理意识;同时通过 AI 学习指南和三年规划明确后续学习目标。 |
| 学号 | 102401125 |
在实践中认识自己,在项目中理解软件工程——软件工程实践第一次个人作业
一、自我评估
在进行后续作业汇报之前,我先把自我评估,或者说自我概述的随笔部分完成,方便老师和助教学长学姐认识我。有一部分写课程收获体会的,我会放在文章最末尾和心得体会一起写,在此恳请您仔细聆听我的心声。
1.自我介绍
我是罗宇泽,福州大学计算机科学与技术的大三学生一枚,目前专业绩点保持第一。学习的闲暇之余喜欢搞点兴趣爱好,比如跑步、软件应用开发、打游戏。打的游戏也都是冷门小众,比如说红警、APEX 和 Minecraft 等等。目前未来规划是以保研升学为目标。
2.当前技能树与自我评估
- 编程语言基础:熟练掌握 C、C++、Python 基础语法,能够独立完成简单算法题,了解基础的数据结构,如数组、链表、栈与队列等等等。
- 计算机基础课程:学习过计算机网络、计算机组成原理,了解了一些基础概念。
- 项目实操能力:做过少量小型实战项目,能够使用PyCharm等开发工具编写、调试代码等。
- 文档能力:可以使用 Markdown 编写笔记、博客文档,具备基础的文字总结能力。
3.感兴趣的技术方向
我目前对计算机视觉、AI大模型微调等方向比较感兴趣,希望后续可以做一些结合大模型的项目,如果能将其投入生活中进行实际运用就更好了。(目前已经在做了,是与图像识别相关)
4.目前欠缺的能力
- 缺乏大型项目开发经验,不熟悉团队协作开发流程,目前开发都是一个人在做;
- 代码架构设计能力薄弱,写代码偏向实现功能,缺少规范化、可维护的编码思维;
- 对于项目文档撰写、软件交付流程不够熟悉。
- 对于大语言模型的使用还有agent的开发运用还是不够熟练。
5.代码量现状与学期目标
- 当前累计代码量:大约 3500‑4500 行,其实没办法统计一个确切的数字,这是包括了包含课程习题、算法练习、小型实验项目等,例如以前程序设计课、算法课要完成的课后作业,还有自己在洛谷和CF额外找的算法题等等。
- 本学期课程结束后目标代码量:希望累计达到 8000‑10000 行,主要来自软件工程课程项目、课后练习、自主拓展小项目等。
6.AI生成软件工程学习指南以及个人分析
本次选用AI工具:DeepSeek,生成得到的学习指南如下:
AI生成的软件工程课程学习指南
- 课前预习:每次上课前通读教材对应章节,提前了解瀑布模型、敏捷开发、UML图等核心概念,标记不懂的知识点。
- 课堂学习:认真听讲,重点弄懂软件生命周期各个阶段的任务;主动练习绘制用例图、类图、时序图。
- 课后实操:不要死背理论知识,以小组形式完成课程大作业。完整走完需求调研、方案设计、编码实现、测试交付全流程。
- 工具练习:熟练掌握Git、Visio、项目原型工具,养成版本提交的好习惯。
- 复盘总结:项目完成后复盘开发过程遇到的问题,记录团队矛盾、延期风险等工程中真实会遇到的问题,整理成博客笔记。
7.指南合理性与帮助分析
- 合理性评价:这份指南整体较为合理。它平衡了理论知识学习与项目实操,抓住软件工程课程最核心的重点——团队项目实践,同时给出了UML绘图、Git工具等非常贴合课程要求的学习任务。
但是AI指南也存在一定不足,例如没有区分学习难点的优先级,缺少针对项目延期、组员分工矛盾这类实际问题的解决办法,也没有给出阶段性的时间规划。 - 对本人的帮助:这份指南对我很有参考价值,可以用来规划我之后小组项目的进度。我可以参考它的建议,课前提前预习UML相关知识,项目开发过程中坚持使用Git管理代码,项目结束后及时复盘总结,把项目经验记录到个人博客当中。
二、我的博客园展示
如下所示,我是一只喜欢捧腹大笑的奶龙。老师和助教的博客我已经关注了。


二、huggingface-API的调用
终于到了huggingface-API调用的环节,为了整这个花了不少力气。下面我先展示API调用以及前端页面最终生成图像的截图,然后再按照时间顺序展示我整个过程是如何操作的,以及最后的心得体会。
1.结果展示
如图所示,这个前端是gpt写的,看起来感觉还蛮不错的。因为网页太大了我分成了两次截。为了证明确实是自己做的,上面的标签页和下面的任务栏我都没有去掉。如果您看不清,可以尝试Ctrl+滚轮放大浏览器页面,我保证我的图片一点也不糊。



2.具体配置
| 项目内容 | 配置 |
|---|---|
| 操作系统 | Windows |
| 开发工具 | PyCharm |
| 编程语言 | Python |
| Python 版本 | Python 3.14 |
| 后端框架 | FastAPI |
| Web 服务 | Uvicorn |
| AI 平台 | Hugging Face |
| AI 模型 | XLabs-AI/flux-RealismLora |
| 前端 | HTML + CSS + JavaScript |
| API 调用库 | huggingface_hub |
3.操作流程
- 首先登录 Hugging Face 平台。在个人设置中创建 Access Token,用于程序访问 Hugging Face 提供的模型服务。为了避免将 API Token 直接写入 Python 源代码中,本项目采用
.env文件保存 Token。
HF_TOKEN=hf_xxxxxxx
HTTP_PROXY=http://127.0.0.1:7897
HTTPS_PROXY=http://127.0.0.1:7897
其中,HF_TOKEN 用于 Hugging Face API 身份认证;HTTP_PROXY 和 HTTPS_PROXY 用于当前网络环境下访问 Hugging Face 服务。
- 安装 Python 依赖
我直接在终端输入多合一的命令
pip install huggingface_hub python-dotenv fastapi uvicorn python-multipart Pillow
| 库 | 作用 |
|---|---|
huggingface_hub |
调用 Hugging Face 模型 API |
python-dotenv |
读取 .env 中的 API Token |
fastapi |
创建后端 API 服务 |
uvicorn |
启动 FastAPI 服务 |
python-multipart |
接收前端表单数据 |
Pillow |
保存和处理生成的图片 |
- 编写核心代码
在main.py中首先导入相关模块,然后读取.env文件中的 API Token,接下来创建 Hugging FaceInferenceClient。
client = InferenceClient(
provider="fal-ai",
api_key=HF_TOKEN,
timeout=300
)
完成客户端初始化后,在 FastAPI 中创建 /generate 接口,用于接收前端发送的 Prompt。
@app.post("/generate")
def generate_image(prompt: str = Form(...)):
用户提交 Prompt 后,后端首先对输入内容进行检查,如果 Prompt 不为空,则调用 Hugging Face 图像生成模型。
image = client.text_to_image(
prompt=prompt,
model="XLabs-AI/flux-RealismLora"
)
- 保存图像
Hugging Face API 成功返回图像后,程序为图片生成一个随机文件名,然后将生成的图像保存到./static/generated/。为了让前端能够直接显示后端生成的图片,本项目进一步将 PNG 图片读取为二进制数据,并转换成 Base64 字符串,然后将 Base64 数据返回给前端。这样,后端就完成了。
filename = uuid.uuid4().hex + ".png"
filepath = os.path.join(
"static",
"generated",
filename
)
image.save(filepath)
with open(filepath, "rb") as f:
image_bytes = f.read()
img_base64 = base64.b64encode(
image_bytes
).decode("utf-8")
- 启动服务
完成代码编写后,在 PyCharm 中运行main.py。程序启动后,Uvicorn 显示:
Uvicorn running on http://127.0.0.1:8080
说明 FastAPI 后端服务已经成功启动。此时浏览器访问:http://127.0.0.1:8080即可进入前端页面。进入网页后,在 Prompt 输入框中输入本实验最终使用的提示词,再点击网页中的 “生成图片” 按钮。此时,前端 JavaScript 使用 fetch() 向后端 /generate 接口发送 POST 请求。后端收到请求后,就会执行 generate_image() 函数。当 FastAPI 收到请求后,程序从请求中获取 Prompt,此时程序正式向 Hugging Face 发起模型推理请求。模型完成推理后,程序成功获得生成图像,并保存到:static/generated/ 。后端完成图像生成后,会将 Base64 图片数据返回给前端。后端完成图像生成后,会将 Base64 图片数据返回给前端。
return {
"success": True,
"image": img_base64,
"filename": filename,
"model": "XLabs-AI/flux-RealismLora",
"provider": "fal-ai"
}
好吧,其实后端也是gpt写的,我也不太懂,上面已经展示了一部分的核心代码,也有一些是问gpt帮忙总结的。前端的HTML代码我就不放在这里了,gpt不知道怎么搞的给我写了600多行,实在不知道放哪部分。如果老师和助教学长学姐对此有疑问,我可以把整个项目打包发给你们。

4. 提示词修改
4.1 提示词设计思路
我的提示词整体设计思路按照以下顺序展开:
主体 → 场景 → 环境 → 光照 → 人物细节 → 摄影参数 → 图像质感
首先明确图像的主体和场景,例如“大学生”和“大学图书馆”;然后进一步增加环境、光照、服装等信息,使模型能够更加准确地理解画面内容;最后加入人物皮肤、表情、头发、景深、色彩以及摄影方式等描述,进一步增强图像的真实感。
4.2 Prompt 修改过程
- 第一版 Prompt:确定主体和基本场景
A university student studying in a library.
第一版 Prompt 只对人物主体和基本场景进行了描述。其主要作用是让模型首先明确:
主体:university student
行为:studying
场景:library
但是该版本描述的信息比较简单,对人物外观、环境、光照以及图像风格没有进一步限制,因此生成结果的具体画面可能存在较大的随机性,写实效果也不够明确。因此,下一步需要增加更多场景和视觉信息。
- 第二版 Prompt:增加场景和摄影信息
A realistic photograph of a university student studying in a modern university library, books and laptop on the desk, large windows, natural daylight, casual university clothing, documentary photography, 35mm lens.
| 增加内容 | 作用 |
|---|---|
realistic photograph |
明确要求生成真实照片风格 |
modern university library |
对场景进行进一步限定 |
books and laptop on the desk |
增加场景中的具体物体 |
large windows |
增加环境结构 |
natural daylight |
指定自然光照 |
casual university clothing |
描述人物服装 |
documentary photography |
增加纪实摄影风格 |
35mm lens |
增加摄影镜头信息 |
第二版在第一版的基础上增加了环境、光照、人物服装和摄影风格等信息。相比第一版,第二版已经能够更加明确地控制生成画面的内容和整体风格。但是,仅描述场景和摄影方式还不足以充分体现人物的真实感,因此继续增加人物细节和图像质感描述。
- 第三版 Prompt:增加人物细节和真实感
最终使用的 Prompt 为:
A highly realistic photograph of a university student studying in a modern university library, natural daylight coming through large windows, realistic skin texture, natural facial expression, realistic hair, casual university clothing, books and laptop on the desk, documentary photography, 35mm lens, shallow depth of field, natural colors, photorealistic, highly detailed.
第三版主要针对人物真实感和照片质感进行了进一步优化。在第二版基础上增加了:
realistic skin texture:增加真实皮肤纹理
natural facial expression:使人物表情更加自然
realistic hair:增强头发细节
shallow depth of field:增加真实摄影中的景深效果
natural colors:使画面色彩更加接近真实照片
photorealistic:进一步强调照片级真实感
highly detailed:提高整体细节表现
因此,最终 Prompt 同时包含了主体、行为、场景、环境、光照、人物特征、摄影方式和图像质量等多个维度,可以更加明确地引导模型生成写实风格的图像。
4.3 Prompt 修改对比
| 版本 | Prompt 特点 | 存在的问题 | 修改方向 |
|---|---|---|---|
| V1 | 描述人物、行为和基本场景 | 信息较少,画面约束不足 | 增加场景和环境信息 |
| V2 | 增加环境、光照、服装和摄影方式 | 人物细节和真实感仍可以加强 | 增加人物细节和图像质感 |
| V3 | 综合人物、环境、摄影和真实感描述 | 整体描述较完整 | 作为最终 Prompt |
4.4 Prompt 修改过程总结
本次 Prompt 优化并不是简单地增加关键词,而是采用逐层增加约束条件的方法。
第一阶段主要解决“画面中有什么”的问题;
第二阶段解决“画面处于什么环境以及采用什么摄影风格”的问题;
第三阶段进一步解决“人物是否自然、画面是否具有真实照片质感”的问题。
通过这种逐步优化的方法,可以减少模型对场景的理解歧义,并增强最终生成图像的可控性和写实程度。
5. 心得体会
我能说,这是我有史以来第一次结合前端调用 API 吗?而且还是为了完成作业的情况下不得不逼自己去学相关的知识。整个过程里面,前端后端全都是gpt写的,部分总结内容也是gpt写的,但是我非常的坦然,毕竟ai时代根本不需要自己手搓,而且就算是手搓,我也敢说起码有一半人连前端都整不明白(包括我)。
虽然说是为了完成作业而去学,不过我在这个过程中也学到很多,如掌握了 API 的基本调用方法,以及在ai无能为力的情况下自行解决困难。比方说,一开始ai代码写的一坨,根本没法跑,只好多次去修改提示词。再比如,hugging face是在外网,一开始没发现代理端口不对,一直没法连接服务器,经某位姓S的大佬提醒才将端口改为我的代理端口,在这里对他表示感谢。还有一个点就是hf的免费额度抠抠搜搜的,每个月只给生成三次,一开始代码写的一坨的时候用光光了,也没有人事先提醒。充钱是不可能的,所以我用了别的方法解决,这里不方便说。反正总的来说就是学到很多。
三、Github个人主页搭建
方案二看起来更复杂,短时间难上手,所以我选择比较简单的方案一
- 我的个人主页:https://github.com/yz-Yezi-Genm
- README:https://github.com/yz-Yezi-Genm/yz-Yezi-Genm/blob/main/README.md
下面是我在README编辑的截图

四、对课程的期待及心得体会
刚开学确实对这门课挺期待的,之前一直听学长学姐说这门课要求超级多超级难,但我反倒期待赶紧上第一课,赶紧布置作业,我倒要看看是啥样的。但是真看到了作业要求还是暗暗咂舌。整体吧,那确实不难,就是有很多小细节要串在一起,不难但是做起来很麻烦。
我一直是有拖延症的人,看到麻烦的事情就很不想去做。但作业是有ddl的,拖到最后还是得做。所以我这次就逼着自己去做,5号晚上做了一点,6号晚上又做了一点,7号花了大半天终于是做完了。
不过在这个过程中我收获了很多第一次。第一次结合前端调用API、第一次写博客、第一次突击学习并掌握Markdown、第一次装饰自己github的主页......第一次,总是新奇而未知的。未来,在软件工程这门课上,我希望收获更多这样令人期待的“第一次”,然后我也更想在课程学习的后期学到更多关于软件工程的知识,如何去构建、优化乃至真正投入生活中使用。
关于我的博客,之所以主页和大笑奶龙高度绑定,一方面确实是想做的猎奇一点,方便老师和助教一看到奶龙就想起我,另一方面我是真喜欢大笑奶龙,唐唐的很好笑。
最后,由衷地感谢您耐心阅读到这里。我也恳请批改的老师和助教学长学姐高抬贵手,能够认可我的作业质量并且打上高分,小子在此谢过了。如有哪里没理解作业要求、表达不当或者逻辑不严谨之处,还望您多多包涵,如果能够指出那更是感激不尽。
最后再放一次大笑奶龙的动图。毕竟,谁不想像奶龙一样,抛弃所有烦恼,无忧无虑地放肆大笑呢?

(确实笑的很放肆)
附录
我在博客园后台直接使用Markdown编辑的截图

二补:
把文章里出现的makedown改成正确的Markdown了,一开始竟然没注意到......
第一版由于写了不该写的词,导致下午3点多就发出去的博文一直没通过审核,好在向客服申诉后解决了,回复速度也很快,在这里谢过客服。
另外,我的博文是对外开放的,随时供同学们查看。您可以参考我的代码乃至整个过程,而且希望您能有所收获,但请您不要照抄,自己亲自动手做的才是最难得可贵的。

浙公网安备 33010602011771号