跟踪管理器与提供方集成
追踪管理器与提供商集成
相关源文件
以下文件为本 Wiki 页面的生成提供了上下文:
api/core/ops/entities/config_entity.pyapi/core/ops/entities/trace_entity.pyapi/core/ops/ops_trace_manager.pyapi/core/ops/utils.pyapi/services/ops_service.pyapi/tasks/ops_trace_task.pyapi/tests/unit_tests/core/ops/__init__.pyapi/tests/unit_tests/core/ops/test_config_entity.pyapi/tests/unit_tests/core/ops/test_ops_trace_manager.pyapi/tests/unit_tests/core/ops/test_utils.py- [web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/page.tsx](web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/page.tsx)
- [web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/tracing/config-popup.tsx](web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/tracing/config-popup.tsx)
- [web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/tracing/config.ts](web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/tracing/config.ts)
- [web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/tracing/field.tsx](web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/tracing/field.tsx)
- [web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/tracing/panel.tsx](web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/tracing/panel.tsx)
- [web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/tracing/provider-panel.tsx](web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/tracing/provider-panel.tsx)
- [web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/tracing/tracing-icon.tsx](web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/tracing/tracing-icon.tsx)
- [web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/tracing/type.ts](web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/tracing/type.ts)
web/app/components/base/icons/src/public/tracing/index.ts
本文详细介绍了 Dify 的追踪系统,重点阐述了 OpsTraceManager 架构及其与各种第三方追踪提供商的集成。内容涵盖实现细节、数据流向以及将追踪数据发送至 Langfuse、LangSmith、Arize Phoenix、Opik、Weave、阿里云和腾讯云等平台所涉及的关键组件。
OpsTraceManager 架构
OpsTraceManager 是负责管理追踪数据并将其分发至已配置追踪提供商的核心组件。它以异步方式运行,避免阻塞主应用流程,主要利用专用的 Celery 队列进行任务处理。
核心组件
OpsTraceManager类:该类api/core/ops/ops_trace_manager.py:188-190负责编排追踪流程,管理提供商的初始化与任务分发。process_trace_tasks:一个 Celery 任务api/tasks/ops_trace_task.py:47,负责异步处理追踪数据。它会从临时存储中加载追踪信息,并通过管理器进行分发。provider_config_map:一个映射表api/core/ops/ops_trace_manager.py:149-150,将TracingProviderEnum值与其对应的配置类(例如LangfuseConfig、LangSmithConfig)及追踪实例实现关联起来。TraceAppConfig模型:在数据库中存储每个应用对应的追踪提供商配置api/models/model.py:44。这包括 API 密钥、端点和项目名称,这些信息会经过加密以确保安全。ParentTraceContext:一个辅助类api/core/helper/trace_id_helper.py:19,用于在嵌套工作流中传播追踪 ID,这对于 Phoenix 等提供商尤为重要api/tasks/ops_trace_task.py:9-16。
数据流向
- 追踪事件生成:当事件发生时(例如,消息被处理、工作流节点被执行),会实例化一个追踪信息对象(例如
MessageTraceInfo、WorkflowNodeTraceInfo)api/core/ops/entities/trace_entity.py:108, 196。 - 任务序列化:追踪信息会被序列化并保存到临时存储中
api/tasks/ops_trace_task.py:56-57。 - 追踪任务入队:调用
process_trace_tasks.delay()方法,并传入文件信息。 - 异步处理:Celery 工作进程拾取任务,加载数据,并使用
OpsTraceManager.get_ops_trace_instance(app_id)识别正确的trace_instanceapi/tasks/ops_trace_task.py:61。 - 提供商分发:管理器解密提供商配置
api/core/ops/ops_trace_manager.py:36-38,并调用提供商的trace方法。 - 重试逻辑:如果提供商抛出
RetryableTraceDispatchError(在嵌套工作流排序中常见),任务会延迟后重试api/tasks/ops_trace_task.py:95-122。
关键函数与类
OpsTraceManager.decrypt_tracing_config(tenant_id, provider, config):解密指定提供商的敏感配置字段api/core/ops/ops_trace_manager.py:36-38。OpsTraceManager.obfuscated_decrypt_token(provider, config):混淆解密后的令牌,以便在 UI 中安全显示api/core/ops/ops_trace_manager.py:39。TracingProviderEnum:一个StrEnum,定义了所有支持的追踪提供商,包括ARIZE、PHOENIX、LANGFUSE、LANGSMITH、OPIK、WEAVE、ALIYUN、MLFLOW、DATABRICKS和TENCENTapi/core/ops/entities/config_entity.py:8-18。
Dify · 关键函数与类 · 图 1
图示:OpsTraceManager 异步分发流程
追踪信息实体
Dify 定义了特定的实体来捕获细粒度的执行数据:
MessageTraceInfo:捕获消息处理详情、Token 使用量和流式延迟api/core/ops/entities/trace_entity.py:108-120。WorkflowTraceInfo:整体工作流执行结果、状态以及输入/输出api/core/ops/entities/trace_entity.py:86-106。WorkflowNodeTraceInfo:每个节点的执行数据,包括node_type、elapsed_time和 Token 使用量api/core/ops/entities/trace_entity.py:196-235。ToolTraceInfo:工具调用的具体细节api/core/ops/entities/trace_entity.py:151-162。DatasetRetrievalTraceInfo:检索到的文档及检索错误api/core/ops/entities/trace_entity.py:146-149。
来源: api/core/ops/ops_trace_manager.py:1-47 api/core/ops/entities/config_entity.py:8-18 api/core/ops/entities/trace_entity.py:86-240
提供商集成
Langfuse 与 LangSmith
- Langfuse:配置需要
public_key、secret_key和host。Dify 会动态生成项目 URL,格式为{host}/project/{key}api/services/ops_service.py:59-72。 - LangSmith:需要
api_key、project和endpoint。它使用generate_dotted_orderapi/core/ops/utils.py:55-66来维护 LangSmith UI 中的层级关系(父子 Span)。
Arize Phoenix
Arize 和 Phoenix 的集成利用了 OpenTelemetry(OTEL)标准。
- 配置:使用
ArizeConfig或PhoenixConfig,需要api_key、project和endpoint。 - URL 处理:
OpsService为项目视图提供默认的回退 URL:https://app.arize.com/和https://app.phoenix.arize.com/projects/api/services/ops_service.py:41-58。 - 校验:如果项目名称为空,会规范化为 "default"
api/tests/unit_tests/core/ops/test_config_entity.py:66-67。
云服务提供商(阿里云与腾讯云)
- 阿里云:与阿里云 ARMS 集成。需要
license_key和endpoint。配置确保app_name默认为dify_appapi/tests/unit_tests/core/ops/test_config_entity.py:69。 - 腾讯云:与腾讯云 APM 集成。需要
token、endpoint和service_name。控制台 URL 默认为https://console.cloud.tencent.com/apmapi/services/ops_service.py:109-116。
其他集成
- Opik:需要
api_key和project。项目名称默认为Default Projectapi/tests/unit_tests/core/ops/test_config_entity.py:68。 - Weave:与 Weights & Biases Weave 集成。需要
api_key和projectapi/tests/unit_tests/core/ops/test_config_entity.py:36。 - MLflow 与 Databricks:支持在 MLflow 后端内追踪,MLflow 的默认主机为
http://localhost:5000/api/services/ops_service.py:118-134。
来源: api/core/ops/entities/config_entity.py:8-18 api/services/ops_service.py:41-137 api/core/ops/utils.py:55-135 api/tests/unit_tests/core/ops/test_config_entity.py:14-70
前端集成
Dify Web 前端在应用概览部分为追踪提供商提供了统一的管理界面。
组件
Panel:位于web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/tracing/panel.tsx的主入口点。它负责处理状态切换和提供商选择web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/tracing/panel.tsx:28。ConfigPopup:一个基于模态框的界面,用于输入提供商特定的凭证web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/tracing/config-popup.tsx:41。ProviderPanel:显示带有状态指示器(例如 "使用中")和配置按钮的单个提供商卡片web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/tracing/provider-panel.tsx:41。
交互逻辑
- 状态检查:UI 使用
fetchTracingStatus获取当前追踪状态web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/tracing/panel.tsx:21。 - 配置:当用户配置提供商时,后端会调用
OpsService.create_tracing_app_configapi/services/ops_service.py:140。 - 校验:凭证在存储前会被加密,在返回给 UI 进行编辑时会被混淆
api/services/ops_service.py:36-39。
Dify · 交互逻辑 · 图 2
图示:前端到后端的追踪配置桥接
来源:
web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/tracing/panel.tsx:1-143web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/tracing/config-popup.tsx:41-91web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/tracing/provider-panel.tsx:41-111api/services/ops_service.py:11-140