🚀 諮詢大語言模型MCP
這是一個MCP服務器,當你需要對複雜問題進行更深入的分析時,它可以讓Claude Code諮詢更強大的人工智能模型(o3、Gemini 2.5 Pro、DeepSeek Reasoner)。
這個SQL查詢在處理大型數據集時超時了。你能幫忙優化它嗎?詢問Gemini
⏺ 我會檢查你的查詢,並諮詢Gemini以獲取數據庫優化策略。
⏺ consult-llm:consult_llm (MCP)(prompt: "如何優化這個緩慢的SQL查詢,使其在大型數據集上有更好的性能?", files: ["queries/user -analytics.sql","schema/tables.sql"], model: "gemini-2.5-pro")
⎿ 該查詢存在顯著的性能瓶頸:連接列上缺少索引、可以用CTE替代的低效子查詢以及不必要的DISTINCT操作。在(user_id, created_at)上添加複合索引,用窗口函數替換相關子查詢,並消除冗餘的GROUP BY子句。
… +287行 (按ctrl+r展開)
⏺ 很棒的見解!我會添加建議的索引,重構子查詢以使用帶窗口函數的CTE,並優化GROUP BY操作。
✨ 主要特性
- 以相關文件為上下文,查詢強大的人工智能模型(o3、Gemini 2.5 Pro、DeepSeek Reasoner)
- 可選擇帶文件上下文進行直接查詢
- 包含git變更,用於代碼審查和分析
- 提供全面的日誌記錄和成本估算
📦 安裝指南
將MCP服務器添加到Claude Code:
claude mcp add consult-llm -- npx -y consult-llm-mcp
或者使其全局可用:
claude mcp add --scope user consult-llm -- npx -y consult-llm-mcp
你也可以在MCP配置中直接提供環境變量:
claude mcp add \
-e OPENAI_API_KEY=your_openai_key \
-e GEMINI_API_KEY=your_gemini_key \
-e DEEPSEEK_API_KEY=your_deepseek_key \
consult-llm -- npx -y consult-llm-mcp
💻 使用示例
與Claude Code一起使用
示例工作流程
解釋問題並讓Claude Code諮詢更強大的大語言模型
<這裡是對問題的詳細解釋>
諮詢大語言模型以獲取幫助,使用Gemini
⏺ 我明白問題所在了!問題在於前端試圖使用“isn't”的提示,但服務器生成的是“isn't it”(完整短語)的提示。這是前端文本分割方式與服務器生成提示方式之間的不匹配。
讓我諮詢大語言模型以解決這個分割不匹配的問題。
⏺ Write(hint-segmentation-issue.md)
⎿ 已向hint-segmentation-issue.md寫入53行
# 提示分割不匹配問題
## 問題描述
前端對可點擊單詞的文本分割方式與後端生成提示的方式不匹配。當分割不完全匹配時,會導致提示解鎖失敗。
## 示例情況
**原始文本**:"Hello! Nice weather, isn't it?"
… +43行 (按ctrl+r展開)
⏺ consult-llm:consult_llm (MCP)(model: "gemini-2.5-pro", files: ["/project/hint -segmentation-issue.md","/project/web/src/components/HintsText.tsx","/project/web/src/utils/hints.ts","/project/server/src/routes/public/hints.ts","/project/server/src/llm/hints.ts"])
⎿ 對問題的出色分析。已正確識別出根本原因:`HintsText.tsx`中的`handleConfirmGenerateHints`函數存在競態條件。在`await generateHints()`之後,組件狀態在後臺更新,但函數繼續使用陳舊的`activeSegment`變量執行,導致它請求的是較小文本段(例如“isn't”)的提示,而不是完整的、新可用的提示短語(例如“isn't it”)。
… +607行 (按ctrl+r展開)
⏺ 完美!大語言模型識別出了核心問題——`handleConfirmGenerateHints`中存在競態條件,該函數在異步操作後使用了陳舊的狀態。解決方案是在生成提示後重新定位提示鍵,以找到正確匹配的提示。
讓我來實現這個解決方案:
⏺ 更新待辦事項
⎿ ☐ 通過在handleConfirmGenerateHints中實現更智能的提示鍵定位來修復提示分割不匹配問題
調試Neovim插件treesitter API中斷問題
⏺ 已修復!為節點和子節點添加了空值檢查,並更新了iter_matches調用以正確處理較新的API。
> 仍然無法正常工作:
E5108: 執行lua /Users/raine/code/testonly.nvim/lua/testonly.lua:92時出錯: 嘗試調用方法 'child' (一個空值)
堆棧跟蹤:
/Users/raine/code/testonly.nvim/lua/testonly.lua:92: 在函數 'reset_all_exclusive' 中
/Users/raine/code/testonly.nvim/lua/testonly.lua:110: 在函數 'reset_all_exclusive' 中
[string ":lua"]:1: 在主塊中
詢問Gemini
⏺ 讓我諮詢更強大的人工智能,以瞭解當前Neovim treesitter API的變化:
⏺ consult-llm:consult_llm (MCP)(prompt: "我正在調試一個因treesitter API更改而中斷的Neovim插件。錯誤信息是 \"嘗試調用方法 'child' (一個空值)\",位於第92行。代碼試圖從treesitter匹配中訪問子節點,但在較新的Neovim版本中,API似乎發生了變化。
這裡是有問題的代碼:
```lua
for _, match, _ in parsed_query:iter_matches(root, bufnr, start_row, end_row) do
for id, node in pairs(match) do
local name = parsed_query.captures[id]
if name == "call" and node then
local child = node:child(0) -- 此處出錯
if child then
local text = vim.treesitter.get_node_text(child, bufnr)
-- ... 其餘邏輯
end
end
end
end
在當前的Neovim treesitter版本中,正確遍歷treesitter查詢匹配並訪問子節點的方法是什麼?我應該注意哪些API更改?", files: ["/Users/raine/code/testonly.nvim/lua/testonly.lua"])
⎿ 問題
-------
… +93行 (按ctrl+r展開)
⏺ 完美!問題在於iter_matches()在匹配表中可能返回空節點。讓我通過切換到推薦的iter_captures()方法來修復這個問題:
⏺ Update(lua/testonly.lua)
⎿ 已更新lua/testonly.lua,添加7行,刪除10行
85 local root = parser:parse()[1]:root()
86 local start_row, _, end_row, _ = root:range()
87
88 - for _, match, _ in parsed_query:iter_matches(root, bufnr, start_row, end_row) do
89 - for id, node in pairs(match) do
90 - local name = parsed_query.captures[id]
91 - if name == "call" and node then
92 - local child = node:child(0)
93 - if child then
94 - local text = vim.treesitter.get_node_text(child, bufnr)
88 + for id, node, _ in parsed_query:iter_captures(root, bufnr, start_row, end_row) do
89 + if parsed_query.captures[id] == "call" then
90 + local first_child = node:named_child(0)
91 + if first_child then
92 + local text = vim.treesitter.get_node_text(first_child, bufnr)
93
94 - if text == "it.only" or text == "describe.only" then
95 - toggle_test_exclusive(child)
96 - end
94 + if text == "it.only" or text == "describe.only" then
95 + toggle_test_exclusive(first_child)
96 end
97 end
98 end
⏺ 已修復!關鍵更改如下:
- 從
iter_matches()切換到iter_captures(),後者從不返回空節點
- 使用
named_child(0)而不是child(0)來僅獲取有意義的語法節點(非標點符號)
- 簡化了迭代邏輯,因為
iter_captures()直接提供了節點和捕獲ID
你的tr映射現在應該可以與當前的Neovim treesitter API正常工作了。
</details>
## 📚 詳細文檔
### MCP工具:consult_llm
服務器提供了一個名為`consult_llm`的工具,用於向強大的人工智能模型詢問複雜問題。
#### 參數
- **prompt**(必需):你向諮詢大語言模型提出的問題或請求
- **files**(可選):作為上下文包含的文件路徑數組
- 所有文件都將作為上下文添加,包含文件路徑和代碼塊
- **model**(可選):要使用的大語言模型
- 選項:`o3`(默認)、`gemini-2.5-pro`、`deepseek-reasoner`
- **git_diff**(可選):將git差異輸出作為上下文包含
- **files**(必需):差異中要包含的特定文件
- **repo_path**(可選):git倉庫的路徑(默認為當前目錄)
- **base_ref**(可選):用於比較的git引用(默認為HEAD)
#### 示例用法
**基本提示:**
```json
{
"prompt": "在Node.js中,使用async/await與Promise.then()對性能有什麼影響?"
}
帶文件上下文:
{
"prompt": "如何優化這個身份驗證中間件?",
"files": ["src/auth.ts", "src/middleware.ts"],
"model": "o3"
}
帶git差異:
{
"prompt": "審查這些身份驗證更改是否存在安全問題",
"files": ["src/auth.ts"],
"git_diff": {
"files": ["src/auth.ts", "src/middleware.ts"],
"base_ref": "main"
},
"model": "gemini-2.5-pro"
}
支持的模型
- o3:OpenAI的推理模型(每百萬令牌2美元/8美元)
- gemini-2.5-pro:Google的Gemini 2.5 Pro(每百萬令牌1.25美元/10美元)
- deepseek-reasoner:DeepSeek的推理模型(每百萬令牌0.55美元/2.19美元)
日誌記錄
所有提示和響應都會記錄到~/.consult-llm-mcp/logs/mcp.log中,包含以下信息:
- 工具調用參數
- 完整的提示和響應
- 令牌使用情況和成本估算
示例
[2025-06-22T20:16:04.673Z] 工具調用:consult_llm
參數:{
"files": [
"refactor-analysis.md",
"src/main.ts",
"src/schema.ts",
"src/config.ts",
"src/llm.ts",
"src/llm-cost.ts"
],
"model": "deepseek-reasoner"
}
================================================================================
[2025-06-22T20:16:04.675Z] 提示 (模型: deepseek-reasoner):
## 相關文件
### 文件: src/main.ts
...
請提供具體的重構建議,並在必要時給出示例代碼結構。
================================================================================
[2025-06-22T20:19:20.632Z] 響應 (模型: deepseek-reasoner):
根據分析,以下是提高關注點分離和可維護性的關鍵重構建議:
...
這種重構在保持所有現有功能的同時,顯著提高了可維護性和關注點分離。新結構使添加新功能(如新的大語言模型提供商、額外的上下文源或替代提示格式)變得更加容易。
令牌:輸入3440個,輸出5880個 | 成本:0.014769美元(輸入:0.001892美元,輸出:0.012877美元)
CLAUDE.md示例
雖然不是嚴格必需的,但為了幫助Claude Code理解何時以及如何使用此工具,你可以選擇在項目的CLAUDE.md文件中添加以下內容:
## consult-llm-mcp
使用`consult_llm` MCP工具向更強大的人工智能尋求複雜問題的幫助。在請求對更改的反饋時,包含文件或git差異。
使用Gemini 2.5 Pro。
重要提示:詢問時不要提供選項,這會影響答案的客觀性。
不過,即使沒有此說明,Claude Code似乎也能很好地知道何時使用這個MCP。