Langfuse
本文最后更新于 2026年8月15日
未完待续
概述
相对于传统应用,相同输入会产生相同的输出,可以通过测试,日志,异常堆栈发现问题,Agent应用往往不具备确定性输出,即使成功运行,工具的选择,资料的引用,返回的结果都可能是错的,如果仅仅依靠日志等,很难追踪Agent具体执行过程,普通应用日志只能告诉我们它运行过,但是大模型应用需要追溯它为什么会得到这个结果:怎样规划、工具链怎么执行、用户问题是否正确拆分、上下文是否完整、引用资料是否正确,Langfuse就用于解决这些问题。
如果说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
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]# 各组件启动正常,部署完成。
"如果文章对您有帮助,可以请作者喝杯咖啡吗?"
微信支付
支付宝