MCP 虽好,但我还是有一些槽不吐不快 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
marquina
V2EX    分享发现

MCP 虽好,但我还是有一些槽不吐不快

  •  1
     
  •   marquina 201 天前 2342 次点击
    这是一个创建于 201 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景

    在 MCP 出现之前,我也会用外部工具增强 AI 的能力。比如我发了一个助手 bot ,开发和使用流程如下:

    1. 在 python 里定义一些工具函数(比如生成图片或下载文件等)。
    2. 当用户向 bot 发送文本时,bot 把工具的描述和用户文案给到 AI ,让 AI 判断需要调用哪个工具。
    3. 当工具执行完后,再将执行结果发给 AI ,让 AI 决定是继续调用工具、还是向用户输出结果。

    这套流程只能说在我的场景勉强够用,问题主要有两个:

    1. 工具函数不够通用,只能在这个 bot 里使用
    2. 对话都在一个 bot 聊天框里完成,上下文管理让人头疼

    MCP 的愿景

    虽然 MCP 出来有一段时间了,但昨天才真正开始上手使用,用的公司内部工具。首次使用时 MCP 给我的愿景还挺好的:我只需要维护工具函数的代码,就可以在各种客户端( cluade desktop/cusor 等)中复用,甚至共享给其他人,看起来很好解决了我上面的两个问题。

    今晚和昨天我重点关注 MCP 服务器的开发、MCP 客户端的体验,也在过程中碰到了不少槽点,在此记录一下。

    1. 协议交互

    1. OpenWebUI 没有选择标准 MCP 协议,而是特立独行自创了一套 OpenAPI 的协议。虽然可以用 mcpo 命令很容易地转换,但这也增加了部署和理解成本。转换后每个工具函数还被加上了_post 后缀,强迫症震怒。
    2. sse 协议下,MCP 服务器重启后 MCP 客户端也要跟着重启,否则下次调用工具函数时就会报错

    2. 工具函数 to AI

    MCP 协议主要定义了 client 和 server 的交互。client 在获取到工具函数后如何传递给 AI ,这各软件各显神通了。

    1. trae 海外版隐藏了提示词,但有意思的是,使用官方模型能很顺利调用 MCP 的工具函数;但如果是填写 key 、调用第三方的模型(甚至是火山引擎),AI 就基本无法感知用户的输入和工具函数,开始胡言乱语。可能是提示词设计的问题。
    2. cline/roo code 等插件,将 MCP 的工具函数塞到自己本来就已经很长的提示词( 10k+ tokens!)里了,可能会导致AI 优先使用内置的工具。当然这点可以通过提示词强调优先使用 MCP 、或切换 roo code 的模式来缓解。
    3. OpenWebUI 又特立独行,每次对话时会先根据少量上下文和用户输入让 AI 决定是否调用工具函数。如果没有调用工具、或工具调用结束,AI 是感知不到工具函数的。也就是说,如果你问 AI 当前有哪些工具、或者某个工具的参数是什么,AI 是回答不出来的

    另外,cline/roo code 和 AI 交互用的是 xml 格式 prompt ,OpenWebUI 用的是 json 格式 prompt ,反正都不是大模型标准的 tools 格式哈哈。

    3. 上下文管理

    这一部分槽点也较少。不过点名批评 OpenWebUI ,由于工具的调用判断是单独的链路,所以就会出现很多奇特现象:

    • 你无法向 AI 询问当前有哪些工具,或者工具的参数定义
    • 工具调用完成后,AI 就感知不到工具了。导致无法实现“用户提问 -> AI 调用工具 1 -> AI 基于工具 1 的结果调用工具 2 -> AI 给用户结果“的链式调用。
    • 工具调用完成后,AI 调用工具的参数、工具的返回值都不会记录在对话上下文里。虽然用户可以看到这些内容,但 AI 是永远不会知道了……

    相比之下,cline/root code 都是将全量信息记录在上下文里,使用起来顺畅很多。

    4. 用户界面和其它

    1. trae 海外版,前端明显有 bug ,看不到工具函数的返回值,只能按复制按钮把返回值粘贴到其它地方看。
    2. cline ,工具函数的返回值没法折叠。roo code 也不支持折叠,甚至还不支持在对话框里展示图片内容。
    3. OpenWebUI 在处理 json 数据(工具函数定义/展示参数、响应)时,会用 unicode 格式(/uffff )处理,可读性基本没有。
    4. ChatGPTNextWeb 宣称 v2.16 支持了 MCP ,但我启动 v2.16 的 docker 镜像后,前端显示依然是 v2.15 版本,也不支持 MCP……你赢了
    5. 网页版本 Claude 我能正常使用,但 Claude Desktop 提示我 APP 不可用。

    总结

    MCP (或者说用通用协议来增强 AI 对真实世界的感知和操作能力)确实是一个非常有潜力的技术。但它太新了、协议覆盖的范围也太小了,业界还没有一个如何用好 MCP 的最佳实践。当然也有可能是我太穷了,说不定直接用 cursor 就没啥问题了(

    希望不久的将来,有完善的 MCP 客户端和成熟的 MCP 生态,能让每个人都能用上便捷好用的 AI 和工具。

    3 条回复    2025-05-31 22:03:17 +08:00
    akira
        1
    akira  
       201 天前
    这个是工具的问题了啦, 还需要时间的
    YsHaNg
        2
    YsHaNg  
       201 天前 via iPhone
    open webui 是不是支持 langgraph 来着
    kaiveyoung
        3
    kaiveyoung  
       201 天前 via Android
    将字典放到 resources 里,Cherry studio 压根就不请求
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3292 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 04:25 PVG 12:25 LAX 20:25 JFK 23:25
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86