软件工程第一次作业
软件工程第一次作业:个人主页、Hugging Face API 调用与学习总结
| 项目 | 内容 |
|---|---|
| 这个作业属于哪个课程 | 首页 - 202601 软件工程 - 福州大学 - 班级博客 - 博客园 (cnblogs.com) |
| 这个作业要求在哪里 | 2026秋软件工程个人作业(第一次) - 作业 - 202601 软件工程 - 班级博客 - 博客园 (cnblogs.com) |
| 这个作业的目标 | 完成 GitHub 与博客园基础配置,调用 Hugging Face 图像生成模型,使用 Gradio 搭建交互式前端,建设 GitHub Pages 个人主页,并梳理个人技能与软件工程学习规划 |
| 学号 | 112401430 |
一、准备工作
1. GitHub 账号
本次作业中,我使用的 GitHub ID 为 wanglong2006。
- GitHub 个人主页:https://github.com/wanglong2006
- GitHub Pages 个人主页:https://wanglong2006.github.io
2. 博客园
我已经完成博客园账号及个人信息配置,并将博客编辑器设置为 Markdown 编辑器。后续的实验过程、截图、代码和学习总结均使用 Markdown 进行整理。
二、Hugging Face API 调用
1. 实验目标
本次实验使用 Hugging Face 提供的 API 调用 FLUX 图像生成模型,并进一步使用 Gradio 搭建前端页面,实现“输入提示词—调用模型—返回图像”的交互流程。
本次使用的模型为 XLabs-AI/flux-RealismLora:
https://huggingface.co/XLabs-AI/flux-RealismLora
2. API Token 与安全说明
登录 Hugging Face 后,我在 Access Tokens 页面创建了用于模型推理的 API Token,并为其配置了所需权限。
API Token 相当于账号凭证,不能直接写入公开代码、博客或 GitHub 仓库。因此,本次程序使用 getpass() 在运行时输入 Token,避免 Token 直接显示在终端或保存在源代码中。
3. Python 环境配置
在 Windows 本地 Python 环境中安装所需依赖:
python -m pip install -U huggingface_hub gradio pillow
各依赖的作用如下:
huggingface_hub:连接 Hugging Face 并调用模型 API;gradio:搭建简单的交互式 Web 前端;Pillow:保存和处理生成的图片。
可以使用下面的命令检查依赖是否安装成功:
python -c "import gradio; import huggingface_hub; from PIL import Image; print('环境配置成功!')"
三、使用 Python 调用 FLUX 模型
1. API 测试程序
首先创建 api_test.py,用于测试模型 API 是否能够正常调用。
from getpass import getpass
from huggingface_hub import InferenceClient
MODEL_ID = "XLabs-AI/flux-RealismLora"
print("=" * 60)
print("Hugging Face FLUX API 调用测试")
print("模型:", MODEL_ID)
print("推理服务:fal-ai")
print("=" * 60)
# 安全输入 Token,避免将其直接写入源代码
token = getpass("请输入你的 Hugging Face Token:")
client = InferenceClient(
provider="fal-ai",
api_key=token
)
prompt = """
A highly photorealistic modern city street in China,
people walking naturally on the sidewalk,
cars driving on the road,
warm morning sunlight,
realistic buildings,
natural shadows,
realistic photography,
highly detailed
"""
print("\n正在调用 Hugging Face API...")
print("请稍候,生成图片可能需要一些时间。")
try:
image = client.text_to_image(
prompt=prompt,
model=MODEL_ID
)
image.save("result_01.png")
print("\n================================")
print("API 调用成功!")
print("模型:", MODEL_ID)
print("图片已保存:result_01.png")
print("================================")
image.show()
except Exception as e:
print("\n================================")
print("API 调用失败!")
print("错误信息:")
print(e)
print("================================")
2. API 调用结果
在终端中运行:
python api_test.py
输入 Hugging Face Token 后,程序向推理服务发送请求。终端显示“API 调用成功”,并将生成结果保存为 result_01.png,说明下面的调用链已经跑通:
Python 程序 → Hugging Face API → FLUX 模型 → 生成并保存图片

四、使用 Gradio 搭建交互式前端
单纯修改 Python 文件中的提示词不够方便,因此我进一步使用 Gradio 搭建交互界面。用户可以在网页中输入提示词,点击按钮后调用 Hugging Face API,并在页面中查看生成结果。
1. 前端程序
创建 app.py,代码如下:
from getpass import getpass
import gradio as gr
from huggingface_hub import InferenceClient
MODEL_ID = "XLabs-AI/flux-RealismLora"
print("=" * 60)
print("FLUX 写实图像生成器")
print("模型:", MODEL_ID)
print("推理服务:fal-ai")
print("=" * 60)
token = getpass("请输入你的 Hugging Face Token:")
client = InferenceClient(
provider="fal-ai",
api_key=token
)
def generate_image(prompt):
if not prompt or not prompt.strip():
raise gr.Error("请输入提示词!")
print("\n收到提示词:")
print(prompt)
print("\n正在调用 Hugging Face API,请稍候……")
try:
image = client.text_to_image(
prompt=prompt,
model=MODEL_ID
)
print("图片生成成功!")
return image
except Exception as e:
print("图片生成失败:")
print(e)
raise gr.Error("图片生成失败,请检查网络、Token 或 API 额度。")
with gr.Blocks(title="FLUX 写实图像生成器") as demo:
gr.Markdown(
"""
# FLUX 写实图像生成器
本程序通过 **Hugging Face API** 调用
**XLabs-AI/flux-RealismLora** 模型生成写实图像。
请在下方输入英文提示词,然后点击 **生成图片**。
"""
)
prompt_input = gr.Textbox(
label="提示词 Prompt",
placeholder="例如:A photorealistic Chinese city street in the morning...",
lines=6
)
generate_button = gr.Button("生成图片", variant="primary")
output_image = gr.Image(
label="FLUX 生成结果",
type="pil"
)
generate_button.click(
fn=generate_image,
inputs=prompt_input,
outputs=output_image
)
demo.launch(inbrowser=True)
运行程序:
python app.py
程序启动后,浏览器打开本地 Gradio 页面。前端主要包含提示词输入框、生成按钮和图片显示区域。

整个交互流程如下:
用户输入 Prompt
↓
Gradio 前端
↓
Python 程序
↓
Hugging Face API
↓
FLUX 模型生成图片
↓
结果返回前端页面
五、两版提示词设计与结果分析
本次实验实际完成了两版提示词。第一版用于测试模型对基本场景的理解能力,第二版在其基础上增加时间、人物、交通、光照和写实风格等约束。
1. 第一版提示词
A street in a Chinese city.
该提示词只描述了“中国城市街道”这一基本主题。模型能够生成相关场景,但由于没有说明城市类型、时间、天气、人物、车辆、光照与摄影风格,生成结果的随机性较强,细节和真实感也比较有限。

2. 第二版提示词
A realistic street in a modern Chinese city on a sunny morning, pedestrians walking along the sidewalk, modern buildings, cars on the road, natural sunlight, realistic photography.
第二版增加了以下信息:
modern Chinese city:限定现代中国城市环境;sunny morning:说明时间和天气;pedestrians walking along the sidewalk:补充人物及其行为;modern buildings:限定建筑风格;cars on the road:补充交通元素;natural sunlight:描述光照条件;realistic photography:明确写实摄影风格。
第二版生成结果如下:

与第一版相比,第二版的场景结构更加完整,建筑、道路、行人、车辆和阳光之间的关系更明确,图像整体更接近真实城市摄影。不过,生成式模型仍可能产生道路标线、车牌、文字和局部结构不准确等问题,因此不能把生成结果当作真实照片或客观事实。
3. 两版提示词对比
| 版本 | 核心内容 | 设计目的 | 实际效果 |
|---|---|---|---|
| 第一版 | 只描述中国城市街道 | 验证模型能否理解基本主题 | 能生成相关场景,但约束少、随机性较强 |
| 第二版 | 增加现代城市、晴朗早晨、行人、汽车、自然光和写实摄影 | 提高场景完整度与真实感 | 内容更完整,光照和空间关系更明确 |
这次修改让我认识到,提示词不只是简单描述“要生成什么”,还需要尽量明确主体、环境、时间、人物行为、光照和风格。更具体的约束通常能提升结果的可控性,但提示词越长并不必然越好,仍需根据实际生成结果不断比较和调整。
六、GitHub Pages 个人主页
我使用 GitHub Pages 搭建了个人主页,并将页面内容由模板说明修改为个人介绍。主页目前展示了个人简介、兴趣方向、学习与实践经历、专业技能、自我评价、未来规划,以及对计算机和人工智能伦理问题的认识。
个人主页地址:
https://wanglong2006.github.io
最终页面效果如下:

通过这次实践,我认识到 GitHub 不仅能够存放代码,还可以用于版本管理、项目展示和个人成果积累。个人主页后续也可以随着课程学习和项目经历持续更新。
七、个人技能树与自我评价
1. 当前技能树
计算机专业能力
├─ 编程语言
│ ├─ Python:基础程序、文件处理、API 调用
│ ├─ C:基本语法、函数、数组、指针
│ └─ C++:基础语法与程序设计
├─ 开发工具
│ ├─ Git 与 GitHub
│ ├─ Visual Studio Code
│ ├─ Linux / WSL
│ └─ Jupyter Notebook
├─ 人工智能应用
│ ├─ Hugging Face API
│ ├─ FLUX 图像生成模型
│ ├─ Gradio 前端
│ └─ AI 辅助编程与问题分析
└─ 仍需加强
├─ 数据结构与算法
├─ 软件需求分析与系统设计
├─ 软件测试与质量保证
├─ Git 团队协作
└─ 中大型项目开发与维护
2. 自我评价
目前我能够完成基础编程任务,也能够使用 GitHub、Linux / WSL 和 Python API 等工具。本次作业中,我完成了从 Python 程序调用 Hugging Face API,到使用 Gradio 建立交互式前端,再到使用 GitHub Pages 展示个人内容的完整实践。
但我对软件工程的理解仍处于初步阶段,在算法能力、需求分析、架构设计、测试方法、团队协作和大型程序维护等方面仍需继续加强。我目前更熟悉“把程序运行起来”,但距离“按照规范完成可维护的软件项目”还有明显差距。
3. 代码量目标
截至本次作业,我累计编写的代码量约为 2000-3000行。我希望在课程结束时达到 8000行,并且不只关注行数,还要提高代码的正确性、可读性、模块化程度、测试覆盖和版本管理质量。
代码量只能反映练习规模,不能单独代表软件开发能力。因此,我还会关注自己是否能够独立分析需求、设计模块、调试问题、编写测试、使用 Git 协作并完成项目交付。
八、AI 生成的软件工程学习指南及分析
本次选择 ChatGPT 作为 AI 工具,让其生成一份简短的软件工程课程学习指南。整理后的主要内容如下。
1. 学习指南
第一阶段:理解软件工程基本概念
- 区分“写出一个程序”和“完成一个软件项目”;
- 学习软件生命周期、需求、设计、编码、测试、部署和维护;
- 了解软件质量、可维护性、可靠性与团队协作的重要性。
第二阶段:掌握基本工程工具
- 使用 Git 和 GitHub 管理代码版本;
- 养成小步提交、编写清晰提交信息和保留修改记录的习惯;
- 学习分支、合并、冲突处理和代码评审的基础方法;
- 使用 Issue、README 和项目文档记录需求与进度。
第三阶段:重视程序设计与测试
- 编码前先分析需求并划分模块;
- 避免把所有功能写在一个文件或函数中;
- 为关键功能设计正常、边界和异常测试;
- 发现错误后记录原因、修复方法与验证结果。
第四阶段:通过项目实践形成闭环
按照下面的流程完成一个规模适中的课程项目:
需求分析 → 任务分解 → 模块设计 → 编码实现
→ 测试与修复 → 文档整理 → 部署展示 → 总结复盘
第五阶段:合理使用人工智能
- 使用 AI 帮助理解概念、分析错误和比较解决方案;
- 对 AI 生成的代码进行阅读、运行和测试;
- 不向 AI 服务上传密码、Token 和隐私数据;
- 不把未经验证的 AI 输出直接作为最终答案;
- 保留自己的分析、判断和修改过程。
2. 对指南的分析
我认为这份指南的整体结构较为合理。它没有只强调编程语法,而是覆盖了需求、设计、编码、测试、协作、文档和维护等软件工程环节,能够帮助我从“完成单次编程题”逐渐转向“完成完整软件项目”。
其中,对我最有帮助的是以下几点:
- 先分析需求再编码。 过去容易直接开始写代码,后续修改成本较高;先明确目标与模块可以减少返工。
- 重视版本管理。 Git 不只是上传代码的工具,还能记录修改历史并支持团队协作。
- 把测试纳入开发过程。 程序能够运行不代表没有问题,还需要检查边界条件、异常输入和实际需求。
- 验证 AI 输出。 AI 可以提高效率,但生成内容可能存在错误,最终责任仍由使用者承担。
这份指南也存在局限:内容比较概括,不能替代课程教材、教师讲解和真实团队项目。只有把这些建议落实到每次作业、代码提交和项目复盘中,才能真正形成软件工程能力。
九、课程学习目标与未来规划
通过本次作业,我希望在软件工程课程中重点提高以下能力:
- 更准确地分析用户需求并进行任务分解;
- 使用清晰的模块结构组织代码;
- 掌握 Git 分支、合并和团队协作流程;
- 学会设计测试用例并记录缺陷;
- 编写结构清晰的 README、开发文档和使用说明;
- 独立完成从需求、实现、测试到部署的项目闭环;
- 合理使用人工智能工具,同时保持独立思考与验证意识。
未来三年,我希望先夯实编程语言、数据结构、算法、操作系统、网络和数据库等基础知识,再通过课程项目和个人项目提高工程实践能力,最后逐步形成独立设计、开发、测试和维护完整软件系统的能力。
十、作业总结
按照作业要求,本次博客使用 Markdown 编辑器 完成。
下面为博客园后台 Markdown 编辑页面截图:

本次作业让我完成了多个相互关联的实践任务:使用 Hugging Face API 调用图像生成模型,使用 Gradio 搭建前端界面,完成两版提示词设计与结果比较,使用 GitHub Pages 建设个人主页,并梳理自己的技能树和软件工程学习规划。
在实践过程中,我不仅学习了具体工具的使用方法,也进一步理解了前端、Python 程序、API 服务和人工智能模型之间的关系。同时,我认识到安全管理 Token、验证生成结果、记录实验过程和使用版本控制的重要性。
目前我仍处于软件工程学习的起步阶段。后续我会继续通过编码、测试、文档编写和项目实践提高自己的能力,并把人工智能作为辅助学习和开发的工具,而不是替代自己的分析与判断。
浙公网安备 33010602011771号