软件工程 第一次作业
| 这个作业属于哪个课程 | 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。
代码按以下顺序探测代理:
PROXY_URLHTTPS_PROXY/HTTP_PROXY- Windows 系统代理注册表
- 直连
再用 node:https 的 CONNECT 隧道封装一个代理 fetch,调用期间临时替换 globalThis.fetch(SDK 官方也支持 Options.fetch 自定义入口),于是 SDK 内部所有请求都自动走 VPN。
修复后实测访问 huggingface.co 约 0.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]()
第一次作业:自我认知及提高随笔
一、技能树与技术偏好自我评估
已具备的专业知识与能力
- 能力 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 行。实现方式包括:
- 逐步开始接触中大型项目的学习和开发。
- 在允许的情况下将课程作业整理成可复现的工程。
- 复习过往语言的语法算法,同时尝试系统性学习新语言(Java / Python 等)。
三、本课程中最期待学习的知识
- 软件工程全流程:从需求分析、设计、编码到测试和部署,完整走一遍项目开发流程。
- AI 辅助开发:如何把大模型 API 集成到实际软件项目中。
- AI 工具系统学习:系统学习 AI 在软件工程中的相关原理和运用。
希望通过本课程获得的收获
- 写出结构清晰、可维护的代码。
- 对 AI 的运用和原理理解更加系统性。
- 完成一个可以写进简历的项目。
四、AI 生成的软件工程课程学习指南
以下内容由 DeepSeekV4pro 生成,要求是“生成一份简要的软件工程课程学习指南”。
软件工程课程学习指南(AI 生成)
课程定位:软件工程不是“写代码课”,而是研究如何高质量、可控地开发和维护软件。
核心模块
- 需求工程:用例图、用户故事、需求规格说明书。
- 系统设计:架构设计、模块划分、数据库设计、接口设计。
- 编码规范:命名、注释、代码结构、版本管理。
- 测试:单元测试、集成测试、系统测试、回归测试。
- 项目管理:进度计划、风险控制、团队协作。
学习节奏建议
- 第 1-3 周:掌握 Git/GitHub,熟悉 Markdown,搭建个人主页。
- 第 4-8 周:学习需求分析,完成一个小项目的前期文档。
- 第 9-14 周:完成编码与测试,实践持续集成。
- 第 15-16 周:项目验收、总结复盘。
推荐工具
- Git、GitHub、VS Code、Draw.io、Postman、JUnit / pytest。
避坑提醒
不要一上来就写代码;先写文档和接口约定;每个阶段都要留记录。
对这份指南的合理性分析
这份指南整体合理,优点是结构清晰,把“软件工程”从单纯的编程提升到流程和规范层面,学习节奏也与课程安排基本匹配。对我有帮助的部分是“不要一上来就写代码”和“每个阶段都要留记录”,这提醒我在后续作业中先做需求分析和设计,再动手编码。
不足是它过于简洁笼统,缺少核心支撑。因此我会把这份指南作为宏观框架,具体情况根据实际和课程安排而定。




浙公网安备 33010602011771号