跳至正文
-
关注
IT极限技术分享汇

ITmax

IT极限技术分享汇

ITmax

  • 首页
  • 商店
  • 我的帐户
  • 结账
  • 购物车
  • 首页
  • 商店
  • 我的帐户
  • 结账
  • 购物车
关

搜索

Langfuse 项目首图:36773 个 GitHub star,最新版本 v4.72.0,近四周 839 次提交
技术分享

Agent 挂在哪一步,print 查不出来|Langfuse 我没急着装,先把运维账算清

mumupudding 的头像
作者 mumupudding
2026年10月31日 3 分钟阅读
0

一行 “completed” 日志,救不了一个十四步的 Agent

先说一个我自己的老毛病。我维护过一个转发大模型接口的小服务,出了问题去翻日志,能看到的只有一片 access log:状态码 200,耗时几百毫秒,完了。哪个 prompt 触发的、模型返回了什么、中间调了几次工具,一概不知。想复盘?只能靠用户截图,配上他记忆里那句”它当时说得特别自信,但答案是错的”。

这种难受在 Agent 场景里会被放大十倍。一次 Agent 运行动辄十几步:规划、调工具、拼上下文、再调模型,任何一步走偏,最后都是一句理直气壮的胡话。print 打日志这条路我走过,三个无能为力:调用链跨函数跨服务,print 出来的东西拼不回一棵树;token 花在哪一步没人说得清,月底账单只会给总数;想复现得手工拼当时的上下文,拼完早就不确定性收敛了。最气人的是那种偶发问题——同一份代码,十次里九次好好的,偏偏客户演示那天抽风,日志里连它当时看到了哪个检索片段都没记。事后开会,每个人都在猜,没人能拿出证据,这种会我坐过,坐如针毡。

所以 LLM 可观测这个品类出现不是偶然。我盯上 Langfuse 很久了——它大概是开源这个赛道里的事实默认项,3.6 万多个 star,2023 年 5 月就立项了,YC 孵化,去年年初被 ClickHouse 公司收进门。但真正促使我认真写它的原因有点反向:我一直没装。每次想装,看到那一排容器就犹豫。这次我把它的家底、架构账、运维账彻底翻了一遍,结论放在最后。

Langfuse 项目首图:36773 个 GitHub star,最新版本 v4.72.0,近四周 839 次提交
Langfuse:开源 LLM 可观测平台,目前 36,773 个 star,最新版本 v4.72.0,近四周 839 次提交

它的底牌不止一块仪表盘

按我自己的使用预期,把它的能力分成四组,说说哪几块是真能打。

第一块,Tracing,这是它的地基。 一切请求进来都长成一棵树:一次 Agent 运行是一个 trace,里面的每次模型调用、工具调用、检索动作是一个 observation,挂成父子层级。再往上一层,它按 session 和 user 两个维度归组——同一个用户一天里来回二十轮的对话,能顺着 session id 串成完整故事线,做客服场景回访的人会感谢这个设计。树上的每个节点都带耗时、token 数和按模型单价算出来的成本,攒起来就是按项目、按用户、按模型维度的费用报表。接进去的方式相当宽容——OpenAI SDK 换个 import 路径就能全量上报,LangChain、LlamaIndex 有现成 callback,标准路线是 OpenTelemetry 的 OTLP/HTTP。我之前看过它 issue 区,连 Google ADK 的 OTel 冲突都有专门条目(#8316,20 条讨论),侧面说明接入面铺得很广。

第二块,Prompt Management,我觉得是小团队最实用的部分。 prompt 存在服务端,带版本号,改一版发一版,回滚就是切个 label。它还支持同一个 prompt 挂多个 label 做 A/B——production 和 staging 各指一个版本,线上想试新写法,先挂个 experiment label 分流,数据说话了再正式切换。客户端和服务端都有缓存,官方说法是不给线上加延迟。很多团队到现在还在用 Git 仓库管理 prompt,改一次部署一次,这块的价值不用我多讲。

第三块,Evals 和 Datasets。 LLM-as-judge、代码校验器、用户反馈、人工标注队列都齐了,数据集可以拿线上真实 trace 回灌做回归测试。标注队列值得一提:把可疑的线上回复排进队列,运营或审核同学在界面里打分,分数回流到 trace 上——不写一行代码就把人的判断接进了流水线。能打,但要提一句实话:judge 是要烧 token 的,线上全量开 judge 等于给自己涨账单,第三方对比文章里也专门提醒过要抽样。

第四块,新东西,得观望。 最近的 release notes 我翻了几期,v4.7x 连着好几个版本都在加 AI Gateway:按网关 key 归因用量、网关分析页、PagerDuty 告警。方向对,但变化快,等它沉淀。Playground 倒是已经稳了——看到线上某条 trace 回复得不对劲,点一下就跳进调试界面,换模型、改参数、调 prompt 重跑一遍,坏结果的排查动线被它焊成了一条直线。另外它有个 MCP server,最高频的相关 issue(#12738,44 条讨论)是社区在要 SSO/OIDC——能要 SSO 的,基本都是认真在企业里用的团队,这个信号比 star 数诚实。

把两张表揉成一张,代价付给了谁

Langfuse 的架构史值得单独讲,因为它的每一次重构都在回答同一个问题:trace 数据量涨得太快怎么办。

v3(2024 年底)是第一次大动:单靠 Postgres 撑不住了,引入 ClickHouse 做分析库,配上 S3 存原始事件、Redis 做队列。代价是自托管从”起一个容器”变成”起一排容器”,v2 升 v3 的迁移帖在社区里哀声一片,内存报错和超时是常见词。

v4(2026 年)是第二次,官方今年 3 月那篇讲得坦诚:一年内数据量涨了 19 倍,ClickHouse 节点扩了 15 倍还是顶不住——traces 和 observations 两张表做 join,在几百 GB 规模下慢到没法忍。他们试过 AggregatingMergeTree、试过多级 TTL 表,最后干脆把两张表反规范化成一张宽表,span 一旦写入不可变,摄入全面转向 OTel。官方数字:纯 OTel 项目的 S3 存储成本降了约 85%,大项目的表加载从秒级掉到几十毫秒。

技术判断我不吝啬:这是教科书级的取舍。用”不可变 + 反规范化”换查询性能,牺牲的是存储冗余和写入量,对读多写少的 trace 场景是对路的。顺带一提,它的 OTLP 目前只走 HTTP,gRPC 还没支持——已经用标准 OTel collector 的人要注意改导出协议。

但我有两句保留意见。第一,这些优化说到底是给 Langfuse Cloud 上 petabyte 级客户做的,个人和小团队被迫一起买单——我只想看看我那几百条 trace 长什么样,却要养一个 ClickHouse。第二,2026 年 1 月它被 ClickHouse 公司收购了,MIT 协议没动、自托管还是一等公民,但 roadmap 从此和一家数据库厂商绑定,它有充分动机让你一直用 ClickHouse。选型时这两点要摆在桌面上。

装它之前,我先把内存账算了一遍

先给门槛,官方这回倒是写得清楚。

本地试用档:git 加 Docker 就行,官方说法是 5 分钟起。但别被”5 分钟”骗了,compose 文件里躺着六个角色:langfuse-web、langfuse-worker、Postgres、ClickHouse、Redis、MinIO。官方给的生产最小足迹是 web/worker/Postgres 各 2 核 4G、Redis 1 核 1.5G、ClickHouse 2 核 8G。全塞一台机器,8G 内存是底线中的底线,我建议 16G 再谈。

正经跑档:官方 VM 建议至少 4 核 16G 内存、100G 磁盘(AWS 的 t3.xlarge 档),磁盘要大方——trace 数据只增不减,官方文档里连 Docker 日志轮转都专门写了一段警告,就怕你磁盘被吃穿。生产部署它推荐 Kubernetes + Helm,docker compose 那套官方明说没有高可用和备份能力,负载上来了只能垂直加机器。还有一句给准备上生产的人:升级用 docker compose up --pull always,但升大版本前把卷备份做扎实,前面那条 ClickHouse 死锁的 issue 就是这么来的。

装的过程本身不难,坑全在密钥上,三件套一个都不能马虎:

git clone https://github.com/langfuse/langfuse.git
cd langfuse

# ENCRYPTION_KEY 必须是 64 位十六进制,不是 base64、不是随手密码
openssl rand -hex 32   # ENCRYPTION_KEY
openssl rand -base64 32   # NEXTAUTH_SECRET
openssl rand -hex 32   # SALT

三条规矩我替你划出来:ENCRYPTION_KEY 格式不对,web 容器启动就段错误,这是社区文章里出镜率最高的坑;SALT 一旦换,所有已发的 API key 全部作废;NEXTAUTH_SECRET 和 SALT 必须 web、worker 两边一致,否则后台任务静默丢失,你连报错都看不到。另外它没有默认管理员账号,起完在页面里 Sign up 第一个用户就是管理员,想脚本化可以用官方的 headless initialization。

端口也有一处容易想当然。默认对外暴露两个口:web 的 3000,MinIO 的 9090(浏览器要直连它传媒体)。想改端口,光改映射不够——NEXTAUTH_URL 必须跟着改成用户实际访问的地址,登录回调和邮件里的链接全靠它;MinIO 的对外地址也得同步改,否则多模态上传悄悄坏掉。这些耦合官方文档都写了,但藏在页面中后段,属于”看一遍觉得都懂、真改的时候必忘”的类型。

我没敢把整头鲸鱼放进 16G,只抽检了 SDK

说实话:服务端那六个容器,我的机器要留给别的事,这次没跑。但 Python SDK 我装了,做了两个抽检,都是真的:

pip install langfuse   # 装的是 5.1.0,几秒钟的事

第一个抽检,@observe() 装饰器离线可用。不配任何 key、不连任何服务端,装饰过的函数照常执行、照常返回,只是上报被禁用并给一行警告。这意味着业务代码和可观测层是解耦的,监控挂了不连累业务。

第二个抽检,我把 BASE_URL 指到一个不存在的端口再 flush:OTel exporter 按退避策略重试了几次,最后放弃导出,进程不崩,函数照常返回。行为和我预期的”尽力而为、绝不阻塞”一致。这个设计我特意确认了两遍,因为监控类组件最忌讳的就是自己变成故障源——上报通道死了要拖垮业务进程,那是负资产。从抽检看,它的边界切得干净。

对照官方 quickstart,完整的接入长这样:

from langfuse import observe
from langfuse.openai import openai  # OpenAI 集成,自动捕获模型参数

@observe()
def story():
    return openai.chat.completions.create(
        model="gpt-4o",
        messages=[{"role": "user", "content": "What is Langfuse?"}],
    ).choices[0].message.content

@observe()
def main():
    return story()

main()

预期结果:打开自托管实例的 3000 端口(或云上控制台),Traces 页里能看到 main 和 story 两层嵌套的树,story 底下挂着一次模型调用,输入输出、token 数、耗时、成本都在。点进任何一条 trace,还能一键送进 Playground 改参数重跑——线上哪条回复不满意,当场换个模型或换个 prompt 再试一遍,这个动线设计我觉得很贴心。我没有亲眼看到这棵树,上面这一段是逐行对过官方文档的,树长什么样以官方文档截图为准,这一点我不装。

坑我替你翻好了

issue 区我按讨论数翻了一遍,挑几条真值得看的:

  • v4 统一 Tracing 表里根 SPAN 的总成本显示 $0.00(#16077,19 条讨论,仍开着)。成本核算这条线在 v4 重构后还有毛刺,重度依赖成本面板的要先验证。
  • cached token 被重复计数(#10592,17 条讨论)。用了 prompt cache 的,token 统计可能虚高,账要对。
  • Gemini 成本对不上(#8020,30 条讨论,开了一年多)。走 Google SDK 的成本归因一直有争议,用 Gemini 的重点看。
  • web 容器启动报 ZodError(#7995,24 条讨论)。多半是环境变量没配齐,和前面说的密钥三件套是一伙的。
  • 自托管 GCS 媒体上传失败(#6504,24 条讨论)。多模态 trace 存图存音频的要看,compose 里默认的 MinIO 从 Docker 网络外直传不了媒体,官方 troubleshooting 里也承认这点要额外配置。
  • ClickHouse 迁移撞死锁(#6198,16 条讨论)。从旧版本升上来、observations 表搬家时可能卡死,升级前先备份、挑低峰时段,别裸奔。

社区文章里反复出现、issue 里也有印证的还有两件:ClickHouse 在内存不足时先安静接写入、后台 merge 时被 OOM killer 杀掉,2G 内存的机器连门都过不了;磁盘没有 TTL 策略会被 trace 数据吃满。多轮对话的 Agent 场景尤其凶——一次运行几十个 span,全量带上 prompt 和工具入参,存储膨胀速度远超直觉,这是三家对比文章里口径一致的经验。坦白讲,中文社区的自托管长文不多,很多细节我是翻官方 self-hosting 文档和第三方托管商的运维帖交叉对出来的,上面每一条我都给了出处,核对日期是今天,数字都是最新的。

装不装,看你是哪类人

我的判断很干脆:认真在做 LLM 应用、要多人协作、数据不能出门的团队,装,它值得;个人玩票、或者只想要个网关看账单的,别装,成本不匹配。

把话说得更具体些。如果你们团队五个人以上、每天产生几千条 trace、老板会问”这个月模型费花在哪”,Langfuse 的 session 归组、成本报表和多用户协作直接命中要害,六个容器的运维成本换这些是划算的。反过来,如果你是独立开发者,一天几十条 trace,Phoenix 一个单容器就能给你一样的树状视图,何必请一头 ClickHouse 回家。至于只想统一管理 key 和看账单的,那是 Helicone 的地盘,接个 BASE_URL 就完事。

对比对象我点两个名。Opik(Comet 出品,Apache-2.0,全平台开源)是最大竞品:协议纯净度赢——没有 ee 目录那一层;打分评定的功底更深,PyTest 集成能把幻觉率回归做成 CI 门禁。但它开源版不带多用户管理,这层在 Langfuse 是 MIT 里白送的;运行栈还更重,ZooKeeper 都给你备好了。LangSmith 是另一个方向:LangChain 全家桶用户零配置接入,体验最顺,但闭源 SaaS,不能自托管,数据要出门——这条对很多团队就是一票否决。还有一个轻量选项 Arize Phoenix:OTel 原生、单容器起步,适合先把”看得见”解决、再考虑”管得好”的团队,不过它走的是 Elastic License 2.0,采购流程里卡 OSI 协议的要注意。

一句话概括对比维度:协议纯洁度看 Opik,多用户开箱即用和生态广度看 Langfuse,极致轻量看 Phoenix,数据必须出门且深度绑 LangChain 才看 LangSmith。

总而言之,这次没装不是否定它,是我算完账后的理性推迟:等它 AI gateway 这波改动沉淀一下,等我的机器腾出那 16G,或者干脆等哪天真有 Agent 应用上量了再说。窗口开着不着急跳,这个项目一个月内的提交量比我一年写的都多,跑不丢。顺手拉了下现在的家底:36,773 个 star,最近四周 839 次提交,版本号已经卷到 10 月 29 日的 v4.72.0,开源版和云版还是同一套代码。最后说句实在的,可观测这块的坑,装之前多翻一小时 issue,比装之后少熬三个通宵划算——这笔账怎么算都不亏。

mumupudding 的头像
作者

mumupudding

关注我
其他文章
ms-swift 开源项目封面:魔搭出品的大模型微调全家桶,15,986 star、支持 600 多个模型、近四周 75 次提交
上一个

让模型学会说你的行话|ms-swift 上手前,我把它 600 条 issue 翻了一遍

Qwen Code 封面图:GitHub 28,854 星,最新版本 v0.26.5,近四周 1,370 次提交
下一个

每天 2000 次免费请求的攻略都过期了|Qwen Code 装完一遍,我把新旧两本账算清

暂无评论!成为第一个。

发表回复 取消回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Copyright 2026 — IT极限技术分享汇. 备案号:浙ICP备17006560号-2