如何用 litellm 钩子给每次 LLM 请求加上预处理与后处理(完整指南)

发布时间:2026/8/30 9:28:01
如何用 litellm 钩子给每次 LLM 请求加上预处理与后处理(完整指南) 如何用 litellm 钩子给每次 LLM 请求加上预处理与后处理完整指南【免费下载链接】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 把多家大模型接进业务后你大概率会遇到两个诉求请求发给模型之前想清洗或拦截一下响应拿到手之后想再加工或留痕。这套钩子Hooks机制就是干这个的——读完这篇你能在代理上挂上自己的请求预处理函数和响应后处理函数并知道它卡在生命周期的哪几个位置。一条带密钥的请求怎么在出门前被拦下想象一个真实场景内部工具里用户可以把聊天记录发给模型有人随手把.env里的 API Key 粘进了对话框。模型是第三方的日志也是第三方存储的密钥就这么出去了。以前的做法是在每个业务入口加 if-else 校验漏一处就漏一次现在你可以在 litellm 代理层挂一个统一的预处理钩子请求还没转发给任何模型之前钩子先把消息里的密钥替换成[REDACTED]再放行。拦截点只有一处所有模型、所有团队全部生效。这就是钩子机制要解决的问题把请求进入和响应返回两个时刻变成可编程的插桩点而不是散落在业务代码里的一次性补丁。一条请求的生命周期钩子卡在哪几个位置litellm 代理处理请求的统一入口在 litellm/proxy/common_request_processing.py钩子就围绕这条链路展开。一条请求从进到出会经过这些时刻请求进入代理鉴权、解析参数完成准备分发。pre_call_hook 触发预处理你的钩子拿到完整请求体data可以抛 400 直接拒绝也可以原地修改data再放行——比如脱敏、改写提示词、补默认参数。真正发给模型OpenAI、Bedrock、Anthropic 任选对钩子透明。响应返回同步调用走post_call_success_hook后处理可以检查返回内容违规就改写或报错流式调用走post_call_streaming_hook每吐一段就过一遍你的检查逻辑调用失败走post_call_failure_hook方便记录失败上下文。这五个方法在示例文件 litellm/proxy/example_config_yaml/custom_callbacks1.py 里都有签名照着抄一个类就能上手。内置钩子则集中在 litellm/proxy/hooks/ 目录限流、预算、提示词注入检测都是同一套机制的不同实现。litellm 钩子的 3 个典型用法拦截违禁词请求和响应两头都堵遇到什么问题某些词不允许出现在用户输入里也不允许模型说出来。怎么做参考 enterprise/enterprise_hooks/banned_keywords.py 的写法——它同时在async_pre_call_hook里扫请求消息、在async_post_call_success_hook和async_post_call_streaming_hook里扫返回内容命中就从词表抛 400。得到什么效果输入侧挡掉违规请求省一次模型调用费输出侧保证流式场景下也不会漏放因为流式每段都过检。自动脱敏密钥请求级秘密检测遇到什么问题用户消息、批量 prompt 里混着各种云厂商密钥人工审核不现实。怎么做enterprise/litellm_enterprise/enterprise_callbacks/secret_detection.py 实现了预调用钩子内置上百种密钥检测器AWS、GitHub、Stripe、JWT 等扫描后把命中的值替换为[REDACTED]再发给模型。得到什么效果密钥不再出现在发给第三方模型的报文和代理日志里且检测范围覆盖普通消息、多模态内容、批量 prompt 三种入口。接入可观测性每次请求留痕可查遇到什么问题钩子拦截了什么、模型耗时多久、花了多少钱没有面板就无从复盘。怎么做后处理链路上挂 Langfuse 等日志回调仓库litellm/integrations/langfuse/目录有现成实现或直接在代理后台查审计日志。得到什么效果每个请求形成完整轨迹——输入输出、首 token 耗时、token 用量、成本钩子的拦截结果同样可追溯后台的审计日志页则记录密钥轮换、用户变更等管理动作做合规审查时按对象检索即可四步挂上你的第一个 litellm 钩子拿到代码git clone https://gitcode.com/GitHub_Trending/li/litellm找到入口打开 litellm/proxy/example_config_yaml/custom_callbacks1.py复制CustomLogger子类骨架在async_pre_call_hook里写你的预处理逻辑。最小配置把回调实例注册进 proxy_server_config.yaml 的litellm_settings段参考litellm/proxy/example_config_yaml/下的示例配置。验证生效重启代理发一个故意触发拦截的测试请求看到 400 报错或 verbose 日志即说明钩子已挂载。配置 litellm 钩子时容易踩的 4 个坑⚠️流式响应不会走 success 钩子只写post_call_success_hook的话streaming 调用直接绕过检查。要么补post_call_streaming_hook要么明确接受流式不检查。预处理钩子有两条路拒绝抛异常和改写直接改data字典。只做审计就别抛错否则会把正常流量拦死要改写就注意改完的数据会原样发给模型。钩子运行在关键路径上每个请求都会同步过一遍别在里面做同步阻塞 IO 或慢查询像密钥扫描这类重操作要评估它对延迟的贡献或按call_type跳过不相关的调用类型。✅按需启用钩子是每请求必跑的预算、限流、内容安全检查各是一个独立钩子挂多少就跑多少建议只保留业务真正需要的其余用配置开关关掉。从请求进来先过一道到响应出去再查一遍litellm 的钩子机制把安全、脱敏、限流、审计这些横切逻辑从业务代码里抽了出来挂在代理的统一链路上。想继续深入可以从 README.md 和 ARCHITECTURE.md 两个入口文档开始配合litellm/proxy/example_config_yaml/目录里的配置示例逐项试。【免费下载链接】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),仅供参考