偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

一次排查 Cursor Bug 的經(jīng)歷

人工智能
最近,我在用Cursor過程中遇到了「注冊(cè)的MCP服務(wù)不調(diào)用」的問題。經(jīng)過一頓排查,最終確定是Cursro自身bug導(dǎo)致。本文聊聊排查的過程,還蠻有趣。

大家好,我卡頌。

相信很多同學(xué)日常編碼已經(jīng)用上了Cursor。

最近,我在用Cursor過程中遇到了「注冊(cè)的MCP服務(wù)不調(diào)用」的問題。

經(jīng)過一頓排查,最終確定是Cursro自身bug導(dǎo)致。

本文聊聊排查的過程,還蠻有趣。

什么是MCP?

大模型(后文簡(jiǎn)稱LLM)自身只有多模態(tài)(文本、視頻、圖片...)輸出能力,無法使用外部工具,比如:

  • 無法聯(lián)網(wǎng)查詢
  • 無法從數(shù)據(jù)庫查數(shù)據(jù)
  • 無法操縱瀏覽器

要賦予LLM「使用外部工具的能力」,需要搭建如下流程:

其中:

  • 藍(lán)色部分流程是「LLM表達(dá)自己希望做什么」
  • 綠色部分流程是「實(shí)際做這件事」

「藍(lán)色部分」最早由openAI實(shí)現(xiàn),被稱為Function Call(后續(xù)迭代改名為Tool Call)。

其他主流LLM也都跟進(jìn)了這個(gè)功能(Claude中這個(gè)功能叫Tool use)。

我們會(huì)發(fā)現(xiàn),藍(lán)色部分是一套規(guī)范,用于定義「LLM如何表達(dá)自己希望做什么」。

比如,下面是Claude定義的一個(gè)Tool use,表達(dá)希望能調(diào)用一個(gè)名為 get_weather 的方法獲取天氣情況:

{
  "name": "get_weather",
  "description": "獲取指定地區(qū)的天氣",
  "input_schema": {
    "type": "object",
    "properties": {
      "location": {
        "type": "string",
        "description": "指定地區(qū),比如:北京市"
      },
      "unit": {
        "type": "string",
        "enum": ["攝氏度", "華氏度"],
        "description": "溫度單位,“攝氏度”或“華氏度”"
      }
    },
    "required": ["location"]
  }
}

至于get_weather方法在哪里,如何執(zhí)行等「如何實(shí)際做這件事」(綠色部分),Tool use規(guī)范是沒有定義的。

這就造成綠色部分的實(shí)現(xiàn)很混亂。

比如,我倆都實(shí)現(xiàn)了「可以聯(lián)網(wǎng)查資料的chatbox」,但「聯(lián)網(wǎng)查資料」這個(gè)功能卻沒法互相替換。

因?yàn)樵谖覀z的實(shí)現(xiàn)中,入?yún)?、輸出、調(diào)用方式都不一樣。

MCP(Model Context Protocal)的出現(xiàn)就是為了規(guī)范綠色部分,他是一套:

  • 客戶端、服務(wù)器架構(gòu)規(guī)范
  • 數(shù)據(jù)傳輸規(guī)范

以及規(guī)范的具體實(shí)現(xiàn)。

只要遵循MCP規(guī)范,所有人實(shí)現(xiàn)的「聯(lián)網(wǎng)查資料」(以及其他任何綠色部分)都可以互相替換。

我遇到的問題

我遇到的問題很簡(jiǎn)單 —— 我按照MCP官方文檔[1]實(shí)現(xiàn)的「查詢天氣服務(wù)」,在Cursror中成功注冊(cè):

綠點(diǎn)代表服務(wù)成功在Cursor中注冊(cè)

但當(dāng)我提及「天氣相關(guān)問題」時(shí),Cursor卻沒有調(diào)用weather MCP:

也就是說,下述流程的某些環(huán)節(jié)出錯(cuò)了:

接下來,我們來排查問題原因。

第一步:mcp本身有問題么?

首先,我懷疑我寫的mcp服務(wù)本身有問題。

于是,我在Cline(可以理解為開源版的Cursor)中注冊(cè)了weather MCP:

當(dāng)我問:上海天氣咋樣?

可以看到,Cline可以成功調(diào)用weather MCP。

這表示,weather MCP本身沒問題。

第二步:mcp是如何觸發(fā)的?

那么,Cline是如何觸發(fā)mcp的呢?

由于他是開源的,很容易調(diào)試他的運(yùn)行流程。

簡(jiǎn)單來說,當(dāng)我們?cè)贑line中輸入任何內(nèi)容后,Cline的系統(tǒng)提示詞包括2條信息:

  • 第一條:你的輸入(比如:上海天氣咋樣?)
  • 第二條:非常長(zhǎng)的Cline環(huán)境信息(消耗1w+ token)

這條環(huán)境信息主要包括:

  • 「基本介紹」 - 定義助手身份和基本行為
  • 「工具使用」 - 詳細(xì)說明可用工具及其使用方法
  • 「MCP 服務(wù)」 - 介紹 MCP 的作用以及注冊(cè)的 MCP
  • 「文件編輯」 - 說明文件編輯工具的使用方法

等11個(gè)模塊。

weather MCP的定義出現(xiàn)在「MCP服務(wù)」部分,所以Cline(本質(zhì)是背后的LLM)知道何時(shí)該調(diào)用。

第三步:Cursor是怎么處理mcp的?

有了前兩步的基礎(chǔ),接下來我們分析Cursor的執(zhí)行流程。

由于Cursor是閉源的,我們只能從側(cè)面獲取必要信息。

首先,抓取Cursor Composer模式的請(qǐng)求,分析系統(tǒng)提示詞。整段提示詞主要包括:

  • 「核心身份」 - 由 LLM 驅(qū)動(dòng)的代理型 AI 編碼助手,在 Cursor IDE 中與用戶結(jié)對(duì)編程解決各類編碼任務(wù)
  • 「通信規(guī)范」 - 以專業(yè)友好的 MD 格式與用戶交流,遵循嚴(yán)格的信息披露限制
  • 「工具調(diào)用」 - 按規(guī)范使用可用工具,提供必要參數(shù),不向用戶直接提及工具名稱
  • 「搜索與閱讀」 - 主動(dòng)收集信息解決不確定問題,盡量避免向用戶尋求幫助

等8個(gè)模塊。

整體token消耗只有Cline系統(tǒng)提示詞的 1/10 不到:

雖然沒有明確指明MCP相關(guān)內(nèi)容,但是提到了「工具調(diào)用」的規(guī)范。

遵循該規(guī)范繼續(xù)查找,在接口的tools(也就是前面介紹的Tool use)字段中,Cursor定義了不少工具,比如:

  • codebase_search: 在代碼庫中查找與查詢語義相關(guān)的代碼片段
  • read_file: 讀取文件內(nèi)容與概要,可指定行范圍或讀取整個(gè)文件
  • run_terminal_cmd: 在用戶系統(tǒng)上提議或執(zhí)行終端命令
  • list_dir: 列出目錄內(nèi)容,用于初步了解文件結(jié)構(gòu)
  • grep_search: 基于正則表達(dá)式的文本搜索,用于精確查找字符串模式
  • edit_file: 提議對(duì)現(xiàn)有文件進(jìn)行編輯,由更簡(jiǎn)單的模型應(yīng)用這些編輯
  • file_search: 基于模糊匹配的快速文件路徑搜索
  • delete_file: 刪除指定路徑的文件
  • reapply: 當(dāng)編輯結(jié)果不符合預(yù)期時(shí),調(diào)用更智能的模型重新應(yīng)用上次編輯
  • diff_history: 獲取最近文件變更歷史,了解修改內(nèi)容

Cursor Composer Agent之所以能開發(fā)項(xiàng)目,底層依賴的就是這些工具。

除此之外,所有在Cursor中注冊(cè)的MCP也會(huì)作為tool出現(xiàn)在這里。

比如,從下圖可知,除weather MCP外,我還注冊(cè)了一個(gè)Sequential Thinking MCP(通過多步思考過程進(jìn)行動(dòng)態(tài)問題分析和解決的工具):

在Cursor發(fā)出的LLM請(qǐng)求中,tools字段下有名為mcp__sequentialthinking的工具:

{
  "function": {
    "description": "A detailed tool for dynamic and reflective problem-solving through thoughts ...省略",
    "name": "mcp__sequentialthinking",
    "parameters": {
      "properties": {
        "branchFromThought": {
          "description": "Branching point thought number",
          "minimum": 1,
          "type": "integer"
        },
        "branchId": {
          "description": "Branch identifier",
          "type": "string"
        }
        // ...省略
      },
      "required": [
        "thought",
        "nextThoughtNeeded",
        "thoughtNumber",
        "totalThoughts"
      ],
      "type": "object"
    }
  },
  "type": "function"
}

從這里就能發(fā)現(xiàn)問題 —— weather與Sequential Thinking都成功注冊(cè),但請(qǐng)求中并沒有帶上weather相關(guān)Tool use。

這就是為什么Cursor有時(shí)不能成功調(diào)用mcp —— 他沒有將該mcp作為Tool use加入請(qǐng)求中,LLM自然不知道有這么個(gè)mcp可以調(diào)用。

總結(jié)

當(dāng)前Cursor在MCP服務(wù)的注冊(cè)上存在bug,導(dǎo)致一些注冊(cè)成功的MCP服務(wù)不會(huì)在請(qǐng)求LLM時(shí)作為Tool use被帶上。

這是Cursor不能成功調(diào)用MCP的原因。

參考資料

[1]MCP官方文檔: https://modelcontextprotocol.io/introduction。

責(zé)任編輯:姜華 來源: 魔術(shù)師卡頌
相關(guān)推薦

2017-12-28 15:56:41

FastDFS排查并發(fā)

2022-07-13 08:31:18

React問題排查

2012-08-28 09:21:59

Ajax查錯(cuò)經(jīng)歷Web

2021-12-06 19:29:17

LRU內(nèi)存算法

2023-03-29 09:36:32

2021-05-31 10:08:44

工具腳本主機(jī)

2013-01-17 10:31:13

JavaScriptWeb開發(fā)firebug

2021-04-13 18:17:48

Hbase集群配置

2011-04-13 09:21:30

死鎖SQL Server

2016-12-06 09:34:33

線程框架經(jīng)歷

2013-04-01 10:27:37

程序員失業(yè)

2021-05-13 08:51:20

GC問題排查

2019-03-15 16:20:45

MySQL死鎖排查命令

2021-01-22 05:35:19

Lvm模塊Multipath

2023-04-06 07:53:56

Redis連接問題K8s

2012-07-12 14:35:31

面試經(jīng)歷

2022-11-03 16:10:29

groovyfullGC

2023-01-04 18:32:31

線上服務(wù)代碼

2015-04-28 15:31:09

2018-09-14 10:48:45

Java內(nèi)存泄漏
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)