Langfuse:LLM 应用的可观测性平台,Prompt 与成本追踪的开源标准

Langfuse:LLM 应用的可观测性平台,Prompt 与成本追踪的开源标准

智能体

📖 简介

Langfuse 是开源的 LLM 可观测性平台,一键接入即可追踪每次 LLM 调用的输入输出、token 成本、延迟与评测分数,配套 Prompt 版本管理与数据集,是 AI 应用上生产线的"监控台"。

📝 详细介绍

开篇

这篇教程带你从零启动一个 Langfuse 实例,并用一个真实的 OpenAI 调用脚本完成 LLM 调用的追踪与成本统计。最终你会得到一个可运行的本地 Langfuse 服务,以及一份包含 token 消耗和延迟的可视化 Trace。

前置条件

  • 安装 Docker 24+ 与 Docker Compose v2(用于一键启动 Postgres、Redis 等依赖服务)
  • Node.js 20+ 与 npm 10+(用于运行 Langfuse 本体,开发模式还不要用旧版 LTS)
  • Python 3.10+ 与 pip(用于跑示例客户端,OpenAI SDK 需要它)
  • 一个可用的 OpenAI API Key(或者任何兼容 OpenAI 协议的本地模型端点也可以)
  • 至少 4GB 可用内存,本机端口 3000 和 5432 未被占用

安装部署

1. 安装 Langfuse CLI 与初始化项目

这一步要做什么:把官方仓库克隆到本地,并进入项目目录快速启动生产配置。

git clone https://github.com/langfuse/langfuse.git
cd langfuse
cp .env.example .env

然后编辑 .env,至少修改下面两个值(否则第一次启动会报错):

NEXTAUTH_URL=http://localhost:3000
SALT=replace_this_with_a_random_string

2. 启动依赖服务

这一步要做什么:Langfuse 需要 Postgres 和 Redis,用 Compose 把他们拉起来。

docker compose -f docker-compose.yml up -d

预期输出:看到 databaseredis 两个容器显示 healthy 状态。

3. 初始化数据库并启动应用

这一步要做什么:执行 Prisma 迁移创建数据表,然后以开发模式启动 Langfuse 主服务。

npx prisma migrate deploy
npm run dev

预期输出:终端出现 ready started server on 0.0.0.0:3000,浏览器打开 http://localhost:3000 能看到登录页。

第一个 Demo

1. 创建项目并获取公私钥

这一步要做什么:在 Langfuse UI 中点击右上角头像 → "Create Project" → 命名为 demo。进入项目设置,复制 Public KeySecret Key,后面两步要用。

2. 安装 Python SDK 并写一个最小调用脚本

这一步要做什么:装好 langfuse 与 openai 库,然后写一个带追踪的 chat completion 脚本。核心思路是创建一个 Trace,再把 OpenAI 调用作为 Generation 记录进去。

pip install langfuse openai

cat > trace_demo.py << 'EOF'
from langfuse import Langfuse
from openai import OpenAI

langfuse = Langfuse(
    public_key="pk-xxxx",
    secret_key="sk-xxxx",
    host="http://localhost:3000"
)

client = OpenAI()

trace = langfuse.trace(name="first-trace")

generation = trace.generation(
    name="chat",
    model="gpt-4o-mini",
    input={"messages": [{"role": "user", "content": "用一句话解释什么是可观测性"}]}
)

response = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=generation.input["messages"]
)

generation.end(
    output=response.choices[0].message.content,
    usage={
        "input": response.usage.prompt_tokens,
        "output": response.usage.completion_tokens,
        "total": response.usage.total_tokens,
        "unit": "TOKENS"
    }
)

langfuse.flush()
print("完成,Trace 地址: http://localhost:3000/trace/" + trace.id)
EOF

3. 运行并观察结果

这一步要做什么:执行脚本,然后打开终端输出的 Trace 地址。

python trace_demo.py

预期输出:终端打印 完成,Langfuse UI 中出现一条名为 first-trace 的 trace。点进去可以看到 prompt 原文、回复内容以及精确到分页符的 token 数。左侧的 Cost 列会自动按模型单价换算成美元数额。

配置与调优

1. 持久化存储与备份

默认写进 Docker volume 的 Postgres 数据容易丢。建议在 .env 中改成外部数据库连接串,并定期用 pg_dump 备份。核心是把 DATABASE_URL 指向你的托管 Postgres,而不是本地容器。

2. 关闭调试日志与鉴权增强

生产环境建议把 NODE_ENV 设为 production,并配置 NEXTAUTH_SECRET 而不是默认的 SALT。同时打开 LANGFUSE_ENABLE_ORG_PROJECT 选项,让不同团队的 key 严格隔离。

3. 采样率优化

高流量时不必记录全部请求。在 SDK 初始化时传 sample_rate=0.1,只保留 10% 的 trace。也可以使用 Langfuse 的 "Sampling" 特性在服务端按 trace id 过滤,这样既能保持监控覆盖,又不会压垮存储。

常见坑与排错

报错信息 原因 解决办法
❌ SAIT_MUST_BE_AT_LEAST_32_CHARACTERS .env 中 SALT 太短 openssl rand -hex 32 生成一个 64 位字符串填进去
PrismaClientInitializationError: Can't reach database Postgres 容器还没初始化完成就跑了 migrate 执行 docker compose logs database 等待出现 ready to accept connections 再重试
trace 出现在 UI 但看不到 token 数 generation.end() 传了 usage 结构,但没写 unit: "TOKENS" 按上一节示例补全 unit 字段,并检查 response 的 usage 对象非空
400 Unknown project public_key 对应的项目和 host 指向的实例不匹配 确认 project 属于当前 host 的组织,重新复制 key 再试

下一步

  • 把 Langfuse 接入 FastAPI 中间件,用 @observe() 装饰器自动追踪所有路由的 LLM 调用链路
  • 在评估环节使用 Langfuse 的 Prompt 版本管理,A/B 测试两条 prompt 哪个更省 token
  • 用官方 pino-langfuse 结合日志系统,把传统 error log 与 metric trace 关联起来做告警
🚀

AI 项目推荐

智能体
标签
#LLM可观测 #追踪 #Prompt管理 #成本分析 #开源
浏览
👁️ 13
发布日期
2026-09-09