Model Overview
Model Features
Model Capabilities
Use Cases
🚀 Phi-4-mini-instruct模型
Phi-4-mini-instruct是一个轻量级的开源模型,基于合成数据和经过筛选的公开网站数据构建,专注于高质量、富含推理的数据。该模型属于Phi-4模型家族,支持128K的令牌上下文长度。经过监督微调(SFT)和直接偏好优化(DPO)等增强过程,它能够精准遵循指令,并具备强大的安全防护机制。
🚀 快速开始
Phi-4-mini-instruct模型适用于广泛的多语言商业和研究用途。它可用于通用人工智能系统和应用,尤其适用于内存/计算资源受限的环境、对延迟有要求的场景,以及需要强大推理能力(特别是数学和逻辑推理)的任务。
你可以通过以下链接进一步了解该模型:
- 📰 Phi-4-mini微软博客
- 📖 Phi-4-mini技术报告
- 👩🍳 Phi烹饪手册
- 🏡 Phi门户
- 🖥️ 在线试用:Azure,Huggingface
Phi-4模型系列:
✨ 主要特性
- 多语言支持:支持多种语言,包括阿拉伯语、中文、捷克语、丹麦语、荷兰语、英语、芬兰语、法语、德语、希伯来语、匈牙利语、意大利语、日语、韩语、挪威语、波兰语、葡萄牙语、俄语、西班牙语、瑞典语、泰语、土耳其语和乌克兰语。
- 长上下文处理:支持128K令牌的上下文长度,能够处理长文本输入。
- 精准指令遵循:经过监督微调(SFT)和直接偏好优化(DPO),能够精准遵循用户指令。
- 强大推理能力:在数学、逻辑推理等方面表现出色。
📦 安装指南
使用vLLM进行推理
所需依赖
flash_attn==2.7.4.post1
torch==2.5.1
vllm>=0.7.3
使用Transformers进行推理
所需依赖
flash_attn==2.7.4.post1
torch==2.5.1
transformers==4.49.0
accelerate==1.3.0
💻 使用示例
基础用法
使用vLLM进行推理
from vllm import LLM, SamplingParams
llm = LLM(model="microsoft/Phi-4-mini-instruct", trust_remote_code=True)
messages = [
{"role": "system", "content": "You are a helpful AI assistant."},
{"role": "user", "content": "Can you provide ways to eat combinations of bananas and dragonfruits?"},
{"role": "assistant", "content": "Sure! Here are some ways to eat bananas and dragonfruits together: 1. Banana and dragonfruit smoothie: Blend bananas and dragonfruits together with some milk and honey. 2. Banana and dragonfruit salad: Mix sliced bananas and dragonfruits together with some lemon juice and honey."},
{"role": "user", "content": "What about solving an 2x + 3 = 7 equation?"},
]
sampling_params = SamplingParams(
max_tokens=500,
temperature=0.0,
)
output = llm.chat(messages=messages, sampling_params=sampling_params)
print(output[0].outputs[0].text)
使用Transformers进行推理
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
torch.random.manual_seed(0)
model_path = "microsoft/Phi-4-mini-instruct"
model = AutoModelForCausalLM.from_pretrained(
model_path,
device_map="auto",
torch_dtype="auto",
trust_remote_code=True,
)
tokenizer = AutoTokenizer.from_pretrained(model_path)
messages = [
{"role": "system", "content": "You are a helpful AI assistant."},
{"role": "user", "content": "Can you provide ways to eat combinations of bananas and dragonfruits?"},
{"role": "assistant", "content": "Sure! Here are some ways to eat bananas and dragonfruits together: 1. Banana and dragonfruit smoothie: Blend bananas and dragonfruits together with some milk and honey. 2. Banana and dragonfruit salad: Mix sliced bananas and dragonfruits together with some lemon juice and honey."},
{"role": "user", "content": "What about solving an 2x + 3 = 7 equation?"},
]
# Prepare the input for the model
input_ids = tokenizer.apply_chat_template(messages, return_tensors="pt").to(model.device)
# Generate the response
generation_args = {
"max_new_tokens": 500,
"temperature": 0.0,
"do_sample": False,
}
output_ids = model.generate(input_ids, **generation_args)
# Decode the generated tokens to text
response = tokenizer.decode(output_ids[0], skip_special_tokens=True)
print(response)
📚 详细文档
输入格式
聊天格式
此格式用于一般对话和指令:
<|system|>Insert System Message<|end|><|user|>Insert User Message<|end|><|assistant|>
支持工具的函数调用格式
当用户希望模型根据给定工具提供函数调用时,使用此格式。用户应在系统提示中提供可用工具,并使用 <|tool|>
和 <|/tool|>
令牌进行包裹。工具应使用JSON格式指定,使用JSON转储结构。示例:
<|system|>You are a helpful assistant with some tools.<|tool|>[{"name": "get_weather_updates", "description": "Fetches weather updates for a given city using the RapidAPI Weather API.", "parameters": {"city": {"description": "The name of the city for which to retrieve weather information.", "type": "str", "default": "London"}}}]<|/tool|><|end|><|user|>What is the weather like in Paris today?<|end|><|assistant|>
负责任的AI考虑
与其他语言模型一样,Phi系列模型可能会出现不公平、不可靠或冒犯性的行为。使用时需要注意以下限制:
- 服务质量:Phi模型主要基于英语文本和一些多语言文本进行训练。非英语语言的性能可能较差,且不同非英语语言之间的性能也会存在差异。训练数据中代表性较少的英语变体,其性能可能不如标准美式英语。
- 多语言性能和安全差距:尽管希望语言模型能在不同语言中更广泛地使用,但Phi 4模型在多语言发布中仍存在常见挑战。开发者需要针对特定的语言和文化背景测试性能和安全差距,并通过额外的微调和适当的保障措施对模型进行定制。
- 伤害表征和刻板印象延续:这些模型可能会过度或不足地代表某些人群,抹去某些群体的代表性,或强化贬低性或负面的刻板印象。尽管经过了安全后训练,但由于不同群体的代表性水平、文化背景或训练数据中负面刻板印象示例的普遍性,这些限制可能仍然存在。
- 不适当或冒犯性内容:这些模型可能会产生其他类型的不适当或冒犯性内容,在没有针对特定情况进行额外缓解措施的情况下,可能不适合在敏感环境中部署。
- 信息可靠性:语言模型可能会生成无意义的内容或编造听起来合理但不准确或过时的内容。
- 代码范围有限:Phi 4的大部分训练数据基于Python,并使用常见的包,如“typing, math, random, collections, datetime, itertools”。如果模型生成的Python脚本使用了其他包或其他语言的脚本,强烈建议用户手动验证所有API的使用。
- 长对话问题:Phi 4模型在某些情况下,在非常长的聊天会话中可能会生成重复、无用或不一致的响应,无论是英语还是非英语语言。开发者应采取适当的缓解措施,如限制对话轮数以应对可能的对话漂移。
开发者应应用负责任的AI最佳实践,包括识别、衡量和减轻与特定用例以及文化、语言背景相关的风险。Phi 4系列模型是通用模型,开发者在计划将这些模型部署到特定用例时,建议针对用例对模型进行微调,并将其作为具有特定语言保障措施的更广泛AI系统的一部分使用。需要考虑的重要方面包括:
- 资源分配:在没有进一步评估和额外去偏技术的情况下,这些模型可能不适合对法律地位、资源分配或生活机会(如住房、就业、信贷等)有重大影响的场景。
- 高风险场景:开发者应评估在高风险场景中使用模型的适用性,在这些场景中,不公平、不可靠或冒犯性的输出可能会造成极大的代价或伤害。这包括在敏感或专业领域提供建议,如法律或健康建议。应根据部署环境在应用层面实施额外的保障措施。
- 错误信息:模型可能会产生不准确的信息。开发者应遵循透明度最佳实践,并告知最终用户他们正在与AI系统进行交互。在应用层面,开发者可以构建反馈机制和管道,将响应与特定用例的上下文信息相结合,即检索增强生成(RAG)技术。
- 有害内容生成:开发者应根据上下文评估输出,并使用适合其用例的可用安全分类器或自定义解决方案。
- 滥用问题:可能存在其他形式的滥用,如欺诈、垃圾邮件或恶意软件生产。开发者应确保其应用不违反适用的法律法规。
🔧 技术细节
模型信息
属性 | 详情 |
---|---|
模型类型 | 基于Transformer架构的轻量级开源模型,属于Phi-4模型家族 |
训练数据 | 包括经过质量筛选的公开文档、新创建的合成“教科书式”数据以及高质量的聊天格式监督数据,总计5万亿令牌 |
训练时间 | 2024年11月至12月 |
支持语言 | 阿拉伯语、中文、捷克语、丹麦语、荷兰语、英语、芬兰语、法语、德语、希伯来语、匈牙利语、意大利语、日语、韩语、挪威语、波兰语、葡萄牙语、俄语、西班牙语、瑞典语、泰语、土耳其语、乌克兰语 |
发布日期 | 2025年2月 |
训练数据集
Phi-4-mini的训练数据来源广泛,总计5万亿令牌,包括:
- 高质量公开文档、教育数据和代码:对公开可用的文档进行质量筛选,选择高质量的教育数据和代码。
- 新创建的合成数据:为了教授数学、编码、常识推理和世界通用知识(如科学、日常活动、心智理论等)而创建的“教科书式”数据。
- 高质量聊天格式监督数据:涵盖各种主题的高质量聊天格式监督数据,反映了人类在指令遵循、真实性、诚实性和有用性等不同方面的偏好。重点关注可能提高模型推理能力的数据质量,并对公开文档进行筛选,以包含首选的知识水平。
数据净化过程
数据净化过程包括对数据集进行归一化和分词,然后生成并比较目标数据集和基准数据集之间的n-gram。超过阈值的匹配n-gram样本被标记为受污染,并从数据集中移除。同时生成详细的污染报告,总结匹配文本、匹配比例和过滤结果,以便进一步分析。
微调
多GPU监督微调(SFT)的基本示例可参考此处。
安全评估和红队测试
使用了多种评估技术,包括红队测试、对抗性对话模拟和多语言安全评估基准数据集,以评估Phi-4模型在多种语言和风险类别中产生不良输出的倾向。通过多种方法弥补单一方法的局限性。评估结果表明,如Phi 3安全后训练论文中详细描述的安全后训练,在多种语言和风险类别中具有积极影响,从拒绝率(拒绝输出不良输出)和对越狱技术的鲁棒性可以观察到这一点。此前Phi模型的红队评估详情可在Phi 3安全后训练论文中找到。对于本次发布,红队在英语、中文、日语、西班牙语、葡萄牙语、阿拉伯语、泰语和俄语中测试了模型可能存在的危害,包括仇恨言论和偏见、暴力犯罪、专业建议和选举信息。结果表明,该模型在不同语言中对越狱技术具有抵抗力,但利用文化背景的特定语言攻击提示可能会导致模型输出有害内容。此外,在函数调用场景中,模型有时可能会虚构函数名或URL。该模型在英语和非英语语言的长多轮越狱技术中也可能更易受影响。这些发现强调了行业需要投资开发跨多种语言(包括资源较少的语言)的高质量安全评估数据集,以及考虑语言使用地区文化细微差别的风险领域。
📄 许可证
该模型遵循MIT许可证。
附录A:基准测试方法
基准测试方法说明
在理想情况下,为了确保在比较不同模型时进行公平的比较,我们不会更改基准测试中的任何提示。这是我们的默认方法,并且在迄今为止运行的绝大多数模型中都是如此。然而,也存在一些例外情况:
- 输出格式问题:某些模型可能由于不遵守输出格式而在给定评估中表现不佳。例如,模型可能无故拒绝回答问题,或者在编码任务中,模型可能在响应前添加“Sure, I can help with that. …”,这可能会破坏解析器。在这种情况下,我们会尝试使用不同的系统消息,如“你必须始终回答问题”或“直入主题!”。
- 少样本影响性能:对于某些模型,少样本实际上会损害模型性能。在这种情况下,我们允许在所有情况下以0样本运行基准测试。
- API转换:我们有工具可以在聊天和完成API之间进行转换。当将聊天提示转换为完成提示时,某些模型可能有不同的关键字,如“Human”与“User”。在这些情况下,我们允许针对特定模型进行聊天到完成提示的映射。
但我们不会:
- 选择不同的少样本示例:在比较不同模型时,少样本示例始终保持相同。
- 更改提示格式:例如,如果是A/B/C/D多项选择,我们不会将其调整为1/2/3/4多项选择。
基准测试数据集
该模型在广泛的公共和内部基准测试中进行了评估,以了解其在多个任务和条件下的能力。大多数评估使用英语,但也纳入了领先的多语言基准测试,涵盖了特定语言的性能。具体包括:
- 推理:Winogrande(代词解析的常识推理)、PIQA(日常情况的物理常识推理)、ARC-challenge(小学科学多项选择题)、GPQA(生物学、物理学和化学专家编写和验证的难题)、MedQA(医学问题回答)、Social IQA(社会常识智能)、BoolQ(上下文中的自然问题)、TruthfulQA(基于事实的推理)。
- 语言理解:HellaSwag(日常事件的常识自然语言推理)、ANLI(对抗性自然语言推理)。
- 函数调用:伯克利函数调用函数和工具调用、内部函数调用基准测试。
- 世界知识:TriviaQA(一般主题的琐事问题)。
- 数学:GSM8K(小学数学应用题)、GSM8K Hard(具有大数值和一些荒谬性的小学数学应用题)、MATH(具有挑战性的竞赛数学问题)。
- 代码:HumanEval、HumanEval+、MBPP、MBPP+(Python编码任务)、LiveCodeBenh、LiveBench(无污染代码任务)、BigCode Bench(具有挑战性的编程任务)、Spider(SQL查询任务)、内部编码基准测试。
- 指令遵循:IFEval(可验证的指令)、内部指令遵循基准测试。
- 多语言:MGSM(多语言小学数学)、Multilingual MMLU和MMLU-pro、MEGA(多语言NLP任务)。
- 流行聚合数据集:MMLU、MMLU-pro、BigBench-Hard、AGI Eval。
- 多轮对话:内部对抗性对话模拟工具生成的数据。
- 单轮可信度评估:DecodingTrust(从八个不同角度进行的可信度基准测试集合)、XSTest(夸张的安全评估)、Toxigen(对抗性和仇恨言论检测)。
- 红队测试:对微软AI红队提供的提示的响应。



