
litellm 鉤子快速指南請求發出前攔截響應返回后處理【免費下載鏈接】litellmThe fastest, litest AI Gateway. Rust core with Python SDK. Call 100 LLM APIs in OpenAI (or native) format with cost tracking, guardrails, load balancing, and logging [Bedrock, Azure, OpenAI, Anthropic, OpenAI, VertexAI, vLLM, Nvidia NIM]項目地址: https://gitcode.com/GitHub_Trending/li/litellm先用一句話說清 litellm它是 LLM 世界里的網關用一套 OpenAI 格式就能調用 100 多家模型的 APIOpenAI、Claude、Bedrock、VertexAI 都在內順帶把成本跟蹤、限流、負載均衡都包了。這篇文章聊的是它最實用的一個特性——鉤子hook。靠幾個鉤子你能在請求預處理和響應后處理兩個階段各做點事業務代碼一行不用動。一次線上事故GitHub token 被原樣發給了模型我們做過一個聊天應用用戶可以把倉庫鏈接貼進 prompt讓模型幫忙分析代碼。某天有人貼了個帶 token 的鏈接請求穿過網關直達模型token 進了第三方日志事后只能緊急輪換密鑰。如果網關上有一個關卡這個請求在出門前就會被攔下。為什么網關是最后一道防線你的前端、后端都可能被繞過但流量最終都要從網關過。把安全檢查放在網關層等于給所有出口裝了同一道閘。鉤子的三個關卡大白話講鉤子就是掛在請求生命周期上的函數。litellm 在請求發往模型之前、響應回來之后會依次調用你注冊好的函數函數里寫什么——攔截、改寫、打日志——全由你決定。翻倉庫能發現鉤子實現分布在幾處官方企業鉤子在 enterprise/enterprise_hooks/代理自帶的限流、預算類鉤子在 litellm/proxy/hooks/。記住兩個方法名就夠async_pre_call_hookpre-call 鉤子請求發出前執行async_post_call_success_hook和async_post_call_streaming_hookpost-call 鉤子響應成功返回后執行流式場景下每個數據塊都會過一次。一個請求的完整生命周期就這兩個時間點能管住。請求發出前三個值得裝的 pre-call 鉤子先查身份這個人有沒有資格進來block_user_list.py 是最簡單的例子。它的async_pre_call_hook從請求里取出user字段對照一份阻止列表命中就直接返回 400請求根本到不了模型。適合的場景某個濫用賬號被投訴了或者某客戶欠費了——把 id 加進列表就行不用改代碼。把密鑰泄漏擋在出門之前密鑰檢測是另一類高頻需求大白話就是請求出門前先掃一遍文本里有沒有長得像 API key 的東西。secret_detection.py 里內置了幾十種常見密鑰的正則OpenAI、GitHub、Slack 都有。前面那個 token 事故裝上它就當場攔截。給濫用流量的用戶限個流共用一把 key 時一個用戶批量跑任務就能把額度吃光。這里解釋兩個概念TPM 是每分鐘 token 數RPM 是每分鐘請求數都是限流用的額度。litellm 現成的限速器不少parallel_request_limiter.py 管并發請求數max_iterations_limiter.py管 agent 調用的最大輪數。限流建議按用戶 / 團隊粒度做別卡在整個實例上不然一個人的突發會拖慢所有人。響應返回后post-call 鉤子負責收尾給響應內容掃一遍違禁詞banned_keywords.py 是教科書級實現。它查兩個位置async_post_call_success_hook在非流式調用里掃完整響應async_post_call_streaming_hook在流式輸出里對每個到達的塊做檢查。命中違禁詞直接拋錯內容到不了用戶眼前。前后鉤子配合著用pre-call 做輸入審post-call 做輸出審內容安全就多了一層兜底。把全過程記進追蹤鏈路響應回來之后post-call 鉤子還順手做日志、埋點這類后處理。想把它可視化可以接 Langfuse 這類追蹤工具實現在 litellm/integrations/langfuse/。每個請求的輸入、輸出、耗時、token 用量、成本都能在一個界面里看全。線上模型行為不對的時候這種調試體驗非常省時間。三步寫出自己的鉤子寫一個實現鉤子方法的類繼承CustomLogger基類實現async_pre_call_hook或 post-call 方法。參數里你常用的就兩個data請求體和response響應對象。想拒絕請求直接拋HTTPException。注冊進配置重啟生效在代理配置 YAML 的callbacks字段里注冊你的鉤子類重啟服務即生效。如果只想觀察不想攔截就把它當普通日志回調寫不拋異常即可。兩個容易踩的坑流式調用要單獨實現流式版本的 post-call 鉤子否則只查得到響應開頭鉤子邏輯盡量快。它掛在主鏈路同步關卡上慢了用戶直接感知到延遲。按業務場景挑現成的鉤子內容安全輸入輸出各裝一道pre-call 掛banned_keywords做輸入檢查prompt_injection_detection.py防提示注入post-call 用同一套詞表查輸出。enterprise/enterprise_hooks/ 目錄里還有 OpenAI、Google 的 moderation 鉤子開箱即用。成本控制給預算設個天花板max_budget_limiter.py 在 pre-call 階段給 key 或團隊的花費設上限超了直接拒。再配model_max_budget_limiter.py按模型細分防止某個模型單價低但調用量失控。合規審計每次變更都留痕需要過合規審查時用 post-call 鉤子把請求和響應落進自己的存儲。代理自帶審計日志key 的創建、刪除、輪換這類管理操作都有記錄可查。想快速跑通一個 litellm 鉤子不用從零造輪子先git clone https://gitcode.com/GitHub_Trending/li/litellm再讀倉庫根目錄的 README.md 和 ARCHITECTURE.md從上面五個場景里挑你最有共鳴的一個今天就把第一個鉤子裝起來。【免費下載鏈接】litellmThe fastest, litest AI Gateway. Rust core with Python SDK. Call 100 LLM APIs in OpenAI (or native) format with cost tracking, guardrails, load balancing, and logging [Bedrock, Azure, OpenAI, Anthropic, OpenAI, VertexAI, vLLM, Nvidia NIM]項目地址: https://gitcode.com/GitHub_Trending/li/litellm創作聲明:本文部分內容由AI輔助生成(AIGC),僅供參考