ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

智能体面试准备(七十九):智能体工具注册中心与动态工具发现工程——Schema 治理、版本管理与按需装载

智能体面试准备(七十九):智能体工具注册中心与动态工具发现工程——Schema 治理、版本管理与按需装载 智能体面试准备七十九智能体工具注册中心与动态工具发现工程——Schema 治理、版本管理与按需装载引言本文是系列第 79 篇承接七十八评测数据集构建与标注工程。前面花了很大篇幅讲 Agent 怎么规划、执行、评测但有一个基础设施问题贯穿始终却常被忽略工具从哪来、怎么管、模型怎么知道该用哪个。早期 Agent 代码里工具是硬编码的几十个函数写死在 prompt 里。一旦工具数量涨到几百上千企业内部 API、MCP 服务、各团队自研能力这套做法立刻崩prompt 塞不下、模型选择困难、工具变更要改代码发版、不同租户能用的工具还不一样。解法是建工具注册中心Tool Registry把工具当服务来治理。面试官问你的 Agent 支持多少工具怎么扩展时能讲出注册中心、Schema 治理、按需装载三件套的候选人极少。本篇给出完整设计。工具注册中心总览 工具提供方各业务团队 / MCP Server │ 注册 ▼ ┌─────────────────────────────┐ │ 工具注册中心 Registry │ │ ┌─────────┬──────────────┐ │ │ │ 元数据 │ JSON Schema │ │ │ │ 版本/标签│ 权限/配额/限流│ │ │ └─────────┴──────────────┘ │ │ 健康检查 / 熔断 │ └──────────┬──────────────────┘ │ 发现检索 过滤 ▼ ┌─────────────────────────────┐ │ Agent 运行时 │ │ 1. 语义检索候选工具 │ │ 2. 按租户/权限过滤 │ │ 3. 只把候选集注入 prompt │ │ 4. 执行 计量 审计 │ └─────────────────────────────┘一、为什么不能把工具写死维度硬编码工具注册中心工具数量几十个上限prompt 长度千级按需装载变更改代码 发版注册即生效多租户难隔离天然按租户过滤治理无版本/无审计版本、配额、审计齐全模型选择工具多则选不准先检索再注入候选集小核心矛盾是LLM 的上下文有限但工具集在增长。注册中心 语义检索正是为这个矛盾而生——不应把所有工具塞给模型而是先检索出相关候选通常 5~20 个再注入。二、工具元数据与 Schema每个工具注册时至少要有这些字段字段作用示例name / version唯一标识与版本crm.query_orderv1.2.0description给 LLM 看的用途说明语义检索也靠它parameters (JSON Schema)参数结构校验类型/必填/枚举returns schema返回结构便于后续编排permissions谁能调用租户/角色/审批级别quota / rate_limit配额与限流100 次/分钟tags / domain分类辅助检索过滤crm / financehealth / SLA健康状态可用/降级/熔断description 的质量直接决定 Agent 选得对不对。它要写清楚什么时候用、什么时候不用、返回什么而不是简单重复函数名。这是工程里性价比最高的一项投入。frompydanticimportBaseModel,FieldclassToolSpec(BaseModel):name:strversion:str1.0.0description:strField(...,description面向 LLM 的用途说明)parameters:dict# JSON Schemapermissions:list[str][]rate_limit:int60# 每分钟tags:list[str][]endpoint:str# 实际调用地址或 MCP server# 注册示例specToolSpec(namecrm.query_order,description按订单号或客户 ID 查询订单详情状态、金额、创建时间。仅用于查询不要用于创建或修改订单。,parameters{type:object,properties:{order_id:{type:string,description:订单号形如 SO-2024-0001},customer_id:{type:string},},anyOf:[{required:[order_id]},{required:[customer_id]}],},permissions[tenant:acme,role:agent],tags[crm],endpointhttps://internal/crm/api/query_order,)三、动态工具发现检索 过滤工具多了之后要先把上千工具缩到候选集。典型两级发现流程 1. 语义检索用任务描述/当前子目标去向量库检索 - 召回 top-K如 50 2. 硬性过滤按租户权限、标签、健康状态、配额余量过滤 - 剩 M 个 3. 重排可选用小模型或规则按相关性重排 - 取 top-N如 8注入 prompt 4. 兜底若候选为空触发缺工具信号走人工/开发流程classToolRegistry:def__init__(self,index,specs):self.indexindex# 向量索引description 嵌入self.specsspecs# name - ToolSpecdefdiscover(self,query,tenant,k8):candsself.index.search(query,top_k50)out[]forname,scoreincands:sself.specs[name]iftenantnotins.permissions:# 权限过滤continueifnotself.healthy(s):# 健康过滤continueout.append((name,score))return[nforn,_insorted(out,keylambdax:-x[1])[:k]]四、执行侧的治理校验、限流、审计工具被选中后执行前必须过三关fromjsonschemaimportvalidatedefinvoke(spec:ToolSpec,args:dict,ctx):# 1. Schema 校验防 LLM 填错参数打到后端validate(instanceargs,schemaspec.parameters)# 2. 限流与配额防 Agent 循环调用打爆后端ifnotrate_limiter.allow(spec.name,ctx.tenant):raiseRateLimited(f{spec.name}触发限流)# 3. 审计记录谁、何时、用什么参数、结果如何audit.log(toolspec.name,argsargs,tenantctx.tenant,reqctx.req_id)returncall_endpoint(spec.endpoint,args)Schema 校验尤其关键——LLM 输出的参数经常类型错、缺必填在 Agent 侧拦下比打到业务后端再报错安全得多也避免脏数据。五、版本管理与灰度工具会演进。注册中心要支持能力说明多版本共存v1稳定、v2灰度按租户/流量切兼容性标记破坏性变更必须升主版本废弃与下线标记 deprecated给迁移期到期强制下线契约测试注册时跑一遍 schema 与样例防文档和实现不一致最常见的坑是工具改了参数但忘了改 Schema导致 Agent 一直调错。契约测试用样例请求打真实后端并校验返回结构能提前发现。六、与 MCP 的关系MCPModel Context Protocol解决的是工具怎么标准化暴露与调用的协议问题注册中心解决的是工具怎么被治理和被找到的治理问题。二者互补MCP Server 可以作为工具的来源之一被注册进中心注册中心在其上加权限、配额、检索和审计。不要把注册中心和 MCP 对立它们是不同层。面试速答问工具上百上千个怎么让 LLM 选得准答不能全塞进 prompt。用注册中心 语义检索先用任务描述检索 top-50再按租户权限/健康/配额过滤最后取 top-8 注入。把候选集做小是提升选择准确率的关键。问工具 Schema 有什么用答三重作用——给 LLM 描述参数结构、在执行前校验参数防脏调用打到后端、支撑后续编排与类型推导。Schema 校验是 Agent 侧最重要的安全网之一。问工具变更怎么不影响 Agent答工具注册即生效不需要改 Agent 代码发版支持多版本共存与灰度v1 稳定、v2 按租户切流破坏性变更升主版本废弃要给迁移期。问注册中心和 MCP 是什么关系答互补不同层。MCP 是工具暴露与调用的标准协议注册中心是治理层负责元数据、权限、配额、检索、审计。MCP Server 可作为注册中心的来源之一。高频追问清单工具 description 怎么写才能提升选择准确率有哪些反模式语义检索召不回正确工具漏召回怎么兜底工具之间存在依赖B 需要 A 的产出注册中心怎么表达上千工具的向量索引怎么维护增量更新工具执行超时/失败注册中心要不要自动熔断熔断粒度敏感工具转账、发邮件在注册中心怎么强制审批工具返回结构很大怎么裁剪后再给 LLM 而不丢关键信息多租户同名工具各自的实现怎么隔离与路由契约测试具体测什么怎么防止文档与实现漂移工具调用计量与成本归因怎么落到具体租户/会话
返回列表