如何设计工具注册中心,并划分接口、能力和实现层?

考查重点:工具契约与分层职责。注册表关联能力描述、参数契约和执行入口;接口层统一调用,能力层表达业务语义,实现层适配具体服务

本题目录

参考答案

核心回答

工具注册中心负责把模型能理解的能力描述、稳定调用契约和真正执行的代码或服务关联起来,提供注册、查询、发现和执行路由。工具少时可以是进程内的注册表,规模和治理需要增加后再做服务化。

可以按以下三项职责划分:

  • 接口层:对上提供统一的工具定义、查询和调用入口,明确名称、参数、结果及错误契约。
  • 能力层:描述业务上能做什么、何时使用、限制和副作用,并关联可用实现,支持按任务发现工具。
  • 实现层:真正执行函数、HTTP API或MCP调用,处理底层协议、字段映射和服务依赖。

例如“查询订单”是一项业务能力,模型看到 get_order 的说明和参数规则,底层可以对接不同订单系统。更换实现时,上层尽量保持稳定,但参数含义、结果语义和权限也必须兼容,不能只保证字段名一样。

展开说明

1. 注册记录要同时回答“怎么理解”和“怎么执行”

一条工具记录可以包含三组信息:

  • 调用契约:稳定标识、名称、版本、描述、输入Schema、结果结构和错误类型。
  • 业务能力:业务域、适用场景、前置条件、查询或修改等副作用、所需权限。
  • 执行绑定:实现标识、函数句柄或服务地址、协议适配器、超时和可用状态。

模型只需要当前任务相关的工具描述和参数规则;函数句柄、凭证、内部路由等由执行系统使用,不应全塞进模型上下文。凭证可保存为受控引用,由运行时获取。注册入口也要校验定义和来源,避免错误或不可信工具进入目录。

这三组信息可以保存在同一注册对象中,不要求拆成三套数据库。框架已有Tool对象和调用入口时,可以复用它们,再补能力标签、版本、权限及后端绑定。

2. 三层用一项能力贯穿,避免抽象只剩名字

以查询订单为设计示例:

接口层对外暴露 get_order,参数是业务订单编号,返回订单标识、状态和查询结果说明。它还规定资源不存在、无权访问、服务超时等情况怎样表示。

能力层说明该工具用于查询订单信息,不负责创建或修改订单;用户只给商品名时可能还需要先定位订单。它将这项能力关联到对应实现,并根据环境、调用者范围和可用性确定哪些实现可以使用。

实现层负责把内部参数映射成具体订单系统的HTTP请求,附带受控身份,解释底层状态码,再转换为统一结果。若接入另一个系统,需要对齐订单状态、标识和字段含义;不是包一层相同JSON,就已经语义兼容。

一种能力也可能需要多个工具,例如先搜索订单,再查询单个订单。反过来,同一工具契约可以对应不同部署实现。注册关系要清楚,不能把业务能力、公开工具名和服务实例地址混成同一个标识。

3. Agent怎样通过注册中心完成一次调用?

先根据任务发现相关能力,按当前权限和可用性过滤,再把选定工具的完整契约适配给模型。模型返回工具名和参数后,执行器按本次可用目录解析到确切版本和实现,校验参数、资源归属及操作条件,再发起真实调用。结果关联原调用返回,供Agent继续执行或回答。

工具较多时可以先检索候选,再展示完整Schema;这减少模型选择负担,但执行注册和对模型展示是不同动作。没有给模型展示某个工具,也不能让模型猜出的名字绕过执行端校验。

接入MCP时,Client可通过 tools/list 获取Server工具定义,宿主把它适配到内部目录,再通过 tools/call 调回对应Server。MCP没有规定必须存在一个全局注册中心。聚合多个Server时要使用应用管理的来源标识消除同名冲突,不能假定各Server自报名称天然唯一。

当前LangChain工具接口也区分模型参数和运行上下文,例如 ToolRuntime 由程序注入,不作为模型可填写的Schema参数。用户身份等可信信息适合走这类运行通道,但最终仍需要具体业务授权检查。

4. 实现替换和动态更新要守住契约

工具上线时检查Schema、实现绑定与结果是否一致,测试参数错误、无数据、拒绝和超时等路径。版本变化要说明兼容范围;进行中的调用应能定位到当时采用的契约和实现,不能执行到一半忽然改参数含义。配置快照可以稳定契约,但撤权、停用等当前限制仍要在执行时生效。

重试和降级同样取决于业务语义。查询超时可以按策略重试或切换等价实现;创建订单超时且结果未知时,应先凭业务标识查原操作,不能立刻换一个实现再创建一次。注册中心可以保存策略和绑定,外部副作用的一致性仍需业务接口和执行器配合。

注册中心的价值可以通过具体任务检查:是否找到正确工具、参数是否有效、结果含义是否一致、实现更新是否破坏已有调用。工具数量和可动态注册,本身不能说明任务完成得好。

常见追问

能力层和接口层都写了说明,会不会重复?

要避免重复维护同一事实。能力层关注业务用途、限制及可发现性,接口层关注可调用契约。工具给模型看的描述可以由能力元数据与契约生成,但应有明确的权威来源和版本,不能两处手写后逐渐不一致。简单系统可以把这些信息放在同一个定义里。

和Nacos、MCP有什么区别?

服务注册发现关注服务实例地址、健康与路由;工具注册还需要让Agent理解业务用途和参数结果。MCP提供工具发现和调用协议,可作为工具接入方式。可以复用已有服务治理设施,也可以先使用本地注册表,职责相互补充。

只把函数放进一个Map算注册中心吗?

可以是最小实现:工具名映射函数,同时保存可提供给模型的定义。需要进一步说明参数校验、执行上下文和结果关联放在哪里。当工具增多或跨服务时,再逐步补发现、版本、权限和适配,没必要一开始就独立部署注册平台。

对应教程

  • Tools工具调用:结合工具名称、描述、参数Schema和程序执行的分工,理解注册对象应连接哪些信息。工具注册中心及业务能力层是在这些基础上的进一步组织。

参考资料

  • 国内:JavaGuide:Function Calling完整链路:依据工具定义注册、宿主校验执行与结果回填的调用链,说明正文中公开工具契约和业务实现的分工。
  • 国内:ranxi2001:动态发现与跨协议工具注册:借鉴能力目录、执行绑定和协议适配的组织方式,说明正文中注册项包含什么,以及版本与动态更新如何约束调用。
  • 国内:WeThinkIn:工具契约设计:采用工具用途、参数、结果及错误语义的契约设计,解释正文中函数名为何不足以表达业务能力、Schema 为何不能代替授权。
  • 国外:MCP:Tools,2026-07-28:依据工具发现调用、输入输出 Schema 和聚合命名约定,说明正文中远程工具接入内部目录及名称消歧的处理。
  • 国外:LangChain:Tools:借鉴可调用函数、工具元信息与运行上下文的封装,说明正文中模型参数、宿主注入依赖和执行实现的分工。

相关面经

3 篇

科大讯飞

Java 开发工程师
秋招一面、二面
查看原面经 →
项目追问
工具注册是怎么做的

深信服

Agent 开发工程师
实习秋招一面、二面
查看原面经 →
动态工具注册中心是怎么做的?

九号公司

Agent 开发工程师
实习秋招一面
查看原面经 →
项目追问
工具注册中心是怎么完成的?三层抽象是怎么做的(接口,能力和实现层)?

收录题集

4 个来源,共7 份题集

公司案例问答汇编

阿东玩 AI · AgentGuide · 1 条原题

查看题集 →

Agent开发面试题

摸鱼酱mio · 个人整理 · 3 条原题

查看题集 →

架构选型:ReAct、Plan-and-Execute 与 ToT 怎么选

Onefly · zero2Agent · 1 条原题

查看题集 →

编码Agent与AgentOS工程

Rocky Ding · AIGC-Interview-Book · 1 条原题

查看题集 →

MCP与A2A协议

Rocky Ding · AIGC-Interview-Book · 1 条原题

查看题集 →
展开剩余 2 份题集

企业级Agent平台与产品落地

Rocky Ding · AIGC-Interview-Book · 1 条原题

查看题集 →

自进化Agent与多平台运行时

Rocky Ding · AIGC-Interview-Book · 2 条原题

查看题集 →

相关题目

4 题