!https://img.shields.io/badge/Version-1.0.8-informational?style=flat-square !https://img.shields.io/badge/Type-application-informational?style=flat-square !https://img.shields.io/badge/AppVersion-10.11.0-informational?style=flat-square
镜像概述和主要用途
Phoenix 是一个开源 AI 可观测性平台,专为实验、评估和故障排除设计。它提供了全面的工具集,帮助开发者监控、评估和优化 LLM 应用程序的性能和行为。
主页: <[***]>
核心功能和特性
- 跟踪(Tracing) - 使用基于 OpenTelemetry 的工具跟踪 LLM 应用的运行时。
- 评估(Evaluation) - 利用 LLM 通过响应和检索评估来基准测试应用性能。
- 数据集(Datasets) - 创建用于实验、评估和微调的版本化示例数据集。
- 实验(Experiments) - 跟踪和评估提示、LLM 和检索的变化。
- 游乐场(Playground) - 优化提示、比较模型、调整参数和重放跟踪的 LLM 调用。
- 提示管理(Prompt Management) - 使用版本控制、标记和实验系统地管理和测试提示更改。
使用场景和适用范围
Phoenix 适用于以下场景:
- LLM 应用程序的可观测性和监控
- AI 模型性能评估和基准测试
- 提示工程和优化
- 模型和提示的版本控制与实验跟踪
- 数据集管理和模型微调
- 多模型比较和参数调优
维护者
源代码
- https://github.com/Arize-ai/phoenix
部署要求
| 仓库 | 名称 | 版本 |
|---|
| oci://registry-1.docker.io/bitnamicharts | postgresql | 16.7.8 |
部署方案示例
Docker Run 部署
bash
# 简单启动 Phoenix(使用内置 SQLite)
docker run -p 6006:6006 arizephoenix/phoenix:version-10.11.0-nonroot
# 使用外部 PostgreSQL 启动
docker run -p 6006:6006 \
-e PHOENIX_POSTGRES_HOST=your-postgres-host \
-e PHOENIX_POSTGRES_PORT=5432 \
-e PHOENIX_POSTGRES_USER=postgres \
-e PHOENIX_POSTGRES_PASSWORD=your-password \
-e PHOENIX_POSTGRES_DB=phoenix \
arizephoenix/phoenix:version-10.11.0-nonroot
Docker Compose 部署
yaml
version: '3.8'
services:
phoenix:
image: arizephoenix/phoenix:version-10.11.0-nonroot
ports:
- "6006:6006"
environment:
- PHOENIX_HOST=0.0.0.0
- PHOENIX_PORT=6006
- PHOENIX_POSTGRES_HOST=postgres
- PHOENIX_POSTGRES_PORT=5432
- PHOENIX_POSTGRES_USER=postgres
- PHOENIX_POSTGRES_PASSWORD=postgres
- PHOENIX_POSTGRES_DB=phoenix
- PHOENIX_ENABLE_AUTH=true
- PHOENIX_DEFAULT_ADMIN_PASSWORD=admin
depends_on:
- postgres
postgres:
image: postgres:14.5
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
- POSTGRES_DB=phoenix
volumes:
- postgres-data:/var/lib/postgresql/data
volumes:
postgres-data:
Helm Chart 部署
bash
# 添加 Helm 仓库
helm repo add arize https://arize-ai.github.io/phoenix/helm-charts/
# 安装 Phoenix Helm Chart
helm install phoenix arize/phoenix --version 1.0.8
# 自定义配置安装
helm install phoenix arize/phoenix \
--version 1.0.8 \
--set auth.defaultAdminPassword=your-secure-password \
--set service.type=LoadBalancer \
--set postgresql.enabled=true
配置参数说明
认证配置
| 参数 | 类型 | 默认值 | 描述 |
|---|
| auth.accessTokenExpiryMinutes | int | 60 | 访问令牌过期并需要续订前的分钟数 (PHOENIX_ACCESS_TOKEN_EXPIRY_MINUTES) |
| auth.allowedOrigins | list | [] | 允许跨域请求访问 Phoenix API 的 CORS 源列表 (PHOENIX_ALLOWED_ORIGINS) |
| auth.csrfTrustedOrigins | list | [] | 用于 CSRF 保护的受信任源列表,以防止跨站请求伪造*** (PHOENIX_CSRF_TRUSTED_ORIGINS) |
| auth.defaultAdminPassword | string | "admin" | 初始设置时管理员用户的默认密码,安全存储在 Secret 中 |
| auth.enableAuth | bool | true | 启用 Phoenix 的身份验证和授权 (PHOENIX_ENABLE_AUTH) |
| auth.name | string | "phoenix-secret" | 包含身份验证凭据的 Kubernetes Secret 名称 |
| auth.passwordResetTokenExpiryMinutes | int | 60 | 密码重置令牌过期前的分钟数 (PHOENIX_PASSWORD_RESET_TOKEN_EXPIRY_MINUTES) |
| auth.refreshTokenExpiryMinutes | int | 43200 | 刷新令牌过期前的分钟数 (PHOENIX_REFRESH_TOKEN_EXPIRY_MINUTES) |
| auth.secret[0].value | string | "" | 用于加密的主要 Phoenix 密钥的环境变量名,为空时自动生成 |
| auth.secret[1].value | string | "" | 管理员密钥的环境变量名,为空时自动生成 |
| auth.secret[2].value | string | "postgres" | PostgreSQL 密码的环境变量名,使用 postgres 时必须与 database.postgres.password 匹配 |
| auth.secret[3].value | string | "" | SMTP 密码的环境变量名,为空时自动生成 |
| auth.secret[4].value | string | "" | 初始设置时管理员用户的默认密码环境变量名,为空时使用 defaultAdminPassword |
| auth.useSecureCookies | bool | false | 启用安全 cookie(使用 HTTPS 时应设为 true) |
数据库配置
| 参数 | 类型 | 默认值 | 描述 |
|---|
| database.allocatedStorageGiB | int | 10 | 数据库持久卷的存储分配(GiB) |
| database.defaultRetentionPolicyDays | int | 0 | 跟踪的默认保留策略(天)。设为 0 可禁用自动跟踪清理。当设为正值时,超过此天数的跟踪将自动从数据库中删除。 |
| database.postgres.db | string | "phoenix" | PostgreSQL 数据库名称 (PHOENIX_POSTGRES_DB) |
| database.postgres.host | string | "phoenix-postgresql" | Postgres 主机 (PHOENIX_POSTGRES_HOST)。当 postgresql.enabled=true 时,默认指向内置 PostgreSQL 服务。 |
| database.postgres.password | string | "postgres" | PostgreSQL 密码(应与 auth.secret."PHOENIX_POSTGRES_PASSWORD" 匹配) |
| database.postgres.port | int | 5432 | PostgreSQL 连接端口 (PHOENIX_POSTGRES_PORT) |
| database.postgres.schema | string | "" | 要使用的 PostgreSQL 模式 (PHOENIX_SQL_DATABASE_SCHEMA) |
| database.postgres.user | string | "postgres" | PostgreSQL 用户名 (PHOENIX_POSTGRES_USER) |
| database.url | string | "" | 完整的数据库连接 URL(如果提供,将覆盖 postgres 设置)。用于外部数据库如 RDS。示例:postgresql://username:***:5432/phoenix。使用此选项时,确保 postgresql.enabled=false |
镜像配置
| 参数 | 类型 | 默认值 | 描述 |
|---|
| image.pullPolicy | string | "IfNotPresent" | Phoenix 容器的镜像拉取策略(Always、IfNotPresent 或 Never) |
| image.repository | string | "arizephoenix/phoenix" | Phoenix 的 Docker 镜像仓库 |
| image.tag | string | "version-10.11.0-nonroot" | 要部署的 Docker 镜像标签/版本 |
部署配置
| 参数 | 类型 | 默认值 | 描述 |
|---|
| deployment.strategy | object | {"type":"RollingUpdate","rollingUpdate":{"maxUnavailable":"25%","maxSurge":"25%"}} | 部署策略 |
| replicaCount | int | 1 | Phoenix pod 副本数 |
健康检查配置
| 参数 | 类型 | 默认值 | 描述 |
|---|
| healthChecks.livenessProbe | object | {"initialDelaySeconds":0,"periodSeconds":10,"timeoutSeconds":5,"failureThreshold":3,"successThreshold":1} | 存活探针配置 |
| healthChecks.readinessProbe | object | {"initialDelaySeconds":0,"periodSeconds":5,"timeoutSeconds":3,"failureThreshold":3,"successThreshold":1} | 就绪探针配置 |
| healthChecks.startupProbe | object | {"enabled":true,"initialDelaySeconds":1,"periodSeconds":1,"timeoutSeconds":1,"failureThreshold":30,"successThreshold":1} | 启动探针配置 |
入口配置
| 参数 | 类型 | 默认值 | 描述 |
|---|
| ingress.annotations | object | {} | 要添加到入口资源的注释 |
| ingress.apiPath | string | "/" | Phoenix API 的路径前缀 |
| ingress.enabled | bool | true | 启用入口控制器以进行外部访问 |
| ingress.host | string | "" | 入口的主机名 |
| ingress.labels | object | {} | 要添加到入口资源的标签 |
| ingress.pathType | string | "Prefix" | 入口路径类型(Prefix、Exact 或 ImplementationSpecific) |
| ingress.tls.enabled | bool | false | 为入口启用 TLS/HTTPS |
日志配置
| 参数 | 类型 | 默认值 | 描述 |
|---|
| logging.dbLevel | string | "warning" | 数据库日志级别(debug、info、warning、error) |
| logging.level | string | "info" | 应用程序日志级别(debug、info、warning、error) |
| logging.logMigrations | bool | true | 启用数据库迁移操作的日志记录 |
| logging.mode | string | "default" | 日志模式配置(default 或 structured) |
存储配置
| 参数 | 类型 | 默认值 | 描述 |
|---|
| persistence.accessModes | list | ["ReadWriteOnce"] | 持久卷的访问模式 |
| persistence.annotations | object | {} | 要添加到 PVC 的注释 |
| persistence.enabled | bool | false | 为 Phoenix 主目录启用持久存储 |
| persistence.inMemory | bool | false | 启用 sqlite 策略的内存配置 |
| persistence.labels | object | {} | 要添加到 PVC 的标签 |
| persistence.size | string | "20Gi" | Phoenix 主目录持久卷的大小 |
| persistence.storageClass | string | "" | Phoenix 主卷的 Kubernetes 存储类 |
PostgreSQL 配置
| 参数 | 类型 | 默认值 | 描述 |
|---|
| postgresql.enabled | bool | true | 启用 postgres 部署。如果您有自己的 postgres 实例(例如 RDS、CloudSQL),请设为 false。 |
| postgresql.auth.database | string | "phoenix" | 要创建的自定义数据库的名称 |
| postgresql.auth.password | string | "" | 要创建的自定义用户的密码。如果提供了 postgresql.auth.existingSecret,则忽略 |
| postgresql.auth.postgresPassword | string | "postgres" | "postgres" 管理员用户的密码。如果提供了 postgresql.auth.existingSecret,则忽略 |
| postgresql.auth.username | string | "" | 要创建的自定义用户的名称 |
| postgresql.primary.persistence.enabled | bool | true | 为 PostgreSQL 数据启用持久存储 |
| postgresql.primary.persistence.size | string | "20Gi" | PostgreSQL 持久卷的大小 |
| postgresql.primary.persistence.storageClass | string | "" | PostgreSQL 卷的 Kubernetes 存储类 |
资源配置
| 参数 | 类型 | 默认值 | 描述 |
|---|
| resources | object | {"limits":{"cpu":"1000m","memory":"2Gi"},"requests":{"cpu":"500m","memory":"1Gi"}} | 资源配置 |
安全上下文配置
| 参数 | 类型 | 默认值 | 描述 |
|---|
| securityContext.container | object | {"allowPrivilegeEscalation":false,"capabilities":{"add":[],"drop":["ALL"]},"enabled":true,"privileged":false,"procMount":"Default","readOnlyRootFilesystem":true,"runAsGroup":65532,"runAsNonRoot":true,"runAsUser":65532,"seccompProfile":{"type":"RuntimeDefault"}} | 容器级安全上下文设置 |
| securityContext.pod | object | {"enabled":true,"fsGroup":65532,"fsGroupChangePolicy":"OnRootMismatch","runAsGroup":65532,"runAsNonRoot":true,"runAsUser":65532,"seccompProfile":{"type":"RuntimeDefault"}} | Pod 级安全上下文设置 |
服务配置
| 参数 | 类型 | 默认值 | 描述 |
|---|
| service.type | string | "NodePort" | Phoenix 服务的服务类型(ClusterIP、NodePort、Load*** 或 ExternalName) |
| service.annotations | object | {} | 要添加到 Phoenix 服务的注释(对服务网格配置有用) |
| service.labels | object | {} | 要添加到 Phoenix 服务的标签 |
服务器配置
| 参数 | 类型 | 默认值 | 描述 |
|---|
| server.enablePrometheus | bool | false | 在端口 9090 上启用 Prometheus 指标端点 |
| server.grpcPort | int | 4317 | OpenTelemetry gRPC 收集器的端口 (PHOENIX_GRPC_PORT) |
| server.host | string | "0.0.0.0" | 绑定 Phoenix 服务器的主机 IP (PHOENIX_HOST) |
| server.hostRootPath | string | "" | Phoenix UI 和 API 的根路径前缀 (PHOENIX_HOST_ROOT_PATH) |
| server.port | int | 6006 | Phoenix Web UI 和 HTTP API 的端口 (PHOENIX_PORT) |
| server.rootUrl | string | "" | Phoenix 的外部根 URL (PHOENIX_ROOT_URL) |
| server.workingDir | string | "/data" | 用于保存、加载和导出数据的工作目录 (PHOENIX_WORKING_DIR) |
| server.allowExternalResources | bool | true | 允许调用外部资源,如 Web 界面中的 Google Fonts |
SMTP 配置
| 参数 | 类型 | 默认值 | 描述 |
|---|
| smtp.hostname | string | "" | 用于发送电子邮件的 SMTP 服务器主机名 (PHOENIX_SMTP_HOSTNAME) |
| smtp.mailFrom | string | "noreply@arize.com" | 用作系统电子邮件发件人的电子邮件地址 (PHOENIX_SMTP_MAIL_FROM) |
| smtp.password | string | "" | SMTP 身份验证密码 (PHOENIX_SMTP_PASSWORD) |
| smtp.port | int | 587 | SMTP 服务器端口(通常 587 用于 TLS) |
| smtp.username | string | "" | SMTP 身份验证用户名 (PHOENIX_SMTP_USERNAME) |
| smtp.validateCerts | bool | true | 验证 SMTP 服务器 TLS 证书 (PHOENIX_SMTP_VALIDATE_CERTS) |
TLS 配置