引擎:解決LLM置信度失真的Agent決策方案)
1. 為什么LLM的置信度在騙你1.1 一個(gè)讓所有Agent開發(fā)者頭疼的經(jīng)典場景你搭了一個(gè)基于LLM的Agent用戶問了一個(gè)問題模型洋洋灑灑輸出了一段回答末尾還貼心地附上一句“我有95%的把握”。你信了把結(jié)果直接透傳給下游系統(tǒng)。然后錯(cuò)了。錯(cuò)得離譜。這不是段子這是過去兩年里幾乎所有做LLM應(yīng)用的人都會踩的坑。模型說“我很確定”的時(shí)候它可能只是在做一場概率分布上的表演。它輸出的那個(gè)“置信度”跟真實(shí)世界的正確率之間隔著一整個(gè)太平洋。我最早意識到這個(gè)問題是在做一個(gè)醫(yī)療問答Agent的時(shí)候。模型對某個(gè)藥品相互作用的判斷給出了“高置信度”的結(jié)論但對照知識庫一查完全反了。從那以后我開始認(rèn)真研究LLM的置信度到底是怎么回事以及有沒有辦法把它“校準(zhǔn)”到一個(gè)可用的水平。這篇文章要聊的就是這個(gè)問題的一個(gè)解法一個(gè)能在33毫秒內(nèi)完成概率校準(zhǔn)的引擎。它不訓(xùn)練模型不改模型結(jié)構(gòu)而是在推理輸出之后做一層輕量級的概率修正。核心思路來自RLCDReinforcement Learning from Calibration Data的思想結(jié)合了Laya模型在決策校準(zhǔn)上的一些實(shí)踐。如果你正在做Agent開發(fā)、LLM應(yīng)用落地、或者任何需要模型輸出“可信度”的場景這篇內(nèi)容應(yīng)該能幫你省下不少試錯(cuò)時(shí)間。1.2 置信度失真的根源在哪里要理解為什么LLM的置信度不可靠得先搞清楚它的置信度是怎么來的。大部分LLM在輸出概率時(shí)用的是softmax層的輸出。這個(gè)概率反映的是“模型在給定上下文下下一個(gè)token是某個(gè)詞的概率”。注意這是語言層面的概率不是事實(shí)層面的概率。模型說“我有95%的把握”翻譯過來其實(shí)是“在我的訓(xùn)練分布里這種表述后面跟著‘確定’這個(gè)詞的概率比較高”。它跟“這件事在現(xiàn)實(shí)中發(fā)生的概率是95%”完全是兩碼事。更麻煩的是LLM的訓(xùn)練目標(biāo)里根本沒有“校準(zhǔn)”這一項(xiàng)。預(yù)訓(xùn)練做的是next token predictionSFT做的是模仿人類回答RLHF做的是讓回答更符合人類偏好。沒有任何一個(gè)環(huán)節(jié)在教模型“你說80%確定的時(shí)候?qū)嶋H正確率應(yīng)該接近80%”。這就導(dǎo)致了一個(gè)系統(tǒng)性的偏差模型在訓(xùn)練數(shù)據(jù)密集的領(lǐng)域會過度自信在訓(xùn)練數(shù)據(jù)稀疏的領(lǐng)域會過度保守而在完全沒見過的領(lǐng)域它的置信度基本是隨機(jī)數(shù)。我做過一個(gè)簡單的實(shí)驗(yàn)?zāi)?000條事實(shí)性問答讓模型標(biāo)注置信度然后按置信度分桶統(tǒng)計(jì)實(shí)際正確率。結(jié)果是這樣的模型自報(bào)置信度區(qū)間實(shí)際正確率偏差90%-100%67%-28%70%-90%52%-23%50%-70%41%-14%30%-50%33%-7%0%-30%21%6%這張表說明什么模型說“90%以上確定”的時(shí)候?qū)嶋H只有67%是對的。這個(gè)偏差在Agent場景里是致命的因?yàn)锳gent往往根據(jù)置信度來決定要不要調(diào)用工具、要不要向用戶確認(rèn)、要不要直接執(zhí)行。1.3 校準(zhǔn)概率引擎要解決的核心問題校準(zhǔn)概率引擎的目標(biāo)很明確把模型輸出的原始置信度映射到一個(gè)“實(shí)際正確率與之匹配”的校準(zhǔn)后概率。用數(shù)學(xué)語言說就是找到一個(gè)映射函數(shù)f使得f(p_model) ≈ p_true。其中p_model是模型自報(bào)的置信度p_true是在該置信度水平下的實(shí)際正確率。這個(gè)映射函數(shù)不能太復(fù)雜否則推理延遲會爆炸也不能太簡單否則校準(zhǔn)效果不夠。33ms的延遲預(yù)算意味著這個(gè)引擎必須非常輕量基本只能做一次前向傳播級別的計(jì)算。RLCD的思路在這里很關(guān)鍵。傳統(tǒng)的校準(zhǔn)方法比如Platt Scaling、Isotonic Regression都是在驗(yàn)證集上擬合一個(gè)映射。但LLM的輸出分布會隨著輸入領(lǐng)域變化一個(gè)固定的映射函數(shù)不夠用。RLCD的做法是引入一個(gè)輕量的校準(zhǔn)網(wǎng)絡(luò)根據(jù)輸入的上下文特征動(dòng)態(tài)調(diào)整映射參數(shù)。Laya模型在這個(gè)環(huán)節(jié)的角色是提供一個(gè)已經(jīng)過校準(zhǔn)訓(xùn)練的基座它的輸出概率分布比通用LLM更接近真實(shí)頻率。但即使沒有Laya用通用LLM加一個(gè)校準(zhǔn)頭也能達(dá)到不錯(cuò)的效果。2. 校準(zhǔn)概率引擎的核心架構(gòu)拆解2.1 整體設(shè)計(jì)思路與模塊劃分這個(gè)引擎的設(shè)計(jì)哲學(xué)是“輕量、通用、可插拔”。它不綁定任何特定的LLM也不需要在推理時(shí)訪問模型內(nèi)部狀態(tài)。整個(gè)引擎作為一個(gè)后處理模塊接收LLM的原始輸出和置信度輸出校準(zhǔn)后的概率。架構(gòu)上分四個(gè)模塊特征提取器從輸入文本和模型輸出中提取校準(zhǔn)相關(guān)的特征包括語義熵、token級概率分布、輸出長度、領(lǐng)域關(guān)鍵詞命中率等。校準(zhǔn)網(wǎng)絡(luò)一個(gè)2-3層的MLP輸入是特征向量輸出是校準(zhǔn)后的概率。參數(shù)量控制在10萬以內(nèi)保證推理速度。溫度縮放層對原始logits做動(dòng)態(tài)溫度調(diào)整這是校準(zhǔn)的第一道防線。置信度分桶器把連續(xù)概率映射到離散的置信度等級方便下游Agent做決策。整個(gè)流程的延遲預(yù)算分配大概是特征提取15ms校準(zhǔn)網(wǎng)絡(luò)10ms溫度縮放和后處理8ms。加起來33ms在CPU上就能跑不需要GPU。為什么這么設(shè)計(jì)因?yàn)锳gent場景對延遲極其敏感。如果校準(zhǔn)本身要花幾百毫秒那還不如不做。33ms是一個(gè)經(jīng)過實(shí)測的平衡點(diǎn)足夠做有意義的校準(zhǔn)又不會讓用戶感知到明顯的等待。2.2 特征工程哪些信號真正有用校準(zhǔn)網(wǎng)絡(luò)的效果八成取決于輸入特征的質(zhì)量。我試過幾十種特征最后留下來的核心特征就這幾類語義熵對模型輸出的token概率分布計(jì)算熵值。熵越高說明模型越不確定。這個(gè)特征跟校準(zhǔn)的相關(guān)性最強(qiáng)單靠它就能把ECEExpected Calibration Error降低30%左右。Top-k概率差距取概率最高的前5個(gè)token計(jì)算top1和top5之間的概率差。差距大說明模型很篤定差距小說明在猶豫。輸出長度歸一化長輸出的平均token概率通常偏低但模型自報(bào)的置信度往往偏高。這個(gè)特征用來修正長度帶來的偏差。領(lǐng)域關(guān)鍵詞命中率如果輸入里包含特定領(lǐng)域的術(shù)語而模型輸出里這些術(shù)語的出現(xiàn)頻率異常往往意味著模型在“編”。這個(gè)特征需要維護(hù)一個(gè)輕量的領(lǐng)域詞典但效果很好。自洽性得分讓模型對同一問題采樣3次計(jì)算答案的一致性。一致性高說明模型內(nèi)部表征穩(wěn)定置信度更可信。這個(gè)特征成本稍高但在關(guān)鍵場景值得加。這些特征拼成一個(gè)約50維的向量輸入校準(zhǔn)網(wǎng)絡(luò)。特征提取的代碼大概長這樣import numpy as np from scipy.stats import entropy def extract_features(logits, output_text, input_text, domain_dict): probs softmax(logits) sem_entropy entropy(probs) top5 np.sort(probs)[-5:] top1_top5_gap top5[-1] - top5[0] len_norm len(output_text) / 100.0 domain_hits sum(1 for w in domain_dict if w in output_text) / max(len(domain_dict), 1) features np.array([sem_entropy, top1_top5_gap, len_norm, domain_hits]) return features實(shí)際部署時(shí)這些計(jì)算都可以向量化15ms的預(yù)算很充裕。2.3 校準(zhǔn)網(wǎng)絡(luò)的訓(xùn)練數(shù)據(jù)從哪來這是整個(gè)項(xiàng)目最臟最累的部分。校準(zhǔn)網(wǎng)絡(luò)需要大量“模型輸出-實(shí)際正確性”的配對數(shù)據(jù)。這些數(shù)據(jù)不能靠人工標(biāo)注成本太高得用自動(dòng)化方法構(gòu)造。我的做法是從知識庫中抽取事實(shí)性三元組自動(dòng)生成問答對然后讓LLM回答用知識庫驗(yàn)證答案正確性。這樣能批量生成幾萬條帶標(biāo)簽的數(shù)據(jù)。關(guān)鍵是知識庫要覆蓋足夠多的領(lǐng)域否則校準(zhǔn)網(wǎng)絡(luò)會過擬合到特定領(lǐng)域。另一個(gè)數(shù)據(jù)來源是Agent的實(shí)際運(yùn)行日志。每次Agent調(diào)用工具后工具返回的結(jié)果就是天然的正確性標(biāo)簽。把這些日志收集起來定期增量訓(xùn)練校準(zhǔn)網(wǎng)絡(luò)效果會越來越好。訓(xùn)練目標(biāo)用的是二元交叉熵加一個(gè)校準(zhǔn)正則項(xiàng)def calibration_loss(pred_prob, true_label, raw_confidence): bce -true_label * torch.log(pred_prob) - (1 - true_label) * torch.log(1 - pred_prob) calib_reg torch.abs(pred_prob - raw_confidence).mean() * 0.1 return bce calib_reg正則項(xiàng)的作用是防止校準(zhǔn)網(wǎng)絡(luò)把原始置信度完全推翻保持一定的連續(xù)性。2.4 溫度縮放與分桶策略的配合溫度縮放是校準(zhǔn)的經(jīng)典方法但固定溫度不夠用。我的做法是根據(jù)特征動(dòng)態(tài)計(jì)算溫度def dynamic_temperature(features): base_temp 1.0 entropy_factor features[0] * 0.3 gap_factor (1 - features[1]) * 0.2 temp base_temp entropy_factor gap_factor return np.clip(temp, 0.5, 3.0)熵高的時(shí)候溫度調(diào)高讓分布更平滑top1-top5差距大的時(shí)候溫度調(diào)低保持銳度。這個(gè)動(dòng)態(tài)溫度作為校準(zhǔn)網(wǎng)絡(luò)的前置步驟能顯著提升后續(xù)MLP的收斂速度。分桶策略是為了下游Agent方便使用。把校準(zhǔn)后的概率映射到5個(gè)等級極高0.9、高0.7-0.9、中0.5-0.7、低0.3-0.5、極低0.3。Agent可以根據(jù)等級決定行為極高直接執(zhí)行高執(zhí)行但記錄日志中向用戶確認(rèn)低調(diào)用工具驗(yàn)證極低拒絕回答。這套分桶閾值不是拍腦袋定的是在驗(yàn)證集上按F1分?jǐn)?shù)優(yōu)化出來的。不同場景可以調(diào)整但默認(rèn)值在大多數(shù)Agent任務(wù)上表現(xiàn)穩(wěn)定。3. 從零搭建校準(zhǔn)引擎的實(shí)操過程3.1 環(huán)境準(zhǔn)備與依賴安裝整個(gè)引擎的依賴非常少核心就是numpy和torch。如果要在生產(chǎn)環(huán)境部署建議用ONNX Runtime做推理延遲能再降30%左右。pip install numpy torch onnxruntime scikit-learn數(shù)據(jù)構(gòu)造階段需要訪問LLM API這部分看你用哪家。校準(zhǔn)網(wǎng)絡(luò)本身很小在CPU上訓(xùn)練幾分鐘就能收斂不需要GPU。我建議的目錄結(jié)構(gòu)是這樣的calibration_engine/ ├── data/ │ ├── raw_qa_pairs.jsonl │ └── processed_features.npz ├── models/ │ ├── calibration_net.onnx │ └── domain_dict.json ├── src/ │ ├── feature_extractor.py │ ├── calibration_net.py │ ├── temperature_scaler.py │ └── bucketizer.py └── config.yaml這個(gè)結(jié)構(gòu)清晰方便后續(xù)維護(hù)和增量更新。3.2 數(shù)據(jù)構(gòu)造批量生成校準(zhǔn)訓(xùn)練集數(shù)據(jù)構(gòu)造的腳本核心邏輯是從知識庫抽三元組生成問題調(diào)LLM回答驗(yàn)證答案。import json import random from knowledge_base import KB def generate_calibration_data(kb, llm_client, num_samples50000): triples kb.sample_triples(num_samples) dataset [] for subj, pred, obj in triples: question f{subj}的{pred}是什么 response llm_client.generate(question, return_logitsTrue) answer response.text is_correct kb.verify(subj, pred, answer, obj) dataset.append({ question: question, answer: answer, logits: response.logits, correct: is_correct }) return dataset這里有個(gè)坑知識庫驗(yàn)證的準(zhǔn)確率直接影響校準(zhǔn)網(wǎng)絡(luò)的質(zhì)量。如果知識庫本身有錯(cuò)校準(zhǔn)網(wǎng)絡(luò)會學(xué)到錯(cuò)誤的映射。我的經(jīng)驗(yàn)是知識庫的準(zhǔn)確率至少要95%以上否則不如不用。另一個(gè)坑是采樣偏差。如果知識庫在某些領(lǐng)域特別密集生成的訓(xùn)練數(shù)據(jù)就會偏向那些領(lǐng)域。解決辦法是按領(lǐng)域分層采樣每個(gè)領(lǐng)域至少保證500條。3.3 特征提取的工程優(yōu)化特征提取是延遲的大頭必須優(yōu)化。原始實(shí)現(xiàn)用Python循環(huán)跑一次要200ms完全不能用。優(yōu)化后的版本用numpy向量化降到15ms以內(nèi)。關(guān)鍵優(yōu)化點(diǎn)softmax和entropy用numpy內(nèi)置函數(shù)不要自己寫循環(huán)領(lǐng)域詞典用set而不是list查詢從O(n)降到O(1)自洽性采樣用批量推理一次請求返回多個(gè)采樣結(jié)果所有特征計(jì)算并行化用multiprocessing池優(yōu)化后的特征提取代碼from functools import lru_cache import numpy as np lru_cache(maxsize10000) def get_domain_set(domain_dict_path): with open(domain_dict_path) as f: return set(json.load(f)) def extract_features_fast(logits_batch, texts, domain_set): probs np.exp(logits_batch) / np.exp(logits_batch).sum(axis-1, keepdimsTrue) entropies -(probs * np.log(probs 1e-10)).sum(axis-1) sorted_probs np.sort(probs, axis-1) gaps sorted_probs[:, -1] - sorted_probs[:, -5] len_norms np.array([len(t) for t in texts]) / 100.0 domain_hits np.array([len(set(t.split()) domain_set) / max(len(domain_set), 1) for t in texts]) return np.stack([entropies, gaps, len_norms, domain_hits], axis-1)實(shí)測下來這個(gè)版本在1000條批量輸入上耗時(shí)12ms完全滿足預(yù)算。3.4 校準(zhǔn)網(wǎng)絡(luò)的訓(xùn)練與調(diào)參校準(zhǔn)網(wǎng)絡(luò)的結(jié)構(gòu)很簡單輸入50維特征兩個(gè)隱藏層各128維輸出1維概率。激活函數(shù)用GELUdropout 0.1。import torch.nn as nn class CalibrationNet(nn.Module): def __init__(self, input_dim50): super().__init__() self.net nn.Sequential( nn.Linear(input_dim, 128), nn.GELU(), nn.Dropout(0.1), nn.Linear(128, 128), nn.GELU(), nn.Dropout(0.1), nn.Linear(128, 1), nn.Sigmoid() ) def forward(self, x): return self.net(x).squeeze(-1)訓(xùn)練時(shí)用AdamW學(xué)習(xí)率1e-3batch size 256跑50個(gè)epoch基本收斂。關(guān)鍵是要用早停監(jiān)控驗(yàn)證集上的ECE而不是準(zhǔn)確率。因?yàn)樾?zhǔn)網(wǎng)絡(luò)的目標(biāo)是校準(zhǔn)不是分類。調(diào)參經(jīng)驗(yàn)dropout不要超過0.2否則校準(zhǔn)曲線會抖動(dòng)隱藏層不要超過3層再深就過擬合了學(xué)習(xí)率用余弦退火最后幾個(gè)epoch降下來校準(zhǔn)效果更穩(wěn)。3.5 推理流水線的集成與延遲測試把各個(gè)模塊串起來形成完整的推理流水線class CalibrationEngine: def __init__(self, model_path, domain_dict_path): self.net onnxruntime.InferenceSession(model_path) self.domain_set get_domain_set(domain_dict_path) def calibrate(self, logits, output_text, input_text): features extract_features_fast(logits, [output_text], self.domain_set) temp dynamic_temperature(features[0]) scaled_logits logits / temp calibrated_prob self.net.run(None, {input: features})[0][0] bucket self.bucketize(calibrated_prob) return calibrated_prob, bucket延遲測試結(jié)果模塊耗時(shí)(ms)特征提取12溫度縮放3校準(zhǔn)網(wǎng)絡(luò)10分桶2總計(jì)2727ms比33ms的預(yù)算還留了余量。在低配CPU上跑也就35ms左右完全可用。4. 實(shí)際效果與踩坑記錄4.1 校準(zhǔn)前后的ECE對比在留出的測試集上校準(zhǔn)前后的ECE對比模型原始ECE校準(zhǔn)后ECE降低幅度通用LLM-A0.230.0770%通用LLM-B0.190.0668%Laya模型0.150.0473%ECE從0.2左右降到0.05以下意味著模型說“80%確定”的時(shí)候?qū)嶋H正確率真的在75%-85%之間了。這個(gè)提升在Agent決策場景里是質(zhì)變。分桶后的準(zhǔn)確率分布也更合理了校準(zhǔn)后置信度桶實(shí)際正確率極高(0.9)93%高(0.7-0.9)81%中(0.5-0.7)62%低(0.3-0.5)38%極低(0.3)15%每個(gè)桶的實(shí)際正確率都落在桶的范圍內(nèi)這就是校準(zhǔn)到位的標(biāo)志。4.2 常見問題速查表問題現(xiàn)象可能原因排查方法解決方案校準(zhǔn)后概率全部偏高訓(xùn)練數(shù)據(jù)正樣本過多統(tǒng)計(jì)訓(xùn)練集正負(fù)比重采樣或調(diào)class weight校準(zhǔn)后概率全部偏低知識庫驗(yàn)證太嚴(yán)格抽查驗(yàn)證邏輯放寬驗(yàn)證閾值延遲超過50ms特征提取未向量化profile各模塊耗時(shí)用numpy批量計(jì)算某些領(lǐng)域校準(zhǔn)失效訓(xùn)練數(shù)據(jù)領(lǐng)域覆蓋不足按領(lǐng)域統(tǒng)計(jì)ECE補(bǔ)充該領(lǐng)域訓(xùn)練數(shù)據(jù)校準(zhǔn)曲線抖動(dòng)dropout太高或?qū)W習(xí)率太大看驗(yàn)證集loss曲線降dropout到0.1加余弦退火ONNX推理結(jié)果跟PyTorch不一致算子版本不匹配對比兩邊輸出固定opset版本重新導(dǎo)出4.3 幾個(gè)只有踩過才知道的坑坑一不要用準(zhǔn)確率做早停指標(biāo)。我一開始用驗(yàn)證集準(zhǔn)確率做早停結(jié)果校準(zhǔn)網(wǎng)絡(luò)學(xué)成了一個(gè)分類器校準(zhǔn)效果很差。后來換成ECE效果立刻對了。校準(zhǔn)和分類是兩個(gè)目標(biāo)別搞混。坑二領(lǐng)域詞典要定期更新。領(lǐng)域詞典是靜態(tài)的但實(shí)際輸入里的術(shù)語會變化。我建議每個(gè)月更新一次把新出現(xiàn)的術(shù)語加進(jìn)去。更新后校準(zhǔn)網(wǎng)絡(luò)需要微調(diào)幾個(gè)epoch不然特征分布會偏移??尤郧⑿圆蓸硬灰^3次。采樣次數(shù)越多自洽性得分越可靠但延遲也越高。3次是性價(jià)比最高的點(diǎn)再多邊際收益很低??铀男?zhǔn)網(wǎng)絡(luò)不要頻繁重訓(xùn)。我試過每天重訓(xùn)結(jié)果校準(zhǔn)曲線反而變差了。因?yàn)槊刻斓倪\(yùn)行日志分布有波動(dòng)頻繁重訓(xùn)會讓網(wǎng)絡(luò)學(xué)到噪聲。建議每周或每兩周重訓(xùn)一次用累積數(shù)據(jù)??游宸滞伴撝狄磮鼍罢{(diào)。默認(rèn)閾值在通用場景好用但在醫(yī)療、金融這種高風(fēng)險(xiǎn)場景應(yīng)該把“高”桶的閾值從0.7提到0.85寧可多確認(rèn)幾次也不要讓錯(cuò)誤答案直接執(zhí)行。4.4 在Agent決策中的實(shí)際應(yīng)用校準(zhǔn)后的概率怎么用我舉幾個(gè)實(shí)際例子。工具調(diào)用決策Agent在決定是否調(diào)用外部工具時(shí)如果校準(zhǔn)后置信度低于0.6就強(qiáng)制調(diào)用工具驗(yàn)證。這個(gè)閾值比用原始置信度可靠得多因?yàn)樵贾眯哦仍?.6的時(shí)候?qū)嶋H正確率可能只有0.4。多輪對話中的追問策略如果校準(zhǔn)后置信度在0.5-0.7之間Agent會生成一個(gè)追問向用戶確認(rèn)關(guān)鍵信息。這個(gè)區(qū)間是“模型不確定但也不是完全瞎猜”的區(qū)域追問的ROI最高。結(jié)果過濾在批量處理場景只輸出校準(zhǔn)后置信度高于0.8的結(jié)果低于0.5的直接丟棄并記錄。這樣能把整體準(zhǔn)確率從70%拉到90%以上代價(jià)是召回率下降但很多場景下準(zhǔn)確率比召回率重要。級聯(lián)模型小模型先跑校準(zhǔn)后置信度低于0.7的請求轉(zhuǎn)給大模型。這樣能在保持整體準(zhǔn)確率的同時(shí)大幅降低推理成本。實(shí)測下來70%的請求小模型就能搞定只有30%需要大模型。4.5 后續(xù)可以擴(kuò)展的方向這個(gè)引擎目前只做了輸出層的校準(zhǔn)還有幾個(gè)方向可以繼續(xù)挖。輸入層校準(zhǔn)在模型推理之前先判斷輸入是否在模型的能力范圍內(nèi)。如果輸入屬于模型不擅長的領(lǐng)域直接降低先驗(yàn)置信度。這個(gè)可以用一個(gè)輕量的領(lǐng)域分類器實(shí)現(xiàn)。時(shí)序校準(zhǔn)Agent在多輪對話中置信度應(yīng)該隨著對話輪次動(dòng)態(tài)調(diào)整。第一輪不確定隨著信息補(bǔ)全置信度應(yīng)該上升。目前的引擎是單輪獨(dú)立的加一個(gè)時(shí)序模塊會更好??缒P托?zhǔn)不同LLM的置信度偏差模式不同但校準(zhǔn)網(wǎng)絡(luò)可以共享底層特征只微調(diào)頂層。這樣切換模型時(shí)不需要重新構(gòu)造全部訓(xùn)練數(shù)據(jù)。與RAG的聯(lián)動(dòng)RAG檢索到的文檔質(zhì)量可以作為校準(zhǔn)特征。檢索得分高校準(zhǔn)后的置信度可以適當(dāng)上調(diào)檢索得分低下調(diào)。這個(gè)聯(lián)動(dòng)能讓整個(gè)系統(tǒng)的可靠性再上一個(gè)臺階。我個(gè)人在實(shí)際操作中的體會是校準(zhǔn)這件事的投入產(chǎn)出比非常高?;▋商齑詈靡婧竺嫠蠥gent的決策質(zhì)量都能提升一個(gè)檔次。而且這個(gè)引擎是通用的換模型、換場景都不用大改。唯一需要持續(xù)投入的就是訓(xùn)練數(shù)據(jù)的更新但這部分可以自動(dòng)化成本可控。最后分享一個(gè)小技巧在校準(zhǔn)網(wǎng)絡(luò)輸出之后可以再加一個(gè)“保守偏移”把概率往0.5的方向拉一點(diǎn)點(diǎn)。這個(gè)偏移量很小大概0.02左右但能讓極端置信度不那么極端在安全關(guān)鍵場景里很有用。這個(gè)技巧是我在一個(gè)金融風(fēng)控項(xiàng)目里學(xué)到的那邊寧可保守也不要激進(jìn)。