公司动态

AI Agent 商品发现开放协议:分层模型与工程落地

📅 2026/8/28 22:44:36
AI Agent 商品发现开放协议:分层模型与工程落地
最近这两年AI Agent 的讨论已经从“能不能做”转向了“怎么落地”。但只要你试着把一个 Agent 从“陪聊工具”推向“帮用户买东西、比价、下单”的真实场景很快就会撞上一堵墙AI 无法用统一的方式去理解不同电商平台、不同商家、不同商品目录的数据。现在的现状是每个电商平台都在做自己的 AI 导购每个 AI 创业团队都在用爬虫抓商品数据每个大模型应用都在各自为战地定义“商品”这个概念的 JSON 结构。这就像 1990 年代每个公司都做一套自己的网景导航页最后用户和开发者都被困在一个个信息孤岛里。这篇文章想认真讨论一个偏底层的架构问题如果我们要构造一个用于 AI 中介产品发现的开放协议它到底应该包含什么我会从协议分层、数据模型、端点设计、运行流程、工程落地这几个层面展开并给出可以直接参考的协议草案和代码示例。它不能替代任何官方标准但我希望它能成为你在团队里讨论“AI 购物协议怎么设计”时的一个讨论基础。1. 核心问题AI Agent 正在成为“中间人”但产品生态里没有中间人该用的协议先说清楚什么叫“AI 中介产品发现”。传统的产品发现是“人找货”用户打开电商 App输入关键词看推荐流点进详情页比较 SKU最后下单。在这个过程中搜索排序和推荐算法是平台内部的秘密武器用户看到的是被过滤后的结果。AI Agent 时代的产品发现是“Agent 找人找货”用户对 Agent 说“我想在 800 元以内买一顶适合两人露营的帐篷最好今天下单后天能到”。Agent 需要自己去检索商品目录、比对价格和库存、筛选商家信誉、协调支付和物流最后给用户一个可执行的购买方案。问题在哪里问题在于Agent 要完成这件事需要一种跨平台、跨商家的数据交换协议但今天没有这种协议。各个电商平台开放 API 的方式不同有的提供 REST 接口有的只有页面端点的数据还有的干脆把商品数据锁定在 App 里只有官方 AI 助手能访问。就算你有权限拿到数据商品字段的语义也不一致A 平台叫priceB 平台叫salePriceC 平台的价格还要自己加税费。一个结构化数据格式尚且如此更不用说跨平台的库存、优惠券、发货时效、售后政策这些更复杂的字段了。如果我们只看表面会以为“AI 电商”的瓶颈是模型能力不够是 Agent 推理不准是 Prompt 写不好。但真正决定 AI 能不能大规模替代人做产品发现的是底层的互操作层。模型再聪明也读不懂一个没有统一语义的商品数据源。这句话值得放在全文开头AI 中介产品发现的最大瓶颈不在模型而在数据协议。2. 为什么必须是“开放协议”私有 API 解决不了 Agent 生态问题有人可能会说平台自己做 AI 导购不就行了用户用京东的 AI 助手买京东的东西用淘宝的 AI 助手买淘宝的东西这不也能用吗能用但这又回到了老路上。过去的十几年里我们反复验证过一个规律凡是需要让第三方开发者参与、需要跨主体协作的基础设施最后都要走向开放协议。电子邮件有 SMTP 协议所以不同邮箱服务商之间可以互相通信博客有 RSS 协议所以内容可以脱离平台订阅网页有 HTTP 协议所以任何浏览器可以访问任何网站。如果 AI Agent 只能在自己的平台上发现商品那 Agent 就不再是用户的代理而是平台的导购员。用户不会满意AI 开发者不会满意中小商家更不会满意。更值得强调的是开放协议和私有 API 的边界在于“谁掌握控制权”私有 API 的控制权在平台手里平台随时可以调整参数、限制频次、改变授权策略。开放协议的控制权在社区和标准组织手里任何一方都不能单方面改变规则所有参与者必须遵守一致的数据格式和交互方式。Agent 作为用户的“中间人”天然需要中立的数据基础设施。这就是为什么这个领域需要一个类似SMTP for commerce或者RSS for product data的东西。它不要求电商平台放弃私有流量而是要求平台暴露一套 AI 可以理解的标准数据接口让 Agent 可以跨平台执行任务。从价值上看开放协议对各方都是增量参与者当前困境开放协议带来的价值用户被平台锁定无法跨平台比价和组合购买Agent 可以真正代表用户利益获取全局商品信息AI 开发者每个数据源都要单独适配开发成本极高一套协议接入所有商家Agent 可以规模化扩展中小商家流量被大平台掌握无法直达 AI 渠道只需实现协议就能被所有 AI 代理发现和推荐大平台AI 爬虫流量不可控数据被无授权抓取通过协议规范授权边界让 AI 流量可管理可审计所以开放协议不是理想主义它是在 AI Agent 产业化和电商基础设施之间必然出现的一层“转化器”。3. 协议设计的分层思路从目录发现到交易履约要把这个协议做出来第一步是把问题拆开。AI 中介产品发现不是一个单一动作而是一整条链路。我们需要像设计网络协议那样把它拆成分层模型。这里的核心思路是每一层只解决一个边界清晰的问题层与层之间通过标准化的数据对象传递信息。3.1 六层协议模型我把 AI 中介产品发现协议划分为六层从底层到顶层分别是第一层目录发现层Catalog Discovery解决的问题是Agent 如何知道有哪些商家、有哪些商品目录、目录里的数据结构是什么。类比DNS 解析。Agent 访问一个统一的发现服务输入“户外装备”得到一批已接入协议的商品目录地址。这一层不需要返回具体商品只需要返回“哪里能找到商品”。第二层商品表示层Product Representation解决的问题是Agent 拿到商品目录之后如何用统一的语义理解商品信息。这是整个协议的地基也是最容易出错的一层。商品必须有标准 ID、名称、分类、属性、价格、库存、图片、品牌、商家、物流信息等字段而且这些字段的语义必须在全局一致。第三层意图表达能力层Intent Expression解决的问题是Agent 如何把用户的模糊需求翻译成机器可读的结构化查询。用户说“适合周末徒步的轻便帐篷”Agent 需要把它转换成category帐篷weight1.5kgusage徒步price1000这类结构化条件。这一层定义查询语言和查询对象。第四层报价与协商层Offer Negotiation解决的问题是Agent 拿到候选商品后如何请求实时报价、运费、预计送达时间以及是否能参与优惠活动。因为价格、库存、运费都是动态数据协议必须支持 Agent 批量发起报价请求并让商家端返回有时效性的报价对象。第五层交易委托层Transaction Delegation解决的问题是Agent 在获得用户确认后如何代表用户创建订单、选择支付方式、提交收货信息。这一层要严格区分权限边界Agent 到底有没有权限直接下单能使用哪些支付渠道收货地址的获取方式是什么每一步都要可审计。第六层履约与售后层Fulfillment After-sales解决的问题是下单之后的物流跟踪、订单状态变更、退换货申请等后续流程如何通过协议同步给 Agent。如果不设计这一层Agent 只能帮用户下单却无法帮用户跟踪订单和解决问题体验是断裂的。3.2 为什么这样分层分层的核心原因是控制复杂度。如果把这六件事做成一个臃肿的接口接入方必须一次性理解所有字段开发门槛会极高。分层之后每一层都可以独立演进。比如一个商家短期不想接交易委托层它完全可以只实现目录发现层和商品表示层让 Agent 先能发现它的商品。它不影响协议的其他部分。这种设计在网络协议中已经被反复验证过了清晰的分层边界是生态能够扩张的前提。4. 核心数据模型以 JSON-LD 为底座扩展 AI 可读语义4.1 为什么选择 JSON-LD 而不是普通 JSON协议中最重要的部分是商品数据模型。我的建议是不要重新发明轮子直接在 Schema.org 的基础上扩展 JSON-LD。原因有三个Schema.org 已经是被 Google、Bing、百度等搜索引擎广泛识别的结构化数据标准电商站点的商品数据大多已经按这个结构标记过改造门槛低。JSON-LD 支持context机制可以让不同命名空间的字段共存商家可以边保留自己的私有字段边暴露协议要求的公共字段。JSON-LD 用 IRI 作为 ID天然支持分布式对象引用跨平台引用商品时不会发生 ID 冲突。4.2 商品对象示例下面给出一个按协议思路构建的核心商品对象。它在 Schema.org 的 Product/Offer 基础上增加了面向 AI 中介发现场景的字段。{ context: [ https://schema.org, https://open.example.org/agent-commerce/v1 ], type: Product, id: https://store.example.com/products/8807, name: 极简露营帐篷 1-2人 轻便防风防水, sku: TENT-001, image: https://store.example.com/media/tent-001.jpg, brand: { type: Brand, name: 野行 }, category: [户外/露营/帐篷, 户外/徒步/露营装备], weight: { type: QuantitativeValue, unitCode: KGM, value: 1.4 }, offers: { type: Offer, id: https://store.example.com/offers/8807-a1, price: 399.00, priceCurrency: CNY, availability: https://schema.org/InStock, itemCondition: https://schema.org/NewCondition, validThrough: 2025-12-31T23:59:5908:00 }, agentServiceCapability: { paymentMethods: [支付宝, 微信支付, 银行卡], shippingRegions: [中国大陆], shippingMethods: [标准快递, 次日达], returnPolicy: 7天无理由退换货, allowAgentOrder: true, allowAgentPricing: true } }这个对象的关键点不是字段多而是几个专门的字段设计值得说清楚id字段必须全局唯一。它应该是一个可访问的 URL而不是内部数据库的自增 ID。这样 Agent 在引用商品时可以把这个 ID 直接当作 URL 去访问详情。category字段设计成数组允许同一个商品属于多个分类路径。这看起来简单但实际上很多系统在这里会犯错只允许一个分类导致 AI 在检索时漏掉交叉分类的商品。offers.validThrough是价格时效性字段。AI 拿到的商品数据很可能被缓存如果没有时效性标记Agent 就可能在促销结束后继续给用户推荐一个已经失效的价格。agentServiceCapability是新增的扩展块专门描述“商家是否允许被 AI Agent 代理交易”。如果一个商家没有设置这个字段默认只能做信息发现不能授权交易。这个字段是安全边界必须显式声明。4.3 为什么不能只用一个简单price字段很多团队在设计商品数据时喜欢用最简结构id、name、price、stock。这种极简结构在单体项目里没问题但用于跨平台 AI 发现时问题很大。比如“价格”这个看似简单的概念实际就包含挂牌价会员价促销价含税价 / 不含税价是否包含运费运费计算方式价格有效期如果协议只定义一个price字段不同的商家会把它解释成不同的价格Agent 最后比较出的结果就是错误的。所以协议不是定义“有哪些字段”而是定义“每个字段的语义边界”。5. 面向 Agent 的接口设计三大关键端点有了数据模型接下来要定义 Agent 与商家系统之间的交互接口。这里的原则不是设计一套庞大的 API 平台而是定义所有参与方都必须实现的最小端点集。我建议用三个核心端点覆盖从发现到报价的完整链路。5.1 端点一商品发现查询端点POST /v1/products/discoveryAgent 用这个端点把用户意图翻译成的结构化查询发给商家商家返回匹配的商品列表。请求示例{ context: https://open.example.org/agent-commerce/v1, queryId: q-20250615-001, intent: 购买, filters: { category: [户外/露营/帐篷], keywords: [轻便, 防风], priceRange: { min: 200, max: 800 }, weightLimit: { max: 2.0, unitCode: KGM }, shipping: { region: 广州, maxDays: 3 } }, preferences: { sortBy: 综合评分, allowAlternativeProduct: true, vendorRequirement: 官方旗舰店或授权经销商 } }响应示例{ queryId: q-20250615-001, totalResults: 2, results: [ { product: { id: https://store.example.com/products/8807, name: 极简露营帐篷 1-2人 轻便防风防水, brand: 野行 }, matchSummary: { score: 0.94, matchedFilters: [类别, 价格区间, 重量, 发货时效], unmatchedFilters: [库存颜色] }, topOffer: { id: https://store.example.com/offers/8807-a1, price: 399.00, priceCurrency: CNY, estimatedDeliveryDays: 2 } } ] }这里特别要说明matchSummary字段的作用。它告诉 AI 这个商品匹配了哪些条件、没匹配哪些条件。这样 Agent 就可以做出更智能的推荐解释“这款帐篷价格和重量都符合但库存只有军绿色没有你要的卡其色。”如果没有这个字段Agent 只能看到一坨商品字段无法理解匹配关系也就无法向用户做可解释的推荐。5.2 端点二报价请求端点POST /v1/offers/quoteAgent 在选定候选商品后用这个端点请求实时报价。这个端点必须返回有时效性的最终价格包含运费、税费和预计送达时间。请求示例{ context: https://open.example.org/agent-commerce/v1, offerRequestId: or-20250615-001, items: [ { productId: https://store.example.com/products/8807, offerId: https://store.example.com/offers/8807-a1, quantity: 1 }, { productId: https://store.example.com/products/3312, offerId: https://store.example.com/offers/3312-k9, quantity: 2 } ], shippingAddress: { region: 广东省, city: 广州市, postalCode: 510000 }, requestedDeadline: 2025-06-15T18:00:0008:00 }响应示例{ offerRequestId: or-20250615-001, offerId: of-20250615-001, itemsTotal: 649.00, shippingFee: 0.00, taxFee: 0.00, discount: 50.00, grandTotal: 599.00, paymentMethods: [支付宝, 微信支付, 银行卡], expiresAt: 2025-06-15T17:30:0008:00, fulfillment: { estimatedDelivery: 2025-06-17, carrier: 示例快递 }, policies: { cancelBeforeShipment: true, returnWindowDays: 7 } }报价端点最关键的设计是expiresAt字段。所有报价都必须有有效期这是为了让 Agent 不会拿着过期价格去和用户确认。如果报价过期Agent 必须重新发起报价请求而不是展示缓存的数据。5.3 端点三交易授权与委托端点POST /v1/orders/delegate这个端点负责处理 Agent 代用户下单的请求。它的请求体必须包含用户授权凭证、报价 ID、收货信息、支付渠道偏好以及不可篡改的操作日志字段。请求示例{ context: https://open.example.org/agent-commerce/v1, orderRequestId: ord-20250615-001, offerId: of-20250615-001, buyerDelegate: { agentId: agent-opendiscovery-0001, authorizationToken: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..., authorizationScope: [order.create, order.track], userConsentHash: 8f5b7a9c3e2d1f4a6b7c8d9e0f1a2b3c4d5e6f7a }, shipping: { receiverName: 张三, phoneMasked: 138****8000, address: { province: 广东省, city: 广州市, district: 天河区, detail: 科韵路 100 号 } }, payment: { method: 支付宝, payerAccountMasked: zh***example.com, preauthorized: true } }交易委托端点是协议中安全要求最高的一层。它至少要满足三个原则Agent 不能代表自己必须代表用户。所有请求必须带上用户授权 Token 和用户知情同意哈希。权限最小化。authorizationScope字段明确声明 Agent 只能做哪些操作。默认只允许order.create和order.track不允许访问用户的完整手机号、历史订单列表等隐私数据。敏感信息脱敏。收货人手机号、支付账户都使用掩码商家只能看到完成履约所需的最小信息。6. 用 Python 模拟一次完整的 AI 产品发现流程上面定义的是协议规范现在我们用一个 Python 脚本来模拟 Agent 怎么使用这套端点完成一次“发现商品 → 获取报价 → 生成订单”的流程。注意这不是某个官方 SDK 的实现而是一个思路演示帮助你理解协议在代码里怎么起作用。# 文件路径agent_demo/discovery_agent.py import hashlib import json import uuid import requests DISCOVERY_ENDPOINT https://open.example.com/v1/products/discovery QUOTE_ENDPOINT https://open.example.com/v1/offers/quote ORDER_ENDPOINT https://open.example.com/v1/orders/delegate def build_user_query() - dict: 把用户的自然语言需求翻译成结构化查询。 return { context: https://open.example.org/agent-commerce/v1, queryId: fq-{uuid.uuid4().hex[:12]}, intent: 购买, filters: { category: [户外/露营/帐篷], keywords: [轻便, 防风, 双人], priceRange: {min: 200, max: 800}, weightLimit: {max: 2.0, unitCode: KGM}, shipping: {region: 广州, maxDays: 3}, }, preferences: { sortBy: 综合评分, allowAlternativeProduct: True, }, } def request_discovery(query: dict) - dict: 调用商家商品发现端点。 resp requests.post(DISCOVERY_ENDPOINT, jsonquery, timeout10) resp.raise_for_status() return resp.json() def request_quote(product_result: dict) - dict: 针对候选商品发起报价请求。 top_product_id product_result[results][0][product][id] top_offer_id product_result[results][0][topOffer][id] quote_request { context: https://open.example.org/agent-commerce/v1, offerRequestId: for-{uuid.uuid4().hex[:12]}, items: [ { productId: top_product_id, offerId: top_offer_id, quantity: 1, } ], shippingAddress: { region: 广东省, city: 广州市, postalCode: 510000, }, requestedDeadline: 2025-06-15T18:00:0008:00, } resp requests.post(QUOTE_ENDPOINT, jsonquote_request, timeout10) resp.raise_for_status() return resp.json() def build_consent_hash(user_id: str, order_total: float) - str: 生成用户同意购买哈希用于审计。 raw f{user_id}:{order_total}:order.create return hashlib.sha256(raw.encode(utf-8)).hexdigest() def delegate_order(offer_quote: dict, user_id: str) - dict: 在用户确认后委托商家创建订单。 order_request { context: https://open.example.org/agent-commerce/v1, orderRequestId: ford-{uuid.uuid4().hex[:12]}, offerId: offer_quote[offerId], buyerDelegate: { agentId: agent-opendiscovery-0001, authorizationToken: Bearer agent_access_token, authorizationScope: [order.create, order.track], userConsentHash: build_consent_hash(user_id, offer_quote[grandTotal]), }, shipping: { receiverName: 张三, phoneMasked: 138****8000, address: { province: 广东省, city: 广州市, district: 天河区, detail: 科韵路 100 号, }, }, payment: { method: 支付宝, payerAccountMasked: zh***example.com, preauthorized: True, }, } resp requests.post(ORDER_ENDPOINT, jsonorder_request, timeout10) resp.raise_for_status() return resp.json() def main(user_id: str) - None: # 1. 用户提问 - 结构化查询 query build_user_query() print( 结构化查询 ) print(json.dumps(query, ensure_asciiFalse, indent2)) # 2. 发现商品 discovery_result request_discovery(query) print(\n 商品发现结果 ) print(json.dumps(discovery_result, ensure_asciiFalse, indent2)) if discovery_result[totalResults] 0: print(未找到匹配商品结束流程。) return # 3. 发起报价 quote_result request_quote(discovery_result) print(\n 实时报价 ) print(json.dumps(quote_result, ensure_asciiFalse, indent2)) # 4. 展示给用户确认模拟 print(f\n报价总金额: {quote_result[grandTotal]} 元) print(预计送达: , quote_result[fulfillment][estimatedDelivery]) user_input input(用户是否确认下单(y/n): ) if user_input.lower() ! y: print(用户取消流程结束。) return # 5. 委托下单 order_result delegate_order(quote_result, user_id) print(\n 订单创建结果 ) print(json.dumps(order_result, ensure_asciiFalse, indent2)) if __name__ __main__: main(user_iduser-20250615-001)6.1 如何运行这个脚本运行前提Python 3.9安装requests库pip install requests把三个端点的 URL 替换成你自己的模拟服务地址运行命令python discovery_agent.py6.2 预期效果与验证方法如果商家端已经实现协议端点脚本运行后应该依次输出四段内容结构化查询 JSON说明 Agent 对用户意图的转译结果。商品发现结果 JSON包含商品匹配信息。实时报价 JSON包含总金额、运费、有效期、预计送达时间。订单创建结果 JSON包含订单号、订单状态、支付状态。判断成功的标准四个步骤的状态码都是 200。discovery_result.totalResults大于 0。quote_result.grandTotal计算正确且expiresAt大于当前时间。order_result中包含orderId和明确的status。如果运行失败优先排查检查端点地址可否访问先单独请求每个端点确认不是网络问题。检查 JSON 字段名是否匹配比如priceCurrency写成了currency服务端解析不到就会返回 400。检查授权 Token交易委托端点是高权限接口未带合法 Token 会被拒。检查报价是否过期request_deadline过去之后商家系统可能拒绝创建订单。7. 现实中必然会遇到的五个工程难题协议草案可以画得很漂亮但真正落地时有几个问题绕不过去。提前知道这些坑可以帮你少走弯路。7.1 数据质量参差不齐即使协议定义了统一的字段参与方的数据质量依然千差万别。有的商家 SKU 数据维护得很好有的商家“库存”字段永远是虚的。这是协议落地面临的最大挑战。解决思路是增加“数据可信度”原数据给每条商品数据打分记录数据更新时间、采集源、完整性比例。Agent 可以选择只信任数据可信度高于某个阈值的商家而不是盲信所有协议参与者。7.2 动态定价与缓存一致性电商的价格是实时变化的Agent 在本地缓存商品数据后很可能给用户展示一个过期价格。解决方案所有商品价格和时间强相关。协议要求报价响应必须包含expiresAt但更重要的是 Agent 端要遵守缓存策略超过有效期的缓存数据必须丢弃重新拉取。这有点类似 HTTP 的Cache-Control机制。7.3 平台愿意开放到什么程度这是最现实的问题。大型电商平台不一定愿意开放自己的全部商品目录因为这会削弱其内部搜索的流量价值。但从趋势看AI 时代用户获取信息的入口正在从搜索框迁移到对话界面。如果平台不开放用户就会用更聪明的方式绕过它。协议的定位不是逼迫平台开放而是提供一套“愿意开放时随时可以接入”的标准更像一个安全缓冲。7.4 Agent 的安全与授权边界Agent 一旦拥有下单权限就意味着它能动用户的真金白银。安全问题必须从协议层设计而不是靠商家自行处理。我的建议是AI 中介产品发现协议必须做到任何交易动作必须显式携带用户授权 Token。Token 的 scope 必须最小化默认禁止任何修改、删除操作。所有敏感信息手机号、地址、支付账号传输时必须脱敏或采用端到端加密。每次操作都要写审计日志日志至少包含操作时间、操作 Agent ID、授权 Token 的哈希、目标资源 ID。7.5 标准化与差异化之间的张力协议不能管得太死否则商家无法表达自己的特色服务也不能管得太松否则没有互操作性。一个比较成熟的做法是“核心必选 扩展可选”协议只强制要求少量核心字段商品 ID、名称、价格、库存、时效其他能力通过扩展字段让商家自主声明。AI Agent 读到扩展字段时可以理解但不强制使用。这样既保证了基础互操作又留出了差异化空间。8. 如果要在工程里落地我建议这样做讲完协议设计我们来聊聊工程师怎么动手。如果你在一个电商公司或者你在做 AI Agent 基础设施以下步骤可以作为实施路径。8.1 第一步从商品数据模型改造开始不要一上来就设计完整协议先把自己的商品数据模型对齐到 Schema.org 标准。具体动作# 检查现有商品表是否覆盖协议核心字段 # 业务侧至少需要确保以下字段有稳定来源 # product_id, name, brand, category, price, currency, stock, shipping_region如果你的商品数据还分散在多个业务系统里先用数据中台或 API 网关统一出口再谈协议。数据模型没统一前协议是不可能的。8.2 第二步实现一个最小可行的 Agent 端点在数据接口后面加一个薄薄的服务层暴露/v1/products/discovery端点。第一版不需要支持完整协议只需要支持“按关键词搜索商品 返回标准化 JSON 商品对象”这一项能力。这样做的价值是让 AI 团队的同事可以先接起来调试用真实数据验证协议的字段设计是否合理而不是等所有功能做完再对接。8.3 第三步先让内部 AI Agent 接入再考虑对外开放协议最好的测试对象是你自己的 AI 产品。在内部跑通“AI Agent → 发现商品 → 报价 → 生成订单”全流程后再慢慢对外开放。这样可以避免在协议不稳定时引入外部不可控的参与者。8.4 第四步沉淀日志和审计数据从第一天就记录协议调用日志。每一个queryId、offerRequestId都应该能关联到完整的调用链。将来如果出现问题你可以在几分钟内定位到是 Agent 的问题、商家数据的问题还是协议本身的问题。8.5 第五步参与标准讨论而不是闭门造车任何协议的价值都在于被多少人使用而不在于设计得有多完美。建议关注 Schema.org 的 Product/Offer 类型更新。关注 W3C 的 Web 支付、VC 等标准进展。把自己的协议草案发布到 GitHub用 OpenAPI 或 AsyncAPI 描述接口。邀请生态内的商家、AI 团队、物流服务商一起讨论字段定义。协议本质上是一个社会协作产物不是技术文档。一个好的协议工程师一半时间在写代码另一半时间在开会说服别人达成共识。9. 一些常见问题与排查方向问题现象可能原因排查方式解决方案Agent 调用商品发现接口超时商家端服务性能不足或协议服务层没有做缓存检查商家端接口 P99 响应时间查看是否有慢 SQL 或全表扫描在协议服务层增加 Redis 缓存对标准商品查询设置 5 分钟缓存有效期商品价格总是比页面价格高协议返回的是挂牌价而不是促销价检查offers节点是否有多个价格层级确认validThrough字段是否正确在协议中增加priceType枚举要求商家明确返回LIST_PRICE或SALE_PRICEAgent 下单失败提示“报价过期”Agent 端缓存了报价结果但expiresAt已过查看 Agent 日志中的报价时间和过期时间Agent 端增加报价过期检查逻辑过期后强制重新调用/v1/offers/quote商品分类无法统一不同商家对同一商品分类命名不同查看分类字段是否使用了标准分类树统一使用中台标准分类系统并在category字段中保留商家原始分类作为兜底授权过宽Agent 访问了不该访问的数据Token scope 没有明确限制查看授权 Token 的 claims 和商家端权限配置严格实施最小权限原则默认只授予order.create和order.track商家已发货但 Agent 无法通知用户履约与售后层未实现订单状态回调检查是否有 webhook / 事件订阅机制增加/v1/orders/status轮询或 webhook 事件订阅端点10. 总结与下一步方向这篇文章从架构视角讨论了“用于 AI 中介产品发现的开放协议”这个前沿问题核心观点可以总结为三条第一AI 产品发现的下一个瓶颈不是模型能力而是数据和交互协议的互操作性。没有开放的协议Agent 永远只能困在自己的平台生态里无法成为真正的用户代理。第二协议应该分层设计至少覆盖目录发现、商品表示、意图表达、报价协商、交易委托、履约售后六个层面。每一层都有自己需要解决的技术问题不能混为一谈。第三工程落地不需要等完整标准出现。现在就可以从改商品数据模型开始把自己变成 AI 可读的节点然后实现一个最小的发现端点让内部 Agent 先跑起来再逐步对外开放。如果你在做一个电商平台的后端我建议你下次迭代需求时问自己一个问题我们的商品数据能让外部 AI Agent 无歧义地读明白吗如果不能这就是一个可以提前布局的技术方向。更往后看这个领域还会出现几个值得跟进的话题Agent 之间如何互相发现和信誉评分、跨平台订单如何统一追踪、以及支付安全的去中心化信任方案。这些都是开放协议边界上最有研究价值的问题。希望这篇文章能帮你先想清楚最小可行的那一部分。