ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

套壳MCP如何长成研究决策系统:从API代理到决策编排层

套壳MCP如何长成研究决策系统:从API代理到决策编排层 1. 套壳MCP为什么值得被认真对待你见过那种表面是套壳MCP拆开看却已经长成研究决策系统的项目吗我最近把一个不务正业的工具MCP从头到尾复盘了一遍——最初它只是封装外部检索接口的薄壳后来却沉淀出了问题建模、证据聚合、冲突消解和结论生成的能力。这不是设计出来的而是被真实使用逼出来的。这套系统的本质是把深度研究最后那道判断环节从前台模型手里部分收回到可控的工具逻辑里。它适合三类人正在做或想做一个MCP Server的开发者、被AI工具调用可靠性折磨的Agent应用工程师、以及对从薄到厚演进路径感兴趣的产品和技术负责人。哪怕你手里现在只有一个最简单的API封装这篇文章也能帮你判断下一步该往哪里使劲。1.1 先拆一下套壳背后的技术本质MCP的全称是Model Context Protocol业内喜欢叫它AI世界的USB-C接口。过去一个AI应用想让模型调用外部工具意味着每家模型厂商都得给每个API写一套私有的函数调用格式工具方也要跟着适配不同Agent框架。MCP做的事情就是把工具能力和模型接口之间的那层约定标准化你写一个MCP Server暴露若干工具任何支持MCP的客户端都能用同一套方式调用它们就像任何USB-C设备都能插到任何USB-C接口上。套壳MCP这个词指的一般就是那些把现有能力封装到MCP协议里的项目。最常见的形态有三种把某个REST API包成一个或几个工具把某个数据库查询包成只读检索工具把某个搜索服务包成search/search_detail组合。这类项目被一些人看轻因为它们看起来没有业务创新只是协议层胶水。但一个特别关键的细节是胶水工程恰恰是整个生态里最容易被验证价值的地方。你不需要想清楚全部业务逻辑就能先让模型调用真实可用的外部能力这在产品验证路径里是性价比极高的起手式。1.2 项目最初只是一层API封装我今天复盘的这个项目下称模拟项目X起点非常朴素。某团队内部经常要做行业信息研判研究员需要反复检索外部数据源、交叉核对信息、整理出简短的判断结论。最初的方案就是写一个MCP Server把两个外部检索源封装成两个工具一个负责查候选结果一个负责拿单条详情。客户端接的是通用MCP协议模型负责理解用户问的是什么、调用哪个工具、把结果拼成人话。放在当时这确实是一个标准的套壳MCP。工具函数里没有任何智能逻辑请求转发到外部接口响应结果原样返回。整个Server代码量很小业务规则一个都没有决策靠的是模型在调用端的自由发挥。上线很快也确实能用——检索类问题省去了研究员来回切网页的功夫。但问题也很快暴露模型拿回来的信息是散装的A来源说某个指标在涨B来源说在跌模型会惯性挑选一个听起来更像答案的说法然后理直气壮地写成结论完全不告诉你另一边的证据存在。研究员还得自己去排查模型为什么给出这个判断等于把判断义务从岗位复制到了AI。这段经历解释了后面发生的一切一个原本只是套壳的项目之所以会慢慢长出研究决策能力不是因为开发团队一开始就高瞻远瞩而是因为在真实使用里提供信息和支撑判断之间有一条巨大的鸿沟。填这条鸿沟的每一块砖都是被用户反馈一块一块砌进去的。2. 从薄到厚四个把套壳逼成决策系统的转折点很多人问一个套壳MCP是怎么一步步长成研究决策系统的答案是被需求推着走。下面四个转折点每个都对应着真实用户的一句话背后都藏着一个当时看起来很小的功能改动。2.1 转折一用户开始追问为什么信它第一个转折来自使用者的高频吐槽你给的结果没有依据等级。最初工具返回的是原始文本模型可以自由引用。但研究员发现模型经常把一篇普通博客与一篇机构报告放在同等地位甚至被博客里的标题党带偏。于是我们被迫在检索工具的返回结构里增加证据元数据来源类型、发布日期、引用次数以及一个基于来源可靠性的初筛分数。这一步是决策系统的胚胎。因为元数据一旦存在模型在最终回答时就不只是看文本了还可以参考这条信息值多少信任度。信任度不再是一句话而是一个可计算、可比较的数字。研究判断从此有了量化基础。这个改动看起来只是加几个字段实际效果却非常明显研究员拿到答案时至少能分辨出模型的结论是站在机构报告肩膀上还是被一篇匿名博客带着跑。2.2 转折二单个回答不够了必须为研究过程留痕第二个转折源于用户多轮使用后的一个需求我昨天检索过的一组关键词为什么今天对话里没了研究行为天然是滚动的研究员会先开题、再收集、再筛选、再综合每一步都依赖前面留下的上下文。而默认的MCP工具调用是无状态的每次调用都像是第一次见面。我们随后引入了MCP的资源Resource原语把研究状态本身暴露成一个可读取的对象。客户端在和MCP Server交互时可以看到当前研究任务的状态问题定义、已收集证据清单、每条证据的采纳状态、待消解冲突。这相当于把传统软件里草稿箱的概念搬到了AI工作流里。这一阶段系统仍然不生成最终判断但已经有了判断所需的完整工作台。2.3 转折三结论冲突时必须能说清为什么选它第三个转折是决策系统的临门一脚。当系统开始收集多条证据时不可避免会出现不同来源结论打架的情况。最初我们把冲突原样返回给模型让模型自己权衡。结果很糟模型在概率上倾向于选择训练语料里更常见的说法而完全不理解当前领域的独特背景。一个在汽车行业正确的判据到了能源材料领域被模型强行套成同样的句式。于是我们开始把决策规则下沉到MCP工具逻辑里而不是留在客户端模型手里。工具层新增了一个冲突消解工具它接收一组存在矛盾的证据依据来源权重、时间衰减系数、与问题的语义相关性等规则输出一个带理由的裁决结果。模型成为整体路径的调度者但关键判断开始在受控规则里发生。这一点是整个项目从壳变系统的分水岭判断逻辑第一次不是模型临场发挥的产物而是可复现、可审查的计算结果。2.4 转折四标准流程被固化成了可复用的系统能力第四个转折是在前面积累之上自然发生的整个研究过程被固化成一整套工具链。用户不再希望一上来就空对空地问模型而是希望系统自动走拆解问题—检索证据—筛选有效证据—构造决策矩阵—输出结论—生成推理说明这条完整流程。这套流程被沉淀成了MCP的提示词模板和编排工具。到这一步项目已经从工具集合变成了真正的研究决策工作台。外部API封装依然存在原来的HTTP查询仍然在底层工作但系统能力早已超出数据转发具备了问题建模、证据管理、决策评估和推理解释等完整闭环。回看整个过程没有任何一个节点是开发团队拍脑袋说要造一个决策引擎每一个能力都是用户在实际使用中把系统拱到这个位置的。3. 架构长什么样从工具集合到决策编排层说完了转折再看架构。这一节我按时间顺序描述项目形态的三种状态把长成的过程具象化。理解这个过程比直接拿到一套最终架构图更有价值。3.1 初始形态MCP工具纯粹做API代理初始的MCP Server结构非常典型。工具列表大概就是search_evidence和get_source_detail两个输入输出都是透明转发。客户端是通用AI助手模型看到用户问题决定调用哪个工具、如何拼接结果。这套结构的优点是简单缺点是判断质量上限完全取决于模型的临场发挥。一旦涉及多来源、多准则、多轮递进的研究型任务模型会在三个地方崩坏不知道要连续查哪些工具才能覆盖问题不知道如何比较矛盾信息常常挑一个自认为合理的就直接用不知道如何把过程转换成可复核的结论。这种场景下套壳MCP的价值就只剩帮模型调API而这个价值非常脆弱任何原生支持工具调用的框架都能替代。3.2 中间形态在返回结果里嵌入证据元数据第一次架构调整没有动工具骨架只是让每个工具返回结构化证据对象。每个证据统一包含证据ID、来源URL、发布时间、来源类型、相关性评分、冲突标识。同时增加了两个轻量工具一个把研究任务写入状态资源一个负责把一个临时结论附加到当前任务上。这个阶段的架构仍然是分散的工具之间没有强制顺序模型可以跳过某个环节直接回答。但它为后续决策下沉打好了地基。没有这些元数据后面所有评分和冲突消解规则都是空中楼阁。这一步给我的经验是架构演进不一定要大动干戈先让数据结构承载更多信息是成本最低的升级方式。3.3 最终形态决策编排层成为核心最终形态里我按检索、综合、评估三条线重构了工具命名和分组。检索域保持search_evidence、get_source_detail这类基础工具综合域新增research_synthesis负责把多条证据合并成中间观点评估域新增conflict_resolution、generate_conclusion、explain_reasoning分别负责冲突裁决、生成最终结论和生成推理说明。工具之间通过统一的研究状态对象衔接每个工具返回值里带上对上一步结果的引用形成一条清晰的决策链路。系统处理一次完整研究问题通常要顺序调用十个以上工具。链路包括定义问题、展开子问题、检索、证据筛选、决策矩阵构建、冲突消解、结论生成、推理解释。工具层看起来像一套研究专用的内部语言模型在其中扮演路由和执行者。3.4 为什么不推翻重写成独立系统这是我最想强调的一点这套架构之所以用长成来形容是因为所有能力都是在原有MCP Server上升级出来的没有另起炉灶。原因是成本底层的多个外部数据源已经接好客户端的认证、会话、权限链路已经跑通最重要的是用户群已经熟悉了这套交互方式。推翻重做的代价不仅是代码量更是让一批已经养成习惯的用户重新学习一轮。更本质的原因在于MCP本身就是为这种渐进扩展设计的。协议里工具、资源、提示词三种原语分别对应执行、状态、流程正好覆盖了从查一下到研究一下的全部能力维度。这个项目真正做的事就是顺着协议天然支持的方向把业务逻辑一层层加进去。所以并不是套壳MCP长成了研究决策系统而是MCP协议天生允许一个壳长出五脏六腑——只是大多数人没有活过孵化期。4. 关键实现细节研究决策链路怎么在MCP里落地下面这部分是实战落地细节偏工程向。如果你已经在写MCP Server可以直接跳到这一段抄作业。4.1 用一个统一Schema描述研究任务为了让决策链路可计算所有工具返回的数据结构必须以同一个Schema为根。否则每个工具各说各话状态根本串不起来。我们采用的顶层结构大概是这样的{ research_task: { id: task_001, question: 某材料近三年的产能增速是否超过需求增速, constraints: [仅考虑公开产业数据, 时间范围最近三年], evidence: [ { evidence_id: ev_01, source: 某行业报告, publish_date: 2024-06-01, source_type: institutional_report, content: 此处放摘要限制在800字内, relevance_score: 0.86, conflict_tag: none } ], conflicts: [], conclusion: { stance: supportive, confidence: 0.73, rationale: 来源一致性较高但样本覆盖有限 } } }强烈建议字段都用英文标识符客户端展示时再映射成中文文案。模型对英文键名的解析稳定性明显高于中文键名这个细节是踩过坑之后总结出来的。另外content字段只放摘要而不是全文是为了避免上下文窗口被快速挤爆——证据全文可以按需通过详情工具获取。4.2 证据聚合与评分如何计算决策工具generate_conclusion做的事情本质上是一个带权聚合。我们常用的评分逻辑是总分 0.4 × 平均相关性 0.3 × 一致性得分 0.2 × 时效得分 0.1 × 来源多样性得分。一致性得分是所有证据结论方向相同的比例方向上只要出现分歧这一项就会明显掉分。时效得分按发布日期距研究日的天数做指数衰减太久远的来源即使权威也会被降低权重。多样性得分看独立来源数量是否大于等于3——如果三条证据全部来自同一家媒体哪怕内容再一致可信度也要打折。算完总分后将结论文本置为支持反对存疑证据不足四档之一。当置信度低于0.5时强制要求输出证据不足而不是硬给结论。这是研究决策系统跟普通问答系统一个根本性的不同它允许自己不知道。实际使用中用户不会因为这个而失望反而会更信任系统给出的有把握的判断。4.3 冲突消解的降级策略当多个证据的conflict_tag同时出现时冲突消解工具按三层策略处理。第一层用来源权威度加权研究报告高于新闻转载原始数据高于二手解读。第二层用发布时间裁决在权威度相当的情况下更新近的来源优先。第三层如果权威度和时效都无法区分就把结论标记为conflict_pending并生成一段分歧要点摘要留给人工介入。这套策略不复杂但很实用。它把模型自己假装知道的问题转移到了规则流程上哪怕最终结论可能是错的推理过程也可以被追溯。对研究员来说一个能说清为什么选它的系统比一个每次都能蒙对答案的系统更有价值。4.4 与主Agent配合的两种模式最后讲一下决策系统在MCP里和主Agent的配合方式。第一种是Agent主导模式你仍然有一个强大的助手模型它负责理解用户意图、拆解任务、依次调用工具、组织最终汇报MCP在这里只是能力的仓库。第二种是工具层约束模式研究流程的每一步必须走完工具链模型只能在给定的调用路径里做选择最终结论不能由模型直接自由发挥输出。实测下来在决策场景里我更推荐第二种。模型自由发挥的空间越小结论的可控性和可复现性就越高。代价是交互流程会变长但研究本身就不是追求一句话秒回的场景。如果一个需求真的只需要一句话回答那根本用不着长成决策系统普通套壳MCP就够了。5. 实测记录与避坑排查不管架构设计得多漂亮落到真实环境里总会遇到一堆预想不到的问题。这一节我把这几次踩坑的过程和排查思路完整记录下来基本都是常规文档里不会写的东西。5.1 工具一多模型全乱套了当工具数量超过十几个模型经常选错工具。症状很典型用户问某材料的需求增速模型却去调了产能相关的工具。排查了一圈发现问题出在命名上。最初工具名叫retrieve_data和fetch_info这种语义重叠严重模型根本不知道该选哪个。解决方式是统一改成域_动作命名比如retrieval.search_evidence、evaluation.conflict_resolution并且在每个工具的description里写明触发条件和典型入参。我的习惯是给每个工具写一句话当用户提到X时才调用我。这个改动之后工具选择准确率提升非常明显。如果你也在做多工具MCP建议从一开始就按这个规范来。5.2 结论被模型顺手改掉了这是决策系统最危险的一个坑。工具已经算好了评分和结论文本但调用端的模型在给用户做最终播报时会把结论文本改得更口语化甚至悄悄改立场。比如工具输出evidence_insufficient模型却对用户说目前看是支持的但还需要更多数据。听起来好像没问题实际上已经偏离了工具的客观结论。规避方式结论生成工具返回结构化对象客户端渲染时优先展示结论卡片而不是让模型重新解释。关键结论必须以工具输出为唯一事实源模型能加工的部分只有叙述语气不能改变判断内容。5.3 状态丢失和上下文超限研究流程一长上下文窗口很快被挤爆。我们第一次跑完整流程时跑到第三步上下文就不够用了更别说后续的证据比对和结论生成。这个问题的根源是检索工具返回了太长的全文内容。折中方案是每次检索只回传证据的摘要字段限制在800字内完整内容通过详情工具按需获取。研究状态对象定期由压缩工具生成中间摘要。实际上这等于在MCP服务器内部加了一层缓存和索引虽然实现起来多了一些工作量但换来了整个系统的可用性。5.4 长任务超时是另一个难题一次复杂研究调用需要30到60秒远超一般HTTP客户端的超时设置。一开始客户端频繁报超时用户体验很糟糕。我们后来改用异步任务模式搜索入口返回task_id和任务状态客户端提供轮询接口查询进度。这里有一个特别容易被忽略的点进度反馈不能只是处理中最好能给出正在进行第2步检索证据3/7这样的可感知进度。我观察过真实用户行为当进度条有具体环节时用户愿意等的时间会成倍增加只有一片空白时用户最多等十几秒就想关页面。5.5 问题速查表现象根因解决方式工具被模型乱调名称语义重叠、描述模糊按域_动作命名description写清触发条件结论文本被改写模型对工具输出做了二次加工结论卡片优先渲染工具输出作为唯一事实源上下文窗口爆炸检索返回了全文而非摘要摘要字段限制800字全文按需获取请求持续超时同步链路过长异步任务 轮询 可感知进度提示6. 复盘什么情况下值得把MCP往决策系统做讲完整个演进过程和踩坑记录最后一个问题值得好好想清楚是不是所有MCP都应该往决策系统方向做我的答案是绝对不是。6.1 判断依据高频、复深、后果大套壳MCP本身不丢人很多场景下薄壳反而是最优解。天气查询、日报生成、简单数据库读写这类任务做薄做快就好。只有当使用场景同时满足三个特征——高频使用、任务链路复杂超过三个工具、判断结果会影响真实决策——才值得把决策逻辑往工具层沉淀。模拟项目X能长出来正是因为它的用户在每个工作日都在做研判需求密度足够高。如果换成一个月才用一次的内部工具花几周去实现冲突消解和决策矩阵性价比就完全不成立。所以我的建议是先让薄壳跑起来观察用户是否高频使用再决定要不要长成决策系统。6.2 三层可复用的经验如果确认要走这条路有三层经验可以复用。第一层不要一上来设计完整决策系统先做一层薄壳让真实用户用起来再去收集判断环节在哪里断裂。第二层把决策规则与模型自由发挥分开。凡是必须稳定不变、需要可复现的逻辑放进MCP工具里凡是灵活理解用户意图的部分留给模型去发散。第三层把状态当成一等公民。用Resource承载研究进度好过所有工具无状态地重来。没有状态决策链路的每一步都是孤岛。6.3 套壳的体面我始终觉得套壳MCP并不丢人。MCP作为协议适配层天然就是套壳工程。真正丢人的是不加思考地把所有API原样暴露给模型从未想过自己的使用场景需要怎样的业务抽象。一个套壳项目如果能从API代理一直被需求推着跑最后长出独立于任何底层接口的决策能力那它不是被洗白而是终于完成了从工具到系统的进化。我个人复盘后最大的感受是别急着给自己写的MCP下定义。今天它还是把外部检索源包进去的薄壳明天可能就成了某个团队离不开的研究底座。关键在于你有没有给自己一个活过孵化期的机会。下次教别人写MCP时我大概率会先问一句——你想让它一直当壳还是想让它不小心长出点东西来
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进