戰(zhàn):從零構(gòu)建Text2SQL智能查詢助手)
1. 從零理解 Skill 與 MCP 的協(xié)作邏輯1.1 為什么需要自定義 Skill 和 MCP用 Claude Code 做開發(fā)輔助的人大概率經(jīng)歷過這樣一個(gè)階段一開始覺得它什么都能干寫代碼、改 bug、解釋邏輯都不在話下。但用久了就會發(fā)現(xiàn)一個(gè)問題——每次對話都像在跟一個(gè)剛?cè)肼毜男氯藴贤ㄋ恢滥愕捻?xiàng)目結(jié)構(gòu)不知道你的數(shù)據(jù)庫表設(shè)計(jì)不知道你們團(tuán)隊(duì)的代碼規(guī)范甚至不知道你昨天剛讓它寫過的一個(gè)工具函數(shù)叫什么名字。這就是通用 AI 編程助手的天然短板上下文是臨時(shí)的能力是通用的記憶是不存在的。自定義 Skill 和 MCP 就是來解決這個(gè)問題的。Skill 可以理解為給 Claude Code 裝的“技能包”你把特定領(lǐng)域的知識、流程、規(guī)范寫進(jìn)去它就變成了一個(gè)懂你業(yè)務(wù)的專屬助手。MCP 則是“連接器”讓 Claude Code 能夠直接跟外部系統(tǒng)對話——數(shù)據(jù)庫、API、文件系統(tǒng)、第三方服務(wù)都可以通過 MCP 接入。打個(gè)比方Claude Code 本身是一個(gè)聰明的通才Skill 是給它發(fā)的崗位培訓(xùn)手冊MCP 是給它配的辦公工具和系統(tǒng)權(quán)限。三者結(jié)合它才能從一個(gè)“什么都會一點(diǎn)”的助手變成“在你這個(gè)項(xiàng)目里什么都能干”的團(tuán)隊(duì)成員。1.2 Skill 與 MCP 的職責(zé)邊界很多人剛接觸這兩個(gè)概念時(shí)容易混淆覺得都是“擴(kuò)展能力”到底什么時(shí)候用哪個(gè)我踩過幾次坑之后總結(jié)出一個(gè)簡單的判斷標(biāo)準(zhǔn)維度自定義 SkillMCP本質(zhì)提示詞工程 流程編排協(xié)議層的外部系統(tǒng)對接解決的問題讓 AI 知道“怎么做”讓 AI 能夠“做到”典型場景代碼規(guī)范、業(yè)務(wù)邏輯、操作流程數(shù)據(jù)庫查詢、API 調(diào)用、文件操作配置方式Markdown/JSON 文件定義服務(wù)端配置 客戶端注冊是否需要寫代碼基本不需要通常需要簡單說Skill 管的是“腦”MCP 管的是“手”。你要讓 Claude Code 按照你們團(tuán)隊(duì)的規(guī)范寫 SQL這是 Skill 的事你要讓它直接連上數(shù)據(jù)庫跑查詢這是 MCP 的事。兩者配合才能實(shí)現(xiàn)從“理解需求”到“執(zhí)行操作”的完整閉環(huán)。1.3 Text2SQL 為什么適合作為入門案例Text2SQL 這個(gè)場景特別適合用來演示 Skill MCP 的配合原因有三第一需求明確。用戶輸入一句自然語言輸出一條 SQL輸入輸出都很清晰不需要復(fù)雜的交互設(shè)計(jì)。第二痛點(diǎn)真實(shí)。非技術(shù)同學(xué)想查數(shù)據(jù)但不會寫 SQL技術(shù)同學(xué)寫復(fù)雜查詢也要反復(fù)查表結(jié)構(gòu)這個(gè)需求在很多團(tuán)隊(duì)里都真實(shí)存在。第三技術(shù)鏈路完整。一個(gè)可用的 Text2SQL 系統(tǒng)需要理解數(shù)據(jù)庫結(jié)構(gòu)MCP 提供元數(shù)據(jù)、需要遵循 SQL 編寫規(guī)范Skill 定義規(guī)則、需要執(zhí)行查詢并返回結(jié)果MCP 執(zhí)行正好覆蓋了 Skill 和 MCP 的核心能力。接下來我會從環(huán)境準(zhǔn)備開始一步步拆解怎么配置一個(gè)能用的 Text2SQL 助手。2. 環(huán)境準(zhǔn)備與基礎(chǔ)配置2.1 Claude Code 的安裝與初始化Claude Code 的安裝本身不復(fù)雜但有幾個(gè)細(xì)節(jié)容易卡住新手。我先把完整流程走一遍然后說幾個(gè)我實(shí)際踩過的坑。安裝方式取決于你的操作系統(tǒng)。macOS 和 Linux 用戶可以通過包管理器安裝Windows 用戶建議在 WSL2 環(huán)境下操作原生 Windows 的支持在某些版本上還不夠穩(wěn)定。安裝完成后第一次運(yùn)行需要做初始化配置。這里的關(guān)鍵是API 密鑰的配置你需要有一個(gè)可用的密鑰才能讓 Claude Code 正常工作。配置方式通常是通過環(huán)境變量或者配置文件具體取決于你使用的版本。注意API 密鑰不要直接寫在代碼里或者提交到版本控制系統(tǒng)中。建議使用環(huán)境變量或者專門的密鑰管理工具。初始化完成后建議先跑一個(gè)簡單的測試確認(rèn)基礎(chǔ)功能正常。比如讓它解釋一段代碼或者生成一個(gè)簡單的函數(shù)。這一步看起來多余但能幫你排除掉很多環(huán)境問題避免后面配置 Skill 和 MCP 時(shí)把環(huán)境問題誤判成配置問題。2.2 目錄結(jié)構(gòu)規(guī)劃Claude Code 的配置文件和 Skill 定義文件需要放在特定的目錄下才能被正確加載。不同版本的目錄約定可能略有差異但大體結(jié)構(gòu)是這樣的~/.claude/ ├── config.json # 主配置文件 ├── skills/ # 自定義 Skill 目錄 │ ├── text2sql/ │ │ ├── skill.md # Skill 定義 │ │ └── examples/ # 示例文件 │ └── code-review/ │ └── skill.md └── mcp/ # MCP 服務(wù)配置 └── servers.json我建議在項(xiàng)目目錄下也建一個(gè).claude/文件夾放項(xiàng)目級別的 Skill 和 MCP 配置。這樣不同項(xiàng)目可以有各自的配置不會互相干擾。全局配置放通用能力項(xiàng)目配置放業(yè)務(wù)特定能力這個(gè)分層思路在實(shí)際使用中會省很多事。2.3 MCP 服務(wù)端的選擇與部署MCP 服務(wù)端的部署方式直接影響后續(xù)的使用體驗(yàn)。目前常見的有三種模式本地進(jìn)程模式是最簡單的MCP 服務(wù)端和 Claude Code 跑在同一臺機(jī)器上通過標(biāo)準(zhǔn)輸入輸出通信。適合個(gè)人開發(fā)和小型項(xiàng)目配置簡單延遲低。缺點(diǎn)是服務(wù)端掛了 Claude Code 就用不了而且不方便多人共享。本地服務(wù)模式是把 MCP 服務(wù)端跑成一個(gè)本地 HTTP 服務(wù)Claude Code 通過網(wǎng)絡(luò)請求調(diào)用。比進(jìn)程模式多了一層網(wǎng)絡(luò)開銷但穩(wěn)定性更好也方便調(diào)試——你可以直接用 curl 測試服務(wù)端是否正常。遠(yuǎn)程服務(wù)模式是把 MCP 服務(wù)端部署在獨(dú)立的服務(wù)器上適合團(tuán)隊(duì)共享。需要考慮認(rèn)證、網(wǎng)絡(luò)、并發(fā)等問題配置復(fù)雜度最高但擴(kuò)展性最好。對于 Text2SQL 這個(gè)場景我建議先用本地進(jìn)程模式跑通流程確認(rèn)邏輯沒問題后再考慮升級。數(shù)據(jù)庫連接信息這種敏感配置在本地模式下也更容易管理。3. 自定義 Skill 的編寫與調(diào)試3.1 Skill 文件的結(jié)構(gòu)與語法Skill 文件本質(zhì)上是一個(gè)結(jié)構(gòu)化的 Markdown 文檔Claude Code 會讀取它作為系統(tǒng)提示詞的一部分。一個(gè)完整的 Skill 定義通常包含以下幾個(gè)部分--- name: text2sql description: 將自然語言轉(zhuǎn)換為 SQL 查詢語句 version: 1.0 --- # 角色定義 你是一個(gè)專業(yè)的 SQL 查詢生成助手... # 能力范圍 - 支持 SELECT 查詢生成 - 支持多表 JOIN - 支持聚合函數(shù) # 約束條件 - 只生成 SELECT 語句禁止 DDL/DML - 必須使用參數(shù)化查詢 - 表名和字段名必須來自提供的 schema # 輸出格式 返回 JSON 格式{sql: ..., explanation: ...}頂部的 frontmatter 是元信息Claude Code 用它來識別和索引 Skill。正文部分才是真正的提示詞內(nèi)容。這里有個(gè)經(jīng)驗(yàn)Skill 的描述要具體不要寫空話。我見過有人寫“你是一個(gè)專業(yè)的助手請幫助用戶解決問題”這種描述等于沒寫。好的 Skill 描述應(yīng)該像給新員工的 SOP每一步做什么、不做什么、遇到什么情況怎么處理都要說清楚。3.2 提示詞工程的核心技巧寫 Skill 的提示詞和平時(shí)跟 AI 對話的提示詞有本質(zhì)區(qū)別。對話提示詞是一次性的Skill 提示詞是長期生效的所以需要考慮更多邊界情況。第一明確角色和邊界。不要只說“你是 SQL 專家”要說“你是一個(gè)只生成 SELECT 查詢的助手不處理任何寫操作”。邊界越清晰AI 越不容易跑偏。第二提供足夠的示例。Few-shot 示例對輸出質(zhì)量的提升非常明顯。我通常會在 Skill 里放 3-5 個(gè)典型示例覆蓋簡單查詢、多表關(guān)聯(lián)、聚合統(tǒng)計(jì)等場景。示例不用多但要典型。第三定義輸出格式。結(jié)構(gòu)化輸出對后續(xù)處理非常重要。我習(xí)慣讓 Skill 返回 JSON包含sql、explanation、confidence三個(gè)字段。confidence字段特別有用當(dāng) AI 對生成的 SQL 不確定時(shí)會給出較低的置信度這時(shí)候可以觸發(fā)人工確認(rèn)流程。第四處理異常情況。用戶的問題可能模糊不清可能涉及不存在的表可能要求做權(quán)限外的操作。Skill 里要明確這些情況怎么處理——是追問澄清還是直接拒絕還是給出默認(rèn)方案。3.3 調(diào)試 Skill 的實(shí)用方法Skill 寫完之后調(diào)試是個(gè)體力活。我的做法是準(zhǔn)備一個(gè)測試用例集覆蓋各種典型場景和邊界情況每次修改 Skill 后跑一遍看輸出是否符合預(yù)期。測試用例集可以長這樣編號輸入預(yù)期行為1查詢所有用戶生成 SELECT * FROM users2統(tǒng)計(jì)每個(gè)城市的訂單數(shù)生成 GROUP BY 查詢3刪除所有數(shù)據(jù)拒絕執(zhí)行4查詢不存在的表提示表不存在5模糊需求追問澄清調(diào)試過程中最常見的兩個(gè)問題一是 AI 不遵守約束比如明明說了只生成 SELECT它還是生成了 DELETE二是輸出格式不穩(wěn)定有時(shí)候返回 JSON有時(shí)候返回純文本。第一個(gè)問題的解法是加強(qiáng)約束的權(quán)重。把關(guān)鍵約束放在 Skill 的開頭和結(jié)尾用加粗、重復(fù)等方式強(qiáng)化。第二個(gè)問題的解法是提供格式示例并且在 Skill 里明確說“必須嚴(yán)格按照以下格式輸出”。實(shí)操心得Skill 的調(diào)試不要一次改太多地方。每次只改一個(gè)變量觀察輸出變化這樣才能定位到是哪個(gè)改動起了作用。我一開始圖快一次改五六處結(jié)果輸出變好了也不知道為什么好變差了也不知道哪里出了問題。4. MCP 配置與數(shù)據(jù)庫對接4.1 MCP 服務(wù)端配置詳解MCP 服務(wù)端的配置核心是告訴 Claude Code服務(wù)端在哪里、怎么啟動、需要什么參數(shù)。以本地進(jìn)程模式為例配置文件大概長這樣{ mcpServers: { database: { command: python, args: [-m, mcp_server_db], env: { DB_HOST: localhost, DB_PORT: 5432, DB_NAME: mydb } } } }command和args定義了怎么啟動服務(wù)端env傳遞環(huán)境變量。數(shù)據(jù)庫密碼這種敏感信息建議通過環(huán)境變量傳遞不要硬編碼在配置文件里。配置完成后需要驗(yàn)證 MCP 服務(wù)端是否能正常啟動。我通常先用命令行直接跑一遍啟動命令確認(rèn)沒有報(bào)錯(cuò)再讓 Claude Code 去加載。這樣能把服務(wù)端本身的問題和 Claude Code 集成的問題分開排查。4.2 數(shù)據(jù)庫 Schema 的暴露策略Text2SQL 的效果很大程度上取決于 AI 對數(shù)據(jù)庫結(jié)構(gòu)的理解程度。Schema 暴露得越清晰生成的 SQL 越準(zhǔn)確。但也不能把所有表結(jié)構(gòu)都塞進(jìn)去那樣會占用大量上下文還會干擾 AI 的判斷。我的策略是分層暴露第一層是核心表也就是業(yè)務(wù)最常用的那幾張表完整暴露字段名、類型、注釋、索引信息。第二層是關(guān)聯(lián)表只在需要 JOIN 時(shí)才暴露提供表名和關(guān)鍵字段即可。第三層是冷門表默認(rèn)不暴露需要時(shí)通過工具動態(tài)查詢。具體實(shí)現(xiàn)上可以在 MCP 服務(wù)端提供一個(gè)get_schema工具接受表名參數(shù)返回該表的詳細(xì)結(jié)構(gòu)。Skill 里定義好什么時(shí)候調(diào)用這個(gè)工具——比如用戶提到一個(gè)不熟悉的表名時(shí)先查 schema 再生成 SQL。Schema 的注釋特別重要。我見過很多數(shù)據(jù)庫的字段名是field1、field2這種AI 根本猜不出含義。如果能在 MCP 層做一層映射把字段名翻譯成有意義的描述Text2SQL 的準(zhǔn)確率會大幅提升。4.3 查詢執(zhí)行與結(jié)果返回MCP 服務(wù)端執(zhí)行 SQL 時(shí)有幾個(gè)安全細(xì)節(jié)必須注意第一只讀賬號。給 MCP 服務(wù)端配置的數(shù)據(jù)庫賬號權(quán)限要限制到最小。只給 SELECT 權(quán)限不給 INSERT、UPDATE、DELETE、DROP 等權(quán)限。這樣即使 AI 生成了危險(xiǎn)語句數(shù)據(jù)庫層面也會拒絕執(zhí)行。第二查詢超時(shí)。復(fù)雜查詢可能跑很久拖垮數(shù)據(jù)庫。MCP 服務(wù)端要設(shè)置查詢超時(shí)比如 30 秒超時(shí)后自動 kill 查詢。第三結(jié)果集限制。返回給 AI 的結(jié)果集不能太大否則會撐爆上下文。我通常限制在 100 行以內(nèi)超過的話只返回前 100 行加一個(gè)總數(shù)提示。第四SQL 審計(jì)。所有執(zhí)行的 SQL 都要記錄日志包括原始的自然語言輸入、生成的 SQL、執(zhí)行時(shí)間、返回行數(shù)。出問題時(shí)可以追溯也方便后續(xù)優(yōu)化 Skill。結(jié)果返回的格式也有講究。我習(xí)慣返回一個(gè)結(jié)構(gòu)化的對象{ success: true, columns: [id, name, city], rows: [[1, 張三, 北京], [2, 李四, 上海]], total: 2, execution_time_ms: 45 }這樣 AI 拿到結(jié)果后可以自然地用自然語言總結(jié)給用戶而不是把原始數(shù)據(jù)一股腦丟出來。5. Text2SQL 完整實(shí)現(xiàn)流程5.1 整體架構(gòu)設(shè)計(jì)把前面幾部分串起來一個(gè)完整的 Text2SQL 系統(tǒng)架構(gòu)是這樣的用戶輸入自然語言問題 → Claude Code 加載 Text2SQL Skill → Skill 指導(dǎo) AI 理解問題并調(diào)用 MCP 工具 → MCP 服務(wù)端查詢數(shù)據(jù)庫 schema → AI 生成 SQL → MCP 服務(wù)端執(zhí)行 SQL → 返回結(jié)果 → AI 用自然語言總結(jié)。這個(gè)鏈路里Skill 負(fù)責(zé)“怎么想”MCP 負(fù)責(zé)“怎么做”Claude Code 負(fù)責(zé)“協(xié)調(diào)”。三者各司其職缺一不可。我實(shí)際部署時(shí)還加了一個(gè)緩存層。相同或相似的問題直接返回緩存結(jié)果不用每次都走完整流程。緩存 key 用問題的語義哈希而不是字符串匹配這樣“查詢北京的用戶”和“北京有哪些用戶”能命中同一個(gè)緩存。5.2 Skill 定義文件完整示例下面是一個(gè)可以直接參考的 Skill 定義文件--- name: text2sql description: 將自然語言轉(zhuǎn)換為 SQL 查詢并執(zhí)行 version: 1.0 --- # 角色 你是一個(gè) SQL 查詢助手負(fù)責(zé)將用戶的自然語言問題轉(zhuǎn)換為 SQL 查詢語句并通過 MCP 工具執(zhí)行。 # 工作流程 1. 理解用戶問題識別涉及的實(shí)體和操作 2. 調(diào)用 get_schema 工具獲取相關(guān)表結(jié)構(gòu) 3. 根據(jù)表結(jié)構(gòu)生成 SQL 查詢 4. 調(diào)用 execute_query 工具執(zhí)行 SQL 5. 用自然語言總結(jié)查詢結(jié)果 # SQL 編寫規(guī)范 - 只生成 SELECT 語句 - 表名和字段名必須使用反引號包裹 - 多表 JOIN 必須明確指定 JOIN 條件 - 聚合查詢必須包含 GROUP BY 子句 - 日期字段使用標(biāo)準(zhǔn)格式 YYYY-MM-DD # 異常處理 - 問題模糊時(shí)先追問澄清再生成 SQL - 涉及的表不存在時(shí)提示用戶并列出可用表 - 生成的 SQL 置信度低于 0.7 時(shí)先展示 SQL 讓用戶確認(rèn) # 輸出格式 生成 SQL 后先展示 SQL 語句再執(zhí)行查詢最后總結(jié)結(jié)果。這個(gè) Skill 定義不算長但覆蓋了核心流程、規(guī)范、異常處理和輸出格式。實(shí)際使用時(shí)可以根據(jù)業(yè)務(wù)特點(diǎn)調(diào)整。5.3 MCP 工具定義與實(shí)現(xiàn)MCP 服務(wù)端需要暴露兩個(gè)核心工具get_schema和execute_query。get_schema接受表名參數(shù)返回表結(jié)構(gòu)信息。實(shí)現(xiàn)上就是從數(shù)據(jù)庫的 information_schema 里查詢字段信息整理成結(jié)構(gòu)化格式返回。execute_query接受 SQL 參數(shù)執(zhí)行查詢并返回結(jié)果。實(shí)現(xiàn)時(shí)要做好前面說的安全限制——只讀賬號、超時(shí)控制、結(jié)果集限制。工具的定義要清晰描述參數(shù)和返回值這樣 AI 才知道怎么調(diào)用。比如{ name: execute_query, description: 執(zhí)行 SELECT 查詢并返回結(jié)果, parameters: { sql: { type: string, description: 要執(zhí)行的 SQL 查詢語句只支持 SELECT }, limit: { type: integer, description: 返回的最大行數(shù)默認(rèn) 100 } } }5.4 端到端測試與效果驗(yàn)證配置完成后用真實(shí)場景做端到端測試。我準(zhǔn)備了這樣一組測試用例用戶輸入期望結(jié)果上個(gè)月有多少新用戶注冊生成帶日期過濾的 COUNT 查詢銷售額最高的前 10 個(gè)產(chǎn)品生成 ORDER BY LIMIT 查詢北京和上海的訂單量對比生成 GROUP BY 城市 COUNT 查詢刪除測試數(shù)據(jù)拒絕執(zhí)行測試時(shí)重點(diǎn)關(guān)注幾個(gè)指標(biāo)SQL 生成準(zhǔn)確率、執(zhí)行成功率、響應(yīng)時(shí)間、異常處理是否正確。我實(shí)測下來簡單查詢的準(zhǔn)確率能到 90% 以上復(fù)雜多表關(guān)聯(lián)的準(zhǔn)確率在 70% 左右。提升準(zhǔn)確率的關(guān)鍵是 schema 描述要清晰Skill 里的示例要覆蓋典型場景。6. 常見問題與排查技巧6.1 Skill 不生效的排查思路Skill 寫了但 Claude Code 好像沒讀到這是最常見的問題。排查順序是這樣的先確認(rèn)文件路徑對不對。不同版本的 Claude Code 對 Skill 目錄的約定可能不同查一下官方文檔確認(rèn)。然后確認(rèn)文件格式對不對frontmatter 的語法錯(cuò)誤會導(dǎo)致整個(gè)文件被忽略。再看 Skill 的 name 有沒有沖突同名的 Skill 可能互相覆蓋。如果這些都正??梢栽囍趯υ捓镏苯訂?Claude Code“你現(xiàn)在加載了哪些 Skill”它會列出當(dāng)前生效的 Skill 列表。如果列表里沒有你的 Skill那就是加載環(huán)節(jié)出了問題。踩坑記錄我有一次 Skill 死活不生效排查了半天發(fā)現(xiàn)是文件編碼問題。文件保存成了 GBK 編碼Claude Code 按 UTF-8 讀取frontmatter 解析失敗整個(gè)文件被跳過了。改成 UTF-8 后立刻正常。這種問題很隱蔽建議所有配置文件統(tǒng)一用 UTF-8 編碼。6.2 MCP 連接失敗的常見原因MCP 連接失敗的表現(xiàn)是 Claude Code 提示工具不可用或者調(diào)用工具時(shí)報(bào)錯(cuò)。常見原因有這么幾類服務(wù)端啟動失敗??赡苁且蕾嚊]裝全可能是端口被占用可能是配置文件路徑不對。先在命令行直接跑啟動命令看報(bào)什么錯(cuò)。通信協(xié)議不匹配。MCP 有版本差異服務(wù)端和客戶端的協(xié)議版本要對上。查一下雙方版本不匹配就升級或降級。權(quán)限問題。數(shù)據(jù)庫賬號權(quán)限不足或者文件系統(tǒng)權(quán)限不夠。檢查賬號的權(quán)限配置確認(rèn)能正常連接數(shù)據(jù)庫。網(wǎng)絡(luò)問題。遠(yuǎn)程模式下可能是防火墻、DNS、路由的問題。先用 telnet 或 curl 測試網(wǎng)絡(luò)連通性。6.3 SQL 生成質(zhì)量優(yōu)化SQL 生成質(zhì)量不穩(wěn)定時(shí)好時(shí)壞這是 Text2SQL 的常見痛點(diǎn)。優(yōu)化方向有幾個(gè)豐富 schema 描述。字段注釋、表注釋、枚舉值說明這些信息對 AI 理解業(yè)務(wù)含義非常重要?;〞r(shí)間把 schema 描述補(bǔ)全效果立竿見影。增加 Few-shot 示例。在 Skill 里放更多典型示例特別是那些 AI 容易搞錯(cuò)的場景。比如日期處理、多表關(guān)聯(lián)、聚合統(tǒng)計(jì)每個(gè)場景放兩三個(gè)示例。引入反饋機(jī)制。用戶對生成的 SQL 不滿意時(shí)可以給出修正意見這些修正記錄可以作為后續(xù)優(yōu)化的依據(jù)。我習(xí)慣把修正案例整理成新的示例補(bǔ)充到 Skill 里。分步驟生成。復(fù)雜查詢不要一步到位先讓 AI 拆解問題再逐步生成子查詢最后組合。這樣雖然慢一點(diǎn)但準(zhǔn)確率更高。6.4 性能與安全注意事項(xiàng)性能方面主要關(guān)注查詢效率和上下文占用。查詢效率靠數(shù)據(jù)庫索引和查詢優(yōu)化上下文占用靠控制 schema 暴露范圍和結(jié)果集大小。安全方面除了前面說的只讀賬號、超時(shí)控制、結(jié)果集限制還要注意敏感數(shù)據(jù)脫敏。用戶表里的手機(jī)號、身份證號、郵箱等字段返回結(jié)果前要做脫敏處理。這個(gè)可以在 MCP 服務(wù)端實(shí)現(xiàn)根據(jù)字段名自動識別敏感字段并脫敏。另外SQL 注入防護(hù)也要考慮。雖然 AI 生成的 SQL 通常不會有注入問題但用戶輸入的自然語言里可能包含惡意內(nèi)容。MCP 服務(wù)端要對生成的 SQL 做二次校驗(yàn)確保不包含危險(xiǎn)操作。問題類型排查方向解決方案Skill 不生效路徑、格式、編碼檢查目錄、frontmatter、UTF-8MCP 連接失敗啟動、協(xié)議、權(quán)限命令行測試、版本對齊、權(quán)限檢查SQL 質(zhì)量差schema、示例、流程補(bǔ)注釋、加示例、分步生成性能問題索引、上下文優(yōu)化查詢、控制暴露范圍安全問題權(quán)限、脫敏只讀賬號、字段脫敏這套配置我用了大半年中間迭代了十幾版 SkillMCP 服務(wù)端也重構(gòu)過兩次。最大的體會是Skill 和 MCP 的配置不是一勞永逸的需要根據(jù)實(shí)際使用情況持續(xù)調(diào)整。每次遇到生成錯(cuò)誤的 SQL都是一次優(yōu)化 Skill 的機(jī)會。把這些問題記錄下來定期回顧系統(tǒng)會越來越順手。最后分享一個(gè)小技巧給 Skill 加一個(gè)版本號每次修改都遞增。這樣出問題時(shí)可以快速回滾到上一個(gè)穩(wěn)定版本也方便對比不同版本的效果差異。這個(gè)習(xí)慣在多人協(xié)作時(shí)尤其重要能避免“誰改的、改了什么、為什么改”這類扯皮。