ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

litellm 钩子机制完整指南:4 步搭好请求预处理与响应后处理管道

2026/8/30 8:25:50 拓冰建站 浏览量
litellm 钩子机制完整指南:4 步搭好请求预处理与响应后处理管道 litellm 钩子机制完整指南4 步搭好请求预处理与响应后处理管道【免费下载链接】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/litellmlitellm 是一个让所有 LLM API 都用 OpenAI 格式调用的轻量网关覆盖 100 多家模型提供商。它内置的钩子hook机制让你能在请求发出前和响应返回后插入自定义逻辑完成敏感信息拦截、内容过滤、成本追踪这类横切需求而不用改业务代码。直接裸调 LLM 的三种风险把用户输入原样丢给模型听起来省事但生产环境里三个问题很快会冒出来。安全上请求里可能夹带 API 密钥、内网 IP 这类敏感数据一旦原样发给远端模型就是泄露。成本上高峰期的突发流量没有削峰手段要么打爆下游要么超支。审计上谁在什么时候用了什么模型、花了多少钱、说了什么话事后无法追溯。这三类压力分别对应请求发出前、响应回来后、全程记录三个时间点——正好是钩子机制的三个挂载位置。钩子机制是怎么工作的litellm 的钩子本质上继承自CustomLogger注册后会在请求生命周期的固定节点被自动回调。请求进入时调用async_pre_call_hook拿到用户鉴权信息、缓存句柄和完整请求体这里抛异常就能直接拒绝请求。非流式响应成功后触发async_post_call_success_hook流式响应则每个分片触发async_post_call_streaming_hook。也就是说拦截逻辑和业务逻辑完全解耦你只管实现方法调用时机由框架托管。enterprise/enterprise_hooks/ 目录下的几个现成实现就是最好的参照样例。钩子能解决的四类业务问题 防密钥泄露的拦截点最危险的泄露往往发生在请求侧用户误把密钥贴进了对话。enterprise/litellm_enterprise/enterprise_callbacks/secret_detection.py 里的async_pre_call_hook会在请求真正发往模型之前扫描内容命中 API 密钥等敏感模式时直接阻断把泄露挡在出口之外。内容合规过滤对外服务通常有内容红线输入和输出都要管。enterprise/enterprise_hooks/banned_keywords.py 是一个双保险示例async_pre_call_hook检查输入文本async_post_call_success_hook检查完整回复命中违禁词统一返回 400。它还会检查发起调用的user_id是否在 blocked_user_list 中把禁止特定用户调用也收在同一个钩子里。流量削峰与授权把关限流和授权检查放在async_pre_call_hook里做最合适——此时请求尚未消耗任何下游资源。结合 tests/local_testing/test_tpm_rpm_routing_v2.py 里的 TP/RPM 路由用例可以在超限时提前拒绝或排队而不是等模型侧报错。配合用户级阻止列表钩子同时承担了谁能调和能调多少两个把关动作。成本与性能追踪响应侧钩子天然是记账点拿到最终ModelResponse后token 数、耗时、模型、花费都在手上。想接入外部追踪时litellm/integrations/langfuse/ 目录提供了现成的 Langfuse 回调把每次调用连同输入输出、耗时、token 用量一起上报排查这次为什么慢/贵时直接看 trace 就行。四步写出你自己的钩子① 新建钩子文件。在业务代码里建一个custom_hooks.py定义一个继承CustomLogger的类。这一步的作用是把你的拦截逻辑独立成一个可注册模块。② 实现钩子方法。按需覆写方法只在发请求前拦截就只写async_pre_call_hook要检查回复就加async_post_call_success_hook流式场景必须写async_post_call_streaming_hook。每个方法只描述在什么条件下手、命中后做什么抛异常拒绝或静默放行。③ 配置注册。在 litellm 的配置里声明你的回调相关参数如违禁词列表、阻止名单通过litellm.xxx全局变量注入。这一步决定钩子何时被框架加载。④ 重启验证。重启代理后用一条必然触发规则的请求测试该拒的返回 400不该拒的正常出结果。验证点就两个——命中路径和放行路径。选型建议与常见疑问流式响应该挂哪个钩子挂async_post_call_success_hook无效流式调用不会走它。必须用async_post_call_streaming_hook但要清楚它的入参是单个分片文本适合做逐段检测不适合需要完整上下文的判断——此时可以攒齐分片后再校验。敏感词过滤什么时候开面向公众的入口建议双向都开输入 输出内部工具通常只开输入侧即可。注意过滤词表支持直接传列表或指向文件路径两种方式改词表不必发版。要不要接 Langfuse 这类工具只要你需要回答这次调用谁发起的、哪个模型、花了多少就值得接。它是回调callback而非钩子与拦截类钩子互不干扰可以同时启用。收尾钩子机制让 litellm 从统一的调用层变成统一的管控层拦什么、记什么都由你在几个方法里说了算。git clone https://gitcode.com/GitHub_Trending/li/litellm配置细节参考仓库内 docs/ 官方文档动手前建议先通读 enterprise/enterprise_hooks/ 里的四个现成实现。【免费下载链接】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),仅供参考