這是一個使用 Python 實現(xiàn)的 MCP(Model Context Protocol)服務(wù)器示例,展示了如何將大語言模型與本地工具服務(wù)集成,實現(xiàn)智能化的數(shù)學(xué)計算和文本處理功能。
?? 項目特色
- MCP 協(xié)議實現(xiàn) :基于最新的 Model Context Protocol 標(biāo)準(zhǔn)
- 千問大模型集成 :支持阿里云千問模型的 API 調(diào)用
- LangChain 框架 :使用 LangChain 和 LangGraph 構(gòu)建智能代理
- 工具鏈擴(kuò)展 :可輕松擴(kuò)展更多自定義工具
- 異步處理 :全異步架構(gòu),高性能處理
?? 功能特性
?? 數(shù)學(xué)工具
- add(a, b) : 兩數(shù)相加
- multiply(a, b) : 兩數(shù)相乘
?? AI 增強(qiáng)功能
- 自然語言數(shù)學(xué)問題解析
- 智能工具選擇和調(diào)用
- 上下文理解和推理
??? 技術(shù)棧
- Python 3.11+
- MCP (Model Context Protocol) : 模型上下文協(xié)議
- LangChain : 大語言模型應(yīng)用框架
- LangGraph : 智能代理構(gòu)建
- FastMCP : 快速 MCP 服務(wù)器實現(xiàn)
- 千問大模型 : 阿里云 DashScope API
?? 安裝依賴
1. 環(huán)境準(zhǔn)備
# 激活 conda 環(huán)境
conda activate dba
# 安裝項目依賴
pip install -r requirements.txt
2. 環(huán)境配置
創(chuàng)建 .env 文件并配置千問 API:
# 阿里云千問API配置
DASHSCOPE_API_KEY=your_api_key_here
DASHSCOPE_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
DASHSCOPE_MODEL=qwen3-235b-a22b
?? 獲取 API Key : 訪問 阿里云 DashScope 注冊并獲取 API 密鑰
?? 項目結(jié)構(gòu)
mcp-frist/
├── .env # 環(huán)境變量配置
├── math_server.py # MCP 服務(wù)器實現(xiàn)
├── client.py # 客戶端示例
├── requirements.txt # 項目依賴
└── README.md # 項目文檔
?? 核心代碼解析
MCP 服務(wù)器 (math_server.py)
# math_server.py
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("Math")
@mcp.tool()
def add(a: int, b: int) -> int:
"""Add two numbers"""
return a + b
@mcp.tool()
def multiply(a: int, b: int) -> int:
"""Multiply two numbers"""
return a * b
if __name__ == "__main__":
mcp.run(transport="stdio")
智能客戶端 (client.py)
import asyncio
import os
from dotenv import load_dotenv
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
from langchain_mcp_adapters.tools import load_mcp_tools
from langgraph.prebuilt import create_react_agent
from langchain_openai import ChatOpenAI
# 加載環(huán)境變量
load_dotenv()
async def main():
# Create server parameters for stdio connection
server_params = StdioServerParameters(
command="python",
# Make sure to update to the full absolute path to your math_server.py file
args=["./math_server.py"],
)
async with stdio_client(server_params) as (read, write):
async with ClientSession(read, write) as session:
# Initialize the connection
await session.initialize()
# Get tools
tools = await load_mcp_tools(session)
# 使用千問模型配置,移除不支持的參數(shù)
llm = ChatOpenAI(
model=os.getenv("DASHSCOPE_MODEL", "qwen-turbo"), # 使用更穩(wěn)定的模型
api_key=os.getenv("DASHSCOPE_API_KEY"),
base_url=os.getenv("DASHSCOPE_BASE_URL"),
temperature=0.7,
extra_body={"enable_thinking": False},
)
# Create and run the agent with Qwen model
agent = create_react_agent(llm, tools)
agent_response = await agent.ainvoke({"messages": "what's (3 + 5) x 12?"})
print(agent_response)
if __name__ == "__main__":
asyncio.run(main())
?? 項目使用
運行客戶端測試
python client.py
示例交互
客戶端會自動向千問模型提問:"what's (3 + 5) x 12?",模型會:
- 理解問題需要先計算 3+5,再乘以 12
- 調(diào)用 add(3, 5) 工具得到 8
- 調(diào)用 multiply(8, 12) 工具得到 96
- 返回最終答案:96
?? 常見問題
Q: 遇到 "enable_thinking" 參數(shù)錯誤
A: 確保使用 qwen-turbo 模型,避免使用實驗性模型參數(shù)。
Q: API 調(diào)用失敗
A: 檢查 .env 文件中的 API Key 是否正確,確保網(wǎng)絡(luò)連接正常。
Q: 依賴安裝失敗
A: 建議使用 Python 3.11+ 版本,確保 pip 版本最新。
?? 相關(guān)資源
MCP 官方文檔
LangChain 文檔
FastMCP 項目