软件工程第一次作业
| 这个作业属于哪个课程 | H202601软件工程与软件工程 |
|---|---|
| 这个作业要求在哪里 | 2026秋软件工程个人作业(第一次) |
| 这个作业的目标 | 掌握通过 HuggingFace API 调用 Flux 模型生成真实感图像并结合前端实现交互式文生图;梳理个人技能树、明确代码量目标与课程学习规划 |
| 学号 | 102402114 |
软件工程作业:Flux 文生图实践 + 技能树梳理与学习规划
第一部分 · 调用 HuggingFace 的 Flux 模型实现交互式文生图
一、作业目标
在 HuggingFace 官网注册账号并获取 API Token,调用 Flux 模型 生成一张贴近真实世界的图像;并在调用模型的代码基础上,结合一个前端页面,实现「输入提示词 → 点击生成 → 页面显示图片」的交互式生成,最后记录 API 调用步骤、提示词设计思路与心得体会。
二、环境准备
-
注册 HuggingFace 账号。
-
在 Settings → Access Tokens 创建 API Token。
-
安装依赖:
pip install flask huggingface_hub Pillow -
设置环境变量(Token 不写进代码,避免泄露):
$env:HF_TOKEN="hf_你的Token"
三、API 调用步骤
3.1 核心调用代码
import os
from huggingface_hub import InferenceClient
client = InferenceClient(provider="auto", api_key=os.environ["HF_TOKEN"])
image = client.text_to_image(
"A majestic mountain lake at sunrise, mist rising from the calm water surface, pine trees in the foreground with dew on needles, snow-capped peaks reflecting in the glass-like lake, warm golden light hitting the mountain tops. Shot on Fujifilm X-T5, 24mm wide-angle lens, f/8, golden hour lighting, deep depth of field, National Geographic style, photorealistic, ultra detailed, 8K",
model="black-forest-labs/FLUX.1-dev",
)
image.save("test.png")
3.2 调用成功记录
运行后成功生成了一张山湖风景图,说明 API 调用链路(Token → provider → 模型 → 出图)已经打通
四、前端交互实现
为了「交互生成」,我用 Flask(后端)+ HTML/CSS/JS(前端) 搭了一个小应用:前端提供提示词输入框和「生成」按钮,点击后通过 fetch 请求后端 /generate 接口,后端调用 HuggingFace API 生成图片,再把图片以 base64 返回给前端展示。
4.1 后端关键代码
@app.route("/generate", methods=["POST"])
def generate():
prompt = request.get_json().get("prompt").strip()
image = make_client().text_to_image(prompt, model=MODEL_ID)
# 转 base64 返回给前端展示
buf = io.BytesIO()
image.save(buf, format="PNG")
return jsonify({"image": base64.b64encode(buf.getvalue()).decode()})
4.2 前端交互页面
在浏览器中打开 http://127.0.0.1:5000,输入提示词、点击「生成图像」,页面直接显示结果:

五、提示词设计思路与修改过程
生成「贴近真实世界」的图像,关键是把"插画感"压下去、把"照片感"拉起来。我通过给提示词逐步加入主体细节、环境和摄影术语来迭代:
| 版本 | 提示词 | 效果 |
|---|---|---|
| 初版 | A mountain lake at sunrise |
画面有了,但细节少、偏示意 |
| 加主体与环境 | A mountain lake at sunrise, mist rising from the calm water, pine trees in the foreground, snow-capped peaks |
层次更丰富,构图更完整 |
| 加摄影参数 | 上一版 + Shot on Fujifilm X-T5, 24mm wide-angle lens, f/8, golden hour lighting, deep depth of field |
更像实拍照片 |
| 最终版 | 上一版 + National Geographic style, photorealistic, ultra detailed, 8K |
质感拉满,接近真实摄影 |
核心思路可以总结为一句话:主体 + 环境细节 + 光线 + 镜头参数 + 风格关键词,逐层叠加,让画面越来越像摄影作品。
六、体验与心得
这次作业让我踩了不少坑,也真正理解了调用大模型 API 背后的几个关键点:
-
免费额度有限:第三方推理会消耗免费额度(用完会报 402),而 Flux 系列在官方免费推理上已经下架(410)。这让我意识到:免费服务随时可能变化,实际开发要关注成本和稳定性。
-
Token 的类型和权限:普通的
readToken 无法调用推理接口,需要创建 Fine-grained Token 并勾选「Make calls to Inference Providers」权限,同时开启「读取门控仓库」权限(因为 Flux 是 gated 模型,需要先在模型页同意协议)。 -
provider 的差别:
hf-inference是官方推理,auto会自动路由到 fal-ai 等第三方;不同 provider 的可用性和计费方式不一样。
第二部分 · GitHub 个人主页搭建
七、方案选择
我选择了【方案二:借助 GitHub Pages 搭建个人主页】——使用 GitHub Pages(基于 Academic Pages 模板)搭建了一个内容较为充实的展示页面,把自我介绍、技能成果与三年规划以网页形式呈现,方便展示与分享。
八、主页内容
主页按题目要求包含三部分:
1. 自我介绍
2. 技能与自我评估:
- 已掌握:Python(基础了解)、LangChain / Agent、Git
- 感兴趣的方向:后端全栈开发、大模型应用落地
- 最希望学习:数据库、系统设计、部署运维
3. 未来三年规划:以后端与数据库方向为主线——第一年打牢基础,第二年深入实战,第三年专精落地。
九、主页截图

第三部分 · 技能树梳理、代码量与课程学习规划
七、技能树与技术偏好(自我评估)
已具备的专业知识与能力
- 能力 A · Python 编程:基础了解,能编写简单脚本,希望进一步深入学习数据处理与 Web 后端开发
- 能力 B · LangChain / Agent 开发:熟悉大模型应用开发框架,能搭建基于 LLM 的 Agent 应用
- 能力 C · Git 版本控制:熟练使用 Git,具备规范的协作开发与代码管理习惯
感兴趣的技术方向
- 后端全栈开发
- 大模型(LLM)应用落地
还欠缺的能力
- 数据库深入(索引、事务、查询优化)
- 系统设计与微服务
- 部署运维(Docker、CI/CD)
- 前端工程化
- 计算机网络、操作系统等底层基础
八、代码量
- 截至目前的代码量:约5k-7k行(含课程作业与个人项目)
- 完成本学期课程后期望达到:约 2w 行
九、最期待学习的知识 & 希望获得的收获
- 最期待学习:后端系统设计与数据库优化,以及如何把大模型(LLM / Agent)真正落地到产品中;软件工程从需求分析到部署上线的完整流程。
- 希望获得的收获:能独立完成一个完整项目的能力、工程化思维,以及团队协作与项目管理的经验。
十、AI 工具生成的软件工程课程学习指南及分析
10.1 学习指南(由 DeepSeek 生成)
第一年 · 打牢基础
- 熟练掌握数据结构、算法与面向对象编程。
- 学习 Web 后端框架(FastAPI / Flask),能独立编写 RESTful API。
- 学习 SQL 与关系型数据库(MySQL / PostgreSQL)的基本操作与设计。
第二年 · 深入与实战
5. 深入学习数据库原理:索引、事务、查询优化。
6. 学习缓存(Redis)、消息队列与系统设计基础。
7. 走完软件工程全流程:需求分析、UML 建模、设计模式、测试。
8. 完成 1–2 个完整项目(团队协作),经历从需求到上线的全过程。第三年 · 专精与落地
9. 学习微服务、容器化与部署(Docker、CI/CD)。
10. 结合大模型(LLM / Agent)做 AI 应用落地。
11. 补齐计算机网络、操作系统等底层基础。
12. 复盘总结,沉淀技术笔记与作品集。
10.2 我对这份指南的分析
这份指南整体是合理的:它抓住了软件工程的核心——既强调基础能力(编程、版本控制),也强调工程化思维(测试、CI/CD)和实战(做完整项目),还贴合了当前「AI 辅助开发」的趋势。
对我有帮助的部分:它帮我理清了学习重点,提醒我不要零散地学语法,而是系统地「做项目 + 补工程化能力」,这正好对应我欠缺的数据库、部署等短板。
不足之处:指南虽然按三年做了规划,但仍缺少具体的教材、课程资源和进度节点,对课程的理论部分(如需求规格说明书、设计文档的写法)着墨较少。所以我会把它当作「地图」,再结合课程进度补充具体细节。
十一、后台编辑页面截图


浙公网安备 33010602011771号