讲的是Langfuse这个开源的LLM应用监控工具。你会学到它怎么追踪每次调用的全链路、怎么统计token成本和延迟、怎么收集用户反馈做人工评估、怎么用score做自动评估、怎么自部署和集成、怎么对接告警系统。适合想自建LLM可观测能力、不想依赖商业服务的工程团队搭建监控体系。覆盖了从基础概念到工程实践的关键要点。

岗位关联

需要学习Langfuse开源可观测,自动化流程的部署和监控需要工程化能力。本篇涵盖MLOps/LLMOps、模型部署、CI/CD、版本管理,帮助你实现AI工程化交付。

目录
  1. 可视化演示
  2. Langfuse架构与自部署方案
  3. 全链路追踪与Token成本统计
  4. 用户反馈收集与人工评估
  5. Score自动评估与质量打分
  6. 告警集成与监控体系构建
  7. AI 应用场景
  8. Python 演示
  9. 常见问答
  10. 常见误区
  11. 参考来源

可视化演示

展示Langfuse三大核心:全链路追踪(Trace-Span-Generation调用链)、Token成本与延迟监控告警、Score自动评估与用户反馈收集,动态演示LLM应用可观测体系。

本节配有交互动效(进入视口后自动加载,约 3KB)。

全链路追踪:Trace-Span-Generation调用链 玫红为Trace入口 浅红为Span处理 绿色为Generation调用 Trace = Input → Prompt → LLM → Post → Output 每次LLM调用记录为完整Trace,包含输入、Prompt渲染、模型调用、后处理和输出全链路

Langfuse架构与自部署方案

Langfuse是一个开源的大语言模型(LLM)可观测性平台,基于Next.js框架和PostgreSQL数据库构建。其核心架构分为三层:前端展示层(基于Next.js的Web UI)、API服务层(提供REST API和SDK接入)以及数据存储层(PostgreSQL存储追踪数据,可选配S3进行大对象存储)。这种分层架构使得Langfuse既适合单机部署,也能在大规模集群环境中运行。

在自部署方案方面,Langfuse提供了Docker Compose和Kubernetes两种主流部署方式。Docker Compose方案适合中小规模团队,通过一个docker-compose.yml文件即可启动包含Web服务、PostgreSQL数据库和Redis缓存的完整环境。对于金融、医疗等对数据隐私有严格要求的企业,自部署方案确保所有LLM调用数据(包括Prompt内容、模型输出、Token消耗等)完全存储在自有基础设施中,满足合规审计要求。

以某金融企业为例,该企业部署了Langfuse来追踪其智能客服Agent的所有LLM调用。通过Kubernetes部署方案,他们将Langfuse与现有的内部微服务架构集成,利用Helm Chart进行版本管理和滚动升级。数据存储在加密的PostgreSQL实例中,配合网络策略(NetworkPolicy)限制只有特定的命名空间可以访问Langfuse API,从而实现了安全合规的可观测性体系。

在数据隐私方面,Langfuse支持多种安全配置:包括API Key认证、RBAC权限控制、数据加密传输(TLS)和静态加密。企业可以根据自身的安全策略,配置数据保留策略(Data Retention Policy),自动清理超过指定时间的追踪数据。此外,Langfuse还支持SSO(单点登录)集成,方便与企业现有的身份认证系统对接。

yaml23 行
# Docker Compose 部署示例version: '3.8'services:  langfuse:    image: langfuse/langfuse:2    ports:      - "3000:3000"    environment:      DATABASE_URL: postgresql://user:pass@db:5432/langfuse      NEXTAUTH_SECRET: mysecret      SALT: mysalt    depends_on:      - db  db:    image: postgres:15    environment:      POSTGRES_USER: user      POSTGRES_PASSWORD: pass      POSTGRES_DB: langfuse    volumes:      - pgdata:/var/lib/postgresql/datavolumes:  pgdata:

全链路追踪与Token成本统计

Langfuse的核心能力之一是全链路追踪(Tracing)。每一次LLM调用都可以被记录为一个Trace,其中包含完整的调用链路:从用户输入、Prompt模板渲染、模型调用、到最终输出。Trace内部可以包含多个Span和Generation,分别对应普通函数调用和LLM生成调用。通过这种层次化的追踪结构,开发者可以清晰地看到一个请求在系统中的完整流转路径。

Token成本统计是Langfuse在可观测性方面的重要功能。Langfuse内置了主流模型的定价表(如GPT-4、GPT-3.5-turbo、Claude系列等),能够自动根据每次调用消耗的input_tokens和output_tokens计算成本。对于使用自定义模型或私有化部署模型的场景,Langfuse支持自定义模型定价配置,确保成本统计的完整性。

在成本看板(Cost Dashboard)方面,Langfuse提供了多维度的成本分析视图:按时间维度查看每日/每周/每月的成本趋势;按模型维度对比不同模型的成本占比;按用户/会话维度追踪单个用户的累计消耗。某金融企业利用这些功能发现,其智能客服Agent中30%的Token消耗来自于重复的上下文传递,通过优化Prompt结构和引入上下文压缩策略,成功将月度Token成本降低了40%。

全链路追踪还支持与业务指标的关联分析。例如,可以将Trace与业务订单ID、用户ID等外部标识关联,从而分析不同业务场景下的LLM使用效率和成本。这种能力对于企业进行LLM应用的ROI评估至关重要。

Ctotal=∑i=1n(pinput×tinput,i+poutput×toutput,i)C_{total} = \sum_{i=1}^{n} (p_{input} \times t_{input,i} + p_{output} \times t_{output,i})
总成本计算公式,其中 p_input 和 p_output 分别为模型的输入和输出单价,t_input 和 t_output 为对应Token数量

用户反馈收集与人工评估

Langfuse提供了内置的用户反馈收集机制。通过在应用界面中嵌入反馈按钮(如点赞/点踩),终端用户可以直接对LLM的输出进行评价。这些反馈数据通过API实时同步到Langfuse平台,并与对应的Trace记录关联。这种直接的反馈通道是持续改进LLM应用质量的关键数据来源。

在人工评估方面,Langfuse支持多标注者协作(Multi-annotator Collaboration)模式。评估团队可以在Langfuse的Web UI中对Trace进行标注和评分,支持自定义评分维度和评分标准。例如,对于金融客服场景,可以设置回答准确性、合规性、专业度等多个评估维度,每个维度由不同的评估专家进行打分。

反馈与Trace的关联机制是Langfuse的一大特色。每条反馈都可以精确地关联到具体的Trace ID,甚至可以关联到Trace内部的特定Generation。这使得开发者在分析反馈时,能够完整地回溯到当时的Prompt输入、模型参数、输出内容等全部上下文信息,极大地提升了问题定位和根因分析的效率。

Langfuse还支持将反馈数据导出,用于构建评估数据集。这些数据集可以用于模型的微调(Fine-tuning)、RLHF(基于人类反馈的强化学习)训练,或者作为自动化评估系统的测试基准。通过形成收集反馈-分析问题-优化模型-验证效果的闭环,持续提升LLM应用的质量。

Score自动评估与质量打分

Langfuse的Score系统提供了一套灵活的自动评估框架。用户可以自定义评估规则,基于多种策略对LLM输出进行质量打分。Score可以与Trace、Session或单个Generation关联,支持数值型和分类型两种数据类型。通过编程接口,开发者可以将评估逻辑集成到CI/CD流水线中,实现自动化的质量回归测试。

在具体评估策略方面,Langfuse支持多种方法:(1)基于关键词匹配的评估——检查输出是否包含必要的专业术语或关键信息;(2)基于输出长度的评估——确保回答既不过于简短也不过于冗长;(3)LLM-as-Judge模式——使用另一个LLM来评估目标LLM的输出质量,这种方法特别适合评估回答的连贯性、准确性和有用性等主观指标。某电商企业使用GPT-4作为评审模型,对其客服Agent(使用GPT-3.5-turbo)的回答进行自动评分,评估维度包括回答准确性、语气适当性和解决方案有效性。

批量评估(Batch Evaluation)是Langfuse面向大规模应用的另一重要功能。用户可以选取一段时间内的所有Trace或特定条件的Trace,批量运行评估任务。评估结果以报表形式呈现,支持按时间趋势、模型版本、业务场景等维度进行对比分析。这使得团队能够系统性地监控LLM输出质量的变化趋势,及时发现质量退化问题。

Score系统还支持与A/B测试结合使用。通过对比不同Prompt版本或模型版本的Score分布,团队可以数据驱动地做出模型升级或Prompt优化的决策。这种基于数据的迭代方式,比传统的定性评估更加客观和高效。

告警集成与监控体系构建

Langfuse支持通过Webhook机制与外部告警系统集成。当满足预设的告警条件时,Langfuse可以自动发送Webhook通知到Slack、飞书、钉钉等企业通讯工具,确保相关团队能够及时响应。告警消息可以包含丰富的上下文信息,如触发告警的具体Trace链接、异常指标数值等,方便接收者快速定位问题。

在告警规则配置方面,Langfuse支持基于多种指标的告警条件设定:(1)错误率告警——当LLM调用错误率超过阈值时触发;(2)延迟告警——当平均响应延迟超过预设值时触发;(3)成本告警——当单位时间内的Token消耗成本超过预算时触发。这些告警规则可以组合使用,形成多层次的监控防护网。

对于需要更深度监控集成的企业,Langfuse提供了与Prometheus/Grafana生态系统的对接能力。通过暴露Prometheus格式的指标端点,企业可以将Langfuse的运行指标(如API请求量、追踪数据写入速率、查询延迟等)纳入现有的Grafana监控看板中,实现LLM应用监控与传统应用监控的统一视图。

在监控体系构建的最佳实践中,建议采用分层监控策略:第一层是基础设施层监控(CPU、内存、磁盘、网络),第二层是应用层监控(API可用性、响应时间、错误率),第三层是业务层监控(Token成本、用户满意度、模型质量分数)。通过这三层监控的协同,构建完整的LLM应用可观测性体系。

python21 行
# Webhook告警配置示例import requests def send_alert(webhook_url, alert_type, metrics):    """发送告警到飞书/钉钉/Slack"""    payload = {        "msg_type": "interactive",        "card": {            "header": {                "title": {"tag": "plain_text", "content": f"LLM告警: {alert_type}"},            },            "elements": [                {"tag": "markdown", "content": f"**告警类型**: {alert_type}\n"                                               f"**触发时间**: {metrics['timestamp']}\n"                                               f"**当前值**: {metrics['current_value']}\n"                                               f"**阈值**: {metrics['threshold']}"}            ]        }    }    response = requests.post(webhook_url, json=payload)    return response.status_code == 200

AI 应用场景

金融企业智能客服Agent全链路可观测

阶段:监控运维

解决的问题:金融企业部署了基于LLM的智能客服Agent后,面临无法追踪每次对话的Token消耗、无法评估回答质量、无法及时发现异常调用等问题。通过Langfuse实现全链路追踪和成本监控,帮助企业将月度LLM调用成本降低40%。

具体案例:某银行信用卡中心部署了基于GPT-4的智能客服Agent处理持卡人咨询,日均处理约5万通对话。通过Langfuse的Trace功能追踪每通对话的完整链路(意图识别、知识检索、回答生成、合规检查),利用Token成本统计发现合规检查环节消耗了35%的Token但价值有限,于是将该环节改为规则引擎实现,月均节省Token费用约12万元。

电商多模型A/B测试与质量评估体系

阶段:模型部署

解决的问题:电商企业在LLM应用迭代过程中,缺乏客观的模型对比评估手段和自动化的质量监控机制。通过Langfuse的Score系统和批量评估功能,建立了数据驱动的模型选型和Prompt优化流程。

具体案例:某电商平台在其商品推荐对话助手项目中,同时测试GPT-4、Claude-3和自部署Llama-3三个模型。通过Langfuse的Score系统,从回答准确性、响应延迟、Token成本三个维度进行自动化评估。批量评估功能每日对前一天的5000条对话进行打分,生成对比报表。最终基于两周的评估数据,选择了Claude-3作为主力模型,在保证质量的前提下将成本降低了25%。

医疗AI助手合规审计与反馈闭环

阶段:监控运维

解决的问题:医疗领域的AI助手需要严格的可追溯性和合规审计能力。通过Langfuse的自部署方案,所有LLM调用数据存储在院内私有化环境中,结合反馈收集和人工评估功能,建立了完整的合规审计链条。

具体案例:某三甲医院在其在线问诊AI助手中集成Langfuse,每次医患对话的LLM调用都被完整记录(包括输入的病情描述、生成的医学建议、引用的指南来源)。医疗质控团队每周在Langfuse平台上抽样评估100条对话的医学准确性和建议安全性,通过Score系统标注问题案例。发现的问题案例自动关联到Prompt模板版本,帮助团队快速定位并修复了3处可能导致不安全建议的Prompt缺陷。

Python 演示

python85 行
import osimport jsonfrom datetime import datetimefrom langfuse import Langfuse langfuse = Langfuse(    public_key=os.environ.get("LANGFUSE_PUBLIC_KEY", "pk-test-xxx"),    secret_key=os.environ.get("LANGFUSE_SECRET_KEY", "sk-test-xxx"),    host=os.environ.get("LANGFUSE_HOST", "http://localhost:3000")) def trace_llm_call(user_id, session_id, user_input, model_name, prompt_tokens, completion_tokens, output):    trace = langfuse.trace(        name="customer-service-agent",        user_id=user_id,        session_id=session_id,        metadata={"source": "financial_cs", "version": "1.2.0"}    )    generation = trace.generation(        name="llm-generation",        model=model_name,        model_kwargs={"temperature": 0.7, "max_tokens": 1024},        input=user_input,        output=output,        usage={            "input": prompt_tokens,            "output": completion_tokens,            "total": prompt_tokens + completion_tokens,            "unit": "TOKENS"        }    )    return trace, generation def calculate_cost(model_name, prompt_tokens, completion_tokens):    pricing = {        "gpt-4": {"input": 0.03, "output": 0.06},        "gpt-3.5-turbo": {"input": 0.0015, "output": 0.002},        "claude-3-sonnet": {"input": 0.003, "output": 0.015},    }    if model_name not in pricing:        return None    price = pricing[model_name]    cost = (prompt_tokens / 1000 * price["input"]) + (completion_tokens / 1000 * price["output"])    return round(cost, 6) def add_quality_score(trace, score_name, value, comment=""):    trace.score(name=score_name, value=value, comment=comment, data_type="NUMERIC") def add_feedback_score(trace, feedback_value):    trace.score(name="user_feedback", value=feedback_value, data_type="CATEGORICAL") def batch_evaluate_traces(traces_data, eval_function):    results = []    for trace_info in traces_data:        score = eval_function(trace_info["output"])        results.append({"trace_id": trace_info["trace_id"], "score": score, "evaluated_at": datetime.now().isoformat()})    return results def keyword_eval(output):    keywords = ["您好", "请问", "解决方案", "建议"]    score = sum(1 for kw in keywords if kw in output)    return min(score / len(keywords), 1.0) if __name__ == "__main__":    trace, generation = trace_llm_call(        user_id="user_10086",        session_id="session_20240101_001",        user_input="我的信用卡账单为什么多了500元?",        model_name="gpt-4",        prompt_tokens=150,        completion_tokens=320,        output="您好,经查询您的账单中新增500元为年费支出。建议您使用积分兑换年费减免。"    )    cost = calculate_cost("gpt-4", 150, 320)    print(f"本次调用成本: ${cost}")    add_quality_score(trace, "keyword_match", 0.75, "包含关键服务用语")    add_feedback_score(trace, "positive")    mock_traces = [        {"trace_id": "t_001", "output": "您好,请问有什么可以帮助您的?"},        {"trace_id": "t_002", "output": "建议您查看账单详情。"},    ]    eval_results = batch_evaluate_traces(mock_traces, keyword_eval)    print(f"批量评估结果: {json.dumps(eval_results, ensure_ascii=False, indent=2)}")    langfuse.flush()    print("所有追踪数据已上传至Langfuse")
目的:演示Langfuse在LLM可观测性中的核心集成流程:全链路追踪、Token成本计算、质量评分、用户反馈和批量评估。
  1. langfuse = Langfuse(初始化Langfuse客户端,配置公钥、私钥和服务地址
  2. trace = langfuse.trace(创建一条Trace记录,关联用户ID和会话ID用于全链路追踪
  3. generation = trace.generation(在Trace下记录一次LLM Generation调用,包含模型名称、输入输出和Token用量
  4. usage={记录Token消耗详情,包括输入Token、输出Token和总计Token数
  5. def calculate_cost(model_name, prompt_tokens, completion_tokens):根据模型定价表计算本次LLM调用的美元成本
  6. cost = (prompt_tokens / 1000 * price["input"]) + (completion_tokens / 1000 * price["output"])按输入输出分别乘以对应单价后求和得到总成本
  7. def add_quality_score(trace, score_name, value, comment=""):为Trace添加自定义质量评分,支持数值型和分类型
  8. def batch_evaluate_traces(traces_data, eval_function):批量评估函数,对多条Trace的输出运行评估逻辑并返回评分结果
  9. def keyword_eval(output):基于关键词匹配的简单评估实现,检查输出是否包含必要的服务用语
  10. cost = calculate_cost("gpt-4", 150, 320)计算GPT-4模型本次调用的成本并打印
  11. eval_results = batch_evaluate_traces(mock_traces, keyword_eval)对模拟的Trace数据执行批量关键词评估
  12. langfuse.flush()刷新客户端缓冲区,确保所有追踪数据上传到Langfuse服务端

常见问答

Langfuse与LangSmith的核心区别是什么?
Langfuse是完全开源的LLM可观测性平台,支持自部署,数据完全存储在自有基础设施中。LangSmith是LangChain团队提供的商业SaaS服务,与LangChain生态深度集成但不开源。Langfuse在成本可控性和数据主权方面具有优势。
Langfuse的Trace、Span和Generation之间是什么关系?
Trace是最顶层的追踪单元,代表一次完整的请求链路。Span是Trace内的子操作,表示普通函数调用。Generation是Span的特化类型,专门用于记录LLM生成调用,包含模型名称、Prompt、Completion和Token用量。
如何在Langfuse中实现Token成本的精确统计?
在记录Generation时传入usage参数包含input_tokens和output_tokens,Langfuse内置主流模型定价表自动计算成本,对于自定义模型可通过API配置自定义定价。
Langfuse的Score系统支持哪些评估方式?
支持三种主要评估方式:人工评分、程序化评分(通过SDK自动提交)和LLM-as-Judge(使用一个LLM评估另一个LLM的输出质量)。Score支持NUMERIC和CATEGORICAL两种数据类型。
自部署Langfuse时需要注意哪些关键配置?
需要关注:PostgreSQL数据库备份和调优、NEXTAUTH_SECRET和SALT环境变量、API Key管理和轮换、资源规划、网络策略限制、版本升级策略等。
Langfuse如何支持多标注者协作评估?
每个标注者使用独立账号登录,评估记录标注标注者身份。支持自定义评分维度,可计算标注一致性(Inter-annotator Agreement),管理员可分配评估任务并追踪进度。
如何将Langfuse的告警集成到飞书/钉钉?
在飞书/钉钉创建自定义机器人获取Webhook URL,在Langfuse配置Webhook告警规则,设置触发条件(如错误率>5%),配置消息模板包含告警类型、当前值、阈值和Trace链接。

常见误区

误区Langfuse功能不如LangSmith全面,不适合生产环境使用

正解Langfuse在核心可观测性功能上与LangSmith处于同一水平,额外提供自部署能力、数据完全自主可控、无调用量限制等优势。对于需要数据主权和成本可控的企业,Langfuse反而更适合生产环境。

为何常见:许多开发者将开源等同于功能简陋,且LangSmith有LangChain官方背书,容易造成商业产品一定更好的认知偏差。

误区Token成本统计只需要看总消耗量就够了

正解仅看总消耗量会遗漏大量优化机会。有效的成本分析需要多维度拆解:按模型、用户/场景、时间、Trace内部环节等维度分析。某金融企业通过细分分析发现仅优化上下文传递策略就节省了40%的成本。

为何常见:总消耗量是最直观的指标,容易给人掌握了全局的错觉。但LLM应用的成本优化往往隐藏在细节中。

误区自部署Langfuse不需要额外运维投入

正解自部署Langfuse需要持续的运维投入:PostgreSQL数据库需要定期备份和调优、Langfuse服务需要监控资源使用率和版本更新、高并发场景需要配置负载均衡和水平扩展。

为何常见:Docker Compose的一键部署体验容易让人产生部署完就不用管了的误解。实际上生产环境的运维是持续性的工作。

误区Langfuse的Trace数据会显著影响应用性能

正解Langfuse SDK采用异步批量上传机制,Trace数据的采集和发送不会阻塞主应用线程。在正常配置下,对应用延迟的影响在毫秒级别,可以忽略不计。

为何常见:开发者担心额外的数据记录操作会增加请求延迟,但Langfuse的设计已经充分考虑了性能影响。

参考来源