跳至主要内容

Microsoft 的 Phi-4:分步教程与演示项目

了解如何使用 Microsoft 的 Phi-4 模型构建作业检查器,用于验证解答、提供详细订正,并给出更优雅的替代方案。
· 12分钟 阅读

使用 AI 探索

Microsoft 近期发布了 Phi-4,这是 Phi 小型语言模型家族的最新成员。由于其在数学方面表现出色,我决定用 Phi-4 构建一个与 Gradio 集成的作业检查器。

在本教程中,我将一步步带您构建一个可用的网页应用,它能够验证解答、纠正错误,并提供替代思路——就像一位虚拟助教!

什么是 Microsoft 的 Phi-4 模型?

Phi-4 在复杂推理任务(尤其是数学)方面表现突出,同时也具备常规语言处理能力。其主要特性包括:

  • 高级推理能力: Phi-4 基于高质量合成数据集进行训练,并采用创新的后训练技术,在数学相关推理任务上超越更大的模型。
  • 高效且易用: 具有 140 亿参数,Phi-4 无需大量算力即可输出高质量结果,更易于在更广泛的场景中应用。
  • 可用性: Phi-4 目前可通过 Azure AI Foundry 在 Microsoft Research License Agreement(MSRLA)下获取,也可在 Hugging Face 获取。

Phi-4 在数学推理任务中表现优异,甚至在数学竞赛题上超过了像 Gemini Pro 1.5 这样的更大模型。这使其非常适合需要高级数学问题求解能力的应用。

Phi4 performance on math competition problems

来源:Microsoft

Phi-4 作业检查器:实现概览

我们将用 Phi-4 构建一个 AI 驱动的作业检查器。用户的使用流程如下:

  1. 用户提交已完成的作业(包括题目说明和用户解答)。
  2. 如果解答不正确,模型将像老师一样用详细步骤解释正确解法。
  3. 如果解答正确,模型将予以确认;若答案表达冗杂,则给出更简洁高效的替代方案。

phi-4 demo app workflow

为了提供一个网页界面,便于用户与作业检查器交互,我们将使用 Gradio。

步骤 1:前置条件

在开始之前,请确保已安装以下组件:

  • Python 3.8+
  • PyTorch:用于运行深度学习模型。
  • HuggingFace Transformers 库:用于从 HuggingFace 加载 Phi-4 模型。
  • Gradio:用于创建友好的网页界面。

运行以下命令安装这些依赖:

!pip install torch transformers gradio -q

现在我们已经安装好所有依赖。接下来设置 Phi-4 模型。

步骤 2:设置模型

我们从 HuggingFace 的 Transformers 库加载 Phi-4 模型。随后,分词器会对输入(题目与解答)进行预处理,为推理做准备。

# Imports
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
import gradio as gr

# Load the Phi-4 model and tokenizer
model_name = "NyxKrage/Microsoft_Phi-4"
model=AutoModelForCausalLM.from_pretrained(model_name, torch_dtype=torch.float16, device_map="auto")
tokenizer = AutoTokenizer.from_pretrained(model_name)

# Set tokenizer padding token if not set
if tokenizer.pad_token_id is None:
    tokenizer.pad_token_id = tokenizer.eos_token_id

上述代码片段完成 Phi-4 模型与分词器的设置,并将其与 PyTorch 集成以进行计算。下面对其作进一步说明:

  • 导入 AutoModelForCausalLM 和 AutoTokenizer 以便使用模型与分词功能。
  • 通过 from_pretrained() 方法从 Hugging Face 仓库加载模型,并配置为使用 FP16 精度,以优化内存占用与计算速度。
  • 使用 device_map="auto" 参数可将模型自动映射至可用硬件。
  • 同时加载分词器,用于将输入文本处理为模型可接受的标记。
  • 检查分词器是否定义了填充标记;如未定义,则将 eos_token_id(序列结束标记)指定为填充标记。

步骤 3:设计核心功能 

模型设置完成后,我们为应用定义三个关键功能:

  1. 解答验证:评估用户解答,若不正确则给出订正。
  2. 替代建议:若用户解答表达繁琐,给出更简洁的方案。
  3. 清晰反馈:结构化输出,分区清晰。

以下函数 check_homework() 构造一个提示,包含题目、用户解答,以及给模型的具体指令,用于确认正确性、定位问题,或在解答不正确时提供分步指导。

# Function to validate the solution and provide feedback
def check_homework(exercise, solution):
    prompt = f"""
    Exercise: {exercise}
    Solution: {solution}
Task: Validate the solution to the math problem, provided by the user. If the user's solution is correct, confirm else provide an alternative if the solution is messy. If it is incorrect, provide the correct solution with step-by-step reasoning.
    """
    # Tokenize and generate response
    inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
    print(f"Tokenized input length: {len(inputs['input_ids'][0])}")
    outputs = model.generate(**inputs, max_new_tokens=1024)
    print(f"Generated output length: {len(outputs[0])}")
    response = tokenizer.decode(outputs[0], skip_special_tokens=True)
    # response = response.replace(prompt, "").strip()
    prompt_len = len(prompt)
    response = response[prompt_len:].strip()
    print(f"Raw Response: {response}")
    return response

check_homework() 函数使用模型的分词器对提示进行分词。它将输入转换为 PyTorch 张量,以便在模型所在设备上处理。

随后,模型在 max_new_tokens=1024 的限制下生成响应,用于控制输出长度。您可根据需求调整该值。

最后返回处理后的响应,其中包含反馈或订正解答。

步骤 4:使用 Gradio 创建友好界面

Gradio 让作业检查器的部署更为简单,用户可交互式输入题目与解答。以下代码片段为 check_homework() 函数创建了一个友好的 Gradio 网页界面。界面接收用户输入(题目与解答),并将其传递给模型进行验证。

# Define the function that integrates with the Gradio app
def homework_checker_ui(exercise, solution):
    return check_homework(exercise, solution)

# Create the Gradio interface using the new syntax
interface = gr.Interface(
    fn=homework_checker_ui,
    inputs=[
        gr.Textbox(lines=2, label="Exercise (e.g., Solve for x in 2x + 3 = 7)"),
        gr.Textbox(lines=1, label="Your Solution (e.g., x = 1)")
    ],
    outputs=gr.Textbox(label="Feedback"),
    title="AI Homework Checker",
    description="Validate your homework solutions, get corrections, and receive cleaner alternatives.",
)

# Launch the app
interface.launch(debug=True)

我们使用 gr.Textbox 创建了两个输入框:一个用于数学题目(exercise),另一个用于用户解答。输出显示在一个标注为 "Feedback" 的 gr.Textbox 中。interface.launch() 命令会在浏览器中启动 Gradio 应用,debug=True 标志可输出详细日志以便排查错误。

步骤 5:测试与验证

现在来测试我们的 AI 作业检查器应用。以下是我进行的一些测试:

  1. 简单数学题: 我尝试解答基础概率题,应用返回了结构清晰、表述明了的解答。

Testing Phi4 on a simple math problem.

  1. 复杂导数问题: 对一些模型而言,求导数具有挑战性。在这里,我用作业检查器求解自然对数函数的一阶导数,应用给出了正确且有步骤的推理过程。

Testing Phi4 on a Complex derivative math problem.

结语

在本教程中,我们使用 Phi-4 模型创建了一个 AI 驱动的作业检查器。该应用能够验证解答、提供详细订正,并给出更优雅的替代方案,堪称学生的理想虚拟老师。

准备扩展该应用了吗?不妨尝试更复杂的问题,或将其集成到教育平台中,让更多人受益!

Aashi Dutt

作者

Aashi Dutt

我是一名 Google Developers 机器学习(生成式 AI)领域的专家、Kaggle 三项专家,以及 Women Techmakers 大使,拥有 3 年以上的技术从业经验。2020 年我共同创办了一家健康科技初创公司,目前在佐治亚理工学院攻读计算机科学硕士,专攻机器学习。

主题