Agentforce Data Library 管理与 OTel 会话追踪指南

ADL API 和 OTel API 完整指南。涵盖文件库(SFDRIVE)全生命周期:创建→等待就绪→获取预签名 S3 URL→上传→索引→轮询→添加更多文件;知识库(KNOWLEDGE)创建与数据类别管控;以及 OTel API 导出 Agent 会话 Trace 到 Datadog/Splunk/New Relic 等可观察性平台。...

📅 2026/7/4 ✍️ ponybai 🏷️ agentforce, salesforce, api
ADL API 和 OTel

ADL API 前提条件和设置

Agentforce Data Libraries(ADL)通过将 AI 功能连接到受信任的数据源来增强准确性。ADL Connect API 让你能程序化地创建和管理 Data Library。

安装准备

  • Salesforce CLI —— 开发和构建自动化
  • jq —— JSON 解析工具(brew install jq
  • 测试 PDF 文件 —— 用于第一个 Data Library 的任意 PDF
  • 测试组织 —— 已配置 Data Libraries

External Client App 配置

OAuth 范围:chatter_apiapiwebrefresh_token/offline_access。启用 Client Credentials Flow 和 JWT-based access tokens。

获取 Access Token

RESPONSE=$(curl -s -X POST "$SF_INSTANCE_URL/services/oauth2/token" \
  -d "grant_type=client_credentials" \
  -d "client_id=$SF_CLIENT_ID" \
  -d "client_secret=$SF_CLIENT_SECRET")
ACCESS_TOKEN=$(echo $RESPONSE | jq -r '.access_token')
ORG_URL=$(echo $RESPONSE | jq -r '.instance_url')

验证连接

curl "$ORG_URL/services/data/v66.0/einstein/data-libraries" \
  -H "Authorization: Bearer $ACCESS_TOKEN"
ADL API 前提条件

文件库(File Library)完整示例

创建一个基于文件的 Data Library(SFDRIVE 类型),上传 PDF 文件到 Salesforce 管理的 S3 存储桶,触发索引,并轮询直到库就绪可用。

文件库示例

步骤 1 — 创建文件库(SFDRIVE)

POST /services/data/v66.0/einstein/data-libraries
Body: {"masterLabel": "...", "developerName": "...",
       "groundingSource": {"sourceType": "SFDRIVE"}}
Response: JSON with libraryId and groundingSource fields

步骤 2 — 等待上传就绪

GET /services/data/v66.0/einstein/data-libraries/$LIBRARY_ID/upload-readiness?waitMaxTime=120000

库需要配置 Data 360 资源后才能上传文件。轮询最多 2 分钟;预期响应:{"ready": true}

步骤 3 — 获取预签名上传 URL

POST /services/data/v66.0/einstein/data-libraries/$LIBRARY_ID/file-upload-urls
Body: {"files": [{"fileName": "file1.pdf"}]}
Response: uploadUrls (presigned S3 URL + filePath + headers)

最多 1000 个文件。如果在 Data 360 资源就绪前调用,返回 HTTP 400。

创建、等待和获取上传 URL

步骤 4 — 上传文件到 S3

curl -X PUT "$PRESIGNED_URL" $UPLOAD_HEADERS --data-binary @$FILE_NAME

预期:HTTP Status 200。文件存储在 Salesforce 管理的 AWS S3 存储桶中。

步骤 5 — 触发索引

POST /services/data/v66.0/einstein/data-libraries/$LIBRARY_ID/indexing
Body: {"uploadedFiles": [{"filePath": "...", "fileSize": 12345}]}
Response: {"status": "IN_PROGRESS"}

步骤 6 — 轮询直到就绪

GET /services/data/v66.0/einstein/data-libraries/$LIBRARY_ID/status

每 10 秒轮询一次。退出条件:status == "READY""FAILED" 或所有阶段全部 SUCCESS。READY 需要 SearchIndex 完成分块/嵌入。通常等待几分钟。

上传、索引和轮询

添加更多文件

对已有库添加更多文件的流程类似,但使用 /files 端点而非 /indexing

# 获取新文件的上传 URL
POST /services/data/v66.0/einstein/data-libraries/$LIBRARY_ID/file-upload-urls

# 上传到 S3(同步骤 4)

# 注册新文件(自动触发搜索索引重建)
POST /services/data/v66.0/einstein/data-libraries/$LIBRARY_ID/files
Body: {"uploadedFiles": [{"filePath": "...", "fileSize": 12345}]}
Response: {"filesAccepted": 1}
关键区别:/files 端点自动触发搜索索引重建,不需要为额外文件单独调用 /indexing。
添加更多文件

知识库(Knowledge Library)示例

创建基于知识的 Data Library(KNOWLEDGE 类型),索引 Knowledge 文章字段。需要指定要索引的 Knowledge 对象字段,其中两个主索引字段创建后不可变。

创建知识库

POST /services/data/v66.0/einstein/data-libraries
Body: {
  "groundingSource": {
    "sourceType": "KNOWLEDGE",
    "knowledgeConfig": {
      "primaryIndexField1": "Title",       // 必填,不可变
      "primaryIndexField2": "Summary",     // 必填,不可变
      "contentFields": ["UrlName"]          // 额外索引字段
    }
  }
}

所有字段必须存在于 KnowledgeKAV 上且为文本类型(STRING 或 TEXTAREA)。

数据类别(Data Categories)配置(可选)

启用数据类别规则以实现管控:

"isDataCategoryRuleEnabled": true,
"dataCategorySelectionNames": ["Products.Hardware", "Products.Software"]

格式:groupDeveloperName.categoryDeveloperName

库创建后的操作

  • 索引和轮询:同文件库的 /indexing 流程
  • PATCH 更新:PATCH /data-libraries/{id} 可更新 contentFields 和数据类别
  • GET 详情:GET /data-libraries/{id}
  • DELETE 删除:DELETE /data-libraries/{id} 如被活跃资源引用则不能删除
知识库 创建知识库

导出会话追踪数据(OTel API Beta)

Agentforce Session Trace OTel API 以 OpenTelemetry 格式提取 Agent 完整会话 Trace 的统一 JSON 视图。输出包含 Agent 交互的每一步:轮次、消息、LLM 调用、动作、指标分数和反馈。

前提条件

  • 组织中已启用 Agentforce
  • 启用 Agentforce Session Tracing + Audit and Feedback

使用流程

# 1. OAuth 2.0 认证(ECA)
# 2. 提交 REST API 查询
GET /services/data/v66.0/einstein/audit/otel/{session-id}
# 返回完整会话 Trace,OTel ResourceSpans 格式
# 3. 导出——原生 OTel 格式,无需转换

OTLP Collector 配置示例

  • Receivers:salesforce_otel → endpoint + oauth2client 认证
  • Processors:batch(10s 超时)+ attributes(添加 source=salesforce)
  • Exporters:otlp/datadog → api.datadoghq.com(DD-API-KEY)
  • Pipeline:traces → receivers → processors → exporters

Beta 限制

  • 仅支持单会话查询(每次一个 Session ID),无批量查询
  • 适用 Connect API 标准速率限制
  • 仅返回最近 72 小时内的会话数据
  • 需要 Data 360(Data Cloud)

典型用例:调试、自定义评估、第三方可观察性导出、自动化 Trace 收集。

OTel API

ADL API 和 OTel API 为你提供了对 Agent 数据源的程序化控制和 Agent 行为的完整可见性——从 Data Library 管理到会话 Trace 导出。