软件工程第一次作业

软件工程课程作业:HuggingFace API 调用实践与个人规划

这个作业属于哪个课程:
H202601软件工程与软件工程实践
这个作业要求在哪里:
2026秋软件工程个人作业(第一次)
这个作业的目标: 掌握 HuggingFace API 的调用方法,完成 Flux 模型图像生成交互;搭建 GitHub 个人主页;梳理技能树并制定未来三年规划。
学号:
[102402130]

1. HuggingFace API 的调用

1.1 任务概述

本次作业旨在通过调用 HuggingFace 的 Inference API,使用 XLabs-AI/flux-RealismLora 模型生成一张写实风格的图片,并结合前端实现交互。

1.2 操作步骤与代码实现

第一步:获取 API Token

首先在 HuggingFace 官网注册账号,并在 Settings -> Access Tokens 中创建一个新的 Token(权限选择 WRITE)。
93c2659e6db7e510d08af82baa1b2bcc

第二步:后端代码编写 (Python)

调用XLabs-AI/flux-RealismLora模型,核心代码如下。

# ==================== 翻译函数 ====================
def translate_chinese_to_english(text: str) -> str:
    """
    将中文文本翻译成英文。
    try:
        from deep_translator import GoogleTranslator
        translated = GoogleTranslator(source='zh-CN', target='en').translate(text)
        return translated
    except ImportError:
        pass
    except Exception:
        pass
    return text
# ==================== 图片生成函数 ====================
def generate_image(prompt: str, negative_prompt: str = "") -> bytes:
    """
    调用 Hugging Face Inference API 生成图片。
    
    Args:
        prompt: 英文提示词
        negative_prompt: 反向提示词(不希望出现在图中的内容)
    
    Returns:
        图片的原始字节数据
    """
    headers = {"Authorization": f"Bearer {HF_TOKEN}"}
    
    payload = {
        "inputs": prompt,
        "parameters": {
            "negative_prompt": negative_prompt,
            "guidance_scale": 7.5,
            "num_inference_steps": 28,
        }
    }
    response = requests.post(
        INFERENCE_API_URL,
        headers=headers,
        json=payload,
        timeout=120
    )
    if response.status_code != 200:
        error_detail = response.text
        raise Exception(f"Hugging Face API 错误 (状态码 {response.status_code}): {error_detail}")
    return response.content

第三步:前端交互界面

使用简单的 HTML/JS实现输入框和图片,关键代码展示:

    <script>
        async function generate() {
            const prompt = document.getElementById('prompt').value;
            const res = await fetch('http://127.0.0.1:5000/generate', {
                method: 'POST',
                headers: {'Content-Type': 'application/json'},
                body: JSON.stringify({prompt: prompt})
            });
            const data = await res.json();
            const img = document.getElementById('result');
            img.src = data.image;
            img.style.display = 'block';
        }
    </script>

1.3 提示词设计思路与修改过程

  • 关键词描述:一只可爱的橘猫坐在窗台上,阳光洒在它的身上,窗外是美丽的夕阳风景,写实风格,高清细节,8k分辨率。加入了光影描述(阳光)和画质关键词(8k),生成的图片真实感明显提升。

5eb2654b620b39442e5c28c86493179e
f4f4c6fcc4d01476ded719efe8fae45a_720

1.4 体验与心得

在调用 API 的过程中,我深刻体会到了 Prompt Engineering(提示词工程)的重要性。模型虽然强大,但需要精准的指令才能输出高质量结果。同时,处理 Base64 图片编码和跨域请求(CORS)也是前后端交互中的常见难点,通过这次实践得到了解决。


2. GitHub 个人主页搭建

我选择了 方案一:创建个人资料自述文件
64734573c4103a7b4cdb26f30721bdde

2.2 个人成果与技能评估

  • 已掌握技能:Python 基础语法、HTML/CSS 网页布局。
  • 实践经历:完成了本次 HuggingFace API 调用项目,参加网络技术挑战赛。
  • 感兴趣方向:大语言模型应用开发、全栈工程。

2.3 未来三年规划

  • 大三:深入参与开源项目或实验室科研,参加各类网络比赛。
  • 大四:根据届时情况选择深造或进入头部互联网企业实习,成为独当一面的工程师。

3. 博客园随笔:技能梳理与学习指南

3.1 技能树与技术偏好自我评估

维度 具体内容 掌握程度
编程语言 Python, C++, JavaScript ⭐⭐⭐ (Python熟练)
开发工具 VS Code, Linux命令行 ⭐⭐ (VS Code常用,Linux还在学习)
AI 技术 Prompt Engineering, PyTorch基础 ⭐ (刚入门)
软技能 英语阅读,文档撰写 ⭐⭐⭐

欠缺能力:目前最缺乏的是系统架构设计能力大型项目协作经验。往往只能写好单个模块,难以统筹全局。

3.2 代码量统计与目标

  • 截至目前的代码量:约 5,000 - 8,000 行(包含课程作业和练习)。
  • 本学期目标:希望达到 20,000 行有效代码。主要通过完成课程大作业和 LeetCode 刷题来实现。

3.3 课程期待

本课程我最期待学习的是软件需求分析。希望能从理论高度理解如何规范地做一个项目,而不仅仅是写代码。

3.4 AI 生成的软件工程学习指南与分析

我使用了 ChatGPT 生成了一份学习指南,内容如下:

AI 建议摘要

  1. 阅读经典书籍《人月神话》和《代码大全》。
  2. 每周阅读一个优秀的 GitHub 开源项目源码。
  3. 坚持写技术博客,通过输出来倒逼输入。
  4. 参与一次完整的开源贡献(Issue -> PR)。

分析
这份指南非常合理且具有实操性。特别是"阅读源码"和"写博客"这两点,与我目前的短板(缺乏架构感)非常契合。通过分析优秀项目的目录结构和接口设计,能最快提升工程思维。我会将"每周阅读源码"纳入我的周计划中。

4. 后台博文编辑页面的截图

0713ecaab962418c01d89dc355a784d3

posted @ 2026-09-08 12:01  林晓捷  阅读(8)  评论(0)    收藏  举报