Skip to content

[阶段 3] 支持多服务、多账号及 Skill 资源按需发现 #3663

Description

@louis4li

用户可见结果

父 issue:#3660。依赖 #3662,沿用 #3661 / #3662 已交付的调用主链。

用户能够在多个已连接服务和账号间完成任务,例如“查看工作账号日程,并读取相关文件”。系统只加载需要的 skill、资源与操作说明,不把全部服务文档或 endpoints 暴露给模型。

实施范围

  1. 为服务发现提供有界的实例摘要和有效 skill refs;仅在契约支持时分页,不伪称上游支持分页。账户标签帮助选择,服务实例 ID 仍来自权威发现,不解析 slug 或名称猜测身份。
  2. 对多账号歧义进行澄清;共享一个 skill 的不同账号仍各自绑定执行目标和权限。
  3. 支持按指定资源读取 skill 关联文件,资源身份固定到已解析的 skill 版本,校验访问边界并限制内容量。
  4. 复用现有 operation catalog,提供名称/分类/关键词等简单、有界发现,选中后读取完整契约。skill 已提供充分信息时不强制额外搜索;不建设每轮语义筛选器或动态 tool 注册系统。
  5. 按 NyxID/Ornn 当前公开契约处理固定依赖、缺失和版本冲突;有限加载并检测循环。只有名称推荐或没有推荐时,明示可用能力与限制,不冒充精确加载。
  6. 为无 OpenAPI 的文档型服务落地受约束调用分支:只在现有代理和权限边界允许时执行,明确缺少 schema 校验,不作为 typed 校验失败后的绕过路径。不能通过修改外部产品协议实现本功能。

发现与缺口诊断的具体设计

默认主查询

读取当前身份的 NyxID /keys / service list,结合当前执行上下文已有授权边界输出可用实例到有效推荐的映射。服务名称、账号标签、状态与 refs 是目录;不批量加载正文。服务就绪但 refs 为空时保留实例。身份和已有授权过滤是确定性规则,不引入另一个语义筛选模型。

沿用父 issue 的 Agent Key 版本/凭据前提和“服务 ID 查询条件与授权事实分开”规则:可选 service_ids 用于缩小查询;同一受限普通 Agent Key 的有效服务过滤由 NyxID 负责,不新增第二套 allowlist。allow_all_services=true 仍必须限制输出。Channel sender bearer 与调用 key 不同的路径必须沿用阶段 1 确定的权威授权关系。

已有 NyxID skill 可指导 LLM 使用 CLI/API。依据宿主能力选择已有受约束执行入口,或扩展已有 inventory tool;不为了本阶段新增必须安装的 CLI、任意 shell 或第二套服务索引。上游不支持原生分页时可本地有界投影,并明确传输大小限制。

只有缺少任务所需的可用实例时才诊断

已获得的证据 处理
当前实例可用且有 refs LLM 选定精确引用并按需加载
当前实例可用但 refs 为空 用已有正式操作说明或报告推荐缺失,不提示新增权限
实例可见,但当前应用服务授权明确不包含它 提示按任务补充该服务的应用授权,不请求全部服务
凭据明确过期/撤销 指向该连接的重新授权流程,不要求重复创建连接
组织访问规则明确拒绝 解释缺少对应组织访问资格,不假装普通重连能修复
节点离线/连接不可用 报告连接就绪问题,不归因为 OAuth 权限
下游明确缺少 scope 或资源 ACL 按实际错误指导对应权限修复,不将所有 403 归为 OAuth scope
私有 skill 不可读 报告 skill 来源访问问题,不要求扩大下游服务权限
没有任何明确诊断证据 仅说明当前身份未发现可用连接;必要时再按目标查询公共 catalog,公共条目不是已连接证明

不可为了诊断扩大 token、借用 Bot 所有者或本机其他登录身份、枚举调用方不可见的账号。权限变化后重新查询,并沿用已明确的服务实例身份。

按需内容与通用调用

LLM 决定加载哪个 skill、读取哪个资源以及是否需要 operation 查询;运行时验证精确引用、路径边界和输出大小。相同精确引用可以复用内容,不能合并服务实例或凭据。skill 已足够时不强制 operation 搜索。文档型 HTTP 请求与已定义 operation 在统一调用契约中显式区分,共用既有授权和执行主链,不新增默认逐次审批。

最小查询与调用契约

以下是同一主链的逻辑能力,不要求每项新增一个 tool:

  • 服务查询:可选服务实例 ID 列表与有界返回,输出实例摘要、有效 refs 和已知就绪状态;未知状态明确标识。相同查询条件不保存成新的权限配置。
  • Skill 加载与资源读取:按精确引用加载主文档和资源目录;按该引用下的资源身份读取单个资源。拒绝跨包路径、任意 URL 和越界资源;上下文压缩后允许重读原精确版本。
  • Operation 查询:在已选择的服务实例内,以关键词/分类及有界返回获取摘要;选择后按 operation ID 获取完整输入契约。返回截断/后续读取信息,不把全部 OpenAPI 内联进上下文;固定工具参数中不枚举全部 operation ID。
  • 通用调用:服务实例绑定独立于 skill。已发布 operation 使用 operation ID + arguments;文档请求使用 method + relative path + request data,两种模式在强类型契约中互斥,复用已有 PublishedEndpoint / AuthoredRequest 语义。后者仅允许已准入服务/路径,不接受任意目标 URL,不成为前者校验失败的回退。

这些能力扩展阶段 1 的身份、引用和调用契约,复用阶段 2 的授权写入与结果机制,不另起工具注册或执行链。

验收

  • 两个服务、同一服务的两个账号可完成场景,歧义时澄清,账号与凭据不串用。
  • 两个账号共享同一精确 skill 引用,执行仍绑定不同服务实例。
  • 大量服务、skill 资源和 operations 均分页或限量,工具名称与 schema 保持固定。
  • 未请求的资源不进入模型上下文;资源与依赖遵守精确版本及大小限制。
  • 有效推荐覆盖、名称推荐、缺失推荐、依赖缺失/冲突/循环有明确结果与测试。
  • 一个文档型服务通过受约束路径跑通;若现有策略禁止,则明确拒绝,不能把拒绝当完成该能力。
  • 无匹配时才触发目标相关诊断/公共 catalog 查询,默认不枚举全部无权限服务。
  • 可用但无 skill、应用授权不足、凭据过期、节点离线、scope/ACL 拒绝及私有 skill 不可读能正确区分;证据不足时不猜测。
  • CLI 或 API 发现结果均服从当前执行主体与授权,不因过滤、分页或账号切换扩大访问。
  • 更新文档并通过相关 build/test、架构与测试稳定性门禁。

非目标

自动生成、审核或发布 skill 的平台,以及重新维护服务到 skill 的映射库。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions