软件工程第一次作业

这个作业属于哪个课程 202601软件工程与软件工程实践
这个作业要求在哪里 2026软件工程个人作业(第一次)
这个作业的目标 掌握 HuggingFace API 的调用方法,完成 Flux 模型图像生成交互;搭建 GitHub 个人主页;梳理技能树并制定未来三年规划。
学号 [102402132]

一、准备

  • GitHub:注册账号,完善头像与简介,用户名 qfm
  • 博客园:注册账号,实名昵称,加入课程班级,把编辑器切换为 Markdown 编辑器

二、Hugging Face API 调用:用 Flux 生成真实感图像

2.1 任务

在 Hugging Face 注册并获取 API,用 Flux 模型生成一张贴近真实的图片,并结合前端接口实现交互生成(输入提示词 → 点击生成 → 显示并可下载)。

2.2 操作步骤

  1. 注册 Hugging Face,在 Settings → Access Tokens 创建 Token。类型选 Fine-grained勾选 Make calls to Inference Providers(否则会报 403),复制 hf_ 开头的 token。
  2. 打开 black-forest-labs/FLUX.1-schnell 模型页,点 Agree and access repository 接受授权。
  3. 把 token 写入后端,安装依赖,启动服务,浏览器打开 http://127.0.0.1:8080

2.3 核心代码

后端用 huggingface_hubInferenceClient 调用模型,结果转 Base64 回传:

from huggingface_hub import InferenceClient
import os

HF_TOKEN = os.environ.get("HF_TOKEN", "hf_这里是占位,请勿填真实token")
client = InferenceClient(token=HF_TOKEN)
MODEL = "black-forest-labs/FLUX.1-schnell"   # 作业给的 LoRA 不能直接调,用它的基础模型

@app.route("/generate", methods=["POST"])
def generate():
    prompt = request.get_json().get("prompt", "").strip()
    image = client.text_to_image(prompt, model=MODEL)
    buf = io.BytesIO(); image.save(buf, format="PNG")
    return jsonify({"image": base64.b64encode(buf.getvalue()).decode("utf-8")})

前端 JS 提交提示词并显示图片:

async function generate() {
    const prompt = document.getElementById('prompt').value.trim();
    const res = await fetch('http://127.0.0.1:8080/generate', {
        method: 'POST',
        headers: {'Content-Type': 'application/json'},
        body: JSON.stringify({prompt: prompt})
    });
    const data = await res.json();
    const img = document.getElementById('result');
    img.src = 'data:image/png;base64,' + data.image;
    img.style.display = 'block';
}

前端我做了一个"暗房 Darkroom"风格的界面:输入框 + 可点击追加的"质感标签",生成后带画框展示,支持下载和历史记录。
d48c0b1a-8b52-4e38-a1bb-4119c1c6acd3
darkroom_1788870866663

2.4 提示词设计思路与修改过程

我的提示词从笼统迭代到写实(以"学生自习"为例):

  • V1a university student —— 太笼统,画面偏插画。
  • V2a university student, photorealistic —— 加了真实感关键词,仍偏平面。
  • V3A photograph of a student studying in a library, natural daylight, 35mm lens, shallow depth of field —— 加入光线和镜头,质感明显提升。
  • V4(最终版)A high-quality realistic photograph of a university student studying in a modern library, natural daylight through large windows, natural skin texture, realistic hair, 35mm lens, shallow depth of field, photorealistic, highly detailed —— 主体明确,光线、材质、镜头到位,真实感最强。

心得:写实提示词 = 主体 + 场景 + 光线 + 镜头参数 + 质感词。模型一样,提示词不同效果差距巨大。

2.5 体验与心得

  1. Prompt Engineering 很重要:同样模型,提示词不同,真实感差距很大。
  2. 403 让我理解授权体系:Token 需要勾"推理服务"权限、模型需要接受授权,流程是"注册 → 拿 token → 勾权限 → 过授权"。
  3. 方案要能落地:作业给的 LoRA 不能直接调,需挂基础模型;官方 API 变动时,可用 Space + Gradio API 作为备选。
  4. Token 要保密:截图打码,不公开。

三、GitHub 个人主页

采用方案一(个人资料自述文件):新建与用户名同名(qfm)的公开仓库,在根目录 README.md 写自我介绍、成果与规划,GitHub 会自动在主页顶部展示。
f199aaca-8eaf-40e1-a85e-b9b27b4c7376

已掌握技能:Python 与数据处理(pandas/numpy/matplotlib)、机器学习入门(scikit-learn,KNN/线性回归/聚类)、基础 SQL(MySQL)、Flask 后端与简单 Web、Hugging Face API 调用、Git/GitHub。
实践经历:参加楼宇门禁系统的相关网页设计项目,有编写测试用例、前端设计、后端开发经验。
感兴趣方向:人工智能与机器学习(尤其 LLM 应用)、数据可视化、全栈工程。
未来三年规划:以考研深造为主、就业为备选,方向为计算机/人工智能/数据科学。

  • 大三(2026–2027):补强数学,完成 2~3 个完整项目,参与开源或科研和竞赛,过四/六级。
  • 大四(2027–2028):系统备考与深入学习,根据情况考研,或进入头部互联网企业数据/算法岗位实习。

四、技能树梳理与自我评估

已具备的能力:

  • 能力 A:Python 编程与数据处理,能独立完成数据清洗、统计分析与可视化。
  • 能力 B:Web 开发与 AI 应用,会用 Flask 搭后端、HTML/JS 做前端交互,调用 Hugging Face API(本次实践)。
  • 能力 C:工具链,能用 Git/GitHub 管理版本、VS Code 编码、Jupyter 做数据探索。

感兴趣方向:人工智能与机器学习(LLM 应用)、数据可视化、大数据处理、全栈工程。

尚欠缺的能力:

  1. 工程化能力——大型项目的模块划分与架构设计经验不足,难以统筹全局。
  2. 算法深度——数学原理理解不扎实,还做不到从零手写算法。
  3. 软件工程规范——编码风格、注释、模块化、测试、文档意识有待加强。
  4. 前端框架——只懂原生 HTML/JS,不熟悉 React/Vue。

五、代码量统计与目标

  • 截至目前代码量:约 5000 行(数据分析练习、机器学习小项目、Flux 文生图 Web 应用、零散作业)。
  • 本学期目标:约 8000 ~ 10000 行有效代码,主要靠课程大作业、沉淀可复用的代码仓库,以及坚持 LeetCode 刷题。

六、本课程最期待学习的知识与收获

  • 最期待:软件需求分析(怎样把模糊想法变成可验收、可测试的规格说明)、团队协作(Git 规范、任务分工、进度管理)、测试与质量保障(单元测试、代码评审)。
  • 收获:完整经历一次"从需求到上线"的团队项目,建立工程化思维——代码不只"能跑",更要"可维护、可协作、可交付";提升文档与汇报能力。

七、AI 工具生成的软件工程学习指南

我用国产大模型 DeepSeek 生成了一份软件工程学习指南,摘要如下:

  1. 理解软件生命周期:需求分析 → 设计 → 编码 → 测试 → 维护。
  2. 掌握需求工程:学会用用例图、用户故事把想法转成可验收的规格。
  3. 重视设计模式与架构:了解 MVC、微服务等风格与常用设计模式。
  4. 实践版本控制与协作:熟练 Git(分支、冲突解决),实践 PR 评审。
  5. 动手做项目,别只背书:以小组项目为主线。
  6. 学习测试与质量保障:单元测试、集成测试、代码覆盖率。
  7. 定期复盘与文档化。

分析:这份指南方向合理,抓住了生命周期、需求、设计、测试、协作这些核心,也强调"动手做项目"和"定期复盘"。对我最有启发的是第 2、4、5 条——让我从"只写代码"转向"边做边建模、边测试、边复盘",并实践 Git 协作与 PR 评审。不足是内容偏原则式,缺可执行的细化清单(读什么书、每阶段产出什么、如何自测),需要我结合课程进度自己细化落地。


八、作业编写说明

  • 本文使用 Markdown 编写(博客园「设置 → 编辑器」已切换为 Markdown 编辑器)。
  • 开头已附课程信息表格。
  • 后台博文编辑页面截图
    image
posted @ 2026-09-09 20:32  friberg  阅读(20)  评论(0)    收藏  举报