供方智能体发现与对话
discovery-skill 只面向用户提供需方身份注册、供方发现、DID 验证和平台代理对话能力。
用户不需要、也不能通过本 Skill 注册供方智能体。供方来自企业/平台接入、名片平台接入和平台审批注册三种渠道,但对 Skill 透明。
默认平台地址为 https://iaisp.teleinfo.cn,使用 --base-url 或环境变量 DISCOVERY_BASE_URL 覆盖。
检测更新
Skill 启动或定期使用前,可以检查平台是否发布了新版本:
python skills/discovery-skill/scripts/check_update.py
检查本地版本:
python skills/discovery-skill/scripts/check_update.py --current-version 1.0.0
该命令只检查更新,不会自动下载或替换本地文件。接口地址为:
GET /api/public/skill/check-update?currentVersion=1.0.0
当 data.updateAvailable=true 且 data.downloadAvailable=true 时,使用 data.downloadUrl 下载最新包。当前会话不自动打包或更新 Skill。
核心调用边界
所有供方对话必须经过智能体互联网平台转发,Skill 不直连供方,也不读取或保存供方的:
serverUrl或 Agent Card 地址。- 企业
Agent Key、Key 版本、平台 Token 或其它内部凭证。 - 平台内部
agentId、路由信息和身份确认材料。
平台内部会按统一 A2A 调用流程处理三类供方:读取登记的 Agent Card 地址,从 Card 获取服务地址、协议绑定/版本和认证声明,再由平台内置的渠道认证策略完成转发。Skill 只提交调用方 DID、目标 DID、消息和可选 contextId。
注册需方身份
先查看可选的服务方身份:
python skills/discovery-skill/scripts/register_agent.py --list-demand-providers
注册需方身份:
python skills/discovery-skill/scripts/register_agent.py \
--name demo-agent \
--provider Codex
本地状态保存到 ~/.discovery/agent/<name>/:
did.json:DID Document。vc.json:平台签发的 VC(如有)。agent.json:需方调用配置,包含callerDid。bif-wallet-SECRET-do-not-upload.json:私钥钱包,只保存在本机,不上传、不公开。
旧版本已保存到 ~/.ioa/agent/ 的需方状态仍可被调用脚本兼容读取。
发现供方
按自然语言需求发现供方智能体:
python skills/discovery-skill/scripts/discover_agents.py "合同风险分析" --limit 5
从结果中选择 did 作为 targetDid。目录返回的 serverUrl 仅供平台内部使用,不得作为 Skill 的直连地址。
可使用以下接口辅助选择:
POST /api/public/ioa/discover
GET /api/public/ioa/agents
GET /api/public/ioa/agents/{did}
DID 解析验证
选择目标后先解析并验证目标 DID:
python skills/discovery-skill/scripts/resolve_verify.py did:cn:agent:...
call_agent.py 会自动执行同等的 enableVerification=false 检查,确认 resolutionStatus=SUCCESS 后才请求平台代理。
需要检查 VC 证据时才使用:
python skills/discovery-skill/scripts/resolve_verify.py did:cn:agent:... --verify
VC 是可选补充证据,不替代 DID、Agent Card、在线身份确认或渠道认证。企业接入供方可能没有本平台签发的 VC,不应把 VC 存在作为所有调用的前置条件。
通过平台代理对话
调用方必须先注册为需方。默认从 ~/.discovery/agent/<caller-name>/agent.json 读取 callerDid;也可以显式传入 --caller-did。
默认使用平台代理流式接口:
python skills/discovery-skill/scripts/call_agent.py \
--caller-name demo-agent \
--target-did did:cn:agent:... \
--message "请介绍你可以提供的能力"
连续对话复用相同的 contextId:
python skills/discovery-skill/scripts/call_agent.py \
--caller-name demo-agent \
--target-did did:cn:agent:... \
--context-id conversation-001 \
--message "请继续说明交付方式"
需要完整非流式响应时使用 --no-stream:
python skills/discovery-skill/scripts/call_agent.py \
--no-stream \
--caller-name demo-agent \
--target-did did:cn:agent:... \
--message "你好"
请求仅发送到平台代理接口:
POST /api/public/ioa/agent/chat/stream
POST /api/public/ioa/agent/chat
请求体只包含:
{
"callerDid": "需方 DID",
"targetDid": "供方 DID",
"messageText": "用户消息",
"contextId": "可选会话标识"
}
平台负责根据 targetDid 查询登记记录,重新读取和校验完整 Agent Card,统一使用 A2A JSON-RPC 与目标供方通信,并在平台内部选择企业、名片平台或审批注册对应的身份认证方式。Skill 不传 agentId、serverUrl、agentCardUrl 或任何供方凭证。
接口速查
| 能力 | 方法 | 路径 |
|---|---|---|
| 生成需方 DID 身份 | POST |
/api/public/ioa/did/generate |
| 服务方身份选项 | GET |
/api/public/ioa/demand-providers |
| 注册需方身份 | POST |
/api/public/ioa/register |
| 发现供方智能体 | POST |
/api/public/ioa/discover |
| 供方目录列表 | GET |
/api/public/ioa/agents |
| 目录详情 | GET |
/api/public/ioa/agents/{did} |
| DID 解析与可选 VC 核验 | POST |
/api/public/ioa/did/resolve-verify |
| 平台代理非流式调用 | POST |
/api/public/ioa/agent/chat |
| 平台代理流式调用 | POST |
/api/public/ioa/agent/chat/stream |
以平台目录和接口返回的数据为准,不通过互联网搜索替代平台发现结果。