AI流量审计

Langfuse 简介

Langfuse 是一个开源的 LLM 工程平台(Open Source LLM Engineering Platform),为大语言模型应用提供全面的开发和运维工具。它帮助开发团队监控、调试和优化生产环境中的 LLM 应用。

Langfuse 是干什么的?

当你在做 Chatbot / RAG / Agent / 多步推理应用 时,常见问题是:

模型为什么这次回答这么差?
Prompt 改了到底有没有变好?
用户问了什么?模型是怎么一步步走的?
Token 花在哪里了?成本多少?
不同模型 / Prompt 哪个更好?

👉 Langfuse 就是用来解决这些问题的。

核心功能

1. 可观测性(Observability)

  • 完整的应用追踪:基于 OpenTelemetry 标准,提供嵌套追踪能力
  • 性能监控:显示每个调用的延迟和成本
  • 简单集成:通过 @observe() 装饰器即可集成

2. 评估系统(Evaluation)

  • 自动化评估框架
  • 人工标注功能
  • 数据集管理和版本控制

3. 提示词管理(Prompt Management)

  • 集中管理提示词模板
  • 版本控制和回滚
  • Playground 测试环境

4. 指标分析(Metrics)

  • 实时性能监控和分析
  • 详细的成本追踪
  • 自定义指标统计

集成生态

Langfuse 支持主流的 LLM 开发框架和工具:

  • SDK:Python、JavaScript/TypeScript
  • 模型提供商:OpenAI、Anthropic 等
  • 框架:LangChain、LlamaIndex、Vercel AI SDK、Instructor
  • 网关:LiteLLM
  • 无代码工具:Dify、Flowise、Langflow

主要优势

  1. 易于集成:提供 drop-in wrapper,最小化代码改动
  2. 开源透明:支持自托管部署,符合多项安全认证(SOC 2 Type II、ISO 27001、GDPR、HIPAA)
  3. 全栈覆盖:从开发到生产的完整工具链
  4. 调试友好:详细的追踪信息帮助快速定位问题

Langfuse 自托管部署

本部署方案采用 Langfuse + LiteLLM 的组合架构,实现对 LLM 应用流量的完整审计和可观测性。

架构说明

这个部署方案包含三个核心服务:

  1. PostgreSQL 数据库(db)

    • 存储 Langfuse 的所有数据
    • 包括 traces、用户数据、配置等
  2. Langfuse Web 服务(langfuse-web)

    • 提供可视化界面和 API
    • 用于查看追踪数据、管理提示词等
    • 访问地址:http://localhost:3000
  3. LiteLLM 代理层(litellm-proxy)

    • 统一的 LLM 网关,支持多个模型提供商
    • 自动将所有 LLM 调用发送到 Langfuse 进行追踪
    • 访问地址:http://localhost:4000

工作流程

1
2
3
你的应用 → LiteLLM 代理 → 各种 LLM API (OpenAI/Claude/等)

Langfuse 追踪和分析

通过这种架构,你的应用只需要配置 LiteLLM 的地址,所有 LLM 调用都会被自动记录和分析。


快速部署

步骤 1:准备配置文件

创建 docker-compose.yml 文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
version: '3.9'

services:
# --- Langfuse 数据库 ---
db:
image: postgres:16
restart: unless-stopped
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
- POSTGRES_DB=langfuse
volumes:
- pgdata:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 10s
timeout: 5s
retries: 5

# --- Langfuse 服务端 (http://localhost:3000) ---
langfuse-web:
image: langfuse/langfuse:2
restart: unless-stopped
depends_on:
db:
condition: service_healthy
ports:
- "3000:3000"
environment:
- DATABASE_URL=postgresql://postgres:postgres@db:5432/langfuse
- NEXTAUTH_SECRET=mysecret # 生产环境请修改
- SALT=mysalt # 生产环境请修改
- NEXTAUTH_URL=http://localhost:3000
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000/api/public/health"]
interval: 30s
timeout: 10s
retries: 3

# --- LiteLLM 代理层 (http://localhost:4000) ---
litellm-proxy:
image: ghcr.io/berriai/litellm:main-latest
restart: unless-stopped
depends_on:
langfuse-web:
condition: service_healthy
ports:
- "4000:4000"
volumes:
- ./litellm-config.yaml:/app/config.yaml
command: ["--config", "/app/config.yaml"]
environment:
# 注意:这些密钥需要在 Langfuse 启动后从后台获取
- LANGFUSE_PUBLIC_KEY=pk-lf-your-public-key
- LANGFUSE_SECRET_KEY=sk-lf-your-secret-key
- LANGFUSE_HOST=http://langfuse-web:3000

volumes:
pgdata:

步骤 2:创建 LiteLLM 配置文件

创建 litellm-config.yaml 文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
model_list:
# OpenAI 模型配置
- model_name: gpt-4
litellm_params:
model: openai/gpt-4
api_key: os.environ/OPENAI_API_KEY

- model_name: gpt-3.5-turbo
litellm_params:
model: openai/gpt-3.5-turbo
api_key: os.environ/OPENAI_API_KEY

# Anthropic Claude 配置
- model_name: claude-3-opus
litellm_params:
model: anthropic/claude-3-opus-20240229
api_key: os.environ/ANTHROPIC_API_KEY

- model_name: claude-3-sonnet
litellm_params:
model: anthropic/claude-3-sonnet-20240229
api_key: os.environ/ANTHROPIC_API_KEY

# LM Studio / vllm / ollama
- model_name: qwen3-vl-32b-thinking # 你在 Agent 中调用的模型名
litellm_params:
model: openai/qwen3-vl-32b-thinking # 格式为 openai/任意名
api_base: http://127.0.0.1:1234/v1 # 填写你现有的 vLLM 地址
api_key: "not-needed"

# Langfuse 集成配置(自动追踪所有请求)
litellm_settings:
success_callback: ["langfuse"]
failure_callback: ["langfuse"]

# 可选:启用缓存
cache: true
cache_params:
type: "redis" # 或者 "disk"

# 可选:日志配置
general_settings:
master_key: "sk-1234" # 访问 LiteLLM 的密钥
database_url: "postgresql://postgres:postgres@db:5432/litellm"

步骤 3:配置环境变量

创建 .env 文件存储敏感信息:

1
2
3
4
5
6
7
8
9
10
11
# LLM API 密钥
OPENAI_API_KEY=sk-your-openai-key
ANTHROPIC_API_KEY=sk-ant-your-anthropic-key

# Langfuse 密钥(第一次启动后获取)
LANGFUSE_PUBLIC_KEY=pk-lf-your-public-key
LANGFUSE_SECRET_KEY=sk-lf-your-secret-key

# 生产环境安全配置
NEXTAUTH_SECRET=$(openssl rand -base64 32)
SALT=$(openssl rand -base64 32)

步骤 4:首次启动(获取 Langfuse 密钥)

1
2
3
4
5
# 第一次启动(不包括 LiteLLM)
docker compose up db langfuse-web -d

# 等待服务启动完成
docker compose logs -f langfuse-web

访问 http://localhost:3000:

  1. 注册账号并登录
  2. 进入 SettingsAPI Keys
  3. 创建新的 API Key
  4. 复制 Public Key (pk-lf-…) 和 Secret Key (sk-lf-…)
  5. 更新 .env 文件或 docker-compose.yml 中的密钥

步骤 5:启动完整服务

1
2
3
4
5
6
7
8
9
# 更新配置后重新启动所有服务
docker compose down
docker compose up -d

# 查看服务状态
docker compose ps

# 查看日志
docker compose logs -f

配置详解

1. PostgreSQL 数据库配置

1
2
3
4
5
6
7
8
db:
image: postgres:16
environment:
- POSTGRES_USER=postgres # 数据库用户名
- POSTGRES_PASSWORD=postgres # 数据库密码(生产环境必须修改)
- POSTGRES_DB=langfuse # 数据库名称
volumes:
- pgdata:/var/lib/postgresql/data # 数据持久化

注意事项:

  • 生产环境必须修改默认密码
  • 定期备份 pgdata
  • 可以配置端口映射进行外部访问(不推荐)

2. Langfuse Web 服务配置

1
2
3
4
5
6
7
8
9
10
langfuse-web:
image: langfuse/langfuse:2
environment:
# 数据库连接(格式:postgresql://用户:密码@主机:端口/数据库)
- DATABASE_URL=postgresql://postgres:postgres@db:5432/langfuse

# NextAuth 配置
- NEXTAUTH_SECRET=mysecret # 用于 JWT 签名(必须修改)
- SALT=mysalt # 密码加盐(必须修改)
- NEXTAUTH_URL=http://localhost:3000 # 服务访问地址

关键环境变量说明:

变量 说明 生产环境建议
DATABASE_URL PostgreSQL 连接字符串 使用强密码
NEXTAUTH_SECRET JWT 签名密钥 openssl rand -base64 32 生成
SALT 密码加盐值 openssl rand -base64 32 生成
NEXTAUTH_URL 服务外部访问地址 使用实际域名,如 https://langfuse.example.com

可选配置:

1
2
3
4
5
6
7
8
9
10
11
environment:
# 禁用公开注册
- AUTH_DISABLE_SIGNUP=true

# 配置 SMTP 邮件服务
- SMTP_CONNECTION_URL=smtp://user:pass@smtp.example.com:587
- EMAIL_FROM_ADDRESS=noreply@example.com

# 启用 Google SSO
- AUTH_GOOGLE_CLIENT_ID=your-client-id
- AUTH_GOOGLE_CLIENT_SECRET=your-client-secret

3. LiteLLM 代理配置

1
2
3
4
5
6
7
8
9
10
litellm-proxy:
image: ghcr.io/berriai/litellm:main-latest
volumes:
- ./litellm-config.yaml:/app/config.yaml # 挂载配置文件
command: ["--config", "/app/config.yaml"]
environment:
# Langfuse 集成配置
- LANGFUSE_PUBLIC_KEY=pk-lf-xxx # 从 Langfuse 后台获取
- LANGFUSE_SECRET_KEY=sk-lf-xxx # 从 Langfuse 后台获取
- LANGFUSE_HOST=http://langfuse-web:3000 # Langfuse 服务地址

LiteLLM 配置文件详解:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# litellm-config.yaml
model_list:
# 定义可用的模型
- model_name: gpt-4 # 你的应用中使用的模型名称
litellm_params:
model: openai/gpt-4 # 实际调用的模型
api_key: os.environ/OPENAI_API_KEY # API 密钥(从环境变量读取)

litellm_settings:
# 自动将所有调用发送到 Langfuse
success_callback: ["langfuse"] # 成功时回调
failure_callback: ["langfuse"] # 失败时回调

general_settings:
master_key: "sk-1234" # LiteLLM 访问密钥(可选,用于认证)

支持的模型提供商:

  • OpenAI (gpt-4, gpt-3.5-turbo 等)
  • Anthropic (claude-3-opus, claude-3-sonnet 等)
  • Azure OpenAI
  • Google PaLM
  • Cohere
  • Replicate
  • 更多…

在 Langfuse 中查看追踪

  1. 访问 http://localhost:3000
  2. 登录后进入 Traces 页面
  3. 查看所有 LLM 调用的详细信息:
    • 请求参数和响应
    • 延迟时间
    • Token 使用量
    • 成本统计

参考资料

Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2015-2026 Kaisar
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信