AgentLoop 数据查询 API 使用指南

更新时间:
复制 MD 格式

AgentLoop 不是一个“所有数据都由同一个 List API 返回”的单体数据库。查询时要先区分对象,再选择控制面 API 或数据面 API。

1. 确认范围

要查询的对象

推荐查询面

典型定位键

当前可用性

AgentSpace

AgentLoop API

regionId + agentSpace

公开、稳定

原始 Trace / Span

CMS 定位 Trace Logstore,再用 SLS 查询

traceId、spanId、时间窗口

数据面走 SLS

Session

在 Trace 或 Trajectory 中按 Session 字段查询

attributes.gen_ai.session.id、session_id

无独立统一 List Session API

Agent 原始事件

AgentSpace SLS Project 的 agent-event、agent-event-webtracking;运行时事件使用 ebpf-event

event.id、event.name、Session/Turn/Step ID

启用相应接入后出现

Agent Trajectory

AgentSpace 的 SLS Project 中查询 agent-trajectory

trajectory_id、trace_id、session_id

数据面走 SLS

Trajectory 特征视图

trajectory-feature-event/stats/security/trigger

trajectory_id、feature_id、event_id

启用轨迹特征处理后出现

Dataset 元数据

AgentLoop API

agentSpace + datasetName

公开、稳定

Dataset 数据行

AgentLoop ExecuteQuery

Dataset id、__time__、业务/血缘字段

公开、稳定

记忆库 / 经验库元数据

AgentLoop ContextStore API

contextStoreName、contextType

公开、稳定

记忆 / 经验内容

AgentLoop SearchContext

自然语言查询 + 身份/元数据过滤

公开的主要读取方式

记忆写入事件

GetContextStore.config.innerSource 返回的 memory_events_<hash>

Scope、partitionId、事件时间

每个 Memory ContextStore 独立一个

评估器、评估任务、评估 Run

AgentLoop API

evaluatorName、taskId、runId

控制面查询

评估结果明细

AgentSpace SLS Project 的 evaluation_detail

task_id、run_id、eval_id

数据面走 SLS

Playground 运行明细

AgentSpace SLS Project 的 playground_detail

运行 ID、输入、输出、评分

使用 Playground 后出现

实验计划、实验记录

AgentLoop API

planId、recordId

控制面查询

实验逐样本结果

experiment_detail 与 evaluation_detail

experiment_id、Dataset Item ID、分组名

数据面走 SLS

审计与安全事件

AgentSpace SLS Project 的审计相关 Logstore

Event/Incident ID、风险类型、证据 ID

启用审计能力后出现

Token/成本效率数据

step-fragment-store、token-cost-feature、mining-catalog、token-cost-serving

Trajectory/Step/Run/Window ID

启用效率分析后出现

Pipeline 定义、Run、统计

AgentLoop API

pipelineName、runId

公开、稳定

Pipeline 产出的业务数据

目标 Dataset

Dataset Item ID、血缘字段

必须回查 Dataset 验收

最重要的对象边界是:

  • Trace 是原始调用事实;一个 Trace 通常由多个 Span 组成。

  • Session 是跨轮次或跨调用的关联边界,不等于一条完整 Trace。

  • Trajectory 是从 Trace 清洗、组装出的有序行为过程,不是 Trace 的别名。

  • Dataset 是为查询、标注、评估、实验和复用而固化的结构化样本。

  • Memory 记录某个用户、Agent、应用或任务的长期上下文;Experience 记录可跨任务复用的做法、失败模式与适用边界。

  • Pipeline Run 成功只证明处理任务结束;只有目标 Dataset 数据读回并满足字段契约,才证明数据交付成功。

  • 评估完成、实验完成、版本发布和业务效果改善是不同证据层,不能互相替代。

    本文只介绍读取操作。除特别说明外,不使用 Create、Update、Delete、Run、Pause、Resume、Terminate 等会改变云上状态的接口。

2. 查询架构

                               ┌─────────────────────────────┐
                               │ AgentLoop API 2026-05-20    │
                               │ AgentSpace / Dataset /      │
                               │ ContextStore / Pipeline /   │
                               │ Evaluation / Experiment     │
                               └──────────────┬──────────────┘
                                              │ 控制面、结构化查询
                                              ▼
Client / SDK / Aliyun CLI ───────────────── AgentLoop
          │                                   │
          │                                   ├─ Dataset ExecuteQuery
          │                                   └─ Context SearchContext
          │
          ├─ CMS API 2024-03-30 ── 通过 EntityStore 定位 XTrace Store、兼容旧 Memory API
          │
          └─ SLS API 2020-12-30 ── Trace / Trajectory / Evaluation / Experiment 明细

应优先从 AgentSpace 元数据开始,因为它给出后续查询最重要的三个定位信息:

  • regionId:资源所在地域;

  • cmsWorkspace:原始 Trace 所属的 CMS Workspace;

  • slsProject:AgentLoop 派生数据所在的 SLS Project,常见数据包括 Trajectory、评估明细和实验明细。

    不要默认 cmsWorkspace、Trace Project 和 AgentSpace 的 slsProject 是同一个值。

3. 准备工作

3.1 CLI 准备

aliyun version
aliyun plugin show --name agentloop
aliyun plugin show --name aliyun-cli-sls
aliyun configure list
jq --version

SLS 日志查询使用 get-logs-v2。正式集成前,可通过 Help 核对当前客户端支持的参数:

aliyun agentloop <command> --help
aliyun sls get-logs-v2 --help

3.2 身份与密钥

可使用已有的 Aliyun CLI Profile、STS、OAuth 或 RAM Role。生产程序优先使用临时凭证或实例角色,不要在代码、文档、日志或 Git 中写入 AK/SK、SecurityToken、ContextStore API Key、Cookie 或带签名 URL。

本文示例统一使用占位符和独立变量:

AL_REGION='<region-id>'
AL_AGENT_SPACE='<agent-space-name>'
AL_PROFILE='<aliyun-cli-profile>'

如果使用命名 Profile,在同一次查询链路中始终携带同一个 Profile,不要中途退回默认 Profile。

3.3 Endpoint 与 API 版本

产品

API 版本

常见 Endpoint

AgentLoop

2026-05-20

agentloop.&lt;region-id&gt;.aliyuncs.com

CMS

2024-03-30

cms.&lt;region-id&gt;.aliyuncs.com

SLS

2020-12-30

&lt;project&gt;.&lt;region-id&gt;.log.aliyuncs.com,由 SDK/CLI 处理

直接调用 HTTP 时需要按阿里云 ROA/POP 规则签名。不要自行拼一个没有签名的 curl;优先使用官方 SDK 或 Aliyun CLI。

3.4 最小权限

按读取对象授予 RAM Action,避免直接使用 agentloop:*:

范围

常用只读 Action

AgentSpace

agentloop:ListAgentSpaces、agentloop:GetAgentSpace

Dataset

agentloop:ListDatasets、agentloop:GetDataset、agentloop:ExecuteQuery

ContextStore

agentloop:ListContextStores、agentloop:GetContextStore、agentloop:SearchContext

Pipeline

agentloop:ListPipelines、agentloop:GetPipeline、agentloop:ListPipelineRuns、agentloop:GetPipelineRun、agentloop:GetPipelineStats

Evaluation

agentloop:ListEvaluators、agentloop:GetEvaluator、agentloop:ListEvaluationTasks、agentloop:GetEvaluationTask、agentloop:ListEvaluationRuns、agentloop:GetEvaluationRun

Experiment

agentloop:ListExperimentPlans、agentloop:GetExperimentPlan、agentloop:ListExperimentTasks、agentloop:GetExperimentTask

Trace 数据源定位

cms:GetEntityStoreData;如需读取可观测实例信息,再授予 cms:GetServiceObservability

SLS 数据

sls:ListLogStores、sls:GetLogStore、sls:GetIndex、sls:GetLogs,并限制到目标 Project/Logstore

重要

agentloop:ExecuteQuery 的 RAM Action 不是语句级只读控制。调用方仍需强制限制为 SELECT 或只读 SearchExpr,不能依赖 RAM 自动阻止数据变更语句。

4. 通用查询规则

4.1 每次先固定查询上下文

一次查询请求至少固定:

  1. 地域 regionId;

  2. AgentSpace;

  3. 数据对象;

  4. 时间范围,建议使用左闭右开 [from, to);

  5. 分页上限;

  6. 是否允许读取 Prompt、Output、工具参数、记忆正文等敏感内容。

4.2 时间单位不要混用

位置

常见时间格式

SLS get-logs-v2 --from/--to

Unix 秒,左闭右开

Dataset ExecuteQuery --from/--to

Unix 秒,作用于 __time__,to 不包含

Trajectory 行内 start_time、end_time

通常为 Unix 毫秒;应以实际 Schema 为准

Experiment executedAt、completedAt

毫秒时间戳

资源 createTime、updateTime

ISO 8601 UTC 字符串

业务时区转换应在调用方完成,并把原始 UTC/epoch 值一并保留,避免报表边界错一天。

4.3 分页有三种形态

  • nextToken + maxResults:AgentSpace、Dataset、ContextStore、Evaluator、Evaluation、Pipeline 等大多数资源列表;

  • offset + limit 或 page + pageSize:部分 Experiment 列表;

  • offset + line 或 SQL LIMIT:SLS 查询。

    不要把第一页为空直接解释成“没有数据”。应检查时间窗口、过滤条件、nextToken、权限和数据延迟。

4.4 只投影需要的字段

Trace、Trajectory、Evaluation 和 Memory 可能包含 Prompt、模型输出、工具参数、用户标识、业务正文、文件路径或外部引用。默认只返回:

  • ID 与血缘字段;

  • 状态、耗时、Token 和计数;

  • 内容字段的长度、哈希、是否为空;

  • 经授权的脱敏摘要。

    只有在问题定位确实需要时,再读取完整正文。

4.5 统一记录请求证据

每次 API 查询至少记录:

  • Region、AgentSpace、对象类型;

  • API Action 或 SLS Project/Logstore;

  • 查询窗口与过滤条件的脱敏版本;

  • requestId;

  • 分页位置;

  • 返回条数、是否截断、是否完整;

  • 客户端版本和查询时间。

5. 第一步:查询 AgentSpace

5.1 列出 AgentSpace

aliyun agentloop list-agent-spaces \
  --profile "$AL_PROFILE" \
  --region "$AL_REGION" \
  --max-results 100

如果响应包含 nextToken,继续传入:

aliyun agentloop list-agent-spaces \
  --profile "$AL_PROFILE" \
  --region "$AL_REGION" \
  --max-results 100 \
  --next-token '<next-token>'

5.2 获取一个 AgentSpace

aliyun agentloop get-agent-space \
  --profile "$AL_PROFILE" \
  --region "$AL_REGION" \
  --agent-space "$AL_AGENT_SPACE"

重点读取:

{
  "agentSpace": "<agent-space>",
  "regionId": "<region-id>",
  "cmsWorkspace": "<cms-workspace>",
  "slsProject": "<agentloop-sls-project>",
  "requestId": "<request-id>"
}

建议一次读取并保存本次查询链路所需的资源定位信息:

AGENT_SPACE_JSON=$(aliyun agentloop get-agent-space \
  --profile "$AL_PROFILE" \
  --region "$AL_REGION" \
  --agent-space "$AL_AGENT_SPACE")

CMS_WORKSPACE=$(printf '%s\n' "$AGENT_SPACE_JSON" | jq -r '.cmsWorkspace // empty')
AGENTSPACE_SLS_PROJECT=$(printf '%s\n' "$AGENT_SPACE_JSON" | jq -r '.slsProject // empty')
RESOURCE_REGION=$(printf '%s\n' "$AGENT_SPACE_JSON" | jq -r '.regionId // empty')

其中:

  • cmsWorkspace 用来继续定位原始 Trace 所在的 XTrace Project 和 Logstore;

  • slsProject 是当前 AgentSpace 的 AgentLoop 数据 Project,Trajectory、评估和实验明细从这里查询;

  • regionId 是后续 CMS/SLS 查询默认使用的地域。

    完成标志:CMS_WORKSPACE、AGENTSPACE_SLS_PROJECT 和 RESOURCE_REGION 均非空,且返回的 agentSpace 与目标空间一致。不要根据 AgentSpace 名称猜测 Project 或 Workspace。

6. 查询原始 Trace 与 Span

6.1 从 AgentSpace 定位 XTrace Store

原始 Trace 的 Project 不应从 AgentSpace 名称或 slsProject 推断。完整定位链路是:

AgentSpace
  └─ GetAgentSpace → cmsWorkspace
       └─ CMS GetEntityStoreData → XTrace project + logstore + region
            └─ SLS GetLogsV2 → Trace / Span

先取最近 24 小时的 Unix 秒时间窗口:

LOOKUP_TO=$(date +%s)
LOOKUP_FROM=$((LOOKUP_TO - 86400))

再查询 Workspace 中标识为 apm.trace_set.storage 的 SLS Logstore 实体:

TRACE_STORE_JSON=$(aliyun cms get-entity-store-data \
  --api-version 2024-03-30 \
  --profile "$AL_PROFILE" \
  --region "$RESOURCE_REGION" \
  --workspace "$CMS_WORKSPACE" \
  --from "$LOOKUP_FROM" \
  --to "$LOOKUP_TO" \
  --query ".umodel
| where kind = 'sls_logstore'
  and json_extract_scalar(metadata, '$.domain') = 'apm'
  and json_extract_scalar(metadata, '$.name') = 'apm.trace_set.storage'
| extend project_name = json_extract_scalar(spec, '$.project'),
         logstore_name = json_extract_scalar(spec, '$.store'),
         region = json_extract_scalar(spec, '$.region')
| project project_name, logstore_name, region")

响应通过 header 描述列顺序,通过 data 返回二维数据。例如:

{
  "header": ["project_name", "logstore_name", "region"],
  "data": [
    ["<xtrace-project>", "<trace-logstore>", "<trace-region>"]
  ],
  "requestId": "<request-id>"
}

按 header 映射出:

  • TRACE_PROJECT:project_name 列;

  • TRACE_LOGSTORE:logstore_name 列;

  • TRACE_REGION:region 列;为空时使用 AgentSpace 的 regionId。

    下面的写法按列名动态取值,不依赖固定列序:

TRACE_PROJECT=$(printf '%s\n' "$TRACE_STORE_JSON" | jq -r '
  (.header | index("project_name")) as $i
| if $i == null then empty else (.data[0][$i] // empty) end')

TRACE_LOGSTORE=$(printf '%s\n' "$TRACE_STORE_JSON" | jq -r '
  (.header | index("logstore_name")) as $i
| if $i == null then empty else (.data[0][$i] // empty) end')

TRACE_REGION=$(printf '%s\n' "$TRACE_STORE_JSON" | jq -r '
  (.header | index("region")) as $i
| if $i == null then empty else (.data[0][$i] // empty) end')

TRACE_REGION=${TRACE_REGION:-$RESOURCE_REGION}

不要把 logstore-tracing 写死为所有环境的唯一值;应以 EntityStore 实际返回的 logstore_name 为准。如果最近 24 小时查不到实体,可将定位窗口扩大到 7 天,并确认调用方拥有当前 Workspace 的 cms:GetEntityStoreData 权限。

可选地调用 GetServiceObservability 核对 APM 可观测实例状态及 entryPointInfo.project,但 Trace 查询仍应使用 EntityStore 返回的 Project 和 Logstore 组合:

aliyun cms get-service-observability \
  --api-version 2024-03-30 \
  --profile "$AL_PROFILE" \
  --region "$RESOURCE_REGION" \
  --workspace "$CMS_WORKSPACE" \
  --type apm

完成标志:已经从 CMS 响应中读回非空的 TRACE_PROJECT、TRACE_LOGSTORE 和可用地域,而不是根据命名规则猜测。

6.2 验证 XTrace Store

查询前验证上一步解析出的 Project/Logstore 确实存在且可读:

aliyun sls get-log-store \
  --profile "$AL_PROFILE" \
  --region "$TRACE_REGION" \
  --project "$TRACE_PROJECT" \
  --logstore "$TRACE_LOGSTORE"

完成标志:SLS 返回的 Project 和 Logstore 与 CMS EntityStore 定位结果一致。

6.3 按 Trace ID 查询所有 Span

aliyun sls get-logs-v2 \
  --profile "$AL_PROFILE" \
  --region "$TRACE_REGION" \
  --project "$TRACE_PROJECT" \
  --logstore "$TRACE_LOGSTORE" \
  --from '<inclusive-unix-seconds>' \
  --to '<exclusive-unix-seconds>' \
  --query 'traceId:"<trace-id>"' \
  --line 100 \
  --offset 0 \
  --reverse false

如果一个 Trace 超过 100 个 Span,增加 offset 继续分页,直到没有新记录。不要只读取第一页就判断 Trace 完整。

常见字段包括:

  • traceId、spanId、parentSpanId;

  • serviceName、operationName;

  • startTime、duration、statusCode;

  • attributes.gen_ai.span.kind;

  • attributes.gen_ai.session.id;

  • attributes.gen_ai.agent.name;

  • 输入、输出、模型、Token、Tool 等 gen_ai.* 属性。

    字段是否存在取决于探针、框架适配和脱敏配置。有 Trace 不代表 Tool、Skill、子 Agent 或业务结果字段一定完整。

6.4 按 Session 查询 Trace

aliyun sls get-logs-v2 \
  --profile "$AL_PROFILE" \
  --region "$TRACE_REGION" \
  --project "$TRACE_PROJECT" \
  --logstore "$TRACE_LOGSTORE" \
  --from '<inclusive-unix-seconds>' \
  --to '<exclusive-unix-seconds>' \
  --query 'attributes.gen_ai.session.id:"<session-id>"' \
  --line 100 \
  --offset 0

如果接入端没有上报 attributes.gen_ai.session.id,平台不能仅凭时间相邻可靠地恢复 Session。不要把时间接近的两个 Trace 强行判定为同一业务任务。

6.5 Trace 完整性检查

至少验证:

  • Span ID 去重后数量;

  • parent-child 引用是否闭合;

  • 是否存在根 Span;

  • 输入和输出字段是否按策略采集;

  • Tool/LLM/Agent Span 是否与实际调用一致;

  • 查询窗口是否覆盖延迟到达的 Span;

  • 是否读取完所有分页。

    完成标志:可以从一个明确的 traceId 读回所有可见 Span,并能区分“确实没有某类调用”和“埋点/字段缺失”。

7. 查询 Agent Trajectory

7.1 数据位置

Trajectory 的 Project 直接来自 GetAgentSpace 响应中的 slsProject,Logstore 为 agent-trajectory:

AgentSpace
  └─ GetAgentSpace → slsProject
       └─ SLS Project / agent-trajectory

按第 5.2 节得到 AGENTSPACE_SLS_PROJECT 后,先验证 Logstore 可读:

aliyun sls get-log-store \
  --profile "$AL_PROFILE" \
  --region "$RESOURCE_REGION" \
  --project "$AGENTSPACE_SLS_PROJECT" \
  --logstore 'agent-trajectory'

这里的 slsProject 与原始 Trace 的 XTrace Project 是两套定位信息,不能互相替代:

数据

Project 来源

Logstore 来源

原始 Trace / Span

cmsWorkspace → CMS EntityStore → project_name

CMS EntityStore → logstore_name

Agent Trajectory

GetAgentSpace.slsProject

agent-trajectory

完成标志:GetAgentSpace.slsProject 非空,且 GetLogStore 成功返回 agent-trajectory 的信息。

如果 slsProject 为空,或 GetLogStore 返回资源不存在,应先确认当前 AgentSpace 已产生 Agent 轨迹且调用方拥有读取权限;不要改用 XTrace Project 代替。

7.2 查询列表

aliyun sls get-logs-v2 \
  --profile "$AL_PROFILE" \
  --region "$RESOURCE_REGION" \
  --project "$AGENTSPACE_SLS_PROJECT" \
  --logstore 'agent-trajectory' \
  --from '<inclusive-unix-seconds>' \
  --to '<exclusive-unix-seconds>' \
  --query '*' \
  --line 100 \
  --offset 0 \
  --reverse true

7.3 按不同标识查询

# 按 Trajectory ID
--query 'trajectory_id:"<trajectory-id>"'

# 从原始 Trace 追到 Trajectory
--query 'trace_id:"<trace-id>"'

# 查询一个 Session 的轨迹
--query 'session_id:"<session-id>"'

# 查询某个 Agent 应用
--query 'service_names:"<service-name>"'

# 查询包含某工具的轨迹
--query 'tool_names:"<tool-name>"'

# 限制步骤数与耗时
--query 'step_count >= 10 AND duration_ms >= 5000'

Trajectory 的常见查询字段包括:

  • 血缘:trajectory_id、previous_trajectory_ref、trace_id、terminal_span_id、session_id、turn_id;

  • 时间与规模:start_time、end_time、duration_ms、step_count;

  • 模型与 Token:models、model_call_count、total_tokens、input_tokens、output_tokens、cached_tokens;

  • 工具与 Skill:tool_names、tool_call_count、tool_errors、skill_ids、skill_names、skill_call_count;

  • Agent:agent_name、agent_version、subagent_trajectory_ids、sub_agent_count;

  • 内容:input、output、atif_content、model_calls、tool_calls、skills;

  • 数据质量:degraded、degraded_reason、input_empty_reason、version。

    字段可能随清洗版本变化。消费端应允许新增字段,并根据 version 或 cleaning_version 做兼容,而不是假定固定列序。

7.4 内容与 ATIF

atif_content 可能很大。列表页不应读取或展示完整 ATIF;详情查询才按 trajectory_id 拉取完整内容。对于异常大的 input/output,建议只返回前若干字符,并显式标记 truncated=true,不要静默截断。

完成标志:能按 trajectory_id 或 trace_id 读到有序行为数据,并明确数据是否降级、内容是否截断、清洗版本是什么。

8. 查询 Dataset

8.1 列出 Dataset

aliyun agentloop list-datasets \
  --profile "$AL_PROFILE" \
  --region "$AL_REGION" \
  --agent-space "$AL_AGENT_SPACE" \
  --max-results 100

可用 --dataset-name 精确过滤;有 nextToken 时继续翻页。

8.2 查询 Dataset Schema

aliyun agentloop get-dataset \
  --profile "$AL_PROFILE" \
  --region "$AL_REGION" \
  --agent-space "$AL_AGENT_SPACE" \
  --dataset-name '<dataset-name>'

先读 Schema,再生成查询。公共字段类型包括 text、long、double、json。系统字段常见为 id、__time__ 和内部序列字段;客户端不要依赖内部序列字段。

8.3 SQL SELECT

aliyun agentloop execute-query \
  --profile "$AL_PROFILE" \
  --region "$AL_REGION" \
  --agent-space "$AL_AGENT_SPACE" \
  --dataset-name '<dataset-name>' \
  --type SQL \
  --query 'SELECT id, __time__, question, answer, trace_id FROM <dataset-name> ORDER BY __time__ DESC LIMIT 100'

查询规则:

  • 只使用单 Dataset SELECT;

  • 不使用 JOIN、UNION、INTERSECT、EXCEPT 或子查询;

  • 显式列出字段和 LIMIT;

  • 不把用户输入直接拼入 SQL;

  • SELECT 不写 LIMIT 时,服务默认最多返回 1,000 行;单次查询上限以目标地域的接口文档和实际响应为准。

8.4 时间窗口、分页与截断

aliyun agentloop execute-query \
  --profile "$AL_PROFILE" \
  --region "$AL_REGION" \
  --agent-space "$AL_AGENT_SPACE" \
  --dataset-name '<dataset-name>' \
  --type SQL \
  --query 'SELECT id, question, answer FROM <dataset-name> ORDER BY __time__ DESC' \
  --from '<inclusive-unix-seconds>' \
  --to '<exclusive-unix-seconds>' \
  --offset 0 \
  --length 100 \
  --max-output-length 4096

maxOutputLength 发生截断时,检查响应的 meta.truncation,不能把截断后的文本当作完整样本。

8.5 SearchExpr

# 关键词、数值与布尔条件
aliyun agentloop execute-query \
  --profile "$AL_PROFILE" \
  --region "$AL_REGION" \
  --agent-space "$AL_AGENT_SPACE" \
  --dataset-name '<dataset-name>' \
  --type SQL \
  --query 'question:"timeout" AND score >= 0.8'

SearchExpr 支持比较、AND/OR/NOT、括号、field:value、field:* 和前缀匹配。不要在 SearchExpr 一侧使用 IN、BETWEEN、LIKE、IS NULL、任意函数或 JSON Filter DSL。

8.6 语义检索

目标字段必须在 Dataset Schema 中启用 embedding。

# 距离阈值,值越小通常越相近
aliyun agentloop execute-query \
  --profile "$AL_PROFILE" \
  --region "$AL_REGION" \
  --agent-space "$AL_AGENT_SPACE" \
  --dataset-name '<dataset-name>' \
  --type SQL \
  --query 'similarity(question, "<semantic-query>") < 0.3'

# Top-K
aliyun agentloop execute-query \
  --profile "$AL_PROFILE" \
  --region "$AL_REGION" \
  --agent-space "$AL_AGENT_SPACE" \
  --dataset-name '<dataset-name>' \
  --type SQL \
  --query 'topk(question, "<semantic-query>") <= 10'

# SQL 距离排序
aliyun agentloop execute-query \
  --profile "$AL_PROFILE" \
  --region "$AL_REGION" \
  --agent-space "$AL_AGENT_SPACE" \
  --dataset-name '<dataset-name>' \
  --type SQL \
  --query 'SELECT id, question, semantic_distance(question, "<semantic-query>", "l2") AS distance FROM <dataset-name> ORDER BY distance ASC LIMIT 10'

8.7 响应不是对象数组

ExecuteQuery 的返回格式是列与二维行分离:

{
  "columns": ["id", "question", "score"],
  "columnTypes": ["text", "text", "double"],
  "rows": [
    ["<id-1>", "<question-1>", 0.95],
    ["<id-2>", "<question-2>", 0.91]
  ],
  "meta": {
    "progress": "Complete",
    "count": 2,
    "truncation": {"truncated": false}
  },
  "requestId": "<request-id>"
}

调用方必须使用 columns[j] 解释 rows[i][j]。

完成标志:Schema 与查询字段一致,meta.progress 表示完成,分页全部读取,截断状态已处理,并且关键血缘字段不为空。

9. 查询记忆库与经验库

9.1 统一对象:ContextStore

当前 AgentLoop API 用 ContextStore 统一表示上下文库:

  • contextType=memory:记忆库;

  • contextType=experience:经验库。

    两者可以使用同一组 List/Get/Search API,但业务含义、身份隔离和内容来源不同。

9.2 列出上下文库

# 所有 ContextStore
aliyun agentloop list-context-stores \
  --profile "$AL_PROFILE" \
  --region "$AL_REGION" \
  --agent-space "$AL_AGENT_SPACE" \
  --max-results 100

# 只列记忆库
aliyun agentloop list-context-stores \
  --profile "$AL_PROFILE" \
  --region "$AL_REGION" \
  --agent-space "$AL_AGENT_SPACE" \
  --context-type memory \
  --max-results 100

# 只列经验库
aliyun agentloop list-context-stores \
  --profile "$AL_PROFILE" \
  --region "$AL_REGION" \
  --agent-space "$AL_AGENT_SPACE" \
  --context-type experience \
  --max-results 100

响应重点关注 contextStoreName、contextType、status、serviceNames、createTime、updateTime 和 nextToken。

9.3 获取上下文库配置

aliyun agentloop get-context-store \
  --profile "$AL_PROFILE" \
  --region "$AL_REGION" \
  --agent-space "$AL_AGENT_SPACE" \
  --context-store-name '<context-store-name>'

经验库常见配置包括 source.agentSpace、source.startTime、serviceNames、metadataField 和 miningInterval。状态为 Active/Running 只代表资源或挖掘任务状态,不证明已有可召回内容。

对于 contextType=memory,如果响应包含 config.innerSource,它会直接给出该记忆库的事件源位置:

{
  "contextType": "memory",
  "config": {
    "innerSource": {
      "project": "<agent-space-sls-project>",
      "logstore": "memory_events_<32-character-hash>"
    }
  }
}

这个 Logstore 保存通过 Context API 写入、等待抽取的短期事件;长期记忆结果仍通过 SearchContext 或对应 Dataset 查询。事件 Project 与 AgentSpace 的 slsProject 一致,名称规则为 memory_events_ 加 MD5(agentSpace + "|" + contextStoreName) 的 32 位小写十六进制值。优先使用 API 返回的 innerSource;如果当前 SDK 只解析了通用配置,可按同一规则计算后再用 GetLogStore 验证:

AL_CONTEXT_STORE='<context-store-name>'
MEMORY_EVENT_HASH=$(printf '%s' "$AL_AGENT_SPACE|$AL_CONTEXT_STORE" \
| openssl dgst -md5 -r \
| awk '{print $1}')
MEMORY_EVENT_LOGSTORE="memory_events_${MEMORY_EVENT_HASH}"

contextType=experience 的来源由 config.source.agentSpace 和 serviceNames 描述,经验挖掘读取该 AgentSpace 的 Trajectory,不使用同名的 memory_events_* Logstore。

9.4 搜索记忆或经验

aliyun agentloop search-context \
  --profile "$AL_PROFILE" \
  --region "$AL_REGION" \
  --agent-space "$AL_AGENT_SPACE" \
  --context-store-name '<context-store-name>' \
  --query '<natural-language-query>' \
  --filter '{"userId":"<user-id>","agentId":"<agent-id>"}' \
  --formatted true \
  --limit 10 \
  --threshold 0.6

身份过滤的字段名取决于 ContextStore 的元数据映射。调用前应通过 GetContextStore 和产品约定确认字段,不要假定每个库都使用 userId。

安全要求:

  • 记忆查询必须带足够的租户/用户/Agent/应用/Run 隔离条件;

  • 经验查询应带服务、场景或其他适用边界;

  • threshold 和 limit 需要用真实测试集校准;

  • HTTP 200 + 空 results 表示请求可达但无匹配内容,不等于服务故障;

  • Search 成功不代表召回已注入 Agent,更不代表质量改善。

9.5 按 ID、全量导出与审计历史

ContextStore 的常用读取路径是 List/Get/Search。如果业务需要确定性全量导出、按 ID 遍历或审计历史,优先选择以下之一:

  1. 使用正式开放的 Dataset 物化/导出方案;

  2. 使用所在地域明确开放的专用 ContextStore API;

  3. 对既有旧版 MemoryStore 使用下一节的 CMS 兼容接口。

10. 查询评估器、评估任务与评估结果

10.1 查询顺序

先查询 Evaluator、Evaluation Task 和 Evaluation Run 的配置与状态,再到 AgentSpace 的 SLS Project 查询逐样本明细。控制面状态与结果明细必须分别核对。

10.2 查询评估器

aliyun agentloop list-evaluators \
  --profile "$AL_PROFILE" \
  --region "$AL_REGION" \
  --agent-space "$AL_AGENT_SPACE" \
  --max-results 100

aliyun agentloop get-evaluator \
  --profile "$AL_PROFILE" \
  --region "$AL_REGION" \
  --agent-space "$AL_AGENT_SPACE" \
  --name '<evaluator-name>' \
  --biz-version '<optional-version>'

查询结果应保留评估器版本。任务创建时通常会冻结配置快照,当前最新评估器不一定等于历史 Run 实际使用的版本。

10.3 查询评估任务和 Run

aliyun agentloop list-evaluation-tasks \
  --profile "$AL_PROFILE" \
  --region "$AL_REGION" \
  --agent-space "$AL_AGENT_SPACE" \
  --task-mode batch \
  --max-results 100

aliyun agentloop get-evaluation-task \
  --profile "$AL_PROFILE" \
  --region "$AL_REGION" \
  --agent-space "$AL_AGENT_SPACE" \
  --task-id '<task-id>'

aliyun agentloop list-evaluation-runs \
  --profile "$AL_PROFILE" \
  --region "$AL_REGION" \
  --agent-space "$AL_AGENT_SPACE" \
  --task-id '<task-id>' \
  --max-results 100

aliyun agentloop get-evaluation-run \
  --profile "$AL_PROFILE" \
  --region "$AL_REGION" \
  --agent-space "$AL_AGENT_SPACE" \
  --task-id '<task-id>' \
  --run-id '<run-id>'

Task/Run 控制面回答“配置是什么、执行到哪一步”,不一定返回逐样本完整评分明细。

10.4 查询评估明细

评估明细位于 AgentSpace slsProject 的 evaluation_detail:

aliyun sls get-logs-v2 \
  --profile "$AL_PROFILE" \
  --region "$AL_REGION" \
  --project "$AGENTSPACE_SLS_PROJECT" \
  --logstore 'evaluation_detail' \
  --from '<inclusive-unix-seconds>' \
  --to '<exclusive-unix-seconds>' \
  --query 'task_id:"<task-id>" AND run_id:"<run-id>"' \
  --line 100 \
  --offset 0

常见字段:

  • task_id、run_id、eval_id;

  • evaluator_name、evaluator_display_name;

  • status;

  • score_name、score_value、score_range、normalized_score_value;

  • explanation、evaluation_process;

  • eval_info;

  • data_link;

  • eval_metrics、custom_outputs、eval_latency。

    低分查询示例:

task_id:"<task-id>" AND run_id:"<run-id>" AND status:success
| SELECT eval_id, evaluator_name, normalized_score_value, explanation
  FROM log
  WHERE normalized_score_value < 0.5
  ORDER BY normalized_score_value ASC
  LIMIT 50

默认不要导出 eval_info、完整 evaluation_process 或 custom_outputs 正文。只有在得到数据授权、确实需要定位单个 Case 时才读取。

完成标志:Task 和 Run 状态可读;评估明细条数与预期样本/评估器组合可以解释;失败、不可评和成功评分分开统计;低分 Case 能回到 data_link 指向的 Trace 或 Dataset Item。

10.5 查询 Playground 运行明细

Playground 的单次运行和评估结果写入 AgentSpace slsProject 的 playground_detail。它与正式评估任务的 evaluation_detail 分开,适合回查交互式调试记录:

aliyun sls get-logs-v2 \
  --profile "$AL_PROFILE" \
  --region "$RESOURCE_REGION" \
  --project "$AGENTSPACE_SLS_PROJECT" \
  --logstore 'playground_detail' \
  --from '<inclusive-unix-seconds>' \
  --to '<exclusive-unix-seconds>' \
  --query '*' \
  --line 100 \
  --offset 0

Playground 记录可能包含输入、输出、模型参数和评分等敏感内容。列表查询应先读取 ID、状态、模型和时间字段,只有在定位单次运行时才读取完整内容。

11. 查询实验计划、实验记录与逐样本结果

11.1 查询实验计划

aliyun agentloop list-experiment-plans \
  --profile "$AL_PROFILE" \
  --region "$AL_REGION" \
  --agent-space "$AL_AGENT_SPACE" \
  --offset 0 \
  --limit 20

aliyun agentloop get-experiment-plan \
  --profile "$AL_PROFILE" \
  --region "$AL_REGION" \
  --agent-space "$AL_AGENT_SPACE" \
  --plan-id '<plan-id>'

11.2 查询实验记录

CLI 中的 run 表示一次实验记录:

aliyun agentloop list-experiment-runs \
  --profile "$AL_PROFILE" \
  --region "$AL_REGION" \
  --agent-space "$AL_AGENT_SPACE" \
  --page 0 \
  --page-size 20

aliyun agentloop get-experiment-run \
  --profile "$AL_PROFILE" \
  --region "$AL_REGION" \
  --agent-space "$AL_AGENT_SPACE" \
  --record-id '<record-id>'

实验记录常见字段包括 recordId、planId、status、任务总数/完成数/失败数、progress、executedAt、completedAt、datasetId、experimentConfig、evaluationTaskId 和错误信息。

11.3 查询逐样本实验输出

逐样本实验输出位于 experiment_detail:

aliyun sls get-logs-v2 \
  --profile "$AL_PROFILE" \
  --region "$AL_REGION" \
  --project "$AGENTSPACE_SLS_PROJECT" \
  --logstore 'experiment_detail' \
  --from '<inclusive-unix-seconds>' \
  --to '<exclusive-unix-seconds>' \
  --query 'experiment_id:"<experiment-id>"' \
  --line 100 \
  --offset 0

常见字段:

  • experiment_id;

  • experiment_metadata.experiment_group_name;

  • data_config.dataset_id;

  • data_config.dataset_item_id;

  • experiment_output;

  • experiment_metrics;

  • status。

    实验评分仍在 evaluation_detail,通过以下字段关联:

  • data_link.experiment_id;

  • data_link.experiment_group_name;

  • data_link.dataset_id;

  • data_link.dataset_item_id。

    完成标志:Baseline 和 Candidate 使用同一 Dataset Item 集合、同一评估器版本与同一环境口径;逐样本输出和逐样本评分均可追溯。只比较聚合均值不足以证明改动有效。

12. 查询 Pipeline

12.1 列出和获取定义

aliyun agentloop list-pipelines \
  --profile "$AL_PROFILE" \
  --region "$AL_REGION" \
  --agent-space "$AL_AGENT_SPACE" \
  --max-results 100

aliyun agentloop get-pipeline \
  --profile "$AL_PROFILE" \
  --region "$AL_REGION" \
  --agent-space "$AL_AGENT_SPACE" \
  --pipeline-name '<pipeline-name>'

GetPipeline 重点查看 source、顺序 nodes、sink、执行策略和最后运行信息。当前公开契约的核心形态是“一份数据源 → 顺序处理节点 → Dataset Sink”;不要把它描述成任意 DAG、多源 Join 或多 Sink 平台。

12.2 查询 Run

aliyun agentloop list-pipeline-runs \
  --profile "$AL_PROFILE" \
  --region "$AL_REGION" \
  --agent-space "$AL_AGENT_SPACE" \
  --pipeline-name '<pipeline-name>' \
  --start-time '<inclusive-unix-seconds>' \
  --end-time '<inclusive-upper-bound-used-by-current-cli>' \
  --max-results 200

aliyun agentloop get-pipeline-run \
  --profile "$AL_PROFILE" \
  --region "$AL_REGION" \
  --agent-space "$AL_AGENT_SPACE" \
  --pipeline-name '<pipeline-name>' \
  --run-id '<run-id>'

Run 详情重点查看:

  • status;

  • 数据窗口;

  • triggerType;

  • attempt/maxAttempts;

  • startTime/finishTime;

  • stats;

  • errorCode/errorMessage;

  • 可选的 inline results。

12.3 查询统计

aliyun agentloop get-pipeline-stats \
  --profile "$AL_PROFILE" \
  --region "$AL_REGION" \
  --agent-space "$AL_AGENT_SPACE" \
  --pipeline-name '<pipeline-name>' \
  --start-time '<unix-seconds>' \
  --end-time '<unix-seconds>' \
  --granularity Day

12.4 必须回查 Dataset

Run Succeeded 后仍要查询目标 Dataset,至少核对:

  • 源选择范围与目标行数;

  • trace_id/trajectory_id/session_id 等血缘字段;

  • 必填字段为空的比例;

  • 重复 ID;

  • 转换字段;

  • 截断;

  • 被过滤数据是否可解释。

    完成标志:目标 Dataset 的真实行已读回并满足字段契约,而不是只看到 Pipeline 状态成功。

13. 标注、Prompt/Skill 资产与其他对象

13.1 Dataset 标注

execute-query 支持 --annotation-filter,可按标注条件筛选 Dataset 数据。标注条件的字段、操作符和值应与 Dataset 的标注配置一致。

自动评分与人工标注必须分字段保存,不能覆盖后把机器结论当成人工金标。

13.2 Prompt 和运行时 Skill

Prompt 和运行时 Skill 属于 Agent 资产域;Evaluator Skill 属于评估域,两者不是同一种资源。查询 Prompt 或运行时 Skill 时,应使用 Agent 资产 API 文档中对应的版本、发布状态和 Label 条件,不能用 Evaluator Skill 查询替代。

13.3 Token、成本与质量指标

Token、模型时延和工具调用可从 Trace 或 Trajectory 字段聚合;评估质量从 evaluation_detail 聚合。两者来自不同证据面,聚合时要明确时间窗口、去重单位和分母:

  • Trace 指标通常按 traceId 去重;

  • Session 指标按 Session ID;

  • Trajectory 指标按 trajectory_id;

  • Dataset 指标按 Dataset Item id;

  • Evaluation 指标按 eval_id,同时按 evaluator 拆分;

  • Experiment 指标按 experiment_id + group + dataset_item_id。

14. 跨对象查询配方

14.1 从一个 Trace 找到 Trajectory 和 Dataset 样本

  1. 在 CMS EntityStore 定位出的 TRACE_PROJECT/TRACE_LOGSTORE 中按 traceId 读取完整 Span。

  2. 在 agent-trajectory 按 trace_id 查询 Trajectory。

  3. 记录 trajectory_id、session_id 和清洗版本。

  4. 在目标 Dataset 中查询显式保存的 trace_id 或 trajectory_id。

  5. 如果 Dataset Schema 没有血缘字段,不能靠时间接近做确定性关联。

    Dataset 示例:

SELECT id, trace_id, trajectory_id, session_id, question, answer
FROM <dataset-name>
WHERE trace_id = '<trace-id>'
LIMIT 100

14.2 从 Dataset Item 找到评估结果

  1. 从 Dataset 获取 Item id。

  2. 在 evaluation_detail 查询 data_link.dataset_item_id。

  3. 同时限定 task_id 或 run_id,避免匹配历史复跑。

  4. 按 evaluator 分开解释分数,不把不同指标直接平均成“总质量”。

14.3 从实验记录核对 Baseline 与 Candidate

  1. 通过 GetExperimentRun 获取 recordId、Dataset、配置组和关联评估任务。

  2. 在 experiment_detail 按 experiment_id 获取每个 Dataset Item 的输出。

  3. 在 evaluation_detail 按 data_link.experiment_id 获取评分。

  4. 用 dataset_item_id + experiment_group_name 对齐结果。

  5. 检查是否存在缺失输出、重复样本、失败或不可评记录。

14.4 从经验召回结果回到来源轨迹

经验结果只有在元数据中保留 sourceTraceId、trace_id、trajectory_id 或等价字段时才能确定性回溯。字段名取决于 ContextStore 配置。

如果没有来源标识,只能说“召回到一条经验”,不能声称它来自某个具体 Trace。

15. Python SDK 示例

下面展示 AgentLoop Python SDK 的 Dataset 查询。SDK 包名为 alibabacloud_agentloop20260520;请从组织批准的包源或项目内正式 vendor 获取,不要从不明来源下载安装。

import os

from alibabacloud_agentloop20260520.client import Client
from alibabacloud_agentloop20260520 import models as agentloop_models
from alibabacloud_tea_openapi import models as openapi_models


region = os.environ["AL_QUERY_REGION"]
agent_space = os.environ["AL_QUERY_AGENT_SPACE"]
dataset_name = os.environ["AL_QUERY_DATASET"]

# 示例从标准环境变量读取凭证;生产环境优先使用 STS、RAM Role 或统一凭证 Provider。
config = openapi_models.Config(
    access_key_id=os.environ["ALIBABA_CLOUD_ACCESS_KEY_ID"],
    access_key_secret=os.environ["ALIBABA_CLOUD_ACCESS_KEY_SECRET"],
    security_token=os.environ.get("ALIBABA_CLOUD_SECURITY_TOKEN"),
    region_id=region,
    endpoint=f"agentloop.{region}.aliyuncs.com",
    connect_timeout=3000,
    read_timeout=15000,
)
client = Client(config)

request = agentloop_models.ExecuteQueryRequest(
    type="SQL",
    query=(
        f"SELECT id, __time__, question, answer "
        f"FROM {dataset_name} ORDER BY __time__ DESC LIMIT 100"
    ),
)
response = client.execute_query(agent_space, dataset_name, request)
body = response.body

records = [dict(zip(body.columns, row)) for row in body.rows]
print({
    "request_id": body.request_id,
    "count": body.meta.count,
    "progress": body.meta.progress,
    "records": records,
})

这个示例只允许应用自己生成 Dataset 名和固定 SELECT 模板。不要把外部用户提交的任意 SQL 直接传给 ExecuteQuery。

CLI 与 SDK 应使用同一 API 版本。若 SDK Request Model 中缺少文档所列参数,应升级对应 API 版本的 SDK,不要修改生成代码绕过参数校验。

16. 错误处理与重试

现象

只读检查

处理原则

AgentSpaceNotExist / 404

核对 Region、AgentSpace、Profile

不要自动切到其他空间

权限不足

记录 Action、资源 ARN、requestId

补最小权限后再试,不展示凭证

SLS 查不到数据

核对 Project、Logstore、索引、时间窗口、字段名

先放宽过滤,不要直接断言无数据

nextToken 循环或失效

记录上一页 Token 和查询条件

不复用其他查询的 Token

429 / Throttling

读取错误码和响应头

指数退避 + jitter,有界重试

5xx / 网络超时

保留 requestId,确认请求为只读

有界重试;不要把超时当作“无结果”

Dataset progress != Complete

检查 meta 和服务错误

不发布不完整统计

Dataset 字段被截断

检查 meta.truncation

缩小字段或按 ID 读取详情

Pipeline Succeeded 但无数据

回查 Run stats 与目标 Dataset

以 Dataset 读回为准

评估有 Run 无明细

核对时间、SLS Project、evaluation_detail、task/run ID

区分任务状态和结果数据面

Context Search 返回空

核对库状态、身份过滤、阈值、挖掘进度

空结果不等于 API 故障

对 GET、List、Search 和只读 Query 可以做有界重试。建议:

  • 只重试连接超时、读超时、429 和明确的临时 5xx;

  • 退避时加入随机抖动;

  • 设置总时长和最大次数;

  • 每次重试保留同一个业务查询标识,并记录每个 requestId;

  • 不在失败后偷偷扩大时间范围或切换 AgentSpace。

17. 数据安全与合规

  1. 默认不采集或返回完整 Prompt、Output、工具参数和文件正文。

  2. 查询前确认调用方拥有目标 AgentSpace、Dataset、ContextStore 和 SLS Project 的权限。

  3. Memory 查询必须带身份隔离条件,并做跨用户负向测试。

  4. 大型多模态内容应返回对象 URI、类型、大小、哈希与权限元数据,不要把 Base64 大对象塞进 Trace 或 Dataset 响应。

  5. 签名 URL 有 TTL,不要作为长期 Dataset/Memory 内容保存。

  6. 日志中只记录查询结构、计数、哈希和 requestId,不要记录密钥或完整客户内容。

  7. 导出数据时记录来源窗口、Schema/清洗版本、分页和脱敏规则,保证后续可以解释。

18. API 与命令速查

18.1 AgentLoop 查询接口

Action

CLI

HTTP 路径

ListAgentSpaces

list-agent-spaces

GET /agentspace

GetAgentSpace

get-agent-space

GET /agentspace/{agentSpace}

ListDatasets

list-datasets

GET /agentspace/{agentSpace}/dataset

GetDataset

get-dataset

GET /agentspace/{agentSpace}/dataset/{datasetName}

ExecuteQuery

execute-query

POST /agentspace/{agentSpace}/dataset/{datasetName}/query

ListContextStores

list-context-stores

GET /agentspace/{agentSpace}/contextstore

GetContextStore

get-context-store

GET /agentspace/{agentSpace}/contextstore/{contextStoreName}

SearchContext

search-context

POST /agentspace/{agentSpace}/contextstore/{contextStoreName}/context/search

ListPipelines

list-pipelines

GET /agentspace/{agentSpace}/pipeline

GetPipeline

get-pipeline

GET /agentspace/{agentSpace}/pipeline/{pipelineName}

ListPipelineRuns

list-pipeline-runs

GET /agentspace/{agentSpace}/pipeline/{pipelineName}/runs

GetPipelineRun

get-pipeline-run

GET /agentspace/{agentSpace}/pipeline/{pipelineName}/runs/{runId}

GetPipelineStats

get-pipeline-stats

GET /agentspace/{agentSpace}/pipeline/{pipelineName}/stats

18.2 Trace 与 Trajectory 数据定位接口

用途

Action/CLI

HTTP 路径或数据位置

从 Workspace 定位 XTrace Store

cms:GetEntityStoreData / cms get-entity-store-data

POST /workspace/{workspace}/entitiesAndRelations

查询 APM 可观测实例

cms:GetServiceObservability / cms get-service-observability

GET /workspace/{workspace}/service-observability/{type}

枚举 AgentSpace Logstore

sls:ListLogStores / sls list-log-stores

GetAgentSpace.slsProject

验证 Logstore

sls:GetLogStore / sls get-log-store

AgentSpace 或 CMS 返回的 Project/Logstore

查询 Logstore 索引

sls:GetIndex / sls get-index

已定位的 Project/Logstore

查询 Trace/Trajectory 日志

sls:GetLogs / sls get-logs-v2

XTrace Store 或 GetAgentSpace.slsProject/agent-trajectory

18.3 评估与实验查询命令

对象

CLI 命令

Evaluator

list-evaluators、get-evaluator

Evaluation Task/Run

list-evaluation-tasks、get-evaluation-task、list-evaluation-runs、get-evaluation-run

Experiment Plan/Run

list-experiment-plans、get-experiment-plan、list-experiment-runs、get-experiment-run

调用前应确认目标账号拥有相应 RAM 读取权限,并使用目标地域支持的 AgentLoop API 版本。

19. Logstore 数据地图:名称、定位方式与用途

本节中的“全部 Logstore”是指客户通过 API 查询 AgentLoop 业务数据时可能遇到的完整 Logstore 类型,包括固定名称、按资源动态生成的名称和由配置指定的来源。平台服务自身的任务队列、计量数据和运行日志单独说明,不与客户业务数据混用。

19.1 先枚举 AgentSpace 中实际存在的 Logstore

固定名称表示数据合同固定,不表示每个 AgentSpace 创建后立即拥有全部 Logstore。许多 Logstore 会在启用相应接入、审计、评估、实验、记忆或效率分析能力后创建。应先使用 GetAgentSpace.slsProject 枚举实际资源:

aliyun sls list-log-stores \
  --profile "$AL_PROFILE" \
  --region "$RESOURCE_REGION" \
  --project "$AGENTSPACE_SLS_PROJECT" \
  --offset 0 \
  --size 500

如果返回数量达到 500,继续增加 offset,直到读取完整。对准备查询的每个 Logstore,再验证资源和索引:

AL_LOGSTORE='<logstore-name>'

aliyun sls get-log-store \
  --profile "$AL_PROFILE" \
  --region "$RESOURCE_REGION" \
  --project "$AGENTSPACE_SLS_PROJECT" \
  --logstore "$AL_LOGSTORE"

aliyun sls get-index \
  --profile "$AL_PROFILE" \
  --region "$RESOURCE_REGION" \
  --project "$AGENTSPACE_SLS_PROJECT" \
  --logstore "$AL_LOGSTORE"

ListLogStores 证明资源存在,GetIndex 证明哪些字段可以做关键词、范围或 SQL 查询;两者都不能证明目标时间窗口内已有数据。

19.2 Trajectory 与轨迹特征 Logstore

这些 Logstore 的 Project 均来自 GetAgentSpace.slsProject:

Logstore

用途

典型字段与查询键

出现条件

agent-trajectory

清洗、组装后的完整 Agent Trajectory;用于轨迹列表、详情、评估和经验挖掘

trajectory_id、trace_id、session_id、start_time、tool_names、total_tokens、atif_content

AgentSpace 轨迹存储就绪后

trajectory-feature-event

将轨迹拆成可聚合的步骤/工具事件;适合分析工具、命令、目标、状态、耗时和结果大小

trajectory_id、feature_id、event_id、step_index、tool_id、operation、status、duration_ms

启用轨迹特征处理后

trajectory-feature-stats

每条轨迹的聚合统计;适合总览、趋势、Token、工具调用和成功/错误比例

trajectory_id、feature_id、step_count、tool_call_count、input_tokens、output_tokens、success_ratio

启用轨迹特征处理后

trajectory-feature-security

从轨迹中提取的安全发现

finding_id、trajectory_id、event_id、finding_type、severity、operation、target

启用安全特征视图后

trajectory-feature-trigger

轨迹特征就绪与下游处理触发信号;同时保存是否有错误、变更、采集缺口或安全风险等紧凑标志

trajectory_id、feature_id、enabled_views、signals、has_error、has_mutation、signal_time

启用触发视图后

查询轨迹特征时,优先用 trajectory_id 或 feature_id 关联四个视图。trajectory-feature-event 是轨迹派生事件,不等于应用直接上报的 agent-event。

19.3 Agent 原始事件与审计 Logstore

这组 Logstore 也位于 AgentSpace 的 slsProject。原始事件由接入链路写入;派生审计数据在启用相应审计能力并产生结果后出现。

Logstore

用途

典型字段与查询键

agent-event

服务端或 Agent 侧直接上报的标准化 AI 应用事件,包括模型请求/响应、工具调用/结果和会话上下文

event.id、event.name、gen_ai.session.id、gen_ai.turn.id、gen_ai.step.id、gen_ai.tool.call.id、Token 字段

agent-event-webtracking

通过 WebTracking 接入的浏览器或前端 AI 应用事件;Schema 与 agent-event 对齐,跨端分析时通常与其合并查询

同 agent-event,另保留来源 Logstore 以便区分接入通道

ebpf-event

主机/进程级运行时观测事件,用于补充文件、网络、进程和系统调用等运行证据

主机、进程、容器、事件类型、时间与运行结果字段;以实际索引为准

security-event

检测器输出的单条安全发现

security_event_id、severity、confidence、risk_type、risk_subtype、证据 Event/Session/Turn/Step ID

incident-event

将一个或多个安全发现及原始事件关联成 Incident

incident_event_id、severity、risk_signature、evidence_event_ids、evidence_security_event_ids、entities

audit-event

意图、风险、实体和使用情况等审计分析事件

audit_event_id、event_domain、intent_category、risk_type、evidence_event_id、usage_total_tokens

baseline-profile

行为基线画像,用于将当前活动与历史基线比较

Profile ID、主体、统计窗口和基线指标;以实际索引为准

agent-policy

当前 Agent 审计/安全策略的可查询记录

Policy ID、适用主体、版本、状态和更新时间;以实际索引为准

policy-pool

可供选择、下发或复用的策略集合

Policy ID、类别、版本、适用范围和状态;以实际索引为准

audit-chat-history

审计分析交互的会话历史

Chat/Message ID、会话、角色、时间和内容摘要;按数据授权读取正文

investigation-artifact

调查过程中固化的证据、结论或导出物索引

Investigation/Artifact ID、来源、类型、状态、哈希或对象引用

跨 agent-event 与 agent-event-webtracking 查询时,应显式投影相同字段并增加来源列,再使用 UNION ALL;不要假定两个 Logstore 在每个时间段都有数据。ebpf-event 属于运行时数据范围,不应与 AI 应用事件在没有关联键时直接拼接。

19.4 评估、实验与 Playground Logstore

Logstore

用途

典型关联键

evaluation_detail

正式评估的逐样本、逐评估器结果;评分、解释、自定义输出和数据血缘都从这里读取

task_id、run_id、eval_id、evaluator_name、data_link.*

experiment_detail

实验中每个 Dataset Item、实验组和候选配置的实际输出与执行指标

experiment_id、experiment_group_name、dataset_id、dataset_item_id

playground_detail

Playground 单次交互式运行及其评估记录

运行 ID、模型、状态、输入、输出、评分和时间字段;以实际索引为准

experiment_detail 保存实验输出,实验评分仍在 evaluation_detail。playground_detail 用于交互调试,不应当作正式 Evaluation Task/Run 的结果来源。

19.5 Token 与成本效率 Logstore

启用 Token/成本效率分析后,AgentSpace Project 中可能出现以下 Logstore:

Logstore

用途

典型关联键

step-fragment-store

将 Trajectory 拆解为可复用的 Step/Fragment,保存片段血缘和内容载荷

trajectoryId、stepId、fragmentGenerationId、entityId、schemaVersion

token-cost-feature

从片段或轨迹计算出的 Token/成本特征

featureRunId、entityId、entityType、algorithmVersion、时间窗口

mining-catalog

特征挖掘产物的目录和发布索引,用于确定某个窗口、实体和版本对应的正式产物

efficiencyRunId、featureRunId、entityId、entityType、windowStartMs、windowEndMs

token-cost-serving

面向查询和控制台展示的汇总、异常、优化动作及预期节省结果

efficiencyRunId、recordType、actionId、anomalyCode、trajectoryId、totalTokens、expectedSavingTokens

读取效率数据时,先用 mining-catalog 确认已发布的 Run 和窗口,再读取 Feature、Fragment 或 Serving 数据。不要仅凭某个 Logstore 有行就认定该窗口已完成发布。

19.6 动态名称或由资源配置决定的 Logstore

类型

定位方式

用途

XTrace Store

GetAgentSpace.cmsWorkspace → CMS GetEntityStoreData → apm.trace_set.storage 的 Project/Logstore/Region

原始 Trace 与 Span;名称可能是 logstore-tracing,但必须使用实际返回值

Memory Event Store

优先读取 GetContextStore.config.innerSource.project/logstore;如客户端未展示该字段,则 Project 使用 GetAgentSpace.slsProject,Logstore 按本节的 MD5 命名规则定位,并用 GetLogStore 验证

每个 Memory ContextStore 的短期写入事件流;抽取后写入记忆 Dataset

Pipeline Source Logstore

GetPipeline.source

Pipeline 读取的源 SLS Logstore;名称由 Pipeline 配置决定,可以是 Trace、Trajectory、Event 或业务 Logstore,不存在统一固定名

Experience ContextStore 没有一个必须与库同名的 Event Logstore。它通过 config.source.agentSpace 和 serviceNames 选择来源,主要从该 AgentSpace 的 agent-trajectory 读取轨迹,召回结果通过 ContextStore API 查询。

19.7 几类“Event”不要混淆

名称

它记录的是什么

用它回答什么问题

agent-event / agent-event-webtracking

应用直接上报的模型、工具、会话等原始事件

Agent 实际做了什么、何时发生、属于哪个 Session/Turn/Step

trajectory-feature-event

从完整 Trajectory 派生的结构化步骤/工具特征

某类工具、命令、目标、结果和耗时如何分布

security-event / incident-event / audit-event

检测、关联和审计分析产生的派生事件

有什么风险、证据是什么、哪些事件被归并为 Incident

memory_events_&lt;hash&gt;

Context API 写入且等待长期记忆抽取的短期事件

记忆写入是否到达、Scope/Partition 是否正确、抽取输入是什么

trajectory-event

Trajectory 处理链路的就绪/封闭等流程信号

轨迹处理为何未推进;它不是用户行为事件查询入口

还要区分 agent-trajectory 与服务运行日志中的 agentloop-trajectory:前者是客户 AgentSpace 内的业务 Trajectory,后者是 Trajectory 服务自身的运行日志。名称相似,但 Project、Schema、权限和用途都不同。

19.8 流程控制、计量与服务运行 Logstore

AgentLoop 的任务执行还会使用流程控制或服务观测 Logstore。常见类别包括:

类别

典型名称

用途

结果查询应使用

持续评估窗口队列

evaluation_window_queue

在调度器和执行实例之间传递成熟时间窗口;消息描述窗口,不保存逐样本评分

GetEvaluationRun + evaluation_detail

评估执行队列

名称由部署配置决定

分发待评估样本或任务

GetEvaluationRun + evaluation_detail

实验执行队列

experiment_queue_local、experiment_queue_priority 等部署配置名

分发普通或高优实验任务

GetExperimentRun + experiment_detail

Trajectory 流程信号

trajectory-event

trace_ready、session_sealed 等处理信号

agent-trajectory 与 Trajectory Feature Logstore

评估/实验计量与监控

evaluation_stats、experiment_stats、evaluation_metering 等

服务容量、计量、监控和运营统计

AgentSpace 业务结果仍查 Detail Logstore

AgentLoop 服务运行日志

agentloop-gateway-*、agentloop-pipeline、agentloop-contextstore、agentloop-trajectory、agentloop-experience-* 等

API、调度、抽取、清洗等服务的访问日志、应用日志和错误日志

面向服务排障,不替代 AgentSpace 数据查询

流程控制或服务运行 Logstore 的名称、Project 和保留期可能随地域及部署环境变化。它们能解释任务为什么等待或失败,但不能替代客户数据面的 Trace、Trajectory、Dataset、Evaluation、Experiment 或 Context 查询结果。

19.9 通用 Logstore 查询模板

确认 Project、Logstore、索引和时间范围后,再执行有界查询:

aliyun sls get-logs-v2 \
  --profile "$AL_PROFILE" \
  --region "$RESOURCE_REGION" \
  --project '<resolved-project>' \
  --logstore '<resolved-logstore>' \
  --from '<inclusive-unix-seconds>' \
  --to '<exclusive-unix-seconds>' \
  --query '<indexed-filter-or-*>' \
  --line 100 \
  --offset 0 \
  --reverse true

第一次查询未知 Schema 时,先读取少量记录并结合 GetIndex 确认字段,再编写正式过滤和 SQL。查询完成必须记录 Project、Logstore、时间窗口、过滤条件、分页、完整性标记和 requestId。

20. 上线前检查清单

  • Region、Profile 和 AgentSpace 已固定;

  • 已读取 AgentSpace 的 cmsWorkspace 与 slsProject;

  • 已通过 CMS EntityStore 定位并验证 XTrace Project/Logstore/Region;

  • 已枚举 AgentSpace slsProject 中实际存在的全部 Logstore,并按本节的数据地图完成分类;

  • 已验证本次查询使用的 Logstore 及其索引;

  • 已区分 agent-event、trajectory-feature-event、memory_events_* 与流程控制事件;

  • 使用目标环境实际 CLI/SDK Help 核对命令和参数;

  • RAM 只授予查询所需 Action 和目标资源;

  • 所有时间查询都有明确的左闭右开时间范围 [from, to) 与时区;

  • List API 已处理完整分页;

  • Dataset Query 只允许 SELECT/SearchExpr,并显式 LIMIT;

  • SLS 查询处理超过 100 条的分页或使用有界 SQL;

  • 内容字段默认投影/脱敏/截断,且截断被显式记录;

  • 记忆查询包含身份隔离过滤,并完成跨身份负向验证;

  • 评估与实验明细能回到 Trace 或 Dataset Item;

  • Pipeline 成功后已回查目标 Dataset;

  • 日志保存 requestId、查询窗口、对象 ID 和客户端版本;

  • 没有把配置保存、任务运行、结果产出、结果可读和业务验收混为一谈。

21. 版本与兼容性

当客户端版本、地域能力或返回 Schema 更新时,应以对应 API 版本的正式文档和实际响应为准,并同步更新调用方的字段兼容逻辑。