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 生成的指南

  1. 先明确需求。 选择一个范围适中的项目,写清用户、使用场景、必需功能和验收条件,区分必须实现与可以后续增加的功能。
  2. 学习设计与任务拆解。 划分模块,说明数据如何流动以及接口如何通信,把功能拆成能够逐项验证的小任务。
  3. 建立版本管理习惯。 使用 Git 记录有意义的修改,写清提交说明;在团队任务中练习分支、代码评审与冲突处理。
  4. 边实现边验证。 每完成一个功能就检查正常输入、异常输入和外部服务失败等情况,避免到最后才集中排错。
  5. 完成可复现的交付。 整理依赖、运行步骤、使用说明和已知限制,让其他人能够按照文档运行程序。
  6. 定期复盘。 对照课程进度检查完成情况,记录错误原因和改进方法,并依据实际时间调整任务范围。

2. 对指南的分析

我认为这份指南总体合理,因为它覆盖了从需求到交付的主要过程,也把测试与文档纳入了学习任务。本次生图实践中,只有脚本成功还不够,网页实际生成、错误提示和调用记录也需要检查,这与指南中的验收意识相呼应。

它的不足是仍比较概括,没有结合课程每周安排、考核方式和团队规模。对于目前的我,部分内容还需要拆成更小的练习,例如先解释清楚一个接口的输入和输出,再学习更复杂的系统设计。

我准备先把建议用到已有生图程序中:梳理浏览器到后端、再到模型服务的数据流,理解输入校验与异常处理,补充运行文档。后续再结合课程任务练习协作开发和测试。这些计划仍需根据课程实际安排调整。

三、Hugging Face API 与交互生图实践

1. 账号与 Token 配置

注册 Hugging Face 账号后,我在 Access Tokens 页面创建 Fine-grained Token,并选择 Inference 权限,其中包括调用 Inference Providers 的权限。Token 是程序调用服务时使用的凭证,未写入公开代码,也未展示在截图中。

01-token-permissions

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

02-official-code

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 状态码。记录的耗时包含调用、图片返回与保存过程,不等同于服务端纯模型推理时间。

03-api-v1-success

04-api-v2-success

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.

generated-1

图片中的木纹、自然光和阴影具有一定真实感,笔记本与黑笔也符合描述。但杯子出现了左右两个把手,与我想要的普通马克杯不符,因此需要进一步明确物体结构。

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.

generated-2

这次加入了“恰好一个位于右侧的把手”“左侧是连续光滑的陶瓷表面”等描述。新图片中的杯子只有右侧一个把手,符合本轮预期。

两轮没有固定随机种子,因此不能把所有差异都归因于提示词修改;单次结果也不足以证明这种修改能稳定修复结构问题。后续可固定其他参数,进行多次对比。

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. 网页生成结果与验证

在网页中输入提示词并点击“生成图像”后,页面显示了生成图片、成功提示和调用耗时,同时提供图片与调用记录的下载入口,完成了从网页输入到结果展示的交互流程。

07-web-success

generated-3

三次成功记录如下。日期与时间按程序记录的本机时区保存。

调用方式 提示词 日期 调用及保存耗时 结果
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 中编写个人介绍。

主页包含学校与专业、技能自评、技术兴趣、“布线前瞻资源感知”项目介绍、能力不足与未来三年规划。

08-github-profile-before-avatar

我的三年规划是:第一年巩固基础、推进现有项目并了解考研方向;第二年系统备考,在时间允许时保持相关实验和资料阅读;第三年根据升学情况衔接后续学习,若顺利升学,逐步参与课题研究。

选择考研的原因是希望提升学历、完善知识体系,并获得更多科研和实践机会。具体计划将依据学习进度和实际情况调整。

五、Markdown 编写与提交记录

本篇作业使用 Markdown 编写,使用了标题、表格、列表、代码块、链接和图片。

image

六、参考资料与代码

posted @ 2026-09-07 17:59  k0n0y  阅读(6)  评论(0)    收藏  举报