第一次作业
| 这个作业属于哪个课程 | https://edu.cnblogs.com/campus/fzu/202601SofwareEngineering |
|---|---|
| 这个作业要求在哪里 | https://edu.cnblogs.com/campus/fzu/202601SofwareEngineering/homework/15712 |
| 这个作业的目标 | 熟悉GitHub与博客园的使用流程,学会调用Hugging Face的Flux模型生成图像并记录调参过程,搭建个人主页,梳理自身技术栈与学习规划 |
| 学号 | 102402118 |
软件工程第一次个人作业随笔
一、准备工作
1. GitHub 账号注册
在 GitHub 官网注册了个人账号,用户名 Feion-Chen,并完善了头像、个人简介、学校(福州大学)、邮箱等基本信息。之前课程作业中接触过 Git,但这次是第一次认真把主页当作"个人技术名片"来搭建。
2. 博客园账号注册
注册了博客园账号,将编辑器切换为 Markdown 模式,设置了页面样式,关注了任课老师黄兆武、助教李怡涵和焦圣豪的博客,并加入了 H202601 软件工程与软件工程实践班级博客,完成了实名认证。
二、Hugging Face API 调用
1. 账号注册与 API 获取
在 Hugging Face 官网注册个人账号,进入 Settings → Access Tokens 页面创建了具有 read 权限的 API Token。本次作业调用的模型是 XLabs-AI/flux-RealismLora(FLUX.1 加上写实风格 LoRA),通过 Hugging Face Inference Providers 发起云端推理请求。
前端页面采用左右两栏布局:左侧是正向提示词、负向提示词输入框和生成按钮,右侧实时显示生成结果。只有点击"生成图片"按钮时才会产生云端推理费用。
2. 提示词设计思路与修改过程
作业要求生成一张"最贴近真实世界"的图像,我选择的主题是"一个人在雨中城市街道散步"。这个场景有丰富的光影、材质和氛围细节,适合检验写实模型的效果。整个调试过程分为三次尝试:
第一次尝试:简单中文提示词
直接输入了最朴素的中文提示词:
正向提示词:一个人在雨中散步
生成结果如下:
问题分析:模型直接生成了一张二次元动漫风格的红发少女图,和"真实世界""雨中散步"的预期相差很远。原因有两点:一是中文提示词语义过于模糊,模型不知道要"照片级写实";二是 FLUX 这类模型对自然语言长句的理解能力较强,但短语式提示词容易被模型的先验风格带偏;三是 XLabs Realism LoRA 虽然主打写实,但如果提示词里没有明确的风格约束,仍可能输出偏向插画的结果。
第二次尝试:补充角色与负向提示词
我在正向提示词里加入了性别和服装描述,同时用负向提示词尝试排除女性形象:
正向提示词:一个男人在雨中散步,穿着工装
负向提示词:不是女的
生成结果如下:
问题分析:这次虽然风格偏向写实了一些,但人物依然是女性形象,而且变成了古风汉服风格,和"现代工装""雨中街道"完全不沾边。这说明用"不是女的"这种中文否定句作为负向提示词效果很差——负向提示词本质上是一组权重词,模型并不会像人类一样理解"不是X"这种否定逻辑,它只会把"女的"这个词当作需要避免的特征,但对中文词汇的语义映射很不稳定。同时"工装"这个中文词也没有被正确理解为 workwear,反而被古风元素覆盖了。
第三次尝试:英文结构化提示词 + 完整负向提示词
吸取前两次教训,我改成了英文提示词,并且按照摄影/写实风格的写法,把主体、场景、服装、光影、镜头参数、材质质感都写清楚;负向提示词也换成了明确的排除词列表:
正向提示词:
documentary photo of a young man walking in heavy rain on a city street, wearing dark work jacket and jeans, rain droplets on clothes, wet pavement reflecting neon street lights, overcast dusk lighting, candid shot, eye-level view, 35mm f1.8 lens, shallow depth of field, realistic skin texture, film grain, natural colors负向提示词:
woman, girl, female, cartoon, anime, illustration, 3d render, painting, drawing, blurry, out of focus, distorted limbs, bad anatomy, watermark, text, signature
生成结果如下:
结果分析:这次效果非常理想——画面中是一个穿深色工装外套和牛仔裤的年轻男性,背对着镜头走在雨后的城市街道上,路面反射着霓虹灯光,雨雾氛围浓厚,景深和胶片颗粒感都很真实,完全符合"贴近真实世界"的要求。
3. 调参经验总结
通过三次尝试,我总结出以下几点:
- 提示词尽量用英文:Flux 及其 LoRA 主要基于英文语料训练,英文提示词对语义和风格的控制远好于中文。
- 正向提示词要结构化:按"主体 + 动作 + 服装 + 环境 + 光影 + 镜头参数 + 质感"的顺序描述,模型更容易还原预期画面。
- 负向提示词不要用否定句:应该直接列出要排除的关键词(如 woman、anime、3d render 等),而不是写"不是女的"。
- 风格约束要写在最前面:在正向提示词开头加上
documentary photo、realistic、photorealistic这类词,可以有效压制模型默认的插画/动漫倾向。
4. API 调用体验与心得
这次调用让我第一次直观感受到了大模型 API 的使用方式:前端只需要构造好请求体(模型 ID、提示词、参数),发送到 Hugging Face 的推理端点,等待云端 GPU 计算完成后就能拿到图像。整个过程不需要自己部署模型、不需要显卡,成本就是每次推理的几美分,非常适合学生做小项目验证想法。
同时也体会到"提示词工程"不是玄学——它和写代码很像,都是把模糊的需求拆成明确的、机器能理解的指令。前两次失败让我明白,模型的输出质量很大程度上取决于输入描述的精度。
三、GitHub 个人主页搭建
我选择了方案一:创建一个与 GitHub 用户名同名的仓库(Feion-Chen/Feion-Chen),在根目录的 README.md 中编写个人介绍。这样访问 github.com/Feion-Chen 时就会自动展示这份 README。
主页内容包括:头像、个人简介、关于我、个人成果与专业实践、技能栈与自我评估。
目前主页还比较简洁,后续会随着课程推进和个人项目积累逐步丰富。
四、技能树与技术偏好自我评估
已掌握的能力
- 编程语言:C/C++(能独立写课程作业和简单数据结构代码),了解基础汇编(能看懂简单的指令和寄存器操作)。
- 专业基础:学过数据结构与算法(链表、栈、队列、树、排序查找等常见算法)、计算机组成原理(完成过仿真实验)、计算机网络(完成过通信实验)、操作系统(完成过基础实验)。
- 工具使用:Git 基本操作(add/commit/push/pull/branch)、VSCode 开发环境配置、能够独立完成简单项目的代码版本管理和环境部署。
感兴趣的方向
- AI / 大模型应用:这次调用 Hugging Face API 让我对大模型部署和应用开发产生了兴趣,希望后续能深入学习。
- 计算机底层:喜欢拆解硬件、学习指令集相关知识,想更深入地理解软件到底是怎么跑在硬件上的。
还欠缺的能力
- 工程化能力:目前写的都是课程实验级别的代码,缺乏多人协作、大型项目、代码规范、单元测试、CI/CD 等实际工程经验。
- 编程语言广度:除了 C/C++ 之外,对 Python、JavaScript、Java 等语言都只是了解基础,没有深入做过项目。
- Web 开发能力:这次的前端页面是参考示例修改的,对 HTML/CSS/JS 的理解还很皮毛。
- 算法与刷题量:数据结构课程学过,但刷过的算法题很少,解决复杂问题的能力有待提高。
五、代码量说明
截至目前,我的代码量大概在 3000~5000 行左右,主要是 C/C++ 课程作业和实验代码,分散在各个课程的仓库里,没有做过统一统计。
完成本学期软件工程课程后,我希望能达到 10000 行以上,并且代码不再是零散的课程作业,而是有结构、有文档、有版本管理的完整项目,包括:
- 课程要求的团队项目代码
- 1~2 个自己主动写的小项目
- GitHub 上有持续的 commit 记录
六、本课程最期待学习的知识
- 软件开发的完整流程:从需求分析、设计、编码、测试到发布,完整走一遍工程项目是什么样的。
- 团队协作开发:多人如何通过 Git 协作、代码评审、任务拆分来完成一个项目,这是我目前最缺的经验。
- 代码规范与工程实践:怎么写出可维护、可扩展的代码,而不是"能跑就行"。
- AI 工具在软件工程中的应用:比如用 AI 辅助写代码、查 bug、写文档,提升开发效率。
希望通过这门课,能从"只会写课程作业"的状态,过渡到"能参与真实软件开发项目"的水平。
七、AI 工具生成的软件工程课程学习指南
我使用 DeepSeek 生成了一份软件工程课程学习指南,以下是生成内容:
软件工程课程学习指南
一、课程概述
软件工程是一门研究如何用工程化方法构建和维护高质量软件的学科,涵盖需求分析、系统设计、编码实现、测试验证、部署维护等全生命周期。
二、核心知识点
- 软件工程基础:软件生命周期、软件开发模型(瀑布、迭代、敏捷)、软件过程模型。
- 需求工程:需求获取、需求分析、需求规格说明、需求验证与管理。
- 系统设计:体系结构设计、面向对象设计、设计模式、数据库设计。
- 编码与实现:编程规范、代码重构、版本控制(Git)。
- 软件测试:黑盒测试、白盒测试、单元测试、集成测试、系统测试。
- 项目管理:进度管理、风险管理、团队协作、敏捷开发实践。
三、学习方法建议
- 理论结合实践:每学一个知识点,尽量在课程项目中实际用一次。
- 重视团队项目:软件工程是"工程",不是一个人闷头写代码,多和组员沟通协作。
- 善用工具:Git、GitHub、Markdown、项目管理工具都是必备技能。
- 多读优秀开源项目的代码和文档,学习别人是怎么组织项目的。
四、推荐资源
- 《软件工程:实践者的研究方法》(Roger Pressman)
- 掘金、知乎上的工程化相关文章
- GitHub 上优秀开源项目的 README 和贡献指南
我的分析
这份指南整体来说比较合理,覆盖了软件工程的主要知识模块,学习方法建议也很中肯,尤其是"理论结合实践""重视团队项目"这两点,和我对这门课的预期是一致的。
但它也有不足:
- 太泛泛:指南里列的都是通用知识点,没有结合具体课程(比如我们这门课会用什么语言、做什么类型的项目、考核方式是什么),对我自己的针对性不够强。
- 缺少实操层面的指引:比如 Git 具体怎么用、怎么写一个好的 README、怎么做代码评审,这些工程细节指南里没有展开。
- 没有提到 AI 辅助开发:现在实际开发中 AI 工具已经很常用了,指南里完全没提这一块,稍微有点过时。
总体来说,这份指南可以当作一个知识框架来参考,但具体怎么学、怎么练,还是要跟着课程节奏和自己的项目实践走,不能完全依赖 AI 生成的内容。
浙公网安备 33010602011771号