2026秋软件工程个人作业(第一次)
| 这个作业属于哪个课程 | H202601软件工程与软件工程实践 |
|---|---|
| 这个作业要求在哪里 | 2026秋软件工程个人作业(第一次) |
| 这个作业的目标 | 实践模型 API 调用与网页交互,建设 GitHub 个人主页,梳理技能与不足,并制定软件工程课程学习计划 |
| 学号 | 102401314 |
从学习到实践:我的软件工程起点
一、认识我与我的技能树
大家好,我是曾炜毅,GitHub 用户名为 k0n0y,是福州大学 2024 级计算机科学与技术专业学生。我对计算机视觉、深度学习及其工程应用感兴趣,未来计划通过考研继续深造,希望在提升学历的同时参与科研,增强研究与实践能力。
目前,我作为项目负责人开展“布线前瞻资源感知”科研训练,已完成第三阶段工作。项目基于 iEDA 与 AiEDA,研究利用布线相关数据预测资源需求和拥塞风险,为芯片布线决策提供参考。项目仍在推进中,最终效果需要通过后续实验验证。
1. 当前能力与边界
| 能力 | 已有基础或经历 | 尚需补充的方面 |
|---|---|---|
| C 语言 | 学习过相关知识 | 继续巩固指针、内存和程序调试能力 |
| C++ | 学习过基础知识 | 提高代码阅读、组织与实际开发能力 |
| Python | 学习过基础知识,本次完成环境配置、脚本运行和提示词修改 | 加深对代码的理解,提高独立编程与异常处理能力 |
| 深度学习相关实践 | 结合科研训练接触模型设计、训练和优化相关工作 | 补充理论理解、对照实验设计和结果分析能力 |
| Web 与 API | 完成生图网页的运行与验证 | 继续理解前后端通信、接口设计和测试方法 |
| GitHub 与技术表达 | 建立个人资料 README,整理个人介绍和研究计划 | 继续练习版本管理、协作开发和文档维护 |
我的技术偏好是计算机视觉与深度学习。希望从基础图像处理与模型实验入手,逐渐理解数据、模型和实际应用之间的关系。科研训练也让我开始关注深度学习在 EDA 等工程领域中的应用。
我还需要补充实践经历,尤其是独立拆解需求、定位错误、组织代码和验证结果的能力。本次实践中,我完成了环境配置、实际调用、提示词调整和页面验证;后续还需要进一步理解各部分实现。
2. 当前代码量与本学期目标
- 目前累计自己编写的代码量:估算约 7000 行,尚未进行统一工具统计。
- 本学期结束希望达到的累计代码量:约 15000 行,即在现有基础上增加约 8000 行。
- 后续将按个人编写或实质修改的代码进行统计,不把依赖库和自动生成文件计入个人代码量。
除了数量,我也希望关注代码是否清晰、能否测试、是否容易修改,以及自己能否解释其实现过程。
3. 对课程的期待
我希望学习如何把一个想法转化为可以运行、可以验证的软件,重点包括需求分析、模块划分、接口设计、版本管理、软件测试与团队协作。
希望课程结束时,我能更清楚地说明“软件需要解决什么问题”“如何判断它完成了需求”,并积累一个有代码、文档、测试与复盘记录的实践过程。
二、AI 生成的软件工程课程学习指南
使用工具:Codex,本次对话中的 AI 助手。以下指南由 AI 根据软件工程课程学习需求生成。
1. AI 生成的指南
- 先明确需求。 选择一个范围适中的项目,写清用户、使用场景、必需功能和验收条件,区分必须实现与可以后续增加的功能。
- 学习设计与任务拆解。 划分模块,说明数据如何流动以及接口如何通信,把功能拆成能够逐项验证的小任务。
- 建立版本管理习惯。 使用 Git 记录有意义的修改,写清提交说明;在团队任务中练习分支、代码评审与冲突处理。
- 边实现边验证。 每完成一个功能就检查正常输入、异常输入和外部服务失败等情况,避免到最后才集中排错。
- 完成可复现的交付。 整理依赖、运行步骤、使用说明和已知限制,让其他人能够按照文档运行程序。
- 定期复盘。 对照课程进度检查完成情况,记录错误原因和改进方法,并依据实际时间调整任务范围。
2. 对指南的分析
我认为这份指南总体合理,因为它覆盖了从需求到交付的主要过程,也把测试与文档纳入了学习任务。本次生图实践中,只有脚本成功还不够,网页实际生成、错误提示和调用记录也需要检查,这与指南中的验收意识相呼应。
它的不足是仍比较概括,没有结合课程每周安排、考核方式和团队规模。对于目前的我,部分内容还需要拆成更小的练习,例如先解释清楚一个接口的输入和输出,再学习更复杂的系统设计。
我准备先把建议用到已有生图程序中:梳理浏览器到后端、再到模型服务的数据流,理解输入校验与异常处理,补充运行文档。后续再结合课程任务练习协作开发和测试。这些计划仍需根据课程实际安排调整。
三、Hugging Face API 与交互生图实践
1. 账号与 Token 配置
注册 Hugging Face 账号后,我在 Access Tokens 页面创建 Fine-grained Token,并选择 Inference 权限,其中包括调用 Inference Providers 的权限。Token 是程序调用服务时使用的凭证,未写入公开代码,也未展示在截图中。

随后打开作业指定的 XLabs-AI/flux-RealismLora 模型页面,选择 fal 服务商,在 View Code Snippets 中查看 Python 与 huggingface_hub 调用示例。

2. 配置 Python 环境
最初运行 python --version 没有版本输出,py 命令也不可用,检查发现终端中的 python 指向 WindowsApps。安装 Python 并重新打开终端后,能够正常显示 Python 与 pip 版本。
在作业目录中创建独立环境并安装依赖:
python -m venv .venv
.\.venv\Scripts\python.exe -m pip install huggingface_hub pillow flask
3. 通过代码调用模型
程序在终端中通过 getpass 接收 Token,输入不显示在屏幕上。关键调用如下:
import getpass
from huggingface_hub import InferenceClient
token = getpass.getpass("请输入 Hugging Face Token:").strip()
client = InferenceClient(
provider="fal-ai",
api_key=token,
timeout=180,
)
image = client.text_to_image(
prompt,
model="XLabs-AI/flux-RealismLora",
)
image.save(image_path)
其中 prompt 是下面记录的完整提示词,image_path 是保存路径。完整脚本还会记录模型、服务商、提示词、生成时间和调用耗时。
日志中的 success: true 表示程序已经取得图片并成功保存,是应用层记录,不是直接输出的 HTTP 状态码。记录的耗时包含调用、图片返回与保存过程,不等同于服务端纯模型推理时间。


4. 提示词设计与修改
我选择“窗边的学生书桌”作为场景,因为桌面、笔记本、笔和杯子都是熟悉的物体,便于观察材质、光照与结构是否合理。
提示词设计顺序是:主体与物品 → 环境 → 光线与阴影 → 材质 → 色彩与视角。目标是呈现普通生活场景中的照片感。
V1:确定场景与整体照片风格
A realistic photograph of a student's wooden desk beside a window, an open notebook, a black pen and a white ceramic mug, soft natural morning light, subtle shadows, visible wood grain, natural colors, eye-level view, ordinary everyday setting.

图片中的木纹、自然光和阴影具有一定真实感,笔记本与黑笔也符合描述。但杯子出现了左右两个把手,与我想要的普通马克杯不符,因此需要进一步明确物体结构。
V2:明确杯子结构
A realistic documentary photograph of a student's wooden desk beside a window, an open notebook and a black pen resting on it. On the right side of the desk is a plain white ceramic coffee mug with exactly one handle on its right side, a smooth continuous ceramic surface on its left side, a circular rim and a flat base. Soft natural morning light, subtle shadows, visible wood grain, natural colors, eye-level view, ordinary everyday setting.

这次加入了“恰好一个位于右侧的把手”“左侧是连续光滑的陶瓷表面”等描述。新图片中的杯子只有右侧一个把手,符合本轮预期。
两轮没有固定随机种子,因此不能把所有差异都归因于提示词修改;单次结果也不足以证明这种修改能稳定修复结构问题。后续可固定其他参数,进行多次对比。
5. 将模型调用接入网页
前端使用 HTML、CSS 和 JavaScript,后端使用 Flask。网页包含提示词输入框、生成按钮、等待提示、结果图片、耗时和下载链接。
交互流程为:
用户输入提示词并点击生成
↓
浏览器向 /generate 发送 JSON 请求
↓
Flask 校验输入并调用 Hugging Face
↓
保存图片与 JSON 调用记录
↓
返回图片地址,网页显示结果
前端发送请求的关键代码:
const response = await fetch('/generate', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({prompt})
});
const data = await response.json();
if (!response.ok) throw new Error(data.error || '生成失败');
document.getElementById('image').src = data.image_url;
后端在 /generate 中接收提示词,校验后调用模型。Token 保留在后端,浏览器请求中只提交提示词。生成过程中按钮会暂时禁用,失败时显示错误信息。
启动网页服务:
.\.venv\Scripts\python.exe app.py
按提示输入 Token 后,在浏览器打开 http://127.0.0.1:5000。本次网页在本机运行,该地址仅用于本地演示。
6. 网页生成结果与验证
在网页中输入提示词并点击“生成图像”后,页面显示了生成图片、成功提示和调用耗时,同时提供图片与调用记录的下载入口,完成了从网页输入到结果展示的交互流程。


三次成功记录如下。日期与时间按程序记录的本机时区保存。
| 调用方式 | 提示词 | 日期 | 调用及保存耗时 | 结果 |
|---|---|---|---|---|
| Python 脚本 | V1 | 2026-09-06 | 18.85 秒 | 返回并保存图片,杯子出现双把手 |
| Python 脚本 | V2 | 2026-09-06 | 10.07 秒 | 返回并保存图片,杯子为单把手 |
| 本地交互网页 | V2 | 2026-09-07 | 14.78 秒 | 页面显示图片、成功信息和下载链接 |
7. 体验与心得
- 环境配置是实践的起点。 最初遇到 Python 命令不可用的问题,通过检查命令路径、完成安装并验证版本,建立了可运行的环境。
- 提示词需要具体,但效果仍需检查。 明确杯子结构后,新结果更符合预期;图片看起来像照片,也不代表所有结构都正确。
- 网页功能需要真实验证。 页面能打开只是第一步,实际生成、失败提示、图片展示和记录保存都需要检查。
- 记录过程有助于复盘。 保存代码、提示词、图片、截图与 JSON 日志,能更清楚地说明每一步发生了什么。
- 运行成功后仍需深入理解。 后续我希望继续梳理代码结构,练习修改接口、补充测试,提高维护和扩展程序的能力。
四、GitHub 个人主页建设
我选择个人资料 README 方案,创建与 GitHub 用户名相同的公开仓库 k0n0y/k0n0y,在根目录 README.md 中编写个人介绍。
主页包含学校与专业、技能自评、技术兴趣、“布线前瞻资源感知”项目介绍、能力不足与未来三年规划。

我的三年规划是:第一年巩固基础、推进现有项目并了解考研方向;第二年系统备考,在时间允许时保持相关实验和资料阅读;第三年根据升学情况衔接后续学习,若顺利升学,逐步参与课题研究。
选择考研的原因是希望提升学历、完善知识体系,并获得更多科研和实践机会。具体计划将依据学习进度和实际情况调整。
五、Markdown 编写与提交记录
本篇作业使用 Markdown 编写,使用了标题、表格、列表、代码块、链接和图片。

浙公网安备 33010602011771号