ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

litellm 钩子快速指南:请求发出前拦截,响应返回后处理

litellm 钩子快速指南:请求发出前拦截,响应返回后处理 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),仅供参考
返回列表