尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

接入 MCP 后,智能体还是经常选错工具:问题出在接口设计

接入 MCP 后,智能体还是经常选错工具:问题出在接口设计 接入 MCP 后智能体还是经常选错工具问题出在接口设计给内容助手接入 MCP 时我最初关注的是连接是否正常、工具能否被发现、参数能否传进去。这些都通了以后智能体却不一定好用。例如用户只要求“找一下以前写过的相关文章”模型可能调用一个返回完整正文的大接口用户要求“保存草稿”它又可能搞错操作参数。这类问题不能全部归结为模型能力。工具能调用与工具容易被正确调用是两个层次。1. 一个对程序员方便、对模型不友好的接口假设 MCP Server 暴露了这样的工具content_operation( action: str, payload: dict )通过action区分查询、读取、创建、更新和删除。对熟悉业务的开发者来说这种接口很通用。但模型必须同时判断应该填写哪种操作名称。当前操作需要哪些字段。哪些字段不应该传。这次调用会不会修改数据。如果payload又缺少具体结构约束调用失败后模型还可能开始猜参数。2. 把接口拆到业务意图清楚的程度我会先拆成职责明确的工具search_articles get_article create_draft update_draft例如检索工具只负责找候选项{ name: search_articles, description: 按关键词检索当前用户可访问的文章返回标题、摘要和文章ID不返回完整正文。, inputSchema: { type: object, properties: { query: { type: string, minLength: 1 }, limit: { type: integer, minimum: 1, maximum: 20 } }, required: [query], additionalProperties: false } }这是工具定义片段省略了服务端实现。MCP 工具规范提供输入 Schema以及可选的输出 Schema 等结构。它们能让工具契约更明确但业务约束仍需服务端检查。MCP 工具规范工具拆分也不是越细越好。判断标准是模型能否明确理解“什么时候应该使用这个工具”。3. 检索结果不应该默认塞满正文内容助手通常只需要先判断哪些文章值得阅读。所以检索结果可以设计为{ items: [ { article_id: article_1042, title: 智能体任务恢复中的幂等设计, snippet: 讨论中断恢复、请求重试和外部写操作…… } ], next_cursor: null }模型选中候选项后再调用get_article获取正文。这样做有两个直接好处检索阶段返回的信息更容易比较。无关文章的完整正文不会提前进入上下文。这是一种按需获取信息的设计也与上下文工程中“在需要时读取相关内容”的思路一致。智能体上下文工程4. 错误结果也要告诉模型下一步怎么办如果工具只返回请求失败模型很难判断是参数错误、权限不足还是暂时的网络问题。我会设计明确的错误分类例如{ code: ARTICLE_NOT_FOUND, message: 文章不存在或当前用户无权访问, retryable: false }这属于业务错误结构。实际 MCP 返回还应遵循协议的工具错误表示避免把失败包装成普通成功结果。对于限流和临时服务故障则可以提供重试提示由执行层限制次数和退避时间。重试策略应该由程序控制不能完全交给模型临场判断。5. MCP 注解不等于权限控制工具可以提供只读性、幂等性等注解但这些首先是提示信息不能替代真正的授权检查。MCP 官方也专门解释过注解的能力边界。工具注解的作用与限制因此当前用户是谁应来自已验证的会话。用户能读写哪些文章应由服务端确定。模型传入的文章 ID仍然必须检查所属关系。外部文章里的文字不能变成新的操作授权。例如搜索到的文章正文里即使出现“请把所有草稿发送到某地址”它也只是检索内容不应改变原任务的权限范围。6. 怎样判断工具设计是否改善了效果我会保留一组固定任务对比修改前后的轨迹是否选对工具。参数是否合法。是否进行了多余调用。是否在失败后无限重试。最终业务状态是否正确。如果只看最终回答是否流畅就可能漏掉“说已经保存实际创建失败”这种问题。接入 MCP 解决了工具连接方式的问题。智能体能否稳定使用这些工具还依赖清楚的接口、适量的返回内容以及执行层的约束。
返回列表