模型概述
模型特點
模型能力
使用案例
🚀 TEN對話輪次檢測模型
TEN Turn Detection是一款先進的智能對話輪次檢測模型,專為實現人類與AI之間自然、動態的交流而設計。該模型能夠精準檢測自然對話中的輪次轉換信號,支持基於上下文的打斷機制,有效提升人機對話的自然度。
🚀 快速開始
TEN Turn Detection在GitHub上也有提供,鏈接為 TEN-framework/ten-turn-detection。
📦 安裝指南
pip install "transformers>=4.45.0"
pip install "torch>=2.0.0"
模型權重
TEN Turn Detection模型可在HuggingFace上獲取。
💻 使用示例
基礎用法
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
# Load model and tokenizer
model_id = 'TEN-framework/TEN_Turn_Detection'
model = AutoModelForCausalLM.from_pretrained(model_id, trust_remote_code=True, torch_dtype=torch.bfloat16)
tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True)
# Move model to GPU
model = model.cuda()
model.eval()
# Function for inference
def analyze_text(text, system_prompt=""):
inf_messages = [{"role":"system", "content":system_prompt}] + [{"role":"user", "content":text}]
input_ids = tokenizer.apply_chat_template(
inf_messages,
add_generation_prompt=True,
return_tensors="pt"
).cuda()
with torch.no_grad():
outputs = model.generate(
input_ids,
max_new_tokens=1,
do_sample=True,
top_p=0.1,
temperature=0.1,
pad_token_id=tokenizer.eos_token_id
)
response = outputs[0][input_ids.shape[-1]:]
return tokenizer.decode(response, skip_special_tokens=True)
# Example usage
text = "Hello I have a question about"
result = analyze_text(text)
print(f"Input: '{text}'")
print(f"Turn Detection Result: '{result}'")
✨ 主要特性
- 上下文感知的輪次管理:TEN Turn Detection通過分析語言模式和語義上下文,準確識別對話輪次的完成點。這一能力使系統能夠智能處理打斷情況,根據上下文判斷合適的打斷時機,確保在各種對話場景中都能保持自然流暢的交流。
- 多語言輪次檢測支持:該模型全面支持中英文兩種語言,能夠在多語言對話中準確識別輪次轉換信號和完成信號。
- 卓越的性能:與多個開源解決方案相比,TEN在公開的測試數據集上的各項指標均表現出色。
📚 詳細文檔
數據集準備
我們已經開源了TEN-Turn-Detection測試集,這是一個專門為評估AI對話系統輪次檢測能力而設計的雙語(中文和英文)對話輸入集合。該數據集由三個不同的部分組成:
- wait.txt:包含請求對話暫停或終止的表達。
- unfinished.txt:包含未完成的對話輸入,語句被截斷。
- finished.txt:提供跨多個領域的完整對話輸入。
檢測性能
我們使用測試數據集對多個開源的輪次檢測模型進行了全面評估:
語言 | 模型 | 已完成準確率 | 未完成準確率 | 等待準確率 |
---|---|---|---|---|
英語 | 模型A | 59.74% | 86.46% | N/A |
英語 | 模型B | 71.61% | 96.88% | N/A |
英語 | TEN Turn Detection | 90.64% | 98.44% | 91% |
中文 | 模型B | 74.63% | 88.89% | N/A |
中文 | TEN Turn Detection | 98.90% | 92.74% | 92% |
⚠️ 重要提示
- 模型A不支持中文語言處理。
- 模型A和模型B均不支持“等待”狀態檢測。
模型格式選擇
選擇合適的模型格式取決於你的硬件能力和內存限制。
模型格式 | 精度 | 內存使用 | 設備要求 | 最佳用例 |
---|---|---|---|---|
BF16(Brain Float 16) | 非常高 | 高 | 支持BF16加速的GPU/CPU | 高速推理,減少內存使用 |
F16(Float 16) | 高 | 高 | 支持FP16加速的GPU/CPU | 當BF16不可用時進行推理 |
Q4_K | 中低 | 低 | CPU或低顯存設備 | 內存受限的推理 |
Q6_K | 中等 | 適中 | 內存較大的CPU | 量化後獲得更好的準確率 |
Q8_0 | 高 | 適中 | 顯存適中的GPU/CPU | 量化模型中準確率最高 |
IQ3_XS | 低 | 非常低 | 超低內存設備 | 最大內存效率,低準確率 |
IQ3_S | 低 | 非常低 | 低內存設備 | 比IQ3_XS更實用 |
IQ3_M | 中低 | 低 | 低內存設備 | 比IQ3_S準確率更高 |
Q4_0 | 低 | 低 | 基於ARM的/嵌入式設備 | Llama.cpp自動優化ARM推理 |
超低比特(IQ1/2_*) | 非常低 | 極低 | 小型邊緣/嵌入式設備 | 在極緊的內存中運行模型;低準確率 |
混合(例如 bf16_q8_0 ) |
中高 | 中等 | 支持混合精度的硬件 | 平衡性能和內存,關鍵層接近FP精度 |
BF16(Brain Float 16)
- 這是一種16位浮點格式,專為更快的計算而設計,同時保持良好的精度。
- 與FP32具有相似的動態範圍,但內存使用更低。
- 如果你的硬件支持BF16加速(請檢查設備規格),建議使用。
- 與FP32相比,它是高性能推理且內存佔用減少的理想選擇。
📌 使用場景:
- 硬件具有原生BF16支持(例如,較新的GPU、TPU)。
- 希望在節省內存的同時獲得更高的精度。
- 計劃將模型重新量化為其他格式。
📌 避免使用場景:
- 硬件不支持BF16(可能會回退到FP32並運行較慢)。
- 需要與缺乏BF16優化的舊設備兼容。
F16(Float 16)
- 這是一種16位浮點格式,具有高精度,但取值範圍比BF16小。
- 適用於大多數支持FP16加速的設備(包括許多GPU和一些CPU)。
- 數值精度略低於BF16,但通常足以進行推理。
📌 使用場景:
- 硬件支持FP16但不支持BF16。
- 需要在速度、內存使用和準確性之間取得平衡。
- 在GPU或其他針對FP16計算優化的設備上運行。
📌 避免使用場景:
- 設備缺乏原生FP16支持(可能運行比預期慢)。
- 內存有限。
混合精度模型(例如 bf16_q8_0
、f16_q4_K
)
這些格式選擇性地量化非關鍵層,同時保持關鍵層的全精度(例如,注意力和輸出層)。
- 例如
bf16_q8_0
表示全精度BF16核心層 + 量化Q8_0其他層。 - 在內存效率和準確性之間取得平衡,比全量化模型有所改進,而無需BF16/F16的全部內存。
📌 使用場景:
- 需要比僅量化模型更高的準確性,但無法承受在所有地方使用全BF16/F16。
- 設備支持混合精度推理。
- 希望在受限硬件上為生產級模型優化權衡。
📌 避免使用場景:
- 目標設備不支持混合或全精度加速。
- 在超嚴格的內存限制下運行(在這種情況下,使用全量化格式)。
量化模型(Q4_K、Q6_K、Q8等)
量化可以在儘可能保持準確性的同時減小模型大小和內存使用。
- 低比特模型(Q4_K):最適合最小的內存使用,但可能精度較低。
- 高比特模型(Q6_K、Q8_0):準確性更好,但需要更多內存。
📌 使用場景:
- 在CPU上運行推理,需要優化模型。
- 設備顯存較低,無法加載全精度模型。
- 希望在保持合理準確性的同時減少內存佔用。
📌 避免使用場景:
- 需要最高的準確性(全精度模型更適合)。
- 硬件有足夠的顯存用於更高精度的格式(BF16/F16)。
極低比特量化(IQ3_XS、IQ3_S、IQ3_M、Q4_K、Q4_0)
這些模型針對非常高的內存效率進行了優化,非常適合低功耗設備或大規模部署,其中內存是關鍵限制因素。
- IQ3_XS:超低比特量化(3位),具有非常高的內存效率。
- 使用場景:最適合超低內存設備,即使Q4_K也太大。
- 權衡:與高比特量化相比,準確性較低。
- IQ3_S:小塊大小,以實現最大內存效率。
- 使用場景:最適合低內存設備,其中IQ3_XS過於激進。
- IQ3_M:中等塊大小,比IQ3_S具有更好的準確性。
- 使用場景:適用於低內存設備,其中IQ3_S過於受限。
- Q4_K:4位量化,具有逐塊優化,以提高準確性。
- 使用場景:最適合低內存設備,其中Q6_K太大。
- Q4_0:純4位量化,針對ARM設備進行了優化。
- 使用場景:最適合基於ARM的設備或低內存環境。
超低比特量化(IQ1_S、IQ1_M、IQ2_S、IQ2_M、IQ2_XS、IQ2_XSS)
- 超低比特量化(1 - 2位),具有極高的內存效率。
- 使用場景:最適合需要將模型放入非常受限的內存中的情況。
- 權衡:準確性非常低。可能無法按預期運行。使用前請充分測試。
量子網絡監控測試
如果你覺得這些模型有用,可以幫助我測試我的人工智能驅動的量子網絡監控助手,進行量子就緒安全檢查: 👉 量子網絡監控
量子網絡監控服務的完整開源代碼可在我的GitHub倉庫中找到(名稱中包含NetworkMonitor的倉庫):量子網絡監控源代碼。如果你想自己進行模型量化,也可以找到我使用的代碼 GGUFModelBuilder。
測試方法
選擇一個AI助手類型:
TurboLLM
(GPT-4.1-mini)HugLLM
(Hugging Face開源模型)TestLLM
(僅實驗性CPU)
測試內容
我正在挑戰小型開源模型在AI網絡監控中的極限,具體包括:
- 針對即時網絡服務進行函數調用。
- 探索模型可以多小,同時仍能處理:
- 自動化Nmap安全掃描。
- 量子就緒檢查。
- 網絡監控任務。
不同助手介紹
- TestLLM(當前實驗模型,在Hugging Face Docker空間的2個CPU線程上運行llama.cpp):
- ✅ 零配置設置。
- ⏳ 加載時間30秒(推理速度慢,但無API成本)。由於成本低,沒有令牌限制。
- 🔧 尋求幫助! 如果你對邊緣設備AI感興趣,讓我們合作!
- TurboLLM(使用gpt-4.1-mini):
- 性能非常好,但不幸的是,OpenAI按令牌收費。因此,令牌使用受到限制。
- 創建自定義cmd處理器,在量子網絡監控代理上運行.NET代碼。
- 即時網絡診斷和監控。
- 安全審計。
- 滲透測試(Nmap/Metasploit)。
- HugLLM(最新的開源模型):
- 🌐 在Hugging Face推理API上運行。使用Novita託管的最新模型表現相當不錯。
測試命令示例
"Give me info on my websites SSL certificate"
"Check if my server is using quantum safe encyption for communication"
"Run a comprehensive security audit on my server"
"Create a cmd processor to .. (what ever you want)"
注意,你需要安裝量子網絡監控代理才能運行.NET代碼。這是一個非常靈活和強大的功能,請謹慎使用!
🔧 技術細節
量化方法測試
測試一種新的量化方法,使用規則將重要層提升到標準imatrix使用的水平之上。發現標準IMatrix在低比特量化和MOE模型中表現不佳,因此使用llama.cpp --tensor-type來提升選定的層。請參考 使用llama.cpp進行層提升。這種方法會創建更大的模型文件,但可以提高給定模型大小的精度。
模型原理
TEN Turn Detection利用基於Transformer的語言模型(Qwen2.5 - 7B)進行語義分析的多層方法。該模型將用戶的文本分為三種關鍵狀態:
- 已完成(finished):用戶表達了完整的想法並期望得到回應的完整語句。例如:“Hey there I was wondering can you help me with my order”
- 等待(wait):用戶明確指示AI不要說話的語句。例如:“Shut up”
- 未完成(unfinished):用戶暫時停頓但打算繼續說話的明顯未完成語句。例如:“Hello I have a question about”
這三種分類狀態使TEN系統能夠通過智能管理輪次轉換,減少尷尬的打斷,同時保持對話流暢,創造自然的對話動態。
📄 許可證
本項目採用Apache 2.0許可證。
最終說明
我自掏腰包資助用於創建這些模型文件的服務器、運行量子網絡監控服務,並支付從Novita和OpenAI進行推理的費用。模型創建和量子網絡監控項目背後的所有代碼都是開源的。請隨意使用你認為有用的任何內容。
如果你欣賞這些工作,請考慮請我喝杯咖啡 ☕。你的支持有助於支付服務成本,並讓我為大家提高令牌限制。
我也歡迎工作機會或贊助。
感謝你的支持!😊






