当前位置: 首页 > news >正文

Python+MCP+LLM

初步了解server 和 client

MCP server

from fastmcp import FastMCP
import requests
import jsonmcp = FastMCP()def post_json(url: str, payload: dict):try:response = requests.post(url, json=payload)return json.dumps(response.json(), ensure_ascii=False, indent=2)except Exception as e:return f"❌ 请求失败: {e}"@mcp.tool(description="获取对应天气")
def get_weather(city:str):return f'{city}天气好'@mcp.tool(description="读取本地文本文件,输入是文件路径")
def read_text_tool(file_path: str) -> str:return post_json("http://localhost:8000/read_text", {"file_path": file_path})@mcp.tool(description="读取 PDF 文件文本内容,输入是文件路径")
def read_pdf_tool(file_path: str) -> str:return post_json("http://localhost:8000/read_pdf", {"file_path": file_path})@mcp.tool(description="预览 PDF 首页图片,输入是文件路径")
def preview_pdf_tool(file_path: str, max_pages: int = 1) -> str:return post_json("http://localhost:8000/preview_pdf", {"file_path": file_path,"max_pages": max_pages})if __name__ == '__main__':mcp.run()  

MCP Client

import asyncio
from fastmcp import Client
from server import mcpasync def run():client = Client(mcp)async with client:tools = await client.list_tools()tool=tools[0]result=await client.call_tool(tool.name,{"city":"nanchang"})print(result)if __name__ == '__main__':asyncio.run(run())

进阶

使用本地部署的ollama尝试调用mcp封装好的工具

import asyncio
from typing import Dict, List
from fastmcp import Client
from server import mcp
from openai import OpenAIclass UserClient:def __init__(self,model="qwen3:0.6b"):self.model=modelself.mcp_client=Client(mcp)self.openai_client=OpenAI(base_url="http://127.0.0.1:11434/v1",api_key="None")self.message=[{"role":"system","content":"你是一个AI助手,你需要借助工具,回答用户问题"}]self.tools=[]async def prepare_tools(self):tools=await self.mcp_client.list_tools()tools=[{"type":"function","function":{"name":tool.name,"description":tool.description,"input_schema":tool.inputSchema}}for tool in tools]return toolsasync def chat(self, messages: List[Dict]):async with self.mcp_client:if not self.tools:self.tools = await self.prepare_tools()response = self.openai_client.chat.completions.create(model=self.model,messages=messages,tools=self.tools,)print(response)async def loop(self):while True:question=input("user:")message={"role":"user","content":question}self.message.append(message)response_message=await self.mcp_client.chat(self.message)print("AI:",response_message.get('content'))
async def main():user_client=UserClient()await user_client.chat([{"role":"user","content":"青岛今天天气怎么样"}])
if __name__ == '__main__':asyncio.run(main())

http://www.xdnf.cn/news/624403.html

相关文章:

  • Halcon 单目相机标定测量
  • DeepSeek 赋能医疗影像分析:从卷积神经网络到临床诊断效率革新
  • 怎么开发一个网络协议模块(C语言框架)之(一) main
  • Vue中的事件绑定【3】
  • HarmonyOS:相机选择器
  • 人脸识别流程与算法对比报告
  • RPA+电子处方+在线问诊:数字药店APP智能化源码开发方案探索
  • MybatisPlus入门
  • (9)-java+ selenium->元素定位之By name
  • MVCC实现原理
  • TestHubo V1.0.8版本发布,支持按模块树筛选用例,让查询更便捷
  • Todesk 软件被锁定,不记得安全密码也进不去软件改不了问题解决
  • DVWA文件上传笔记
  • SDL2常用函数:SDL_Surface 数据结构及使用介绍
  • Java核心基础
  • Python爬虫实战:研究Newspaper框架相关技术
  • [创业之路-376]:企业战略管理案例分析-战略制定/设计-市场洞察“五看”:看宏观之当前的社会发展趋势与战略应对
  • AtCoder Beginner Contest 407(ABCDE)
  • ⭐️⭐️⭐️白嫖的阿里云认证⭐️⭐️⭐️ 第三弹【课时2:RAG应用的构建和优化】for「大模型Clouder认证:RAG应用构建及优化」
  • 【Excel 支持正则的方法】解决VBA引入正则的方法和步骤
  • MFC:获取所有打印机的名称(打印机模块-1)
  • OpenHarmony外设驱动使用 (十四),WLAN
  • 基于51单片机红外人体检测、防盗报警
  • 【C/C++】线程状态以及转换
  • RabbitMQ 概述与安装
  • Spring AI 之结构化输出转换器
  • Python实现对大批量Word文档进行自动添加页码(16)
  • 使用腾讯云3台轻量云服务器快速部署K8s集群实战
  • 如何制作可以本地联网搜索的MCP,并让本地Qwen3大模型调用搜索回答用户问题?
  • Appium+python自动化(五)- 模拟器