Opik × LiteLLM 集成指南:为多模型 LLM 应用接入端到端可观测性

发布时间:2026/9/13 16:47:53

Opik × LiteLLM 集成指南:为多模型 LLM 应用接入端到端可观测性 Opik × LiteLLM 集成指南为多模型 LLM 应用接入端到端可观测性【免费下载链接】comet-llmDebug, evaluate, and monitor your LLM applications, RAG systems, and agentic workflows with comprehensive tracing, automated evaluations, and production-ready dashboards.项目地址: https://gitcode.com/GitHub_Trending/co/comet-llm本篇指南以 Opik 的 LiteLLM 官方集成模板为骨架讲解如何在一个基于 LiteLLM 网关的多模型 LLM 应用中接入 Opik 的追踪Tracing、日志与评估能力。读完本文你将掌握通过OpikLogger回调实现零侵入的 LLM 调用自动日志、在track装饰器函数内传递current_span_data建立完整 Span 层级、以及如何借助track_completion装饰器对litellm.completion/litellm.acompletion含流式做细粒度追踪——无论你调用的是 OpenAI、Anthropic、Groq 还是任意 LiteLLM 支持的上百个 Provider。背景为什么需要为 LiteLLM 应用加一层可观测性LiteLLM 的价值在于把几十家 LLM Provider 的统一成一套 OpenAI 兼容的 API 接口让应用层可以用litellm.completion(modelgroq/llama3-8b-8192)这样的写法无缝切换模型。但统一网关也带来了新问题调用到底发给了哪个 Providerprompt、输出、token 用量和成本是多少在多步骤 Agent 流程里哪一次子调用拖慢了整体响应这些问题单靠 LiteLLM 自身无法回答需要一套独立的追踪层来记录每一次调用的输入、输出、元数据与成本——这正是 Opik 所承担的角色。在 Opik 仓库中LiteLLM 集成分为两条互补的路径集成源码目录回调式集成本文主体通过litellm.callbacks注册OpikLoggerLiteLLM 每次完成调用后自动把请求与响应发给 Opik装饰器式集成track_completion通过 opik_tracker.py 暴露的track_completion包装litellm.completion/litellm.acompletion在 Opik 一侧主动拦截并记录调用适合需要精确控制 Span 结构的场景。账号与环境准备选择 Opik 部署形态Opik 平台有两种运行方式集成代码完全一致只需配置不同的端点与密钥Comet 托管版Cloud在 Comet 平台注册账号并获取 API Key开箱即用自托管版Self-hosted参考 自托管安装说明通过 Docker Compose 一键拉起完整的 Opik 后端含 ClickHouse 存储同时 docker-compose 编排文件 与 Helm Chart 提供了两种生产部署路径。安装依赖LiteLLM 集成需要同时安装opik与litellm两个 Python 包pip install opik litellm集成所需的 Python SDK 源码位于 sdks/python/src/opik/integrations/litellm/opik 包会将其作为官方库内集成随包发布。如果你要参与集成开发仓库在 sdks/python/tests/library_integration/litellm/ 与 sdks/python/tests/e2e_library_integration/litellm/ 提供了配套的单元与端到端测试。配置 Opik 客户端针对你的部署形态用任一方式配置 Opik Python SDKCLI 配置终端执行opik configure按提示选择 Cloud 或自托管并填入 API Key 与 Base URL代码配置调用opik.configure()可在运行时动态传入参数环境变量设置OPIK_API_KEY、OPIK_URL_OVERRIDE等环境变量详见 SDK 配置文档 SDK 配置指南。配置 LiteLLM 的 Provider API Key在调用具体 Provider 之前需要先配置对应的 API Key。以 Groq 为例可将密钥写入环境变量export GROQ_API_KEYYOUR_API_KEY对于不同 Provider环境变量名各不相同如OPENAI_API_KEY、ANTHROPIC_API_KEY。更稳妥的方式是在代码中安全地读取密钥并同时设定 Opik 的项目名保证日志落到统一项目下import os import getpass if GROQ_API_KEY not in os.environ: os.environ[GROQ_API_KEY] getpass.getpass(Enter your Groq API key: ) # 为本次集成演示设置项目名所有 trace 会归入该项目 os.environ[OPIK_PROJECT_NAME] groq-integration-demo方式一通过 OpikLogger 回调自动记录 LLM 调用这是最省事的接入方式创建OpikLogger实例并注册进litellm.callbacks此后所有通过 LiteLLM 发出的调用都会被自动记录业务代码零改动from litellm.integrations.opik.opik import OpikLogger import litellm import os opik_logger OpikLogger() litellm.callbacks [opik_logger] # 设置项目名便于在 Opik UI 中按项目聚合 os.environ[OPIK_PROJECT_NAME] groq-integration-demo response litellm.completion( modelgroq/llama3-8b-8192, # 替换为实际模型名如 openai/gpt-4o messages[ {role: user, content: Why is tracking and evaluation of LLMs important?} ] )执行后在 Opik 的 Trace 列表中即可看到一条完整的调用记录chat.completion级别的 trace 与对应 span携带输入 messages、输出 choices、token usage 与created_from: litellm元数据。这一行为有仓库端到端测试作为依据test_opik_logging.py 中的test_litellm_opik_logging__happyflow以litellm.callbacks [opik]触发一次真实调用后断言 Opik 侧恰好生成 1 条 trace 与 1 条 span且trace 名称为chat.completionspan 名称以模型名如gpt-5-nano开头两者元数据均包含{created_from: litellm}输入严格等于原始messages数组span 类型为llmtags 中包含 Provider 名测试中为openai。回调集成的工作原理OpikLogger回调本身定义在 LiteLLM 一侧但 Opik 与之对应的底层能力由 litellm_completion_decorator.py 的LiteLLMCompletionTrackDecorator实现可以从源码确认其记录行为输入过滤记录输入时仅保留messages、functions、function_call、tools、tool_choice、response_format、stop等业务参数见源码中KWARGS_KEYS_TO_LOG_AS_INPUTS敏感信息脱敏api_key、aws_secret_access_key、azure_ad_token、vertex_credentials等 21 项密钥类参数会被显式排除绝不落盘见SENSITIVE_PARAMS_TO_EXCLUDEProvider 识别通过litellm.get_llm_provider(model_name)解析模型前缀如groq/、openai/再经LITELLM_PROVIDER_MAPPING映射为 Opik 统一的LLMProvider枚举写入 span 的provider字段成本计算调用litellm.completion_cost()计算单次调用的费用并随 span 记录total_cost供 Opik 侧做成本聚合usage 归一化把 LiteLLM 返回的 usage 数据转换为 Opik 统一的OpikUsage结构见 opik_usage.py 与 litellm_provider_mapping.py。方式二在 track 函数内记录调用并维护 Span 层级当 LiteLLM 调用发生在 Opiktrack装饰的函数内部时若不额外处理LiteLLM 侧回调产生的 trace 与外层函数不在同一调用树中。解决办法是在litellm.completion的metadata中显式传入opik_context.get_current_span_data()把当前 Span 作为元数据带给 LiteLLM使内层调用挂载到外层函数对应的 Span 之下from opik import track, opik_context import litellm track def generate_story(prompt): response litellm.completion( modelgroq/llama3-8b-8192, # 替换为实际模型名 messages[{role: user, content: prompt}], metadata{ opik: { current_span_data: opik_context.get_current_span_data(), }, }, ) return response.choices[0].message.content track def generate_topic(): prompt Generate a topic for a story about Opik. response litellm.completion( modelopenai/gpt-4o, # 可与上方不同模型 messages[{role: user, content: prompt}], metadata{ opik: { current_span_data: opik_context.get_current_span_data(), }, }, ) return response.choices[0].message.content track def generate_opik_story(): topic generate_topic() story generate_story(topic) return story generate_opik_story()运行后Opik 中会呈现一棵清晰的调用树generate_opik_storyTrace→generate_topic/generate_storySpan→ 各自的litellm.completionLLM Span方便你在 Trace 详情页逐层下钻定位延迟与失败节点。方式三track_completion 装饰器精确追踪含流式如果不想依赖 LiteLLM 全局回调可以直接用 Opik 内置的track_completion装饰器包装调用函数。它支持同步与异步、流式与非流式四种组合并通过 opik_tracker.py 暴露import litellm from opik.integrations.litellm import track_completion tracked_completion track_completion(project_namemy-project)(litellm.completion) response tracked_completion(modelgpt-3.5-turbo, messages[{role: user, content: Hello}])track_completion接收两个可选参数参数类型说明project_namestr | None日志写入的 Opik 项目名缺省时使用 SDK 默认项目sourceTraceSource | NoneTrace 来源标识如sdk、optimization用于区分数据产生方流式调用的聚合原理流式场景下LiteLLM 返回的是CustomStreamWrapper无法一次性拿到完整响应。Opik 通过 stream_patchers.py 对包装器的__next__/__anext__进行打补丁逐个累积 chunk流结束后由 completion_chunks_aggregator.py 的aggregate把全部 chunk 拼装为一条完整的ModelResponse从每个 chunk 的delta中提取增量content与role并拼接成完整消息聚合首尾 chunk 中的usagetoken 统计与finish_reason若流中途抛异常通过error_info_collector收集错误信息写入 span保证失败调用也可追溯。对应测试位于 test_litellm_streaming.py覆盖了同步/异步流式 chunk 聚合与错误路径。三种方式的选型建议接入方式侵入性适用场景litellm.callbacks [OpikLogger()]最低全局生效快速接入、全量记录所有 Provider 调用最契合官方模板的默认路径trackmetadata[opik][current_span_data]中多步骤 Agent / 编排链需要把 LLM 调用挂入业务函数的 Span 层级track_completion装饰器低中按调用点生效需要按函数粒度控制项目归属与来源、或对流式输出有精细追踪诉求常见问题与排查回调未生效确认litellm.callbacks [opik_logger]在首次litellm.completion之前执行若使用 e2e 测试中的字符串形式litellm.callbacks [opik]需要确保opik已安装且其 LiteLLM 回调入口可被 LiteLLM 动态加载。API Key 泄露风险集成内置脱敏机制但仍应避免在metadata或消息内容中放置密钥自托管场景建议配合 docker-compose 的配置 限制后端网络访问。成本字段为空litellm.completion_cost()依赖模型定价表若 Provider/模型不在 model_prices_and_context_window.json 所对应的定价体系中total_cost会以None落库不影响其余日志字段。Provider 识别失败litellm.get_llm_provider对未识别前缀会抛异常装饰器会静默返回Nonespan 的provider字段为空属预期行为。结语通过本文的三种接入方式你已经可以为任何基于 LiteLLM 的应用建立完整的 Opik 可观测链路从一次最简单的litellm.completion自动日志到多模型 Agent 编排中的 Span 树再到流式输出的逐 chunk 聚合与成本核算。更深层的实现细节敏感参数过滤清单、usage 归一化、流式打补丁均可在 sdks/python/src/opik/integrations/litellm/ 中直接阅读源码配套测试为你的接入行为提供了可复现的验证基准。【免费下载链接】comet-llmDebug, evaluate, and monitor your LLM applications, RAG systems, and agentic workflows with comprehensive tracing, automated evaluations, and production-ready dashboards.项目地址: https://gitcode.com/GitHub_Trending/co/comet-llm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/13 16:42:53

大数据需求挖掘与数据服务优化实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/13 17:27:55

Qt和SQL开发教室管理系统:项目实现与部署指南

简介:基于QT与SQL数据库开发的教室管理系统源码包,面向计算机相关专业学生及有Qt开发基础的学习者,适合作为课程大作业、毕业设计或数据库课程综合项目的参考样板。系统围绕教室资源管理设计,涵盖教室信息维护、空教室查询、预约与…

2026/9/13 17:27:55

油藏数值模拟中的IMPES方法原理与MATLAB实现

1. 油藏数值模拟中的两相流动问题本质 在地下油气藏开发过程中,流体流动行为直接影响着采收率预测和开发方案制定。两相流动(通常指油水两相或油气两相)的模拟计算,需要同时考虑质量守恒方程、动量守恒方程以及相间相互作用力。这…

2026/9/13 17:22:55

卡尔曼滤波动态价差追踪:gs-quant 十分钟回测指南

卡尔曼滤波动态价差追踪:gs-quant 十分钟回测指南 【免费下载链接】gs-quant Python toolkit for quantitative finance 项目地址: https://gitcode.com/GitHub_Trending/gs/gs-quant 2024年5月13日,豆粕-菜粕价差一周内从 287 元/吨跳到 412 元&…

2026/9/13 0:01:16

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/13 0:01:16

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/12 6:29:36

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/12 14:32:17

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/13 11:18:28

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码