模型概述
模型特點
模型能力
使用案例
🚀 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紅隊提供的提示的響應。



