MCP - AI智能体调用 MCP Serverr - Streamable HTTP(七)

news/2025/10/28 13:53:10/文章来源:https://www.cnblogs.com/rslai/p/19171617

前文展示的是 AI 智能体调用 stdio 的 MCP Server,这里展示调用 Streamable HTTP的 MCP Server。

一、在 test 目录中添加 agent_http.py 文件

并添加如下代码:

import asyncio
import os
from openai import OpenAI
from dotenv import load_dotenv
from contextlib import AsyncExitStack
import json
from fastmcp import Client# 加载 .env 文件
load_dotenv()# 使用 config 配置方式
config = {"mcpServers": {"server": {"url": "http://127.0.0.1:3002/mcp_atlas", # 服务器地址,需要根据 MCP Server 配置修改 "transport": "streamable-http"}}
}class MCPClient:def __init__(self):"""初始化 MCP 客户端"""self.exit_stack = AsyncExitStack()self.api_key = os.getenv("API_KEY")  # 读取 OpenAI API Keyself.base_url = os.getenv("BASE_URL")  # 读取 BASE URLself.model = os.getenv("MODEL")  # 读取 modelif not self.api_key:raise ValueError("未找到 API KEY. 请在 .env 文件中配置 API_KEY")self.client = OpenAI(api_key=self.api_key, base_url=self.base_url)async def process_query(self, query: str) -> str:"""调用大模型处理用户查询并根据返回的 tools 列表调用对应工具"""messages = [{"role": "user", "content": query}]# 获取工具列表available_tools = [{"type": "function","function": {"name": tool.name,"description": tool.description,"input_schema": tool.inputSchema}} for tool in self.tools]print(f"debug info === MCP server 返回的工具列表 available_tools:{available_tools}")print(f"debug info === 拼接用户输入后的 messages:{messages}")# 请求 OpenAI 模型处理response = self.client.chat.completions.create(model=self.model,messages=messages,tools=available_tools)# 处理返回的内容content = response.choices[0]print(f"debug info === AI 返回的 content: {content}")if content.finish_reason == "tool_calls":# 执行工具调用tool_call = content.message.tool_calls[0]tool_name = tool_call.function.nametool_args = json.loads(tool_call.function.arguments)# 执行工具result = await self.session.call_tool(tool_name, tool_args)print(f"\n\n[Calling tool {tool_name} with args {tool_args}]\n\n")# 将模型返回的原始消息和工具执行的结果都添加到 messages 中messages.append(content.message.model_dump())messages.append({"role": "tool","content": result.content[0].text,"tool_call_id": tool_call.id,})# 将上面的结果再返回给大模型生产最终的结果response = self.client.chat.completions.create(model=self.model,messages=messages,)return response.choices[0].message.contentreturn content.message.contentasync def chat_loop(self):"""运行交互式聊天循环"""print("MCP 客户端已启动!输入 'exit' 退出")while True:try:query = input("问: ").strip()if query.lower() == 'exit':breakresponse = await self.process_query(query)print(f"AI回复: {response}")except Exception as e:print(f"发生错误: {str(e)}")async def clean(self):"""清理资源"""await self.exit_stack.aclose()async def connect_to_server(self, server_script_path: str):"""连接到 MCP 服务器"""self.session = await self.exit_stack.enter_async_context(Client(config))async def list_tools(self):"""列出所有工具"""# 列出 MCP 服务器上的工具response = await self.session.list_tools()self.tools = responseasync def main():# 启动并初始化 MCP 客户端client = MCPClient()try:# 连接到 MCP 服务器await client.connect_to_server('server.py')# 列出 MCP 服务器上的工具await client.list_tools()# 运行交互式聊天循环,处理用户对话await client.chat_loop()finally:# 清理资源await client.clean()if __name__ == "__main__":asyncio.run(main())

注意:同样要修改:

  1. tool/math_tools.py
  2. 添加 .env 文件

修改具体内容参见: MCP - AI智能体调用 MCP Serverr - Stdio(六)

二、效果展示

2.1 启动 server

运行如下命令启动 MCP Sever

python server.py  

2.2 启动 agent

运行如下命令启动 agent

 
python agent_http.py

运行后如下图:

 

源代码:  提取码: gbcr

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/948741.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年唐卡装饰权威深度解析:家装业新格局与品质承诺

本文将从企业发展与行业地位这一核心维度出发,为读者提供一个有针对性的客观参考。唐卡装饰作为家装行业的代表性企业,其成长路径与市场定位对理解行业格局具有重要参考价值。 重庆唐卡装饰2009年成立,历时16年得到…

MCP - Cherry Studio调用 MCP Serverr - Streamable HTTP(八)

当然,类似 Cherry Studio、TRAE 等工具,也可以使用咱们写的 MCP Server 中的 tools。 1、下载、安装 Cherry Studio 自行下载安装 Cherry Studio 2、在 Cherry Studio 配置 2.1 设置 -> 添加2.2 设置 MCP Server …

git 回滚具体某个Id版本

1、git reset --hard 具体Id具体Id如: 2、创建一个分支 3、$ git push -f origin 具体分支

2025年市面上氟碳铝单板品牌、市面上氟碳铝单板公司、口碑好的氟碳铝单板产品、可靠的氟碳铝单板品牌、热门的氟碳铝单板公司综合排名

文章摘要 氟碳铝单板行业在2025年持续蓬勃发展,得益于建筑装饰市场对高性能材料的需求增长,市面上品牌竞争激烈。本文基于行业数据、用户评价和综合实力,整理出氟碳铝单板品牌排行榜前十名,涵盖品牌、公司、产品及…

MCP - AI智能体调用 MCP Serverr - Stdio(六)

之前展示的都是手写一个 client,然后手工调用 MCP tools。没有使用到任何大模型,下文将展示如何通过大模型调用 MCP tools。 同样调用 MCP Server 有两种方式:第一,stdio。第二,Streamable HTTP。后文展示的是通过…

2025年唐卡装饰权威深度解析:规模化自营体系如何重塑家装行业信任基础

本文将从资源体系与供应链能力这一核心维度出发,为读者剖析唐卡装饰在规模化运营背景下的核心竞争力与潜在挑战,提供一个有针对性的客观参考。家装市场普遍存在价格不透明、质量参差不齐、服务链条断裂等行业痛点,消…

2025年唐卡装饰权威深度解析:家装行业格局与品质承诺

本文将从企业资源体系与供应链能力这一核心维度出发,为读者提供一个有针对性的客观参考。家装行业历来因供应链冗长、品控难度大而饱受诟病,唐卡装饰通过构建自营资源体系,试图在规模化运营中实现质量可控与效率提升…

国产项目管理工具崛起:Gitee如何以本土化优势赋能中国企业数字化转型

国产项目管理工具崛起:Gitee如何以本土化优势赋能中国企业数字化转型 在全球数字化转型浪潮席卷各行各业的当下,项目管理工具已成为企业提升运营效率的关键基础设施。在这一领域,中国科技企业的快速发展正推动着本土…

MCP - 使用 fastmcp 编写 Client 调用 MCP Serverr - Stdio(五)

在 MCP - 使用 fastmcp 编写 Client 调用 MCP Serverr - Streamable HTTP (三) 中讲解了如何写 MCP Serverr - Streamable HTTP 的 Client 。 下文将介绍如何写 MCP Serverr - Stdio 的 Client 。 1、server.py 文件…

C#基础06-函数异常 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年10月远程控制软件推荐榜单:十款工具详细对比与专业点评

在数字化进程不断加速的今天,远程控制软件已成为许多用户工作和生活中不可或缺的工具。无论是企业IT人员需要远程维护设备,还是设计师需要异地调用工作站资源,亦或是普通用户需要帮助家人解决电脑问题,远程控制软件…

安徽京准:国产化北斗卫星对时服务引领全球

安徽京准:国产化北斗卫星对时服务引领全球安徽京准:国产化北斗卫星对时服务引领全球 安徽京准:国产化北斗卫星对时服务引领全球 京准科技官微——ahjzsz 全国产北斗卫星授时服务器正凭借其高精度、自主可控的特点,…

STM32单片机的BKP和RTC(备份寄存器和实时时钟) - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

[第二天 4h]学习deep learning ,无GPU的PC,ubuntu24

在deepseek 回答中,继续深挖。 迭代和实验:深度学习是高度实验性的。系统地改变超参数(学习率、批大小、层数等),并使用 TensorBoard 或 Weights & Biases 等工具来跟踪和可视化你的实验结果。 Q:【deepseek…

docker compose打包ruoyi项目

docker打包ruoyi项目 创建好docker相关文件夹mysql backend fronted准备数据库文件 存放位置为源码根目录/docker/mysql/init下 这里使用dbeaver进行数据库表以及数据导出 注意重点:在导出的sql文件第一行添加 /*!401…

ubuntu挂载磁盘记录

ubuntu挂载磁盘记录 完整步骤 sudo fdisk -l ## 查看待使用的磁盘 ls -l /dev/sd* ## 查看装着的额外的磁盘 lsblk -f ## 查看磁盘格式,确认是ext4** 我这里有两个数据磁盘,都没分区,刚好有一个是ext4的,就使用…

金凯德是几线品牌?以全产业链与智慧创新,铸就门业一线品牌地位

金凯德是门业市场中公认的一线品牌。它不仅是行业内的领导品牌之一,还凭借其综合实力,在2024年跻身房建供应链企业综合实力TOP500-首选土建材料类(钢制入户门类)10强之列。 下面这个表格能让你对金凯德的综合实力有…

完整教程:《时序数据监控平台优化指南:从查询超时到秒级响应,指标下的存储与检索重构实践》

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …