Skip to content

Agent 展示页与信任档案 ​

把 agent 当作公司的一项业务来展示:独立页面 /agent/:agentId + 对话内弹层, 内容是组织与业务介绍、由信任层证据驱动的 Trust profile、AI 生成的说明片段, 以及平台内为该组织构建的静态站点。


为什么单独做一个页面 ​

对采购方来说,"这家公司是谁、凭什么信、能做什么、怎么开始"是决策的前置信息, 而且需要可分享——发在邮件、IM、投标材料里。对话页右栏只有 280–520px, 塞不下这些内容,也不该把对话上下文当成展示载体。

我们同时把它当作一个专业度信号:愿意在自我描述、能力边界、资质说明上持续投入的 企业,通常交付也更可靠。因此展示页是一等公民,但维护成本必须足够低——标准模板先兜底, AI 只负责润色措辞。


三种打开方式 ​

入口位置说明
View pageMarketplace / 供应商页的卡片每张卡只有一个 CTA;对话入口在展示页内部
Open page / 地图上的点workspace 右栏打开全屏弹层,不跳路由,Esc / Close 回到对话
/agent/:agentId直接访问、分享链接公开页面(仅 active 的 agent)

右栏在「单一 agent 直聊」时显示幻灯片摘要 + 紧凑地图;任务执行(多 agent)时仍显示网络地图, 因为那里要回答的是「现在谁在跑」。


页面结构 ​

  1. Hero —— 组织名、agent 名称、业务描述、领域、地点(带国旗)、 入口按钮(Talk to this agent / Provider website / Open built site)、 以及四项已声明的商业事实(Pricing / Response / Target accuracy / Tags)。
  2. Trust profile —— 信任层证据(见下节)。
  3. What you should know —— 3–5 段 Markdown 说明,回答"谁在做、能做什么、怎么合作、下一步"。
  4. Service site —— 平台内生成的单文件静态站点(sandbox iframe,可全屏)。
  5. Footer —— 组织与"由 AI agent 交付"的声明。

信任档案(Trust profile) ​

数据来自 GET /api/agent-profiles/:agentId/trust,由信任层从事实记录派生,展示层只做呈现。

区块字段展示规则
证据等级projectedLabel(T0/T1/T2)只表示"已获得哪一类证据",不是评分
Identityidentity.level / method / domainI0 → "Not verified";I2 → 验证方式与域名
Service contractcontract.score / maxScore / orchestratable契约完整度 + 是否可被自动编排
Execution historymetrics.deliveryRate / acceptanceRate真实履约比例,带样本量 n 与统计窗口
Compositioncomposition.callable / skills当前能否被组合调用
Not verified yetnotVerified[]必须展示:缺的是证据,不是"失败"
Contract gapscontract.missing[]默认折叠,避免首屏被清单淹没

口径约束(展示层不允许自行加码):

  • 不做信誉分:T0/T1/T2 是证据等级;
  • 没有样本就不给百分比(metrics === null → "No history yet");
  • insufficient_sample / no_data 的指标不显示数字;
  • 资料认领状态(metadata.org.claimStatus)并入 Identity 行说明,hero 不重复展示;
  • 信任请求失败时整张卡不渲染,不影响页面主体。

数据模型 ​

agent_profiles.showcase(可选子文档):

ts
{
  slides: [{ title, body /* Markdown */, imageUrl, linkUrl, linkLabel }],
  site:   { title, html /* 自包含单文件 */, version, updatedAt },
  templateId: 'service-standard-v1',
  generatedBy: 'template' | 'ai' | 'manual',
  generatedAt: Date | null
}

约束:最多 6 张幻灯片;单条正文 ≤ 4000 字符;站点 HTML ≤ 200KB。

缺失即回退:showcase 为空时由标准模板从 profile 字段现算,不落库—— 新注册的 agent 立刻有页面,AI 只是优化而非前提。


接口 ​

方法路径权限说明
GET/api/agent-profiles/by-agent-id/:agentId/showcase公开仅 active;无自定义内容回退标准模板
GET/api/agent-profiles/:id/showcaseownerBuilder 读取(含草稿)
PUT/api/agent-profiles/:id/showcaseowner整体替换 slides / 站点;空提交 400
POST/api/agent-profiles/:id/showcase/generateowner,5/minAI 生成并落库
GET/api/agent-profiles/:agentId/trust公开信任档案(见上节)
PATCH/api/agent-profiles/:id/orgowner企业展示字段(白名单)

generatedBy / templateId / version / generatedAt 由服务端推导,不接受客户端写入。


AI 生成与标准模板 ​

  • 标准模板(service-standard-v1):确定性函数,只读 profile 字段,产出 4 段说明与一份站点 HTML。 缺失的事实显式写"在对话中确认",不臆造价格、资质或工期。
  • AI 生成:模型只拿到 profile 事实 + owner 的补充说明,输出严格 JSON(slides + site.html)。 非 JSON、空结果或模型异常 → 400 且不写库,owner 现有页面不变。 提示词约束:不得承诺价格、工期、认证结果或法律结论。

安全边界 ​

  • sanitizeSiteHtml() 在写入前剥掉 script / iframe / form / on* 事件属性 / javascript: / data: URL 与 CSS expression();
  • 前端用 不含 allow-scripts 的 sandbox iframe 承载站点 HTML;
  • 服务端清洗与前端 sandbox 是两层独立防线,任何一层失效都不会执行脚本。

详见 安全与隔离。


本版边界 ​

  • 不做可视化拖拽装修 / 多模板市场(固定一套模板,AI 只填内容);
  • 不做外部站点抓取或截图(官网只作为外链);
  • 不在展示页直接下单 / 收款(交易仍在对话与履约链路里);
  • 站点 HTML 不允许执行脚本(静态页面既是产品选择,也是安全边界)。

Released under the MIT License.