MCP Python 服務(wù)器示例:集成千問大模型的智能工具服務(wù)

這是一個使用 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?",模型會:

  1. 理解問題需要先計算 3+5,再乘以 12
  2. 調(diào)用 add(3, 5) 工具得到 8
  3. 調(diào)用 multiply(8, 12) 工具得到 96
  4. 返回最終答案: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)資源

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容