Back to blog
    mcpclaude-desktoplocal-modelollamafine-tuning

    MCP + 微調本地模型:將 Claude 連接到你的特定領域 AI

    模型上下文協議(MCP)讓 Claude Desktop 可以與任何伺服器通訊——包括你自己的 Ollama 託管的微調模型。以下是將 Claude 請求路由到自訂領域模型的架構和設置。

    Edward Xi Yang

    模型上下文協議(MCP)是 Anthropic 的開放標準,用於將 AI 助手連接到外部工具、資料來源和服務。Claude Desktop 開箱即用地支援 MCP——因為 MCP 伺服器可以是任何 HTTP 服務,你可以用它將 Claude 連接到你自己的 Ollama 託管的微調模型。

    結果:Claude 處理對話介面和通用推理,而你的微調模型處理它被訓練的特定領域任務。零費用的領域推理,Claude 的介面。

    MCP 實際上是什麼

    MCP 是一個協議,而不是一個產品。它定義了 AI 助手(客戶端)從外部伺服器(MCP 伺服器)發現和呼叫能力的標準方式。MCP 伺服器公開:

    • 工具 — AI 可以呼叫的函數("search_database"、"classify_document"、"generate_listing")
    • 資源 — AI 可以讀取的資料來源("customer_records"、"product_catalog")
    • 提示 — AI 可以參考的可重用提示範本

    Claude Desktop 讀取一個 MCP 配置檔案並連接到其中列出的伺服器。當你要求 Claude 做某事時,它可以呼叫這些伺服器的工具作為其回應的一部分。

    關鍵洞察: MCP 伺服器只是一個基於 HTTP 或 stdio 的服務。它內部執行什麼沒有什麼特別的。你的微調模型,由 Ollama 服務,可以支持 Claude 呼叫的 MCP 工具。

    架構

    使用者詢問 Claude Desktop:「為這個房產產生一個房源清單...」
            ↓
    Claude Desktop 識別這映射到 real_estate_tools MCP 伺服器
            ↓
    Claude 呼叫 generate_listing 工具(透過 MCP)
            ↓
    MCP 伺服器接收請求
            ↓
    MCP 伺服器呼叫你的 Ollama API(微調房源模型)
            ↓
    Ollama 返回產生的房源清單
            ↓
    MCP 伺服器將結果返回給 Claude
            ↓
    Claude 格式化並向使用者呈現結果
    

    Claude 充當協調器和對話介面。你的微調模型進行專業化的領域推理。

    構建 MCP 伺服器

    MCP 伺服器可以用 @modelcontextprotocol/sdk npm 套件或 mcp Python 套件構建。

    包裝 Ollama 的最小 Node.js MCP 伺服器:

    // mcp-server.js
    import { Server } from '@modelcontextprotocol/sdk/server/index.js';
    import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
    import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';
    
    const OLLAMA_BASE = 'http://localhost:11434';
    const MODEL_NAME = 'your-fine-tuned-model'; // 你在 Ollama 中給它的名稱
    
    const server = new Server(
      { name: 'domain-model-server', version: '1.0.0' },
      { capabilities: { tools: {} } }
    );
    
    // 宣告 Claude 可以呼叫的工具
    server.setRequestHandler(ListToolsRequestSchema, async () => ({
      tools: [
        {
          name: 'generate_domain_content',
          description: '使用微調模型產生特定領域的內容。用於[你的用例描述]。',
          inputSchema: {
            type: 'object',
            properties: {
              prompt: {
                type: 'string',
                description: '對領域模型的具體請求'
              },
              context: {
                type: 'string',
                description: '額外的上下文(房產詳情、產品資訊等)'
              }
            },
            required: ['prompt']
          }
        }
      ]
    }));
    
    // 處理工具呼叫
    server.setRequestHandler(CallToolRequestSchema, async (request) => {
      if (request.params.name === 'generate_domain_content') {
        const { prompt, context } = request.params.arguments;
    
        const fullPrompt = context
          ? `Context: ${context}\n\nRequest: ${prompt}`
          : prompt;
    
        const response = await fetch(`${OLLAMA_BASE}/api/chat`, {
          method: 'POST',
          headers: { 'Content-Type': 'application/json' },
          body: JSON.stringify({
            model: MODEL_NAME,
            messages: [{ role: 'user', content: fullPrompt }],
            stream: false
          })
        });
    
        const data = await response.json();
        const content = data.message.content;
    
        return {
          content: [{ type: 'text', text: content }]
        };
      }
    
      throw new Error(`Unknown tool: ${request.params.name}`);
    });
    
    // 透過 stdio 啟動伺服器(Claude Desktop 以這種方式連接)
    const transport = new StdioServerTransport();
    await server.connect(transport);

    Claude Desktop 配置

    編輯 ~/Library/Application Support/Claude/claude_desktop_config.json(macOS)或 %APPDATA%\Claude\claude_desktop_config.json(Windows):

    {
      "mcpServers": {
        "domain-model": {
          "command": "node",
          "args": ["/path/to/your/mcp-server.js"],
          "env": {}
        }
      }
    }

    重啟 Claude Desktop。你的 MCP 伺服器的工具現在可供 Claude 使用。

    測試連接

    在 Claude Desktop 中,輸入應該觸發你的工具的提示:

    「為波特蘭一棟帶有更新廚房和原始硬木地板的 3 臥室工匠平房產生一個房源描述。」

    Claude 應該呼叫你的 generate_domain_content 工具,並從你的微調模型返回輸出。你可以觀看 MCP 伺服器的 stdout 以獲取調試輸出來確認連接。

    用例範例

    房地產仲介: MCP 伺服器包裝房源描述模型。代理詢問 Claude「為[房產]撰寫房源」,Claude 呼叫工具,微調模型產生品牌一致的描述。

    電子商務支援: MCP 伺服器包裝支援解決模型。支援代理詢問 Claude「我應該如何回應這張關於[問題]的票?」,Claude 呼叫工具,返回解決方案草稿。

    內容機構: MCP 伺服器包裝品牌語調模型。文案撰稿人詢問 Claude「為[品牌]撰寫一篇關於[主題]的 LinkedIn 貼文」,Claude 呼叫品牌特定工具。

    一般模式:Claude 用於介面和推理,你的微調模型用於專業化的領域任務。


    延伸閱讀

    就本文向 AI 提問

    Ship AI that runs on your users' devices.

    Free plan with 30 credits/mo, no card required. Paid plans from $10/mo USD.

    Keep reading