软件工程 第一次作业

这个作业属于哪个课程 202601软件工程
这个作业要求在哪里 2026秋软件工程个人作业(第一次)
这个作业的目标 调用 Hugging Face API 实现 FLUX 真实感图像交互生成,建设 GitHub 个人主页,在博客园发布个人技能评估与技术规划随笔
学号 102401134

准备工作(已完成)

  • GitHub:账号为2-qing,并完善基础个人资料
  • 博客园:注册账号如下并申请开通博客
  • 已关注吴越钟、张明圣、王奇蕊,并加入 202601 软件工程班级博客

一、huggingface-API的调用

  • 注册账号及token获取
    image
  • 部分代码:

(1) 后端 server.js —— “选路 → 调用 → 回传 → 记日志”四步编排

async function generateWithSDK({ token, prompt, parameters, forcedProvider }) {
  // ① 查询该模型登记的 Provider 列表(与 SDK provider:"auto" 同逻辑)
  const mappings = await fetchProviderMapping(HF_MODEL, token);

  // ② 自动(或按页面指定)选中一个 task=text-to-image 的可用 Provider
  const chosen = forcedProvider
    ? mappings.find(m => m.provider === forcedProvider && m.task === 'text-to-image')
    : chooseTextToImageProvider(mappings);

  // ③ 官方 SDK 调用:XLabs-AI/flux-RealismLora 不在 hf-inference,
  //    显式传入选中的第三方 Provider,避免“provider 不支持”错误
  const client = new InferenceClient(token);
  const blob = await client.textToImage(
    { model: HF_MODEL, provider: chosen.provider, inputs: prompt, parameters },
    { retry_on_error: false, signal: AbortSignal.timeout(280_000) } // 冷启动很慢,给足超时
  );

  const buf = Buffer.from(await blob.arrayBuffer());
  return { buf, mime: blob.type, provider: chosen.provider, providerId: chosen.providerId };
}

调用成功后:buf.toString('base64') 拼成 data:image/png;base64,… 返回浏览器(满足“浏览器收到 base64 图片后预览”);同时把图片存入 public/generated/,并把记录写入页面表格、控制台、logs/requests.jsonl 三处。

失败时统一:

{ ok: false, record: { error } }

同样三处记录,满足“记录成功或失败日志”。


(2)网络工具 hf-lib.mjs —— 解决“浏览器能开、程序连不上”
本机实测:VPN 以“系统代理”方式写入 127.0.0.1:10910,而 Node 的原生 fetch 不会自动读取它,所以此前程序总报 connect timeout / TLS disconnected

代码按以下顺序探测代理:

  1. PROXY_URL
  2. HTTPS_PROXY / HTTP_PROXY
  3. Windows 系统代理注册表
  4. 直连

再用 node:httpsCONNECT 隧道封装一个代理 fetch,调用期间临时替换 globalThis.fetch(SDK 官方也支持 Options.fetch 自定义入口),于是 SDK 内部所有请求都自动走 VPN。

修复后实测访问 huggingface.co0.8s 即返回。


(3) 前端 public/index.html —— 交互与预览

const resp = await fetch('/api/generate', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ token, prompt, provider, width, height, steps, guidance, seed }),
});

const data = await resp.json();

if (data.ok) {
  resultImg.src = data.imageDataUrl;   // ← base64 图片直接预览
  renderLog(data.record);              // ← 表格新增一条成功记录
} else {
  renderLog(data.record);              // ← 失败也入日志表,展示 error
}

  • api调用结果及最终返图
    屏幕截图 2026-09-07 192209
  • 提示词修改
版本 提示词 现象 / 结论 改进点
v1 a portrait of a woman 缺少约束,概念化脸型、皮肤塑料感、虚化生硬 主体、镜头、光线词过少
v2 portrait of a young woman, natural window light, realistic skin, sharp photo 比 v1 真实,但仍偏"糖水片",皮肤光滑 realistic 是弱约束词,换成可感知的具体描述
v3 Photorealistic portrait of a young Chinese woman with natural skin texture and subtle freckles, soft golden-hour window light from the side, 85mm f/1.8 shallow depth of field, shot on full-frame DSLR, sharp focus on eyes, documentary realism, natural colors, ultra detailed, 8k 皮肤质感、光比、景深最接近真实照片 五要素齐全,固化为页面默认模板
  • 心得体会:此次前端部分套用了之前项目的本地代码,同时也借助了不少AI模型的帮助。网络层面是本次最大的坑:浏览器能访问 ≠ Node 能访问。VPN 的"系统代理"默认只服务浏览器,Node 需要自己读代理。在多次尝试失败后在AI模型的帮助下通过自定义 fetch(HTTPS CONNECT 隧道)让 SDK 走本地代理后一次通过,这是真实生产环境与课堂练习差别最大的一课。

二、github个人主页展示

新建个人仓库并通过套用模板修改内容进行的简单个人主页展示:
image

三、博客随笔

链接如下:自我认知及提高随笔

  • 博文编辑页面的截图:
    image

第一次作业:自我认知及提高随笔

一、技能树与技术偏好自我评估

已具备的专业知识与能力

  • 能力 A:掌握基础的 C 和 C++ 基础语法、算法,以及部分 Python 语法。
  • 能力 B:具备 C/C++ 嵌入式基础开发能力。学习过 GPIO、TIMER、ADC、PWM、SCI 等外设模块,能完成寄存器配置和简单驱动编写。
  • 能力 C:熟悉当前主流 AI 模型的调用与使用,尝试过简单部署。

技术偏好

  • 偏好能快速看到结果的开发方式,例如用 Python 调用 API 完成小应用。
  • 对软硬件结合的项目感兴趣,希望把嵌入式设备接入网络或 AI 能力。

感兴趣的技术方向

  • AI 应用开发:大模型 API 调用、提示词工程、图像生成。
  • Web 全栈开发:前端页面 + 后端接口 + 部署。
  • 对 AI 模型方面的训练原理和未来的发展方向尤其感兴趣。

还欠缺的能力

  • 欠缺 A:深度学习理论知识。目前只会调用 API,不了解模型内部结构和训练过程。
  • 欠缺 B:软件工程系统化方法。对需求分析、架构设计、测试、项目管理的理解还停留在课本层面。
  • 欠缺 C:前端工程化。尚未系统学习 Vue/React 等框架和构建工具。
  • 欠缺 D:代码量和项目经验不足,需要更多完整项目训练。

二、代码量统计与目标

截至目前,我的代码量约为 并未做过实际统计,但预计偏少,主要来自嵌入式课程实验、网页练习和简单脚本编写。

完成本学期软件工程课程后,我希望代码量达到 15000 行。实现方式包括:

  1. 逐步开始接触中大型项目的学习和开发。
  2. 在允许的情况下将课程作业整理成可复现的工程。
  3. 复习过往语言的语法算法,同时尝试系统性学习新语言(Java / Python 等)。

三、本课程中最期待学习的知识

  • 软件工程全流程:从需求分析、设计、编码到测试和部署,完整走一遍项目开发流程。
  • AI 辅助开发:如何把大模型 API 集成到实际软件项目中。
  • AI 工具系统学习:系统学习 AI 在软件工程中的相关原理和运用。

希望通过本课程获得的收获

  1. 写出结构清晰、可维护的代码。
  2. 对 AI 的运用和原理理解更加系统性。
  3. 完成一个可以写进简历的项目。

四、AI 生成的软件工程课程学习指南

以下内容由 DeepSeekV4pro 生成,要求是“生成一份简要的软件工程课程学习指南”。

软件工程课程学习指南(AI 生成)

课程定位:软件工程不是“写代码课”,而是研究如何高质量、可控地开发和维护软件。

核心模块
  • 需求工程:用例图、用户故事、需求规格说明书。
  • 系统设计:架构设计、模块划分、数据库设计、接口设计。
  • 编码规范:命名、注释、代码结构、版本管理。
  • 测试:单元测试、集成测试、系统测试、回归测试。
  • 项目管理:进度计划、风险控制、团队协作。
学习节奏建议
  • 第 1-3 周:掌握 Git/GitHub,熟悉 Markdown,搭建个人主页。
  • 第 4-8 周:学习需求分析,完成一个小项目的前期文档。
  • 第 9-14 周:完成编码与测试,实践持续集成。
  • 第 15-16 周:项目验收、总结复盘。
推荐工具
  • Git、GitHub、VS Code、Draw.io、Postman、JUnit / pytest。
避坑提醒

不要一上来就写代码;先写文档和接口约定;每个阶段都要留记录。

对这份指南的合理性分析

这份指南整体合理,优点是结构清晰,把“软件工程”从单纯的编程提升到流程和规范层面,学习节奏也与课程安排基本匹配。对我有帮助的部分是“不要一上来就写代码”和“每个阶段都要留记录”,这提醒我在后续作业中先做需求分析和设计,再动手编码。

不足是它过于简洁笼统,缺少核心支撑。因此我会把这份指南作为宏观框架,具体情况根据实际和课程安排而定。

posted @ 2026-09-07 21:18  稚知  阅读(8)  评论(0)    收藏  举报