首页 / 文章 / 《实用笔记》:深入ARD——代理资源发现规范的实际运作方式

《实用笔记》:深入ARD——代理资源发现规范的实际运作方式

《实用笔记》操作指南:深入ARD——代理资源发现规范的实际应用方式,包括相关契约、校验机制以及适用于采用该模式的团队的即插即用代码模块。

4954 词

以下笔记为“Inside ARD:代理式资源发现规范的实际运作方式”提供了一条实用的学习路径。重点在于契约、校验以及可直接插入的代码占位符,而非动机性阐述。 在完成概览阶段时,首先列出契约内容:所需输入、成功信号以及部分失败时的处理方式。这样的清单能确保后续的代码修改保持一致性。 同时记录正常流程与异常恢复路径。重试机制、人工审核环节以及死信处理都是产品本身的组成部分,而非后续的优化内容。

ARD要解决的问题

将 ARD 问题视为可测量的表面来处理时效果最佳。在扩大范围之前,先记录一个成功的案例、一个失败案例以及回滚说明。 优先选择小型且可测试的单元,而非庞大的脚本。当某个步骤失败时,故障应指向单一责任主体,而非复杂的流程链。 保持图结构的状态简洁且具有类型定义。嵌套的数据块会掩盖哪个节点修改了哪个字段的信息,还会在中断后导致无法继续执行。

思维模型:描述、爬取、搜索、调用

将思维模型视为可测量的对象来描述,这一阶段的效果最佳。在扩大范围之前,先记录一个成功的案例、一个失败案例以及回滚说明。 把这一阶段视为输入与经过验证的输出之间的契约。为相关成果命名,明确成功标准,绝不允许默默地只完成部分工作。 为每轮对话和每次会话设定预算额度。智能工具往往会过度扩展上下文;设置上限可以避免演示过程变成意外的费用账单。

描述资源:ai-catalog.json 配置文件

在将资源描述阶段视为可度量的对象时,其效果最佳。在扩大范围之前,需记录一份理想的操作日志、一个故障案例以及回滚说明。 在功能结果旁同时记录执行时间以及令牌或查询成本。提前了解成本情况,可避免在从演示环境过渡到共享环境时出现意外费用。 保持图表状态简洁且具有明确类型。嵌套的数据块会掩盖哪个节点修改了哪个字段的信息,还会在出现中断后导致流程无法继续。 在将资源描述阶段视为可度量的对象时,其效果最佳。在扩大范围之前,需记录一份理想的操作日志、一个故障案例以及回滚说明。 需同时记录正常流程与恢复流程。重试机制、人工审核环节以及死信处理都是产品本身的组成部分,而非后续需要补充的功能。

https://yourdomain.com/.well-known/ai-catalog.json
{
  "specVersion": "1.0",
  "host": {
    "displayName": "Northwind Labs",
    "identifier": "northwindlabs.dev"
  },
  "entries": [
    {
      "identifier": "urn:ai:northwindlabs.dev:tools:pdf-table-extractor",
      "displayName": "PDF Table Extractor",
      "type": "application/mcp-server+json",
      "url": "https://tools.northwindlabs.dev/pdf-extractor/mcp.json",
      "description": "Extracts structured tables from scanned or digital
                      PDFs into CSV or JSON.",
      "representativeQueries": [
        "pull the line-item table out of this invoice PDF",
        "convert the tables in this scanned report into a spreadsheet"
      ]
    }
  ]
}

身份标识:为何该标识符看起来像 URN

在进行身份识别相关的工作时,应在修改代码之前明确输入参数、该步骤的负责人以及结束标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏的状态。相比冗长的脚本,更应采用小型且可测试的单元。当某个步骤失败时,故障原因应能指向具体的责任主体,而非复杂的流程问题。对于涉及资金支出或修改生产数据的操作,必须经过人工审批。仅靠编译时的配置并不能保证业务的完整性。

API:搜索、探索与简单列表

在API搜索探索阶段,应在修改代码之前明确输入参数、该步骤的负责人以及结束标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。 将此阶段视为输入与经过验证的输出之间的契约。为相关成果命名,定义成功检测标准,并拒绝默许的半完成状态。 对于涉及资金支出或修改生产数据的操作,必须经过人工审批。编译时的连接并不等同于业务上的完整性。

{
  "query": {
    "text": "I need to digitize an invoice's line items",
    "filter": {
      "type": ["application/mcp-server+json"]
    }
  },
  "pageSize": 5
}

联盟:注册中心之间的交互

对于与测试环境交互的联邦注册系统,在修改代码之前需明确输入参数、该步骤的负责人以及终止条件。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。 在功能结果旁记录执行时间以及令牌或查询成本。提前了解成本情况可避免在流程从演示环境转向共享环境时出现意外账单。 对于会消耗资金或修改生产数据的操作,必须经过人工审批。编译时的配置并不等同于业务功能的完整性。 对于与测试环境交互的联邦注册系统,在修改代码之前需明确输入参数、该步骤的负责人以及终止条件。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。 需同时记录正常流程和故障恢复流程。重试机制、人工审核环节以及死信处理都是产品功能的一部分,而非附加内容。

抛光处理。

该功能在聊天机器人中的实际应用场景

在确定具体应用场景时,首先需明确相关约定:所需输入参数、成功信号以及部分失败时的处理方式。这样的清单能确保后续的代码修改保持一致性。 建议采用小型、可测试的单元而非庞大的脚本。当某个步骤失败时,故障应指向单一责任模块,而非复杂的流程链。 在成本较高的步骤之后设置检查点。当操作员重新尝试后续节点时,恢复流程不应再次调用相同的大型语言模型。

实际构建:在 Snowflake 上实现的生产级 ARD 系统

在“真正构建”阶段工作时,首先写下合同条款:所需的输入、成功信号以及部分失败时会发生什么。这样的检查清单能确保后续的代码修改保持透明。 将此阶段视为输入与经过验证的输出之间的契约。为相关成果命名,定义成功检测标准,并拒绝默许的部分完成。 在成本较高的步骤之后设置检查点。当操作员重新尝试后续节点时,恢复流程不应再次调用相同的大型语言模型。

┌─────────────────────────────────────────────────────────────┐
│                    Streamlit UI Layer                        │
│   (Serves /.well-known/ai-catalog.json + search interface)  │
├─────────────────────────────────────────────────────────────┤
│                    API Procedures Layer                      │
│   ARD_SEARCH │ ARD_LIST_AGENTS │ ARD_EXPLORE │ ARD_GATE     │
├─────────────────────────────────────────────────────────────┤
│                 Semantic Ranking Layer                       │
│   Python UDF: TF-IDF + Cosine Similarity (scikit-learn)     │
├─────────────────────────────────────────────────────────────┤
│                    Registry Layer                            │
│   ARD_REGISTRY_ENTRIES table + ARD_AUDIT_LOG                │
├─────────────────────────────────────────────────────────────┤
│                    Ingestion Layer                           │
│   ARD_INGEST_MANIFEST (parse JSON → populate registry)      │
├─────────────────────────────────────────────────────────────┤
│                    Generation Layer                          │
│   ARD_MANIFEST_GENERATOR (DESCRIBE AGENT → ai-catalog.json) │
└─────────────────────────────────────────────────────────────┘

第一层:从实时代理自动生成清单

在处理第一层自动生成阶段时,首先需明确相关规范:所需输入、成功信号以及部分失败时的处理方式。这份清单能确保后续的代码修改保持一致性。 在功能结果旁记录执行时间以及令牌或查询成本。提前了解成本情况,可避免在从演示环境过渡到共享环境时出现意外费用。 在耗时较高的步骤之后设置检查点。当操作员重新尝试后续节点时,恢复流程不应再次收取相同的LLM调用费用。 在处理第一层自动生成阶段时,首先需明确相关规范:所需输入、成功信号以及部分失败时的处理方式。这份清单能确保后续的代码修改保持一致性。 需同时记录正常流程与异常恢复流程。重试机制、人工审核环节以及死信处理都是产品功能的一部分,而非后续需要补充的内容。

SHOW AGENTS IN SCHEMA ANALYTICS.AGENTS;
{
  "specVersion": "1.0",
  "host": {
    "displayName": "Snowflake Analytics Platform",
    "identifier": "analytics.snowflake-demo.com"
  },
  "entries": [
    {
      "identifier": "urn:ai:analytics.snowflake-demo.com:analytics:finance-agent",
      "displayName": "Finance Agent",
      "type": "application/vnd.snowflake.cortex-agent+json",
      "url": "https://zkumjrw-uib48895.snowflakecomputing.com/api/v2/cortex/agents/...",
      "description": "Finance AI analyst with expertise in ASC 606...",
      "tags": ["finance", "revenue", "ASC-606", "ARR", "bookings"],
      "capabilities": ["text-to-sql", "metric-disambiguation"],
      "representativeQueries": [
        "What was our recognized revenue last quarter?",
        "Show me ARR trend over the past 12 months"
      ],
      "trustManifest": {
        "identity": {"type": "domain-verified", "domain": "analytics.snowflake-demo.com"},
        "attestations": [
          {"type": "RBAC-governed", "detail": "FINANCE_AGENT_ROLE required"}
        ]
      }
    }
  ]
}

第二层:导入可搜索的注册表

将第二层的导入阶段视为一个可度量的界面来处理效果最佳。在扩大范围之前,先记录一份完美的转录文本、一个故障案例以及回滚说明。 优先选择小型且可测试的单元,而非庞大的脚本。当某个步骤出现故障时,故障应指向单一的责任主体,而非复杂的流程链。 保持图结构的状态简洁且具有类型定义。嵌套的数据块会掩盖哪个节点编写了哪个字段的信息,还会在流程中断后导致无法继续执行。

ARD_REGISTRY_ENTRIES
├── IDENTIFIER (URN, unique)
├── DISPLAY_NAME
├── TYPE (IANA media type)
├── URL
├── DESCRIPTION
├── TAGS (ARRAY)
├── CAPABILITIES (ARRAY)
├── REPRESENTATIVE_QUERIES (ARRAY)
├── TRUST_MANIFEST (VARIANT)
├── SEARCH_TEXT (lower-cased concatenation of description + queries + tags)
├── STATUS ('ACTIVE' | 'STALE' | 'REMOVED')
└── Timestamps (INGESTED_AT, LAST_VERIFIED_AT, UPDATED_AT)

第三层:语义搜索——Python UDF方法

将第三层语义搜索阶段视为可度量的对象时,其效果最佳。在扩大范围之前,先记录一份理想的处理结果、一个失败案例以及回滚说明。 把这一阶段视为输入与经过验证的输出之间的契约。为相关成果命名,明确成功标准,绝不允许出现无声的半完成状态。 在教授循环逻辑之前,先锁定解释器及依赖项。在笔记本电脑与持续集成环境之间的差异是API演示中最常见的无声故障原因。

CREATE OR REPLACE FUNCTION ANALYTICS.AGENTS.ARD_SEMANTIC_RANK(
    query_text VARCHAR,
    candidates ARRAY
)
RETURNS ARRAY
LANGUAGE PYTHON
RUNTIME_VERSION = '3.11'
PACKAGES = ('scikit-learn', 'numpy')
HANDLER = 'rank_candidates'
AS
$
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
def rank_candidates(query_text, candidates):
    if not candidates or not query_text:
        return []
    identifiers = [c['identifier'] for c in candidates]
    texts = [c.get('search_text', '') for c in candidates]
    all_texts = [query_text.lower()] + [t.lower() for t in texts]
    vectorizer = TfidfVectorizer(
        ngram_range=(1, 3),
        max_features=5000,
        stop_words='english',
        sublinear_tf=True
    )
    try:
        tfidf_matrix = vectorizer.fit_transform(all_texts)
    except ValueError:
        return [{'identifier': id, 'score': 0} for id in identifiers]
    similarities = cosine_similarity(tfidf_matrix[0:1], tfidf_matrix[1:])[0]
    results = [
        {'identifier': id, 'score': round(float(sim) * 100, 1)}
        for id, sim in zip(identifiers, similarities)
    ]
    results.sort(key=lambda x: x['score'], reverse=True)
    return results
$;

第四层:调用入口——执行前的RBAC授权

第4层:调用阶段若被视为可度量的对象,其运行效果会最佳。在扩大范围之前,需记录一份理想的操作日志、一个故障案例以及回滚说明。 在功能结果旁同时记录执行时间以及令牌或查询成本。提前了解成本情况,可避免在从演示环境过渡到共享环境时出现意外费用。 保持图表状态简洁且类型明确。嵌套的数据块会掩盖哪个节点修改了哪个字段的信息,还会在中断后导致流程无法继续。 第4层:调用阶段若被视为可度量的对象,其运行效果会最佳。在扩大范围之前,需记录一份理想的操作日志、一个故障案例以及回滚说明。 需同时记录正常流程与恢复流程。重试机制、人工审核环节以及死信处理都是产品本身的组成部分,而非后续需要补充的功能。

CALL ARD_INVOCATION_GATE(
    'urn:ai:analytics.snowflake-demo.com:analytics:finance-agent',
    'ACCOUNTADMIN'
)
-- Returns: {"authorized": true, "agentFqn": "ANALYTICS.AGENTS.FINANCE_AGENT", ...}

CALL ARD_INVOCATION_GATE(
    'urn:ai:analytics.snowflake-demo.com:analytics:finance-agent',
    'PUBLIC'
)
-- Returns: {"authorized": false, "reason": "Role PUBLIC lacks FINANCE_AGENT_ROLE grant."}

第5层:Streamlit清单服务器

对于第5层的Streamlit阶段,在修改代码之前需明确输入参数、该步骤的负责人以及终止条件。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。 优先选择小型、可测试的单元,而非冗长的脚本。当某个步骤失败时,故障应指向单一责任点,而非复杂的流程链。 对于涉及资金支出或修改生产数据的环节,必须经过人工审批。编译时的连接方式并不等同于业务功能的完整性。

manifest = get_manifest()
st.code(json.dumps(manifest, indent=2), language="json")
st.download_button("Download", json.dumps(manifest, indent=2), "ai-catalog.json")
query = st.text_input("Query", placeholder="I need to analyze quarterly revenue")
cap_filter = st.selectbox("Capability", [None, "text-to-sql", "multi-tool-routing"])
if st.button("Search"):
    results = search_registry(query, filters)
    for entry in results["results"]:
        st.expander(f"{entry['displayName']} — Score: {entry['score']}")
stats = get_registry_stats()
# Shows: 4 entries, 18 tags across 4 agents, 3 capability types

第6层:端到端测试框架

在第六层即端到端阶段,修改代码之前需明确输入内容、该步骤的负责人以及结束标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。 应将此阶段视为输入与经过验证的输出之间的契约。为相关成果命名,定义成功检测标准,并拒绝默许的半完成状态。 在网关处进行身份验证,在数据层面重新授权。仅凭承载令牌并不足以界定租户边界。

Test 1: MANIFEST_GENERATION
  → Calls ARD_MANIFEST_GENERATOR(), asserts specVersion = "1.0"
     and entries array is non-empty

Test 2: MANIFEST_INGESTION
  → Calls ARD_INGEST_MANIFEST(manifest), asserts status = "SUCCESS"
     and entries_ingested > 0
Test 3: SEARCH_FINANCE_QUERY
  → Searches "What was our revenue last quarter?"
  → Asserts top result identifier contains "finance"
Test 4: SEARCH_CHURN_QUERY
  → Searches "Which customers are likely to churn?"
  → Asserts top result identifier contains "cs"
Test 5: SEARCH_WITH_FILTER
  → Searches "pipeline forecast" with capabilities filter ["text-to-sql"]
  → Asserts results > 0 (filter applied correctly)
Test 6: LIST_AGENTS
  → Calls ARD_LIST_AGENTS(1, 10)
  → Asserts pagination.totalEntries > 0
Test 7: EXPLORE_FACETS
  → Calls ARD_EXPLORE()
  → Asserts facets.tags is not null and totalEntries > 0
Test 8: GATE_AUTHORIZED
  → Calls ARD_INVOCATION_GATE(finance URN, "ACCOUNTADMIN")
  → Asserts authorized = true
Test 9: GATE_UNAUTHORIZED
  → Calls ARD_INVOCATION_GATE(finance URN, "PUBLIC")
  → Asserts authorized = false
Test 10: HEALTH_CHECK
  → Calls ARD_HEALTH_CHECK()
  → Asserts status = "COMPLETE"
{
  "summary": {
    "total_tests": 10,
    "passed": 10,
    "failed": 0,
    "success_rate": "100.0%"
  },
  "tests": [...],
  "timestamp": "2026-06-18T..."
}

生产环境强化:出现的问题及解决方式

在为生产环境进行强化处理时,应在修改代码之前明确输入参数、该步骤的负责人以及结束标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。 在功能结果旁记录执行时间以及令牌或查询成本。提前了解成本情况可避免在系统从演示环境过渡到共享环境时出现意外账单。 对于会耗费资金或修改生产数据的操作,必须经过人工审批。编译时的配置并不等同于业务功能的完整性。 在为生产环境进行强化处理时,应在修改代码之前明确输入参数、该步骤的负责人以及结束标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。 需同时记录正常流程和故障恢复流程。重试机制、人工审核环节以及死信处理都是产品功能的一部分,而非附加内容。

进行最终润色。

Streamlit清单服务器——通过HTTP提供ARD服务

在处理Streamlit清单服务器阶段时,首先明确相关规范:所需的输入参数、成功信号以及部分失败时的处理方式。这样的检查清单能确保后续的代码修改保持一致性。 优先选择小型且可测试的单元,而非庞大的脚本。当某个步骤失败时,故障应指向单一责任模块,而非复杂的流程链。 在成本较高的步骤之后设置检查点。当操作员重新尝试后续节点时,恢复流程不应再次调用相同的LLM服务。

部署

在处理部署阶段时,首先写下相关契约:所需的输入参数、成功信号以及部分失败时的处理方式。这样的检查清单能确保后续的代码修改保持一致性。 将此阶段视为输入与验证后输出之间的契约。为相关产物命名,明确成功判定标准,并杜绝无声的半完成状态。 在成本较高的步骤之后设置检查点。当操作员重新尝试后续节点时,恢复流程不应再次调用相同的大型语言模型。

CREATE STAGE IF NOT EXISTS ANALYTICS.AGENTS.STREAMLIT_STAGE
    ENCRYPTION = (TYPE = 'SNOWFLAKE_SSE');

-- Upload source (via COPY INTO from temp table)
COPY INTO @ANALYTICS.AGENTS.STREAMLIT_STAGE/ard_manifest_app/streamlit_app.py
FROM (SELECT content FROM _STREAMLIT_SRC)
FILE_FORMAT = (TYPE = CSV COMPRESSION = NONE ...)
SINGLE = TRUE OVERWRITE = TRUE;
CREATE OR REPLACE STREAMLIT ANALYTICS.AGENTS.ARD_MANIFEST_SERVER
    ROOT_LOCATION = '@ANALYTICS.AGENTS.STREAMLIT_STAGE/ard_manifest_app'
    MAIN_FILE = '/streamlit_app.py'
    QUERY_WAREHOUSE = COMPUTE_WH;

完整的Streamlit源代码

在处理完整的 Streamlit 源代码阶段时,首先列出相关规范:所需的输入参数、成功信号以及部分失败时的处理方式。这样的检查清单能确保后续的代码修改始终符合要求。 在功能结果旁记录执行时间以及令牌或查询成本。提前了解成本情况,可避免在从演示环境切换到共享环境时出现意外费用。 在耗时的步骤之后设置检查点。当操作员重新执行后续节点时,恢复流程不应再次收取相同的 LLM 调用费用。

import streamlit as st
import json
from snowflake.snowpark.context import get_active_session
st.set_page_config(page_title="ARD Manifest Server", layout="wide")
session = get_active_session()
@st.cache_data(ttl=300)
def get_manifest():
    result = session.sql("CALL ANALYTICS.AGENTS.ARD_MANIFEST_GENERATOR()").collect()
    return json.loads(result[0][0])
@st.cache_data(ttl=300)
def search_registry(query, filters=None):
    safe_query = query.replace("'", "''")
    if filters:
        filter_json = json.dumps(filters).replace("'", "''")
        sql = f"CALL ANALYTICS.AGENTS.ARD_SEARCH('{safe_query}', PARSE_JSON('{filter_json}'))"
    else:
        sql = f"CALL ANALYTICS.AGENTS.ARD_SEARCH('{safe_query}')"
    result = session.sql(sql).collect()
    return json.loads(result[0][0])
@st.cache_data(ttl=300)
def get_registry_stats():
    result = session.sql("CALL ANALYTICS.AGENTS.ARD_EXPLORE()").collect()
    return json.loads(result[0][0])
tab1, tab2, tab3, tab4 = st.tabs([
    "ai-catalog.json", "Search", "Explorer", "API Docs"
])

标签页 1:原始清单

在处理“Tab 1:原始阶段”时,首先写下相关契约:所需的输入参数、成功信号以及部分失败时的处理方式。这样的检查清单能确保后续的代码修改保持一致性。 将配置信息与应用程序代码分开存放。环境文件、密钥存储以及功能开关应集中于一个位置,这样操作人员无需查看整个系统结构即可进行审计。 在耗时较高的步骤之后设置检查点。当操作人员重新尝试后续节点时,恢复流程不应再次计费相同的大型语言模型调用。

with tab1:
    st.markdown("## /.well-known/ai-catalog.json")
    manifest = get_manifest()
    c1, c2, c3 = st.columns(3)
    c1.metric("Spec Version", manifest.get("specVersion", "?"))
    c2.metric("Host", manifest.get("host", {}).get("identifier", "?"))
    c3.metric("Entries", len(manifest.get("entries", [])))
    st.code(json.dumps(manifest, indent=2), language="json")
    st.download_button(
        "Download ai-catalog.json",
        json.dumps(manifest, indent=2),
        "ai-catalog.json",
        "application/json"
    )

Tab 2:交互式语义搜索

在处理 Tab 2 的交互式语义阶段时,首先写下相关约定:所需的输入参数、成功信号以及部分失败时的处理方式。这样的检查清单能确保后续的代码修改保持一致性。 同时记录正常流程和异常恢复流程。重试机制、人工审核环节以及死信处理都是产品功能的一部分,而非后续需要补充的内容。 在成本较高的步骤之后设置检查点。当操作员重新尝试某个节点时,恢复流程不应再次调用相同的大型语言模型。

with tab2:
    st.markdown("## POST /search")
    query = st.text_input("Query", placeholder="e.g., I need to analyze quarterly revenue")
    cap_filter = st.selectbox("Capability", [None, "text-to-sql", "multi-tool-routing"])
    if st.button("Search", type="primary") and query:
        filters = {"capabilities": [cap_filter]} if cap_filter else None
        results = search_registry(query, filters)
        st.markdown(f"### {results['resultCount']} results")
        st.caption(f"Method: {results.get('method', 'keyword')}")
        for i, entry in enumerate(results.get("results", [])):
            with st.expander(f"#{i+1} {entry['displayName']} — Score: {entry['score']}"):
                st.markdown(f"**ID:** `{entry['identifier']}`")
                st.markdown(f"**URL:** `{entry.get('url', 'N/A')}`")
                st.markdown(f"**Tags:** {', '.join(entry.get('tags', []))}")
                st.markdown(f"**Capabilities:** {', '.join(entry.get('capabilities', []))}")
                if entry.get("representativeQueries"):
                    for q in entry["representativeQueries"]:
                        st.markdown(f"- _{q}_")

Tab 3:多维度探索

在完成“标签3:多维度探索”阶段时,首先写下相关约定:所需输入、成功标志以及部分失败时的处理方式。这样的检查清单能确保后续的代码修改保持一致性。 优先选择小型、可测试的单元,而非庞大的脚本。当某个步骤失败时,故障应指向单一责任模块,而非复杂的流程链。 在成本较高的步骤之后设置检查点。当操作员重新尝试后续节点时,恢复流程不应再次调用相同的大型语言模型。

with tab3:
    st.markdown("## POST /explore")
    stats = get_registry_stats()
    st.metric("Active Entries", stats.get("totalEntries", 0))
    e1, e2, e3 = st.columns(3)
    with e1:
        st.markdown("### Types")
        for f in stats.get("facets", {}).get("type", []):
            st.markdown(f"- `{f['value']}` ({f['count']})")
    with e2:
        st.markdown("### Tags")
        for f in stats.get("facets", {}).get("tags", []):
            st.markdown(f"- `{f['value']}` ({f['count']})")
    with e3:
        st.markdown("### Capabilities")
        for f in stats.get("facets", {}).get("capabilities", []):
            st.markdown(f"- `{f['value']}` ({f['count']})")

标签4:API参考

在处理 Tab 4 API 参考文档阶段时,首先需记录下相关契约:所需的输入参数、成功信号以及部分失败时的处理方式。这样的检查清单能确保后续的代码修改保持一致性。 将此阶段视为输入与验证后输出之间的契约。为相关文件命名,明确成功判定标准,并杜绝无声的半完成状态。 在耗时较高的步骤之后设置检查点。当操作员重新尝试后续节点时,恢复流程不应再次调用相同的 LLM 接口。

with tab4:
    st.markdown("""
    | ARD Endpoint | Procedure | Description |
    |---|---|---|
    | `GET /.well-known/ai-catalog.json` | `ARD_MANIFEST_GENERATOR()` | Live manifest |
    | `POST /search` | `ARD_SEARCH(query, filters)` | Semantic search |
    | `POST /explore` | `ARD_EXPLORE()` | Faceted browse |
    | `GET /agents` | `ARD_LIST_AGENTS(page, size)` | Paginated list |
    | Gate | `ARD_INVOCATION_GATE(urn, role)` | RBAC check |
Scoring: TF-IDF + cosine similarity (scikit-learn), 0-100 scale.
    Identity: urn:ai:<domain>:<namespace>:<agent-name>
    """)

访问应用

在完成“访问应用”阶段时,首先需列出相关规范:所需输入、成功信号以及部分失败时的处理方式。这样的清单能确保后续的代码修改保持一致性。 在功能结果旁记录执行时间以及令牌或查询成本。提前了解成本情况,可避免在系统从演示环境过渡到共享环境时出现意外费用。 在耗时较高的步骤之后设置检查点。当操作员重新尝试后续节点时,恢复流程不应再次收取相同的LLM调用费用。 在完成“访问应用”阶段时,首先需列出相关规范:所需输入、成功信号以及部分失败时的处理方式。这样的清单能确保后续的代码修改保持一致性。 需同时记录正常流程和故障恢复流程。重试机制、人工审核环节以及死信处理都是产品功能的一部分,而非后续需要补充的内容。

实时测试结果

将实时测试结果阶段视为可度量的对象来处理,效果最佳。在扩大测试范围之前,先记录一份理想的测试用例、一个失败案例以及回滚说明。 优先选择小型且易于测试的单元,而非庞大的脚本。当某个步骤失败时,故障应能指向具体的责任模块,而非复杂的流程链。 保持图表状态简洁且具有类型定义。嵌套的数据结构会掩盖哪个节点修改了哪个字段的信息,还会在测试中断后导致无法继续执行。

搜索:“你需要分析我们的季度营收情况”

要将你需要进行的搜索工作做好,最好将其视为一个可度量的对象。在扩大范围之前,先记录一份理想的成果、一个失败案例以及回滚说明。 将这一阶段视为输入与已验证输出之间的契约。为相关成果命名,明确成功标准,绝不允许出现悄无声息的半完成状态。 保持图结构的状态简洁且类型明确。嵌套的数据块会掩盖哪个节点修改了哪个字段的信息,还会在中断后导致无法继续处理。

Results: 2 found | Method: tfidf-cosine-similarity
#1 Finance Agent — Score: 3.5
   ID: urn:ai:analytics.snowflake-demo.com:analytics:finance-agent
   Tags: finance, revenue, ASC-606, ARR, bookings
   Capabilities: text-to-sql, metric-disambiguation#2 Executive Agent — Score: 1.5
   ID: urn:ai:analytics.snowflake-demo.com:analytics:executive-agent
   Tags: executive, cross-domain, orchestrator, KPI
   Capabilities: text-to-sql, metric-disambiguation, multi-tool-routing

搜索:“哪些客户有可能流失?”

将“哪些客户处于特定阶段”这一搜索功能视为可度量的指标会更为有效。在扩大范围之前,先记录一个成功的案例、一个失败案例以及回滚说明。 在功能结果旁同时记录处理时间以及令牌或查询成本。提前了解成本情况,可避免在系统从演示环境过渡到共享环境时出现意外账单。 保持图表状态简洁且类型明确。嵌套的数据块会掩盖具体是哪个节点修改了哪个字段,且在中断后会导致数据恢复失败。

Results: 1 found | Method: tfidf-cosine-similarity
#1 CS Agent — Score: 10.5
   ID: urn:ai:analytics.snowflake-demo.com:analytics:cs-agent
   Tags: customer-success, health-score, churn, NPS, CSAT

搜索:“pipeline forecast”,筛选条件为 capabilities=["text-to-sql"]

将带阶段的搜索流水线预测视为可度量的模型时效果最佳。在扩大范围之前,先记录一份理想的处理结果、一个失败案例以及回滚说明。 将配置置于应用程序代码之外。环境文件、密钥存储和功能标志应集中存放,以便操作人员无需查看整个结构就能进行审计。 保持图结构的扁平化与类型化。嵌套的数据块会掩盖哪个节点修改了哪个字段的信息,且在中断后会导致无法继续处理。

Results: 2 found (filtered from 4 total)
#1 Sales Agent — Score: 8.2
#2 Finance Agent — Score: 2.1

浏览器视图选项

将Explorer facets stage视为可测量的界面使用效果最佳。在扩大范围之前,先记录一个成功的案例、一个失败案例以及回滚说明。 同时记录正常流程和恢复流程。重试机制、人工审核环节以及死信处理都是产品本身的一部分,而非后续需要补充的内容。 保持图结构的状态简洁且类型明确。嵌套的数据块会掩盖哪个节点编写了哪个字段的信息,还会在中断后导致无法继续处理。

Total Active Entries: 4
Types:
  - application/vnd.snowflake.cortex-agent+json (4)
Tags (18 total):
  - bookings (2), finance (1), revenue (1), ASC-606 (1), ARR (1),
    sales (1), pipeline (1), forecast (1), win-rate (1),
    customer-success (1), health-score (1), churn (1), NPS (1),
    CSAT (1), executive (1), cross-domain (1), orchestrator (1), KPI (1)
Capabilities:
  - text-to-sql (7), metric-disambiguation (7), multi-tool-routing (1)

调用入口测试

将“调用门测试阶段”视为可测量的对象来处理,其效果最佳。在扩大测试范围之前,先记录一个成功的测试案例、一个失败案例以及回滚说明。 优先选择小型且易于测试的单元,而非庞大的脚本。当某个步骤失败时,故障应能指向具体的责任模块,而非复杂的流程链。 保持图结构的状态简洁且具有类型定义。嵌套的数据块会掩盖哪个节点修改了哪个字段的信息,还会在测试中断后导致无法继续执行。

CALL ARD_INVOCATION_GATE('urn:ai:...finance-agent', 'ACCOUNTADMIN')
→ {"authorized": true, "reason": "Role ACCOUNTADMIN is authorized..."}
CALL ARD_INVOCATION_GATE('urn:ai:...finance-agent', 'PUBLIC')
→ {"authorized": false, "reason": "Role PUBLIC lacks FINANCE_AGENT_ROLE grant."}

监控层

将监控层视为可度量的界面时,其功能表现最佳。在扩大范围之前,先记录一份典型的成功案例、一个故障实例以及回滚说明。 把这一阶段视为输入与已验证输出之间的契约。为相关成果命名,明确成功标准,绝不允许出现无声的、不完整的处理过程。 保持图结构的状态简洁且类型明确。嵌套的数据块会掩盖哪个节点修改了哪个字段的信息,还会在中断后导致无法继续处理。

实际应用中的意义

从实际应用角度看,这一阶段最好被视作一个可度量的对象。在扩大范围之前,先记录一份理想的操作流程、一个故障案例以及回滚说明。 在功能结果旁同时记录执行时间以及令牌或查询成本。提前了解成本情况,就能避免在从演示环境过渡到共享环境时出现意外费用。 保持图表状态简洁且类型明确。嵌套的数据块会掩盖是哪个节点修改了哪个字段,还会在中断后导致流程无法继续。 从实际应用角度看,这一阶段最好被视作一个可度量的对象。在扩大范围之前,先记录一份理想的操作流程、一个故障案例以及回滚说明。 需同时记录正常流程和恢复流程。重试机制、人工审核环节以及死信处理都是产品的一部分,而非后续需要补充的功能。

"I need to analyze our quarterly revenue figures"
Finance Agent — Score: 15.8
Executive Agent — Score: 3.5
Sales Agent — Score: 3.2

给实现者的工具

在“实现者工具”阶段,应在修改代码之前明确输入参数、该步骤的负责人以及结束标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。相比庞大的脚本,更应采用小型且可测试的单元。当某个步骤失败时,故障原因应能指向单一责任主体,而非复杂的流程链。应在网关处进行身份验证,在数据层再次授权——仅凭承载令牌并不足以界定租户边界。

下一步是什么

在“下一步”阶段,应在修改代码之前明确输入参数、该步骤的负责人以及结束标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。 将此阶段视为输入与已验证输出之间的契约。为相关成果命名,定义成功检测标准,并拒绝默许的半完成状态。 对于涉及资金支出或修改生产数据的操作,必须经过人工审批。编译时的连接方式并不等同于业务上的完整性。

开始使用

在入门阶段,应在修改代码之前明确输入参数、该步骤的负责人以及终止标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。除了功能结果外,还需记录执行时间以及令牌或查询成本。提前了解这些成本可以避免在从演示环境过渡到共享环境时出现意外费用。对于会消耗资金或修改生产数据的操作,必须经过人工审批。编译时的配置并不等同于业务功能的完整性。在入门阶段,应在修改代码之前明确输入参数、该步骤的负责人以及终止标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。需同时记录正常流程和异常恢复流程。重试机制、人工审核环节以及错误处理措施都是产品不可或缺的部分,而非后续需要补充的内容。

git clone https://github.com/satish/ard-registry.git
cd ard-registry
-- In Snowsight, execute these SQL files in order:
sql/01_infrastructure.sql        -- Creates stage, tables, audit log
sql/02_manifest_generator.sql    -- Reads agent metadata → ARD manifest
sql/03_ingest.sql                -- Parses manifest → searchable registry
sql/04_semantic_rank.sql         -- Python UDF (TF-IDF + cosine similarity)
sql/05_search.sql                -- Semantic search endpoint
sql/06_list_and_explore.sql      -- List + explore endpoints
sql/07_invocation_gate.sql       -- RBAC authorization gate
sql/08_monitoring.sql            -- Scheduled refresh + health check
sql/10_e2e_test.sql              -- Test harness-- Then ingest and verify:
EXECUTE IMMEDIATE $
DECLARE v_manifest VARIANT; v_result VARIANT;
BEGIN
    CALL ANALYTICS.AGENTS.ARD_MANIFEST_GENERATOR() INTO v_manifest;
    CALL ANALYTICS.AGENTS.ARD_INGEST_MANIFEST(:v_manifest) INTO v_result;
    RETURN :v_result;
END;
$;CALL ANALYTICS.AGENTS.ARD_END_TO_END_TEST();
-- Expected: 10/10 PASS (100%)

操作检查清单

在制定操作检查清单时,需明确输入参数、各步骤的负责人以及完成标准,然后再进行代码修改。操作人员应能够从已知的检查点重新执行相应步骤,而无需猜测隐藏状态。

将配置信息与应用程序代码分开存放。环境文件、密钥存储以及功能开关应集中于一个位置,以便操作人员无需查看整个系统结构即可进行审核。

对于涉及资金支出或修改生产数据的操作,必须经过人工审批。仅靠编译时的配置并不足以确保业务的完整性。

编写简短的操作手册:说明如何轮换密钥、如何清空队列以及如何回滚最近的导入操作。

同时记录正常流程和故障恢复流程。重试机制、人工审核环节以及死信处理都是产品不可或缺的部分,而非后续需要补充的功能。

对于那些会花费资金或更改生产数据的操作,必须经过人工审批。编译时的配置并不等同于业务功能的完整性。

在推广该技术栈之前,应先冻结版本,为关键流程记录完整的操作日志,并明确回滚步骤。共享环境需要设置速率限制、租户验证机制,以及明确的密钥轮换负责人。与其追求花哨的一次性演示,不如注重扎实的可靠性。

关于 ba61be007942 的批量处理说明:请将提供商密钥存放在仓库之外,为每个会话设置令牌使用上限,并将操作日志与评估用配置文件放在一起,以便后续模型更换时仍能保持数据可比性。