【編程干貨】本地用 Ollama + LLaMA 3 實現 Model Context Protocol(MCP)對話服務

模型上下文協議(MCP)本身提供的是一套標準化的通信規則和接口,簡化了客戶端應用的開發。

MCP 實際上是一套規范,官方把整套協議分成「傳輸層 + 協議層 + 功能層」三大塊,并對初始化握手、能力協商、數據/工具暴露、安全約束等均給出了約束性 JSON-Schema。

基于 JSON-RPC 2.0 的開放協議,目標是像 USB-C 一樣為 LLM 應用提供統一“插槽”。它定義三方角色——Host(應用)/Client(適配層)/Server(能力提供者),通過標準消息把 資源、工具、提示模板 等上下文按需送進 LLM,同時保留“人-機共管”審批流程,實現安全、可組合的本地或遠程代理體系。

但是,需要注意,不要連接不信任的 server,MCP 沒有在數據安全上提供任何保障。

下面我們可以實現一個最簡的 MCP 服務。

0 先決條件

軟件

版本建議

作用

操作系統

Windows 10/11、macOS 13+ 或任何較新的 Linux

僅需能運行 Ollama

Ollama

≥ 0.1.34

本地大語言模型后端

Python

3.10 – 3.12

運行 FastAPI 服務

Git

最新

克隆或管理代碼

CUDA 12+(可選)

若使用 NVIDIA GPU

提升推理速度

CPU 也可運行,但 LLaMA 3-8B 在 GPU 上體驗最佳。

1 安裝 Ollama 并拉取 LLaMA 3

# 1.1 安裝(macOS / Linux)
curl -fsSL https://ollama.com/install.sh | sh
# Windows 請下載 .msi 并雙擊安裝# 1.2 啟動后臺(首次安裝會自動啟動)
ollama serve# 1.3 拉取 8B 模型(約 4.7 GB)
ollama pull llama3:8b

2 創建最小可用的 MCP 后端

2.1 目錄結構
mcp-ollama/
│
├── app/
│   ├── main.py # FastAPI 入口
│   ├── mcp.py # 協議封裝
│   └── store.py # 簡易上下文存儲
└── requirements.txt

2.2 requirements.txt
fastapi==0.110.*
uvicorn[standard]==0.29.*
httpx==0.27.*
python-dotenv==1.0.*

2.3 MCP 協議封裝(app/mcp.py)
from typing importList, Dictdefbuild_prompt(history: List[Dict[str, str]], user_msg: str) -> str:"""把歷史消息與當前輸入拼接成大模型 prompt。MCP 規定 key 為 role / content,與 OpenAI messages 一致。"""lines = []for msg in history:lines.append(f"{msg['role'].upper()}: {msg['content']}")lines.append(f"USER: {user_msg}")return"\n".join(lines)SYSTEM_PROMPT = ("You are an AI assistant that follows instructions precisely. ""Answer in the same language as the question."
)

2.4 上下文存儲(app/store.py)
from collections import defaultdict, deque_MAX_TURNS = 8 # 只保留最近 8 輪
_history = defaultdict(lambda: deque(maxlen=_MAX_TURNS))def add_msg(session_id: str, role: str, content: str):_history[session_id].append({"role": role, "content": content})def get_history(session_id: str):return list(_history[session_id])

2.5 FastAPI 入口(app/main.py)
import os, uuid, httpx
from fastapi import FastAPI
from pydantic import BaseModel
from app.mcp import build_prompt, SYSTEM_PROMPT
from app.store import add_msg, get_historyOLLAMA_URL = os.getenv("OLLAMA_URL", "http://localhost:11434")classChatReq(BaseModel):session_id: str | None = Nonemessage: strclassChatResp(BaseModel):session_id: stranswer: strapp = FastAPI(title="MCP Demo")@app.post("/chat", response_model=ChatResp) async def chat(req: ChatReq):sid = req.session_id orstr(uuid.uuid4())history = get_history(sid)prompt = f"{SYSTEM_PROMPT}\n{build_prompt(history, req.message)}"payload = {"model": "llama3:8b", "prompt": prompt, "stream": False}asyncwith httpx.AsyncClient() as client:r = await client.post(f"{OLLAMA_URL}/api/generate", json=payload, timeout=120)r.raise_for_status()ans = r.json()["response"]add_msg(sid, "user", req.message)add_msg(sid, "assistant", ans)return ChatResp(session_id=sid, answer=ans)

2.6 運行服務

pip install -r requirements.txt
uvicorn app.main:app --reload --port 8000

3 驗證接口

# 第一次調用
curl -X POST http://localhost:8000/chat \
-H "Content-Type: application/json" \
-d '{"message":"Hello, what is MCP?"}' # 記錄返回的 session_id# 帶歷史上下文的第二次調用
curl -X POST http://localhost:8000/chat \
-H "Content-Type: application/json" \
-d '{"session_id":"<上一步返回的id>","message":"Explain in Chinese."}'

你將看到回答中自動繼承了第一輪對話,上下文邏輯即生效。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/79907.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/79907.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/79907.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

永磁同步電機控制算法-基于新型趨近律的反饋線性化滑模控制

一、原理介紹 針對永磁同步電機傳統PID矢量控制方式無法實現d、q軸電流完全解耦控制的問題&#xff0c;運用反饋線性化理論實現永磁同步電機轉速和d軸電流解耦。針對反饋線性化導致的魯棒性下降問題&#xff0c;利用滑模控制方式提高系統魯棒性&#xff0c;引入新型雙冪次趨近…

德爾菲法和層次分析法是什么

德爾菲法和層次分析法是什么 德爾菲法和層次分析法是兩種常用的決策分析方法 德爾菲法 定義:德爾菲法是一種采用背對背的通信方式征詢專家小組成員的預測意見,經過幾輪征詢,使專家小組的預測意見趨于集中,最后做出符合市場未來發展趨勢的預測結論。實施步驟 組成專家小組…

【windows】win10部分版本的sxs文件下載

Win10部分版本的sxs文件下載 win10 1703 鏈接: https://pan.baidu.com/s/13O5djVSWIhIjBP1ZVtORAA?pwdsdpp 提取碼: sdpp win10 1809 鏈接: https://pan.baidu.com/s/1vUEMQWqWcyTicHLJNox99w?pwddfx4 提取碼: dfx4 win10 1903,1909 鏈接: https://pan.baidu.com/s/1MoKcm3N…

Java項目部署-Springboot+Vue網頁部署上線全教程

SpringbootVue網頁部署上線全教程 文章目錄 SpringbootVue網頁部署上線全教程1.環境說明2.Mysql安裝部署2.1 安裝并修改密碼2.2 防火墻開放 3.Spring Boot項目打包3.1 配置公網ip3.2 安裝 Maven3.3 使用 Maven 打包 Spring Boot 項目3.4 Centos運行Jar包3.4.1 安裝 Java 1.8 環…

FISCO BCOS【初體驗筆記】

飛梭區塊鏈搭建初體驗筆記 環境部署創建四個節點的飛梭區塊鏈用的VMware17 centos 7.9 區塊鏈是飛梭2.0用的webase-frontJava環境的正確安裝Webase-front搭建 智能合約設計一點合約調試筆記 智能合約abi文件轉為go文件后端項目配置相關工具linux常用命令&#xff08;防忘記&…

內容社區系統開發文檔

1 系統分析 1.1 項目背景 1.2 需求分析 2 系統設計 2.1 系統功能設計 2.2 數據庫設計 2.2.1 數據庫需求分析 2.2.2 數據庫概念結構設計 2.2.3 數據庫邏輯結構設計 2.2.4 數據庫物理結構設計 2.2.5 數據庫視圖設計 2.2.6 函數設計 2.2.7 存儲過程設計 2.2.8 觸發器…

BigemapPro小技巧:調整線方向及延長線

今天為大家分享兩個 BigemapPro 處理矢量數據的小技巧&#xff0c;分別是調整線方向和延長線要素&#xff0c;掌握這些技巧能夠大幅提升數據處理的效率和準確性。 01 調整線方向 在BigemapPro中&#xff0c;線要素其實是帶有方向屬性的&#xff0c;正常情況下看不出來 但是如果…

nt!MiSessionAddProcess函數分析和nt!MmSessionSpace全局變量的關系

第一部分&#xff1a; 1: kd> g Breakpoint 42 hit nt!MiSessionAddProcess: 80ab2fbe 55 push ebp 1: kd> kc # 00 nt!MiSessionAddProcess 01 nt!MmCreateProcessAddressSpace 02 nt!PspCreateProcess 03 nt!NtCreateProcessEx 04 nt!_KiSystemServic…

2025年消防設施操作員考試題庫及答案

一、判斷題 31.消防用水不作他用的技術措施應每季度進行檢查&#xff0c;若發現故障應及時進行處理。&#xff08;&#xff09; 答案&#xff1a;錯誤 解析&#xff1a;本題考查的是消防水池、高位消防水箱的保養方法。每月檢查消防用水不作他用的技術措施&#xff0c;發現故…

Ray開源程序 是用于擴展 AI 和 Python 應用程序的統一框架。Ray 由一個核心分布式運行時和一組用于簡化 ML 計算的 AI 庫組成

?一、軟件介紹 文末提供程序和源碼下載 Ray開源程序 是用于擴展 AI 和 Python 應用程序的統一框架。Ray 由一個核心分布式運行時和一組用于簡化 ML 計算的 AI 庫組成 二、Ray AI 庫的更多信息 數據&#xff1a;適用于 ML 的可擴展數據集訓練&#xff1a;分布式訓練Tune&…

軟件設計師-軟考知識復習(3)

在磁盤上存儲數據的排列方式會影響I/O服務的總時間。假設每個磁道被劃分成10個物理塊&#xff0c;每個物理塊存放1個邏輯記錄。邏輯記錄R1,R2…R10存放在同一個磁道上&#xff0c;記錄的排列從1到10。 假定磁盤的旋轉速度為10ms/周&#xff0c;磁頭當前處在R1的開始處。若系統…

Unity Editor 擴展:查找缺失的 Image Sprite

在 Unity 開發過程中&#xff0c;缺失的 Sprite 引用&#xff08;特別是在 UI 元素上&#xff09;可能導致程序運行時出現問題&#xff0c;尤其是在使用 Image 組件時。當你擁有多個 Prefab 和大量的 UI 資源時&#xff0c;手動檢查每個 Prefab 是否缺失了 Source Image 變得十…

在VTK中使用VTKCamera

文章目錄 概要Cpp代碼概要 在VTK(Visualization Toolkit)中,vtkCamera 類用于控制三維場景中相機的視角。相機決定了你從哪個角度和位置觀察三維場景。使用 vtkCamera 的一般步驟包括創建相機對象、配置相機參數、將相機設置為渲染器的活動相機,以及更新相機視圖。 Cpp代…

【Docker系列】使用格式化輸出與排序技巧

&#x1f49d;&#x1f49d;&#x1f49d;歡迎來到我的博客&#xff0c;很高興能夠在這里和您見面&#xff01;希望您在這里可以感受到一份輕松愉快的氛圍&#xff0c;不僅可以獲得有趣的內容和知識&#xff0c;也可以暢所欲言、分享您的想法和見解。 推薦:kwan 的首頁,持續學…

臨床智能體AI與環境感知AI的融合:基于python的醫療自然語言處理深度分析

引言 醫療領域的數智化進程正以前所未有的速度推進,人工智能技術的應用尤為顯著。隨著大型語言模型(LLMs)的迅猛發展,醫療AI已從簡單的輔助工具升級為復雜的智能體系統。臨床智能體AI與環境感知AI的融合代表了醫療AI的最新發展方向,為重塑醫療運營自然語言處理提供了全新…

JAVA SE(9)——多態

1.多態的概念&作用 多態(Polymorphism)是面向對象編程的三大基本特性之一&#xff08;封裝和繼承已經講過了&#xff09;&#xff0c;它允許不同類的對象對同一消息做出不同的響應。具體來說&#xff0c;多態允許基類/父類的引用指向派生類/子類的對象&#xff08;向上轉型…

GPS定位方案

目錄 一、常用的GPS定位方案包括&#xff1a; 二、主流品牌及熱銷型號 三、常用GPS算法及核心邏輯&#xff1a; 一、基礎定位算法 二、高精度算法 三、輔助優化算法 四、信號處理底層算法 四、基本原理&#xff08;想自己寫算法的琢磨一下原理&#xff09; 一、常用的GP…

PCIe - ZCU106(RC) + KU5P(EP) + 固化

目錄 1. 簡介 1.1 Data Mover 1.2 描述符 2. ZCU102 2.1 Ubuntu OS 2.2 USB Host 2.2.1 連接拓撲 2.2.2 設備類型 2.2.3 USB 跳帽設置 2.3 無線網卡 2.4 PCIe Info 2.4.1 Diagram 2.4.2 lspci -tv 2.4.3 lspci -v 2.4.2.1 設備基本信息 2.4.2.2 控制與狀態寄存…

精益數據分析(43/126):媒體網站商業模式的盈利與指標解析

精益數據分析&#xff08;43/126&#xff09;&#xff1a;媒體網站商業模式的盈利與指標解析 在創業和數據分析的學習旅程中&#xff0c;我們不斷探索各種商業模式的奧秘&#xff0c;今天讓我們一同深入《精益數據分析》&#xff0c;聚焦媒體網站商業模式&#xff0c;剖析其盈…

Android數據庫全棧開發實戰:Room+SQLCipher+Hilt企業級應用構建

簡介 在移動應用開發中,數據庫作為數據存儲的核心組件,其安全性和性能對企業級應用至關重要。本文將從零開始,全面講解Android數據庫開發的最新技術,包括Room框架的深度使用、SQLCipher加密數據庫的實現、Hilt依賴注入的集成以及前后端數據同步的完整方案。通過一個加密任…