2026秋软件工程个人作业(第一次)
| 这个作业属于哪个课程 | H202601软件工程与软件工程实践 |
|---|---|
| 这个作业要求在哪里 | 2026秋软件工程个人作业(第一次) |
| 这个作业的目标 | 调用Hugging Face API完成AI图像生成,结合前端实现交互;GitHub个人主页建设,梳理自己的专业技能、技术兴趣和未来发展规划;完成博客记录。 |
| 学号 | 102401115 |
一、Hugging Face 账号及 API Token 获取
1、创建Access Token

如图我已经创建了名为Yi-shang0101Access Token
2、C++ 项目编译及后端实现
核心代码由chatgpt生成

const std::string MODEL_ID =
"XLabs-AI/flux-RealismLora";
const std::string HF_API_URL =
"https://router.huggingface.co/fal-ai/fal-ai/flux-lora";
const std::string LORA_URL =
"https://huggingface.co/XLabs-AI/flux-RealismLora/"
"resolve/main/lora.safetensors";
本实验使用 XLabs-AI/flux-RealismLora,程序通过 Hugging Face Inference Provider 调用 FLUX LoRA 推理接口,并加载指定的 Realism LoRA 权重。
(1)Token 获取
const char* tokenEnv = std::getenv("HF_TOKEN");
if (!tokenEnv || std::string(tokenEnv).empty()) {
std::cerr << "HF_TOKEN is not set." << std::endl;
return 1;
}
std::string hfToken = tokenEnv;
为避免将 Hugging Face Token 直接写入源代码,程序通过系统环境变量 HF_TOKEN 获取认证信息,提高 API 密钥的安全性。
(2)接收前端请求
server.Post("/api/generate",
[&](const httplib::Request& req,
httplib::Response& res) {
json input = json::parse(req.body);
std::string prompt =
input.value("prompt", "");
int width =
input.value("width", 1024);
int height =
input.value("height", 1024);
// 后续调用 Hugging Face API
});
(3)构造 FLUX 模型请求参数
json payload = {
{"prompt", prompt},
{"image_size", {
{"width", width},
{"height", height}
}},
{"num_inference_steps", steps},
{"guidance_scale", guidance},
{"num_images", 1},
{"output_format", "jpeg"},
{"loras", json::array({
{
{"path", LORA_URL},
{"scale", loraScale}
}
})}
};
(4)HTTP 请求
std::string requestBody = payload.dump();
std::string auth =
"Authorization: Bearer " + hfToken;
headers = curl_slist_append(
headers, auth.c_str());
headers = curl_slist_append(
headers, "Content-Type: application/json");
curl_easy_setopt(
curl, CURLOPT_URL,
HF_API_URL.c_str());
curl_easy_setopt(
curl, CURLOPT_HTTPHEADER,
headers);
curl_easy_setopt(
curl, CURLOPT_POST, 1L);
curl_easy_setopt(
curl, CURLOPT_POSTFIELDS,
requestBody.c_str());
curl_easy_setopt(
curl, CURLOPT_POSTFIELDSIZE,
static_cast<long>(requestBody.size()));
(5)前后端交互
const response = await fetch("/api/generate", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify(data)
});
用户在 Web 页面输入提示词并单击“生成图像”按钮后,JavaScript 将提示词和生成参数发送至 C++ 后端。C++ 后端调用 Hugging Face API,获得生成结果后保存图像,并将结果地址返回前端进行显示。
3、API 调用
API 调用成功展示
============================================================
[2026-09-10 00:08:18] Hugging Face API request
Request ID : 4f006d33
Model : XLabs-AI/flux-RealismLora
Provider : fal-ai
Prompt : A university student reading in a library,
realistic photo.
Resolution : 1024x1024
Steps : 28
Guidance : 3.5
LoRA scale : 1
HTTP : 200
Result : SUCCESS
Elapsed : 9.11 s
Saved : static\generated\flux_20260910_000825_4f006d33.jpg
============================================================

前端最终生成结果见下图
4、提示词修改过程
第一版提示词
A university student reading in a library,
realistic photo.
附图

第二版提示词
A candid documentary photograph of a university student
reading beside a large window in a quiet modern campus library,
late-afternoon natural sunlight,
realistic skin texture with subtle imperfections,
individual hair strands,
slightly wrinkled cotton clothing,
books with natural wear,
realistic reflections on glass,
35mm full-frame camera,
50mm lens,
f/2.8,
ISO 400,
shallow depth of field,
physically plausible lighting,
true-to-life colors,
unretouched photography,
photorealistic,
no CGI,
no illustration,
no plastic skin.
附图

本实验首先使用较简单的提示词确定人物、动作及场景,但第一次生成结果在人物皮肤、环境材质以及光照方面仍存在一定的 AI 生成特征。因此第二次提示词增加了自然光、50mm 镜头以及浅景深等摄影语言,使画面更接近相机拍摄效果。在最终提示词中进一步加入真实皮肤纹理、细微瑕疵、头发丝、衣物褶皱、书籍磨损和玻璃反射等现实世界中常见的不完美细节,并加入光圈、ISO、镜头焦距以及物理合理光照等参数,同时使用
no CGI、no illustration和no plastic skin降低 CG 感和插画感,从而使生成结果更加贴近真实世界。
5、体验和心得
本次实验完成了从 Hugging Face API 获取、C++ 后端调用、Web 前端交互到 FLUX 图像生成的完整流程。在实际调用过程中,我认识到 API 的使用不仅仅是发送提示词,还涉及 Token 身份认证、HTTP 请求、JSON 数据封装、状态码判断、异常处理以及结果保存等多个环节。
在提示词设计过程中,通过多次修改和对比发现,生成图像的真实性并不完全取决于提示词长度,更重要的是提示词是否从主体、环境、光照、材质和摄影参数等方面提供了明确且合理的约束。特别是在加入真实材质、不完美细节以及摄影参数后,图像的写实程度有明显提高。
同时,本实验采用环境变量保存 Hugging Face Token,而不是直接将密钥写入程序或前端页面,使我进一步认识到了 API 密钥保护的重要性。通过本次实验,我对生成式人工智能 API、Prompt Engineering 以及 C++ 与 Web 前端结合开发的完整过程有了更加深入的理解。
二、GitHub 个人主页搭建
我采取了方案1来完成个人主页建设,其中包括了个人介绍、技能、实践经历、自我评估、兴趣方向和未来三年规划。
https://github.com/Yi-shang0101

三、软件工程课程学习随笔:技能梳理、自我评估与学习计划
目前已经进入大三阶段,接触的专业课程逐渐增多,也开始从“学习单门课程知识”向“把知识用于实际项目”转变。结合目前的学习情况,我对自己的技能、兴趣方向以及不足做一次简单梳理
1、当前技能树与技术偏好
目前已经学习或正在学习的内容主要有:
- 编程基础:初步掌握 C、C++,能够完成基础程序设计和简单算法题。
- 算法与数据结构:学习过常见的数据结构和基本算法,对时间复杂度、查找、排序等内容有一定认识。
- 计算机基础课程:学习过计算机网络、计算机组成原理,对计算机系统的基本结构和网络通信过程有一定理解。
- 系统与开发基础:目前正在学习操作系统、Linux 实践、数据库以及软件工程。
- 基础实践能力:能够使用 Visual Studio、Git、GitHub 等工具,近期完成了使用 C++ 调用 Hugging Face API,并结合前端实现图像交互生成的实践。
自我评估
1、已经具备的能力
2、感兴趣的方向
目前对软件开发、后端开发、Linux、数据库以及人工智能应用比较感兴趣,希望通过后续学习进一步明确自己的技术方向。
3、目前欠缺的能力
1.项目实践经历较少,还没有独立完成过较完整的软件工程项目。
2.对数据库、Linux、操作系统等内容还处于学习阶段。
3.对软件需求分析、系统设计、测试、版本管理等软件工程流程了解还不够深入。
4.代码规范、工程化开发以及团队协作能力还需要提高。
2、目前代码量与本学期目标
目前我个人的代码量也无处统计,但我觉得我的代码量并不多,我希望这学期可以多进行代码练习,提升自己的代码水平。
3、对软件工程课程的期待
我感觉未来会是困难重重,本人并没有什么项目经验,这可能会让我在完成个人和团队作业时会异常困难,不过多亏了大模型的发展使得我们得以应对,希望未来在大模型的帮助下,自己的代码能力能够提高,同时积累自己的项目经验与团队合作经验。
4、使用 ChatGPT 生成的软件工程学习指南
我选择 ChatGPT 生成一份简要的软件工程课程学习指南,内容如下:
软件工程课程学习指南
- 先掌握软件工程的基本概念,理解软件生命周期、软件过程模型以及软件质量的重要性。
- 学习需求分析,能够将用户的实际需求转化为清晰的软件需求说明。
- 学习软件设计方法,包括系统架构、模块划分、接口设计以及数据库设计。
- 在编码过程中重视代码规范、模块化和可维护性,而不仅仅关注程序是否能够运行。
- 学习 Git 等版本管理工具,并通过团队项目练习多人协作开发。
- 掌握基本的软件测试方法,包括单元测试、集成测试和系统测试。
- 通过一个完整项目,将需求分析、设计、编码、测试和维护等环节串联起来。
- 在项目完成后进行总结,分析存在的问题并持续改进。
对 AI 学习指南的分析
chatgpt 给的学习指南还是比较笼统的,并没有给我详尽的学习路线与练习指导,只是更像任务清单。AI只是当作学习规划和知识整理的辅助工具,不能完全代替自己的实践和思考。
四、后台博文编辑页面


浙公网安备 33010602011771号