软件工程课程第一次个人作业
| 这个作业属于哪个课程 | https://edu.cnblogs.com/campus/fzu/202601SofwareEngineering |
|---|---|
| 这个作业要求在哪里 | https://edu.cnblogs.com/campus/fzu/202601SofwareEngineering/homework/15712 |
| 这个作业的目标 | GitHub、博客园、HuggingFace账号注册与完善;完成Flux模型API调用及前端交互实现;搭建GitHub个人主页;复盘自身能力、明确课程学习目标 |
| 学号 | 0724080101 |
一.准备工作
- GitHub baiyi060404
- 博客园个人主页: baiyi060404
- 已关注吴越钟老师、张明圣和王奇蕊助教,并加入 202601 福州大学软件工程班级博客
二.huggingface-API的调用
Github仓库完整代码
项目结构
huggingfaceapi/
├── app.py # API 调用和 Gradio 交互页面
├── requirements.txt # Python 依赖
├── .env # Token 配置
├── .gitignore # Git 忽略规则
└── outputs/ # 图片和不含 Token 的 JSON 调用记录
outputs/ 在第一次点击「生成图片」后自动创建,不需要手动建;里面每张图都配一份同名 .json。运行产生的缓存文件依赖 Python 版本和平台,不参与程序逻辑。
核心代码
配置区:模型、服务商和输出路径抽成常量,方便替换。
MODEL_ID = "XLabs-AI/flux-RealismLora"
PROVIDER = "fal-ai"
PROJECT_DIR = Path(__file__).resolve().parent
OUTPUT_DIR = PROJECT_DIR / "outputs"
取 token 并组装请求参数:token 从环境变量 HF_TOKEN 读;尺寸、步数、引导强度、seed 先放进 parameters 字典,填了负向提示词再加上。
token = os.getenv("HF_TOKEN")
parameters = {
"width": width,
"height": height,
"num_inference_steps": steps,
"guidance_scale": guidance_scale,
"seed": seed,
}
if negative_prompt:
parameters["negative_prompt"] = negative_prompt
真正调用云端:InferenceClient 指定服务商和 token,text_to_image 把 prompt、模型和参数一起发出去,拿回 PIL 图片后存成 PNG。
client = InferenceClient(provider=PROVIDER, api_key=token)
image = client.text_to_image(
prompt=prompt,
model=MODEL_ID,
**parameters,
)
image.save(image_path)
写调用记录:发起前先建一条 started 记录,含时间、模型、服务商、提示词和参数;成功后补上 success、耗时和图片路径,失败后补上错误类型和信息,再由 _write_record() 写成同名 JSON。
record = {
"status": "started",
"requested_at": timestamp.isoformat(timespec="seconds"),
"model": MODEL_ID,
"provider": PROVIDER,
"prompt": prompt,
"parameters": parameters,
}
# 成功后 update:status=success、elapsed_seconds、output
# 失败后 update:status=error、error_type、error_message
前端:Gradio Blocks 搭单栏界面——提示词框、生成按钮、结果图,负向提示词和尺寸、步数、seed 收进折叠面板,点按钮触发 generate_image。
1. 准备 Hugging Face Token
- 登录 Hugging Face,进入 Access Tokens。
- 创建 Fine-grained Token,并授予调用Inference权限。
- 在项目根目录新建
.env,写入自己的 Token:
HF_TOKEN=hf_你的真实Token
2. 安装与启动
在项目目录打开终端安装依赖:
python -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r requirements.txt
输入下列代码启动程序:
.\.venv\Scripts\python.exe app.py
启动后访问终端显示的本地地址:
http://127.0.0.1:7860
打开页面不会调用模型、不产生费用;填写提示词并点击「生成图片」后才会发起一次云端请求。
3. 生成与查看结果
在网页里输入提示词、点「生成图片」,几秒后出图:

每次调用会在 outputs/ 下生成两个同名文件:
outputs/flux_日期_时间.png
outputs/flux_日期_时间.json
JSON 记录包含模型、服务商、提示词、参数、耗时和执行结果。
4. API 调用成功记录
调用成功后,终端会打印一行成功日志([SUCCESS]),同时 outputs/ 里生成同名 .json。一次成功调用的记录如下:
终端日志:


5. 提示词设计思路与修改过程
写实类提示词不能只写"一张什么图",要从风格锚点、环境光线、主体动作、镜头语言、写实约束五个方面写清楚,模型才会往真实照片而不是插画方向靠。
初始版本(默认提示词):
A documentary photograph of a quiet university campus after rain,
students walking naturally, wet pavement reflecting soft morning light,
realistic materials and proportions, subtle colors, eye-level view,
35mm lens, natural depth of field
设计思路:
- 风格锚点:开头用
A documentary photograph(纪实摄影)定调,避免出来插画/CGI 感; - 环境与光线:
after rain、wet pavement reflecting soft morning light指定雨后、湿地面反光、晨光,让画面有真实的光线质感; - 主体:
students walking naturally,强调"自然行走"而不是摆拍; - 镜头语言:
eye-level view, 35mm lens, natural depth of field指定平视、35mm 人文焦段、自然景深,接近人眼看到的效果; - 写实约束:
realistic materials and proportions, subtle colors压住材质、比例和色彩饱和度。
修改过程:第一版提示词只写了"a photo of a campus",结果画面平、像素材图;于是按上面五点逐步补上——先加 documentary photograph 锁风格,再加雨后地面反光和晨光,最后补 35mm 镜头和写实约束。负向提示词填 illustration, CGI, distorted hands, blurry,专门挡掉插画感、畸形和模糊。固定 seed=12345,改提示词时其余参数不动,方便前后对比哪句改动带来了变化。

第二个提示词(换场景验证):
A candid street photograph of an elderly bicycle repairer working
beside a small shop in Fuzhou, late afternoon sunlight,
natural skin texture, authentic tools and environment, 50mm lens
思路一样:candid street photograph 锁街拍纪实,主体+地点(福州小店旁修自行车的老人)、光线(傍晚阳光)、质感(自然皮肤纹理、真实工具环境)、50mm 标准镜头。对比两次结果可以看出:把环境、光线和镜头写具体后,画面明显更像真实照片。

常见问题
提示"没有找到 HF_TOKEN"
确认 .env 和 app.py 在同一目录,并重新启动程序。
返回 401 或 403
报错形如 This authentication method does not have sufficient permissions to call Inference Providers:一是 token 没勾选 Inference Providers 调用权限,二是 fal-ai 是付费服务商,账号要在 HF 的 Billing 里绑好支付方式、有余额;换了带推理权限的 token 后若报 402 Payment Required,就是该充值了。
体验与心得
1.调 AI 其实就是发一次请求。看到 client.text_to_image 把提示词发出去、几秒后拿回一张图,才知道模型已经封装好,带 token 调接口、参数填数值就行。
2. 花时间最多的是 token 和权限。第一次点生成报 403,后来才弄清楚 token 要勾选推理权限、账号要绑支付方式、fal-ai 按次收费。
3. 提示词要自己试。一开始写得很简单,图很普通,逐步加上风格、光线、镜头,再用负向提示词去掉插画感,固定 seed 对比效果。
三.GitHub 个人主页建设
我选择“创建个人资料自述文件”的方案,建立了与 GitHub ID 同名的 baiyi060404/baiyi060404 仓库。

四.技能树与技术偏好
已具备的专业知识与能力
能力 A:C/C++ 编程能力 —— 掌握基本语法、指针、结构体、面向对象编程(C++),能完成课程作业和基础算法实现,是目前主要使用的编程语言。
能力 B:Python 编程与数据处理能力 —— 能使用 Python 进行数据处理、脚本编写,熟悉 PyTorch 深度学习框架;在 FPVA 生物芯片科研项目中用于模型训练、实验复现和结果可视化。比如在项目中实现的动态冲突仲裁逻辑:
def resolve_conflict(cell_queue, arrived_goal):
"""
动态冲突仲裁:到站优先 + 单格限流
cell_queue: 当前格子上的液滴列表
arrived_goal: 各液滴目标位置
"""
# 到站优先:目标已到达的液滴优先通过
for droplet in cell_queue:
if droplet.pos == arrived_goal[droplet.id]:
return droplet
# 单格限流:其余情况只放行队首液滴,避免死锁
return cell_queue[0]
目前欠缺的能力
- 项目工程化能力不足:没有参与过完整的项目开发,对于许多技术的掌握程度仅停留在理论层面,缺乏从需求分析到测试部署的全流程实践经验。
- 团队协作经验缺乏:之前的编程实践多为独立完成,没有使用 Git 进行多人协作开发的经验,对代码审查、分支管理等协作流程不够熟悉。
- 系统级知识薄弱:操作系统和数据库管理本学期刚开课,在并发编程、进程管理、数据持久化等方面知识储备不足。
感兴趣的方向
- 深度强化学习:特别是将强化学习应用于组合优化、路径规划、资源调度等传统算法难题
- 本学期正在学习:软件工程、数据库管理、操作系统,希望进一步补全计算机系统层面的知识体系。
代码量现状与目标
- 目前代码量:约 3000-5000 行,主要来自课程作业、实验练习、FPVA 科研项目中的数据处理脚本和模型训练代码。
- 本学期目标代码量:希望达到 8000-10000 行,通过团队项目实践,重点提升代码规范性和工程化水平,而非单纯堆砌行数。
最期待学习的知识与收获
- 软件开发的完整流程:从需求分析、系统设计、编码实现到测试维护,掌握规范化的开发方法,建立对软件生命周期的系统认知。
- 团队协作与版本管理:学会使用 Git 进行多人协作开发,体验真实的团队分工、分支管理、代码审查与合并流程。
- 项目管理能力:了解如何规划项目进度、分配任务、控制风险,掌握敏捷开发等现代项目管理方法。
4.代码质量与工程规范:学习编码规范、代码重构、自动化测试等工程实践,培养对代码质量负责的意识。
AI 生成的学习指南及分析
我选择 DeepSeek 作为生成工具
生成结果
软件工程课程学习指南
一、学习目标
- 理解软件工程的基本概念、核心原则和软件生命周期
- 掌握需求分析、软件设计、编码实现、软件测试的基本方法
- 学会使用版本控制工具(Git)进行团队协作开发
- 能够参与或独立完成一个完整的软件项目
二、核心学习内容
- 软件工程概述:软件危机、开发模型(瀑布模型、敏捷开发、迭代模型、DevOps)
- 需求工程:需求获取、需求分析、需求规格说明书(SRS)的编写
- 软件设计:模块化设计、面向对象设计、UML 建模(用例图、类图、时序图)、架构设计
- 编码规范:命名规范、注释规范、代码风格统一、代码重构
- 软件测试:单元测试、集成测试、系统测试、黑盒测试与白盒测试
- 项目管理:进度规划、任务分配、风险管理、敏捷看板(Kanban/Scrum)
- 版本控制与协作:Git 分支管理、Pull Request、代码审查(Code Review)
- 持续集成与部署(CI/CD):自动化构建、自动化测试、自动化部署的基本流程
三、学习方法建议
- 理论与实践结合:每学一个知识点,立即通过小项目或练习动手实践
- 多画图、多写文档:养成用流程图、类图、时序图表达设计思路的习惯
- 积极参与团队项目:在真实的分工协作中学习沟通、合并代码、解决冲突
- 善用 AI 工具辅助学习:利用 AI 编程助手提升编码效率,但要保持对生成代码的理解和审查能力
- 阅读优秀开源项目:学习他人的工程化实践、代码组织方式和项目结构
四、推荐学习资源
- 《软件工程:实践者的研究方法》—— Roger S. Pressman
- 《代码整洁之道》—— Robert C. Martin
- 《人月神话》—— Frederick P. Brooks Jr.
- Git 官方文档与 GitHub Learning Lab
- 各技术社区(GitHub、Stack Overflow、Hugging Face)的开源项目实践
合理性分析
这份指南整体框架合理、实践导向鲜明:知识体系覆盖需求、设计、编码、测试、项目管理、CI/CD 等软件生命周期核心环节,有助于建立全局认知;强调动手实践和团队项目,契合课程的工程属性;也与时俱进地纳入了 AI 工具辅助学习、代码审查等现代实践。但不足在于:现代工具链覆盖不足(仅提及 Git 和 AI,可补充 Docker、Copilot、Jira 等主流工具);建议偏抽象、缺少落地指引(如入门项目推荐和资源链接);八个知识模块之间缺乏逻辑串联说明;也缺少前端、后端、测试等角色的差异化能力路径建议。
附加截图


浙公网安备 33010602011771号