Opik 是 Comet 推出的 Apache-2.0 许可平台,用于 LLM 追踪、评测和监控,支持完全自托管。我们安装了它并阅读了其代码。它的字符串指标给一个错误答案打了 0.96 分,给一个正确答案只打了 0.45 分,而且 SDK 默认会向 Comet 上报错误和使用数据。本文介绍它的适用场景以及如何进行配置。

作者:EMILY CARTER · FDEINTERVIEWS 编辑部 · 更新于 2026 年 10 月 21 日 · 阅读时长 9 分钟

实践练习:LLM-as-a-judge 概念 · Agent 可观测性与遥测概念 · MLOps 面试题 · 必知的 FDE 面试问题

Opik 是 Comet 的开源平台,用于追踪、评测和监控 LLM 应用与 Agent,其最有力的卖点在于许可证:整个平台(包括服务器和 UI)均采用 Apache-2.0 许可,无需商业协议即可自托管。这使得它在客户数据不能离开其网络的场景下成为天然的默认选择。我们安装了 SDK,阅读了服务器和 SDK 代码,并离线运行了它的各项指标。有两个发现决定了我们的部署方式:SDK 默认向 Comet 发送错误报告和产品分析数据,自托管服务器也会发送每日使用量统计,因此一个严格封闭的部署需要修改四个设置。此外,评测指标在任何人信任仪表盘之前都需要先校准:两个字符串相似度指标给一个事实错误的答案打了 0.96 分,给一个正确的答案只打了 0.45 分。Opik 是一个优秀的平台,但它不会替你决定什么才是你的应用场景下的“好”,其他任何工具也都不能。

Opik 能做什么

Opik 覆盖了从开发到生产的完整闭环:

  • 追踪。使用 @track 装饰器装饰函数,或使用其集成之一(README 列出了数十种,包括 Google ADK、LangChain、CrewAI、DSPy、Anthropic、Gemini、Bedrock,以及面向其他语言的 OpenTelemetry 路径),每次调用都会变成一条带有嵌套 span 的追踪记录:模型调用、工具调用、检索步骤。
  • 评测。数据集、在数据集上运行你的应用的实验,以及各类指标:字符串启发式指标(精确匹配、包含、正则、Levenshtein、BLEU、ROUGE、BERTScore 等)和 LLM 评审指标(幻觉、答案相关性、上下文精确率与召回率、事实性、内容审核、有用性、G-Eval、轨迹准确性、LLM 评审团)。
  • 生产监控。用于分数、追踪数量和 token 用量的仪表盘,以及在线评测规则,可用评审指标对抽样的生产追踪进行打分。
  • 提示词管理、playground、护栏、用于 CI 的 pytest 集成,以及一个包含进化式、少样本贝叶斯、GEPA、元提示和参数优化器的 Agent Optimizer SDK。
  • 一个 MCP 服务器,让 Claude Code、Cursor、Codex 等类似 Agent 可以在对话中读取追踪记录并运行评测。

截至 2026 年 10 月 21 日,该仓库在 GitHub 上约有 22,800 颗星,平台版本为 2.2.114,我们安装的 Python SDK 版本为 2.2.113。README 声称该系统每天处理超过 4000 万条 trace;这是 Comet 给出的数字。

自托管:免费许可,真实的运维负担

Docker Compose 部署会启动 MySQL、Redis、ClickHouse、ZooKeeper 和 MinIO,然后是 Opik 的 Java 后端、一个 Python 后端、前端,以及可选的 guardrails 后端、Jaeger 和 OpenTelemetry collector。一个脚本(./opik.sh)即可在本地将其启动;Helm chart 则覆盖 Kubernetes 场景。

./opik.sh

) brings it up locally; a Helm chart covers Kubernetes.

对于一个分析类产品来说,这是一套常见的技术栈,但它意味着真实的运维承诺。ClickHouse 存储 trace,其增长取决于 span 大小,而不仅仅是 trace 数量。在首次部署之前,需要确定数据保留策略、备份方案,以及当数据摄取落后时由谁负责响应。“免费自托管”指的是免许可费用,账单则转移到了运行 ClickHouse 的人身上。

对于许多客户项目来说,这仍然是正确的权衡。一个无法将 prompt 和输出发送到供应商云端的受监管客户,在流行工具中有三个现实的选择:一个可以自行运行的 Apache-2.0 平台(Opik)、一个 MIT 核心加付费企业模块的平台(Langfuse),或者一个提供企业自托管方案的闭源产品。Opik 自己的对比表就是这样呈现的,我们认同其中的许可事实,但表格的其余部分是供应商的表述框架。

OpikLangfusePhoenixLangSmith
许可证Apache-2.0,完整平台MIT 核心,商业企业模块Elastic License 2.0(源码可见)闭源
自托管是是,仅核心是企业版方案
Agent 追踪与 LLM 评判器是是是是
我们的备注最适合法务不希望有任何许可限制的情况社区庞大;需确认哪些功能位于付费模块中在为他人托管之前,先与法务确认许可条款与 LangChain 和 LangGraph 的集成最紧密

会回传数据的默认配置

我们查阅了 SDK 的配置和服务端的配置。这些都不是隐藏功能;全部默认开启,安全审查时一定会被问及。

位置默认值发送内容修改的设置
Python SDK 目标https://www.comet.com/opik/api/你的 trace 数据(如果你从未运行 opik configure 指向本地服务器)OPIK_URL_OVERRIDE
Python SDK 错误上报Sentry 已启用,使用 Comet 的 DSN错误报告OPIK_SENTRY_ENABLE=false
Python SDK 分析已启用产品分析事件OPIK_ANALYTICS_ENABLE=false
自托管服务器使用情况报告已启用每日统计:用户数、trace 数、实验数、数据集数,附带匿名安装 IDOPIK_USAGE_REPORT_ENABLED=false

我们在源码中检查了服务器的每日报告:它只包含计数和版本信息,不包含追踪内容。这是一个合理的产品选择,而且很容易关闭。SDK 的默认目标更为关键。开发者安装 SDK 后,如果未进行配置就直接运行脚本,其请求会发送到 Comet 的云端端点,因此数据会离开本地网络。请从第一天起就将这四项设置放入基础镜像或共享的 .env 中。

.env

on day one.

指标:我们测量了什么

Opik 提供了许多字符串相似度指标,它们对于其设计目标场景是有用的。我们在离线环境下,针对一行参考答案运行了其中两个指标,以观察它们在语义至关重要的客服机器人答案上的表现。

指标定义:Opik 的 LevenshteinRatio 和 ROUGE 实现。上述分数来自本文所述的离线实验,而非上游基准测试。

否定答案(告诉客户无法获得退款)的 Levenshtein 比率为 0.96,ROUGE-L 为 0.94。数字错误的答案得分为 0.98 和 0.88。正确的改写答案得分为 0.45 和 0.20。一个 Contains("30") 检查捕获了错误的数字,但漏掉了否定表述。这些都不是 Opik 实现上的缺陷;这正是字符串相似度所度量的内容。一个奖励“看起来像参考答案”的指标,会把一个自信但错误的答案排在用不同措辞表达的正确答案之上。请将这些指标用于格式、精确标识符、提取字段以及模板化输出的回归检测,而不是用于自由文本的正确性判断。

Contains("30")

check caught the wrong number and missed the negation. None of this is a flaw in Opik's implementation; it is what string similarity measures.

A metric that rewards looking like the reference will rank a confident wrong answer above a correct one in different words.

Use these metrics for format, exact identifiers, extraction fields and regression detection on templated output, not for correctness of free text.

LLM 评审指标才是真正检查语义的地方,其代码中有两个细节值得注意。

幻觉评审还会依据通用知识进行评分。在提供上下文的情况下,评审指令要求输出不得添加超出上下文的信息或与上下文矛盾,同时还要求它“不应与公认的事实或通用知识相矛盾”。对于公共领域的问题,这是合理的。但对于以客户自身文档(如银行的收费表、保险公司的保单条款、公司的休假规则)为唯一事实来源的企业助手而言,客户的事实可能与评审模型认为的“标准”不同,忠实的答案会被标记为幻觉。对于基于上下文的企业 RAG,请使用仅基于上下文的忠实度提示。

G-Eval 的分数取决于提供商。当评审模型返回 token 对数概率时,Opik 会将分数计算为分数 token 上的概率加权平均值,这是 G-Eval 论文中的方法,能给出更平滑、更稳定的分数。当提供商不返回对数概率时,它会退回到模型输出的整数值。因此,同一指标在两个提供商上可能产生形状不同的分数分布。在任何对比中,请保持评审模型固定不变。

Two more defaults to know: the SDK's default judge model is

openai/gpt-5-nano

(set by

default_llm

), a small and cheap model, and judge prompts wrap inputs in tags with an instruction to treat them as data, which is a sensible defense against answers that try to instruct the judge.

我们对任何平台上的任何评审器的规则,都是我们 LLM-as-a-judge 概念中的那条:手工标注 100 到 200 个示例,衡量评审器与这些标注的一致性,然后才把它的分数放到仪表板上。固定评审模型,并为每个分数存储提示词版本。没有评审器版本的评测分数,是一个六个月后没人能解释清楚的数字。

它的用途

Agent 调试。包含工具调用和检索 span 的嵌套追踪,是查看 Agent 为什么走了十五步而不是四步的最快方式。这是每个团队在第一周就能获得价值的地方。关于要记录什么,请参阅 agent observability 和 telemetry。

CI 中的回归门禁。数据集加实验加 pytest 集成,为你提供一套评测回归套件:一组固定的用例,在提示词、模型或检索发生变化时不得变差。从 50 个代表真实失败的用例开始,而不是 2000 个合成的用例。

生产环境抽样。在线规则可以使用评审指标对一部分线上追踪进行评分。对百分之几的流量进行评分,对趋势进行告警,并将低分路由到人工审核,而不是对单条追踪进行告警。

升级前比较模型。用当前模型和候选模型运行同一个数据集,并逐用例进行比较,而不仅仅是看总体;回归往往隐藏在平均值中。

我们不会用它来做什么:在没有人工校准的情况下,作为判断回答是否正确的唯一依据;或者作为安全边界。Guardrails 有帮助,但它们应该放在你应用中模型的前面,并配有自己的测试。

优缺点

优点缺点
整个平台采用 Apache-2.0 许可证,可自托管且无需许可证自托管意味着要运行 ClickHouse、MySQL、Redis、ZooKeeper 和 MinIO
集成广泛,支持 OpenTelemetry 路径,为编码 Agent 提供 MCP 服务器SDK 默认向 Comet 上报错误和分析数据;服务器上报使用量计数
追踪、数据集、实验、在线规则、提示词和优化器集于一处字符串指标很容易在自由文本上被误用
评审提示词将输入视为数据幻觉评审将忠实度与通用知识混在一起
在支持的地方,G-Eval 使用对数概率加权分数会随评审提供方和模型而变化;默认评审模型较小

我们会如何为客户进行部署

  • 在编写代码之前,先决定追踪数据存放在哪里。如果数据不能离开网络,就自托管,并在基础镜像中设置上述四个配置项。
  • 先追踪,后评测。为 Agent 中的每次模型调用、工具调用和检索都加上 span,并花一周时间阅读追踪数据,然后再选择指标。
  • 用真实故障构建数据集。每一个 bug 报告和每一条糟糕的 trace 都成为一个案例。
  • 按字段选择指标。结构化字段使用精确匹配或正则检查;自由文本的忠实度使用仅依赖上下文的校准评判器;其余部分由人工审核。
  • 对产生分数的一切内容进行版本管理。评判模型、提示词、指标版本、数据集版本。
  • 设置保留与脱敏策略。Trace 中包含客户数据。要决定在采集时遮蔽哪些内容、span 保留多久以及谁可以读取它们。

对于前沿部署工程师来说,这是项目中最常见的第一周场景之一:客户有一个原型,没有 trace,并且模糊地觉得质量“大体上没问题”。搭建 tracing 和一个 50 个案例的回归集,就能把它变成你可以有理有据地辩护的数字。这也是一个标准的面试话题。练习解释离线评估与在线评估的区别、为什么评判器需要校准,以及你会如何为模型升级设置门禁,可以参考我们的 MLOps 面试题和 agentic software factory 指南,其中将模型升级视为部署来讲解。

把它转化为 offer。练习这些内容所对应的真实面试题和概念:

FAQ

Opik 是 Comet 推出的开源平台,用于对 LLM 应用和 Agent 进行 tracing、评估和监控。它记录来自你应用的 trace 和 span,在数据集上使用代码指标或 LLM 评判指标运行评估,通过在线规则对生产流量打分,管理提示词,并包含一个 Agent 优化器和 guardrails。整个平台(包括服务器)采用 Apache-2.0 许可证,可以自托管。

是的。服务器、Web 应用和评估功能均采用 Apache-2.0 许可证,可以在 Docker Compose 或 Kubernetes 上运行,无需商业许可证。运行它意味着需要同时运维 MySQL、Redis、ClickHouse、ZooKeeper 和 MinIO 以及 Opik 自身的服务,因此成本是工程时间而非许可证费用。

这四者都能对多步骤 Agent 进行 trace 并运行 LLM 评判评估。主要区别在于许可证和托管方式:Opik 的整个平台采用 Apache-2.0,Langfuse 的核心采用 MIT 许可证并带有商业企业模块,Phoenix 在 Elastic License 2.0 下为 source-available,LangSmith 则是闭源的,仅在 enterprise 计划中提供自托管。根据你的数据必须存放在哪里以及你的团队已经在运行什么来选择。

Python SDK 默认指向 Comet 的云服务,并且默认启用了 Sentry 错误上报和产品分析。自托管服务器默认每天向 Comet 的统计端点发送使用量计数(用户数、trace 数、实验数、数据集数);我们在该报告中未发现 trace 内容。如果你的数据规则要求不得有外呼请求,请在客户端设置 OPIK_URL_OVERRIDE、OPIK_SENTRY_ENABLE=false 和 OPIK_ANALYTICS_ENABLE=false,并在服务器上设置 OPIK_USAGE_REPORT_ENABLED=false。

它们是工具,而非裁决。在我们的离线测试中,Levenshtein 和 ROUGE 对一个带否定、错误的答案分别打出了 0.96 和 0.94 分,而对一个正确的改写答案只打出 0.45 和 0.20 分。LLM 评审指标更擅长理解语义,但需要在你自己的数据上对照人工标注进行校准。格式和精确匹配检查使用字符串指标,而评审类指标只有在验证了其与人工判断的一致性之后才能使用。

讨论(4)

幻觉提示词中关于通用知识的条款在一家银行的部署中坑了我们。银行自身的产品条款与评审模型所认为的“标准”不同,导致忠实的回答被误判。我们把提示词改为仅依据上下文进行评判,误报就消失了。

读者提问:自托管技术栈对小团队来说负担重吗?

比单个容器重,但比看起来轻。在追踪量或可用性需求迫使你迁移到 Kubernetes 之前,先用 Docker Compose;把 ClickHouse 放在你会备份的磁盘上;并且从第一天起就确定数据保留策略。真正让人意外的成本是大型 span 的存储开销,而不是计算开销。

这篇文章里有一个值得借鉴的习惯:像管理代码一样管理评审模型。在指标中固定模型名称,把提示词的哈希值与每个评分一起存储,这样六个月后你就能区分是质量发生了变化,还是评审模型发生了变化。