Langfuse

本文最后更新于 2026年8月15日

未完待续

概述

相对于传统应用,相同输入会产生相同的输出,可以通过测试,日志,异常堆栈发现问题,Agent应用往往不具备确定性输出,即使成功运行,工具的选择,资料的引用,返回的结果都可能是错的,如果仅仅依靠日志等,很难追踪Agent具体执行过程,普通应用日志只能告诉我们它运行过,但是大模型应用需要追溯它为什么会得到这个结果:怎样规划、工具链怎么执行、用户问题是否正确拆分、上下文是否完整、引用资料是否正确,Langfuse就用于解决这些问题。

https://langfuse.com/

如果说Agent是一个会查资料,会使用工具和协调任务的数字人,那Langfuse的作用就是审计,实验和监控,在Agent执行任务时,Langfuse会:

  • 审计哪个Agent做了什么
  • 调用了什么工具和模型
  • Prompt和LLM是哪个版本
  • Input/Output Token各是多少,产生多少费用,延迟多少毫秒
  • 回答是否正确完整有依据
  • 用户是否满意
  • 管理Prompt

Langfuse提供统一的Trace,Observe,Score,Dataset,Experiment,并通过可视化UI,使Agent应用的各种运行指标被记录,追踪和对比,让现有的运行数据转换为下次版本改进的依据

  • Trace 完整工作记录:调用的LLM,Tools,SubAgent,RAG引用的资料,通过代码收集给langfuse
  • Observe 某一步骤分析:Token消耗,延迟
  • Score 打分评估:确立规则并判断,用户反馈,人工标注
  • Dataset 保存记录正常和异常样本数据
  • Experiment 比较:提示词,模型,代码

Langfuse支持很多Agent框架,不仅限于LangChain/LangGraph/DeepAgents

1.部署Langfuse

https://langfuse.com/self-hosting/

Langfuse是开源的,可以免费自己部署核心组件,且默认支持私有部署,这样,企业自己的私密敏感信息能够保留在内网内,保证安全。

Langfuse包含一众组件

  • langfuse worker 核心服务
  • langfuse webui API的入口
  • clickhouse 高吞吐分析数据(Trace,Observe…)
  • postgresql 事务型元数据(用户,组织,项目,APIKEY…)
  • minio 附件等
  • redis 队列和缓存

部署方式有多种,这里采用docker compose,我采用的是4.11的版本,docker compose下载地址:https://github.com/langfuse/langfuse/blob/v4.11.0/docker-compose.yml

该版本默认将文件放docker volume默认位置,我选择修改下默认docker-compose.yml将文件放在/opt/langfuse/下自定义位置,如有端口冲突等一并更换:

... ...

volumes:
  langfuse_postgres_data:
    driver: local
    driver_opts:
      type: none
      device: /opt/langfuse/postgres
      o: bind
  langfuse_clickhouse_data:
    driver: local
    driver_opts:
      type: none
      device: /opt/langfuse/clickhouse/data
      o: bind
  langfuse_clickhouse_logs:
    driver: local
    driver_opts:
      type: none
      device: /opt/langfuse/clickhouse/logs
      o: bind
  langfuse_minio_data:
    driver: local
    driver_opts:
      type: none
      device: /opt/langfuse/minio
      o: bind
  langfuse_redis_data:
    driver: local
    driver_opts:
      type: none
      device: /opt/langfuse/redis
      o: bind

自定义目录授权

mkdir -p /opt/langfuse/postgres
mkdir -p /opt/langfuse/clickhouse/data
mkdir -p /opt/langfuse/clickhouse/logs
mkdir -p /opt/langfuse/minio
mkdir -p /opt/langfuse/redis

chown -R 1000:1000 /opt/langfuse/minio
chown -R 999:999 /opt/langfuse/redis
chown -R 70:70 /opt/langfuse/postgres

开始部署,这里我的镜像已经提前pull完成,因此无下载步骤

docker compose -f ./docker-compose.yml up -d 
[root@rocky102 langfuse]# docker compose -f ./docker-compose.yml up -d  
[+] up 7/7
 ✔ Network langfuse_default             Created                                                                                                                              0.0s
 ✔ Container langfuse-clickhouse-1      Healthy                                                                                                                              5.3s
 ✔ Container langfuse-postgres-1        Healthy                                                                                                                              3.8s
 ✔ Container langfuse-redis-1           Healthy                                                                                                                              3.8s
 ✔ Container langfuse-minio-1           Healthy                                                                                                                              5.3s
 ✔ Container langfuse-langfuse-worker-1 Started                                                                                                                              5.4s
 ✔ Container langfuse-langfuse-web-1    Started                                                                                                                              5.5s
[root@rocky102 langfuse]# 
[root@rocky102 langfuse]# docker compose -f ./docker-compose.yml ps
NAME                         IMAGE                                          COMMAND                   SERVICE           CREATED          STATUS                    PORTS
langfuse-clickhouse-1        docker.io/clickhouse/clickhouse-server:25.12   "/entrypoint.sh"          clickhouse        46 seconds ago   Up 45 seconds (healthy)   127.0.0.1:8123->8123/tcp, 9009/tcp, 127.0.0.1:9080->9000/tcp
langfuse-langfuse-web-1      docker.io/langfuse/langfuse:4                  "dumb-init -- ./web/…"   langfuse-web      46 seconds ago   Up 40 seconds             0.0.0.0:3000->3000/tcp, [::]:3000->3000/tcp
langfuse-langfuse-worker-1   docker.io/langfuse/langfuse-worker:4           "dumb-init -- ./work…"   langfuse-worker   46 seconds ago   Up 40 seconds             127.0.0.1:3030->3030/tcp
langfuse-minio-1             cgr.dev/chainguard/minio                       "sh -c 'mkdir -p /da…"   minio             46 seconds ago   Up 45 seconds (healthy)   0.0.0.0:9090->9000/tcp, [::]:9090->9000/tcp, 127.0.0.1:9091->9001/tcp
langfuse-postgres-1          docker.io/postgres:17                          "docker-entrypoint.s…"   postgres          46 seconds ago   Up 45 seconds (healthy)   127.0.0.1:5432->5432/tcp
langfuse-redis-1             docker.io/redis:7                              "docker-entrypoint.s…"   redis             46 seconds ago   Up 45 seconds (healthy)   127.0.0.1:6379->6379/tcp
[root@rocky102 langfuse]# 

各组件启动正常,部署完成。


"如果文章对您有帮助,可以请作者喝杯咖啡吗?"

微信二维码

微信支付

支付宝二维码

支付宝


Langfuse
https://blog.liuzijian.com/post/2026/08/15/langfuse/
作者
Liu Zijian
发布于
2026年8月15日
更新于
2026年8月15日
许可协议