Article Detail

内容详情

围绕文章主旨、阅读节奏与信息层次进行优化,让读者进入正文前就能快速理解主题重心与阅读价值。

审批一加,MCP工具就找不到了详情展示图

审批一加,MCP工具就找不到了

BBIN真人官方网站|真人视讯服务平台 535 阅读 约 5.5 分钟

查工单没问题,排班也没问题。可只要在“花钱”的工具前面加一道人工审批,重启就报错: Tool order_part not found 。一个做派单助手的开发者,就这样撞上了框架的边界。 他给一家虚构的现场服务公司写了个调度助手。调度员输入“WO-1043 现在什么状态”或者“给 WO-1044 订一个 3 kW 加热元件”,助手负责回答。背后挂了三个工具: lookup_work_order :读站点、资产、问题、技师和时间段,自己跑。 schedule_visit :给技师排一个时间窗,自己跑。 order_part :订备件,要花钱,必须等人点头。 整套东西他都想用 Dart 写:助手服务、工具服务、Flutter 客户端,共用一套类型。不要 Python 边车,也不要中间塞个 Node 服务。 架构拆成四块,全是 Dart。后台是一个 MCP 服务器,走回环地址上的 Streamable HTTP,任何 MCP 客户端都能接;助手是一个 Genkit flow,从那个 MCP 服务器拿工具,从不直接 import 后台;每个花钱的工具前面挡一道审批中间件;HTTP 面只有一个 POST /dispatchAgent 加一个健康检查。 后台明明和助手在同一个进程里,为什么还要套 MCP?因为边界本身就是目的。哪天工单搬到真实系统,只需要换掉 MCP 服务器,助手、提示词和测试都不用动。 工具描述里特意写了“which costs money”。模型也会读到这句话。 类型只写一份,三个运行时共用。同一个 DispatchAnswer,既是模型的结构化输出 schema,也是 flow 的 HTTP 响应,还是 Flutter 客户端反序列化用的类型。这个文件不 import dart:io,所以客户端能从同一份 import 构建出 web、iOS 和 macOS 版本。改一个字段,build_runner 重新生成,编译器会告诉你所有受影响的地方。 审批闸门的逻辑是:中断、挂起、重启。toolApproval 接收一份“可以不问就执行”的工具清单,其余一律中断生成。模型请求 order_part 时,响应带着 finishReason == FinishReason.interrupted 回来。flow 把此前的对话和这个被中断的工具请求一起存到某个 approvalId 下,立刻回给客户端: {"result": {"answer": "Ordering \"Heating element 3 kW\" for WO-1044 needs your approval.", "orderIds": ["WO-1044"], "approvalId": "approval-1"}} Flutter 客户端弹出“批准”和“拒绝”。下一次调用把 approvalId 连同 approved 一起送回来。批准就重启那次挂起的调用,工具真正执行,模型根据真实结果作答;拒绝则工具永不执行,模型收到“Declined by the dispatcher. Nothing was ordered.”作为工具输出,再用自己的话向用户解释。 每个 approvalId 只能应答一次,首次使用就从待处理表里删掉,所以连点两下也不会订出两个加热元件。挂起的审批存在内存里,这是给 --max-instances 1 的 Cloud Run 演示做的刻意选择:一个实例,一张表。重启就忘,超出演示范畴就该放进 Firestore 或数据库。 然后就是那个 bug。查询正常,预订正常,审批提示也正常弹出来。他点了批准,重启失败,报 Tool order_part not found。 根因在 Genkit Dart 1.0.1 里。MCP 工具注册时用的是带命名空间的名字 work-orders/order_part ;模型看到的是短名 order_part,回传的也是短名;正常工具循环通过一张短名映射表找到工具,没问题;但恢复路径(interruptRestart)调用工具执行器时没带那张表,退回去按 order_part 查注册表,查不到,抛异常。 也就是说,任何带命名空间的工具(也就是每一个 MCP 工具)都能正常工作,直到你在它前面放一道审批。他用假模型和两个测试复现了:一个用普通工具名,一个用 work-orders/order_part。普通的过,带命名空间的挂。然后他通过 dependency_overrides 给本地那份 genkit 1.0.1 打了补丁,把映射表传给恢复路径,两个测试都绿了。 问题连同复现和根因提交到了上游,编号 genkit-ai/genkit-dart#657,修复以 #658 开放:恢复路径现在用和循环一样

about image
觉得有用?分享给朋友

让更多人看到这篇内容

推荐阅读

Search
热点新闻
[流言板]两帽文班!霍姆格伦半场5投2中,得到10分2篮板2盖帽
[流言板]两帽文班!霍姆格伦半场5投2中,得到10分2篮板2盖帽

社区 » NBA » 篮球资讯 » [流言板]两帽文班!... 虎扑篮球资讯(1280级)楼主2026-10-21 11:03:31发布于上海 [流言板]两帽文班!霍姆格伦半场5投2中,得到10分2篮板2盖帽由虎扑篮球资讯 发表在篮球资讯 https://bbs.hupu.com/502 虎扑10月21日讯 今日NBA揭幕战,雷霆vs马刺。 雷霆半场65-44领先马刺。 霍姆格伦半场5投2中,得到

中方这次不再客气!大使馆连发4条硬刚,菲律宾议员挨个被点名
中方这次不再客气!大使馆连发4条硬刚,菲律宾议员挨个被点名

朋友们好,我是小编 附上一句“已记录在案,已列入名单”——语气之强硬,措辞之直接,在近年中菲外交交锋中前所未见。 而这场风暴的起点,不过是10月15日井泉在“迪利曼对话”活动上的一句话:“如果我们要使用武力,我们可能轻易取胜。但不,我们不会选择武力,我们热爱和平。” 菲律宾政府截取了前半句,定性为“威胁”;中方指出后半句被忽略了。一句话的断章取义,在六天之内升级为点名、对等反制、驱逐呼声和入境限制

打脸穆里尼奥!皇马放走天才瑰宝酿大错!22 岁新星欧冠爆发
打脸穆里尼奥!皇马放走天才瑰宝酿大错!22 岁新星欧冠爆发

欧冠赛场,科莫 4-1 大胜曼联,出自皇马青训的尼科・帕斯一战封神。 2 球 1 助攻,全场进攻由他一手主导,赛后收获全场球迷起立鼓掌。 这名 22 岁阿根廷小将持球从容稳定,很少盲目丢球。 不光进攻灵气十足,跑动和防守积极性也远超多数进攻型中场。 对比皇马重点培养的居莱尔,帕斯身体对抗、球场覆盖更占优势。 本赛季他已经拿下 6 球 5 助攻,涨球速度惊人。 虽然皇马中场坐拥贝林厄姆,位置竞争激烈

朱婷姚迪新赛季首冠!科内利亚诺3-1斯坎迪奇,加冕意大利超级杯
朱婷姚迪新赛季首冠!科内利亚诺3-1斯坎迪奇,加冕意大利超级杯

10月25日凌晨,2026年女排意大利超级杯比赛进行,对阵双方分别是科内利亚诺和斯坎迪奇。本场比赛中国球员朱婷和姚迪效力的科内利亚诺队,3-1逆转击败了斯坎迪奇,成功拿下了新赛季的首冠。朱婷斩获了个人职业生涯第28冠,科内利亚诺队史第9次夺得超级杯冠军。 首局比赛科内利亚诺队在大部分时间领先的情况下,在局末阶段被对手反超,23-25科内利亚诺遗憾输掉第1局。 第2局比赛科内利亚诺队提升了进攻成功率

北京青岛多地已向20余人发通知:申报纳税
北京青岛多地已向20余人发通知:申报纳税

2026.10. 25 本文字数:1925,阅读时长大约3分钟 作者 | 第一财经 亓宁 封图 | AI生成 10月22日为离岸信托个税新规过渡期截止日。当天下午,国家税务总局北京市怀柔区税务局所发的公告显示,该局已向晁某哲等21名自然人公告送达《税务事项通知书》,事由是离岸信托个人所得税涉税事项核实及通知申报纳税。 以怀柔区税务局向晁某哲所发的通知为例,文件内容显示:为加强离岸信托个人所得税管理