本地Qwen3-4B模型与MCP完美结合!MCP代码实战,开启AI模型新篇章!
MCP(ModelContextProtocol)是由Anthropic提出的标准化通信协议,用于规范LLM与工具间的交互方式。该协议采用Client-Server架构,支持两种传输机制:本地Stdio模式和网络HTTP+SSE模式。作者通过Qwen3-4B模型构建了完整案例,包含MCPServer(集成Tavily搜索工具)和MCPClient(连接vLLM服务器),实现了天气查询等实际应用场景
最近MCP(Model Context Protocol)这个概念特别火,由Anthropic 在去年提出来,其实就是提出了一个标准化、可互操作的通信协议,专门用于在客户端 (Client)和服务端 (Server)之间交换消息,主要是在构建由大型语言模型(LLM)驱动的 AI 应用生态中,所以可以简单的理解成LLM和工具之间的Http。
我个人认为MCP最大的用处就是统一了工具调用的方式,在Agent的时代,大家不需要关注LLM如何调用工具,只需要:
-
给LLM好用的工具
-
如何让LLM能够选择正确的工具。
这样就可以创造一个强大的Agent。
MCP原理:
MCP架构:
本质上还是Client-Server架构。大致3个大的模块。
Host:一般就是指LLM,需要能够进行工具的调用LLM。
Client: 维护和Server之间的联系,可以向Server发送请求,并接受数据。
Server:提供工具,提供数据。
MCP传输机制 (Transport Mechanisms)
Stdio (Standard Input/Output):
场景: 客户端和服务端运行在同一台物理机或虚拟机上。
工作原理: 宿主应用(如一个 AI 应用框架)将 MCP 服务端作为一个子进程启动。宿主(作为客户端)通过写入服务端进程的标准输入 (stdin) 来发送消息,并通过读取服务端进程的标准输出 (stdout) 来接收消息。
典型用例: 调用本地工具(如文件操作、执行本地脚本、访问本地数据库)。
优点:简单: 无需网络配置,开箱即用。安全: 操作系统提供天然的进程隔离(沙箱)。低延迟: 本地进程间通信通常很快。
HTTP + SSE (Server-Sent Events) / Streamable HTTP:
场景: 客户端和服务端运行在不同的机器上,通常通过网络连接(本地网络或互联网)。
工作原理:请求 (Client -> Server): 客户端通过标准的 HTTP POST 请求将消息(请求)发送到服务端的特定端点。响应与通知 (Server -> Client): 服务端使用 Server-Sent Events (SSE) 技术通过一个持久化的 HTTP 连接将响应和通知流式推送给客户端。SSE 是一种基于 HTTP 的轻量级协议,允许服务器主动向客户端发送事件流。
典型用例: 调用远程 API、访问云服务、连接共享资源、与 Web 服务集成。
优点:跨网络: 支持分布式部署。Web 兼容: 天然适用于浏览器环境和现代 Web 服务架构。Serverless 友好: Streamable HTTP 的设计考虑到了无服务器环境的限制和优势。实时更新: SSE 提供了服务端向客户端推送实时信息的有效机制。
下面笔者就采用本地部署Qwen3-4B作为MCP host,实现 MCP Server 和 MCP Client 并且,并通过Stdio方式完成它们之间的交互。
MCP代码实战
MCP Server
-
基于 `FastMCP` 构建的 MCP 服务器。
-
集成 `TavilySearchResults`,提供网络搜索功能。
-
将网络搜索封装为 `search` 工具,供客户端调用。
mcp_server.py
import os
import json
from typing import List, Dict, Any
from langchain_community.tools.tavily_search import TavilySearchResults
from fastmcp import FastMCP
# 1. Initialize MCP Server
mcp = FastMCP("SearchServer")
# 2. Setup Tavily Search
os.environ["TAVILY_API_KEY"] = "******"
web_search_tool = TavilySearchResults(k=3)
def web_search(query: str) -> List[Dict[str, Any]]:
"""Perform web search for the given query."""
if not query:
return []
print(f"正在搜索: {query}\n")
results = web_search_tool.invoke({"query": query})
# The tool returns a list of dicts, each with 'url' and 'content'
# We need to transform it to a list of dicts with 'source' and 'content'
return [{"source": r.get("url"), "content": r.get("content")} for r in results]
# 3. Formatting function
def format_search_results(results: List[Dict[str, Any]]) -> str:
"""
Formats search results into a readable string.
:param results: A list of search result dictionaries.
:return: A formatted string of search results.
"""
if not results:
return"No results found."
formatted_string = "🔍 Here are the search results:\n\n"
for i, result in enumerate(results):
content = result.get('content', 'No Snippet')
source = result.get('source', '#')
# Use the first part of the content as a title, as Tavily doesn't provide one.
title = content.split('\n')[0]
formatted_string += f"{i+1}. **{title}**\n"
formatted_string += f" - Snippet: {content}\n"
formatted_string += f" - URL: {source}\n\n"
return formatted_string.strip()
# 4. MCP Tool
@mcp.tool(name="search", description="search the web for information")
def search(query: str) -> str:
"""
Performs a web search for the given query and returns formatted results.
:param query: The search term.
:return: Formatted search results.
"""
results = web_search(query)
return format_search_results(results)
# 5. Run the server
if __name__ == "__main__":
# Run the MCP server using standard I/O transport
mcp.run(transport='stdio')
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
MCP Client
-
连接本地运行的 vLLM 服务器(默认为 `http://localhost:8000/v1`),支持 Qwen3-4B 模型。
-
通过Stdio 模式连接MCP服务端。
-
利用 LLM 的 Function Calling 能力,智能判断用户查询是否需要调用 MCP 服务器上的工具。
-
实现了工具调用和结果处理的完整流程,将工具执行结果反馈给 LLM 进行二次推理。
-
提供交互式命令行聊天界面。
mcp_client.py
import asyncio
import json
import openai
from contextlib import AsyncExitStack
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
from fastmcp import Client
from fastmcp.client.transports import StreamableHttpTransport
import traceback
class MCPClient:
def __init__(self):
"""
初始化 MCP 客户端。
设置异步上下文管理器、OpenAI 客户端、模型路径和 MCP 会话。
"""
self.exit_stack = AsyncExitStack()
self.llm_client = openai.OpenAI(
base_url="http://localhost:8000/v1", # LLM 服务器的基础 URL
api_key="vllm", # API 密钥,这里使用 vllm 作为占位符
)
self.model = "./Qwen3-4B/"# 使用的 LLM 模型路径
self.session = None # MCP 会话,用于与 MCP 服务器通信
async def connect_to_mcp_server_io(self, server_script_path: str):
"""
连接到 MCP 服务器并列出可用工具。
通过标准 I/O 启动 MCP 服务器,并建立客户端会话。
"""
# 定义 MCP 服务器的启动参数
server_params = StdioServerParameters(
command="python", # 启动服务器的命令
args=[server_script_path], # 服务器脚本路径作为参数
env=None # 环境变量
)
# 启动 MCP 服务器并建立通信通道
# stdio_client 用于通过标准 I/O 连接到服务器
stdio_transport = await self.exit_stack.enter_async_context(stdio_client(server_params))
self.stdio, self.write = stdio_transport # 获取标准输入和输出流
# 创建 MCP 客户端会话
self.session = await self.exit_stack.enter_async_context(ClientSession(self.stdio, self.write))
await self.session.initialize() # 初始化会话
# 列出 MCP 服务器上注册的所有工具
response = await self.session.list_tools()
tools = response.tools
print("\n已连接到服务器,支持以下工具:", [tool.name for tool in tools])
async def connect_to_mcp_server_http(self, mcp_server_url):
"""
连接到 MCP 服务器并列出可用工具。
通过标准 I/O 启动 MCP 服务器,并建立客户端会话。
"""
transport = StreamableHttpTransport(url=mcp_server_url)
# 使用上下文管理器创建客户端会话
async with Client(transport) as client:
print(f"成功连接到MCP服务: {mcp_server_url}")
# 发送ping请求测试服务连通性
await client.ping()
print("服务心跳检测成功")
# 获取服务端注册的所有工具
tools = await client.list_tools()
tool_names = [tool.name for tool in tools]
print(f"可用工具列表: {', '.join(tool_names)}")
def ping_llm_server(self):
"""
向 LLM 服务器发送 ping 请求,检查其是否正常运行。
发送一个简单的查询并打印响应。
"""
messages = [{"role": "user", "content": "你是谁"}] # 测试消息
try:
# 调用 LLM 客户端的聊天完成 API
response = self.llm_client.chat.completions.create(
model=self.model,
messages=messages
)
print(response.choices[0].message.content) # 打印 LLM 的回复
return response.choices[0].message.content # 返回回复内容
except Exception as e:
# 捕获并打印连接或请求错误
print(f"Error: {str(e)}\n{traceback.format_exc()}")
async def chat(self, query: str) -> str:
"""
使用大模型处理查询并调用可用的 MCP 工具 (Function Calling)。
根据 LLM 的响应决定是直接回复还是调用工具。
"""
messages = [{"role": "user", "content": query}] # 初始用户查询消息
# 获取 MCP 服务器上所有可用的工具
response = await self.session.list_tools()
tools = response.tools
# 将 MCP 工具信息转换为 OpenAI API 期望的工具格式 (Function Calling)
available_tools = [{
"type": "function",
"function": {
"name": tool.name, # 工具名称
"description": tool.description, # 工具描述
"parameters": { # 工具参数的 JSON Schema 定义
"type": tool.inputSchema.get("type", "object"),
"properties": {
prop_name: prop_def
for prop_name, prop_def in tool.inputSchema["properties"].items()
},
"required": tool.inputSchema.get("required", [])
}
}
} for tool in tools]
# 第一次调用 LLM:将用户查询和可用工具传递给模型
# 模型会决定是直接回答还是调用某个工具
response = self.llm_client.chat.completions.create(
model=self.model,
messages=messages,
tools=available_tools, # 传递可用工具列表
tool_choice="auto", # 允许模型自动选择是否调用工具
)
# 处理 LLM 返回的内容
content = response.choices[0]
if content.finish_reason == "tool_calls":
# 如果 LLM 决定调用工具
tool_call = content.message.tool_calls[0] # 获取第一个工具调用信息
tool_name = tool_call.function.name # 获取工具名称
tool_args = json.loads(tool_call.function.arguments) # 解析工具参数 (JSON 字符串转 Python 字典)
# 执行工具:通过 MCP 会话调用指定的工具
print(f"\n\n[Calling tool {tool_name} with args {tool_args}]\n\n")
result = await self.session.call_tool(tool_name, tool_args)
print(f"[Tool {tool_name} returned {result}]\n\n")
# 将模型返回的工具调用信息和工具执行结果都添加到消息历史中
messages.append(content.message.model_dump()) # 添加模型建议的工具调用消息
messages.append({
"role": "tool", # 角色为 'tool' 表示这是工具的输出
"content": result.content[0].text, # 工具执行的实际结果
"tool_call_id": tool_call.id, # 关联到之前的工具调用 ID
})
# 第二次调用 LLM:将完整的消息历史(包括工具调用和结果)返回给模型
# 模型会根据工具执行结果生成最终的回复
response = self.llm_client.chat.completions.create(
model=self.model,
messages=messages,
)
return response.choices[0].message.content # 返回最终的 LLM 回复
# 如果 LLM 没有调用工具,则直接返回其生成的文本内容
return content.message.content
async def chat_loop(self):
"""
命令行聊天循环。
允许用户持续输入查询,并显示 AI 助手的回复。
"""
print("\nmcp client is running...\n")
while True:
try:
query = input("\nuser: ").strip() # 获取用户输入
if query.lower() == 'quit': # 输入 'quit' 退出循环
break
response = await self.chat(query) # 发送用户输入到 LLM API 进行处理
print(f"\nai assistant: {response}") # 打印 AI 助手的回复
except Exception as e:
# 捕获并打印聊天过程中的错误
print(f"\nerror: {str(e)}\n{traceback.format_exc()}") # 修正:使用 traceback.format_exc() 获取完整的错误信息
async def cleanup(self):
"""
清理资源。
关闭异步上下文管理器,确保所有资源被正确释放。
"""
await self.exit_stack.aclose()
async def main():
"""
主函数,程序的入口点。
处理命令行参数,初始化 MCP 客户端,连接服务器,运行聊天循环,并进行清理。
"""
if len(sys.argv) < 2:
print("Usage: python mcp_client.py <path_to_server_script>")
sys.exit(1)
client = MCPClient() # 创建 MCPClient 实例
try:
# 连接到 MCP 服务器
await client.connect_to_mcp_server_io(sys.argv[1])
# 检查 LLM 服务器连接
client.ping_llm_server()
# 启动聊天循环
await client.chat_loop()
finally:
# 确保在程序退出前执行清理操作
await client.cleanup()
if __name__ == "__main__":
import sys
asyncio.run(main()) # 运行异步主函数
实战过程
启动MCP服务
vllm serve ./Qwen3-4B/ --gpu-memory-utilization 0.85 --max-model-len 8192 --enable-auto-tool-choice --tool-call-parser hermes
python mcp_client.py mcp_server.py
实战结果:帮我搜索一下北京和武汉今天的天气。
(client向server发送了调用search工具的请求并返回了结果)
已连接到服务器,支持以下工具: ['search']
<think>
好的,用户问“你是谁”,我需要先明确自己的身份。首先,我应该介绍自己是通义千问,由通义实验室研发的大型语言模型。然后,说明我的主要功能,比如回答问题、创作内容、提供帮助等。同时,要强调我的训练数据截 止到2024年10月,并且遵循法律法规和伦理准则。
接下来,用户可能想知道我能做什么,所以需要列举一些应用场景,比如回答问题、写文章、编程、创作故事等。还要提到我的多语言支持和互动能力,让用户了解我的灵活性。
另外,用户可能关心我的局限性,比如不能访问实时信息或执行具体操作,所以需要明确说明这些限制,避免误解。最后,保持友好和开放的态度,邀请用户提出问题或请求帮助,促进进一步的交流。
要注意用简洁明了的语言,避免技术术语,让用户容易理解。同时,保持回答的结构清晰,分点说明,但不需要使用Markdown格式。确保信息准确,同时传达出愿意协助的积极态度。
</think>
我是通义千问,由通义实验室研发的大型语言模型。我能够回答问题、创作内容、提供帮助,支持多种语言,并能进行互动对话。我的训练数据截止到2024年10月,遵循法律法规和伦理准则。你可以问我任何问题,或者让我 帮你完成各种任务,我会尽力提供帮助!
mcp client is running...
user: 帮我搜索一下北京和武汉今天的天气
[Calling tool search with args {'query': '北京和武汉今天的天气'}]
[Tool search returned meta=None content=[TextContent(type='text', text='🔍 Here are the search results:\n\n1. **北京的天气预报(首都). 一. 6月16日. 19°C | 29°C. 多云. 6月16日. 一. 19°C | 29°C. 多云 ... 武汉. 个人化. ✚加入. 天气预报. 气候资料. 城市. 西安. 个人化. ✚加入. 天气**\n - Snippet: 北京的天气预报(首都). 一. 6月16日. 19°C | 29°C. 多云. 6月16日. 一. 19°C | 29°C. 多云 ... 武汉. 个人化. ✚加入. 天气预报. 气候资料. 城市. 西安. 个人化. ✚加入. 天气\n - URL: https://worldweather.wmo.int/zh/country.html?countryCode=1\n\n2. **风力风向:空气的水平运动,风力是风吹到物体上所表示出力量的大小,风向指风的来向。**\n - Snippet: 风力风向:空气的水平运动,风力是风吹到物体上所表示出力量的大小,风向指风的来向。\n\n优 良 轻度 中度 重度 严重\n\n生活指数\n====\n\n \n\n 少发 _感冒指数_无明 显降温,感冒机率较低。\n \n 适宜 _运动指数_天气较好,尽情感受运动的快乐吧。\n \n Image 6 很低 _花粉过敏指数_暂无\n Image 7 短袖 _穿衣指数_适合穿T恤、短薄外套等夏季服装。)\n 适宜 _洗车指数_天气较好,适合擦洗汽车。\n \n 很强 _紫外线指数_涂擦SPF20以上,PA++护肤品,避强光。\n \n\n天气资讯\n===================================\n\n\n\n \n\n### 网站服务\n\n关于我们联系我们用户反馈\n\n版权声明网站律师\n\n### 营销中心\n\n商务合作广告服务媒资合作\n\n### 相关链接\n\n中国气象局中国气象服务协会 中国天气频道\n\n客服邮箱:service@weather.com.cn客服电话:010-68409444京ICP证010385-2号\u3000京公网安备11041400134号 [...] 本地乡镇\n\n邓南街道东荆街道纱帽街道湘口街道翠微街办事处建桥街办事处江堤街办事处江汉二桥街道琴断口街办事处晴川街办事处四新地区管委会五里墩街办事处\n\nImage 4\n\n热门城市\n\n曼谷 东京 首尔 吉隆坡 新加坡 巴黎 罗马 伦敦 雅典 柏林 纽约 温哥华 墨西哥城 哈瓦那 圣何塞 巴西利亚 布宜诺斯艾利斯 圣地亚哥 利马 基多 悉尼 墨尔本 惠灵顿 奥克兰 苏瓦 开罗 内罗毕 开 普敦 维多利亚 拉巴特\n\n选择洲际\n\n亚洲 欧洲 北美洲 南美洲 非洲 大洋洲\n\nImage 5\n\n \n\n \n\n全国\\> 湖北 \\> 武汉\\> 城区\n\n11:30更新 | 数据来源 中央气象台\n\n 今天\n 7天\n 8-15天\n 40天\n 雷达图\n\n \n\n14:35 实况\n\n相对湿度_50%_\n\n西风_3级_\n\n双号限行\n\n26.7_℃_\n\n52良\n\n我的天空 [...] _<3级__<3级__<3级__<3级__<3级__<3级__<3级__<3级_\n\n整点天气实况\n------\n\n 空气质量\n 温度\n 相对湿度\n 降水量\n 风力风向\n\n过去24小时AQI最高值: 51\n\n最高气温: 26.7℃ , 最低气温: 17.1℃\n\n过去24小时最大相对湿度: 96%\n\n过去24小时最大风力: 3级\n\n过去24小时总降水量 :0.6mm\n\n14151617181920212223000102030405060708091011121314\n\n28262422201816\n\n_(h)_ ℃ (μg/m³) (%) (mm) (级)空气质量指数:简称AQI,是定量描述空气质量状况的无量纲指数。(数据由生态环境部提供)\n\n相对湿度:空气中实际水汽压与当时气温下的饱和水汽压之比,以百分比(%)表示。\n\n温度:表示大气冷热程度的物理量,气象上给出的温度是指离地面1.5米高度上百叶箱中的空气温度。\n\n降水量:某一时段内的未 经蒸发、渗透、流失的降水,在水平面上积累的深度,以毫米(mm)为单位。\n - URL: https://www.weather.com.cn/weather1d/101200101.shtml\n\n3. **北京-天气预报**\n - Snippet: 北京-天气预报\n\n===============\n\n北京Image 1Image 235℃ / 23℃\n\n | \n\nEnglish\n\nImage 3\n\n 热门城市 \n\n北京\n\n天津\n\n石家庄\n\n太原\n\n呼和浩特\n\n沈阳\n\n长春\n\n哈尔滨\n\n上海\n\n南京\n\n杭州\n\n合肥\n\n福州\n\n南昌\n\n济南\n\n郑州\n\n武汉\n\n长沙\n\n广州\n\n深圳\n\n南宁\n\n海口\n\n重庆\n\n成都\n\n贵阳\n\n昆明\n\n拉萨\n\n西安\n\n兰州\n\n西宁\n\n银川\n\n乌鲁木齐\n\n香港\n\n澳门\n\n台北\n\n 天气实况 \n\n天 气图\n\n卫星云图\n\n雷达图\n\n降水量\n\n气温\n\n风\n\n能见度\n\n强对流\n\n土壤水分\n\n 天气预报 \n\n天气公报\n\n每日天气提示\n\n春运气象服务专报\n\n气象灾害预警\n\n重要天气提示\n\n重要天气盘点\n\n 降水量预报\n\n冻雨预报\n\n气温预报\n\n大风预报\n\n强对流天气预报\n\n中期天气\n\n全球天气预报\n\n全球灾害性天气监测月报\n\n环境气象公报\n\n山洪灾害气象预警\n\n地质灾害气象风险预警\n\n中小河流洪水气 象风险预警\n\n渍涝风险气象预警\n\n交通气象预报\n\n森林火险预报\n\n草原火险预报\n\n 台风海洋 \n\n台风快讯与报文\n\n台风路径预报\n - URL: https://www.nmc.cn/publish/forecast/ABJ/beijing.html\n\n4. **武汉市今天实况:28度多云,湿度:77%,东南风:3级。白天:30度,大雨。 夜间:小雨,23度,天气较热,墨迹天气建议您选择短袖上衣加七分裤的搭配,针织衫是进出空调房的必备单**\n - Snippet: 武汉市今天实 况:28度多云,湿度:77%,东南风:3级。白天:30度,大雨。 夜间:小雨,23度,天气较热,墨迹天气建议您选择短袖上衣加七分裤的搭配,针织衫是进出空调房的必备单\n - URL: https://tianqi.moji.com/weather/china/hubei/wuhan\n\n5. **| | | | | | | | | |**\n - Snippet: | | | | | | | | | |\n| --- | --- | --- | --- | --- | --- | --- | --- | --- |\n| æ\x97¶é\x97´ | 08:00 | 11:00 | 14:00 | 17:00 | 20:00 | 23:00 | 02:00 | 05:00 |\n| 天æ°\x94 | | | | | | | | |\n| æ°\x94温 | 22.6â\x84\x83 | 24â\x84\x83 | 23.9â\x84\x83 | 25.1â\x84\x83 | 23.7â\x84\x83 | 23.1â\x84\x83 | 21.9â\x84\x83 | 21.9â\x84\x83 |\n| é\x99\x8dæ°´ | æ\x97 é\x99\x8dæ°´ | æ\x97 é\x99\x8dæ°´ | æ\x97 é\x99\x8dæ°´ | æ\x97 é\x99\x8dæ°´ | æ\x97 é\x99\x8dæ°´ | æ\x97 é\x99\x8dæ°´ | æ\x97 é\x99\x8dæ°´ | æ\x97 é\x99\x8dæ°´ |\n| é£\x8eé\x80\x9f | 2.9m/s | 1.7m/s | 3.3m/s | 2.8m/s | 2.3m/s | 2.7m/s | 2.8m/s | 3.3m/s | [...] | | | | | | | | | |\n| --- | --- | --- | --- | --- | --- | --- | --- | --- |\n| æ\x97¶é\x97´ | 08:00 | 11:00 | 14:00 | 17:00 | 20:00 | 23:00 | 02:00 | 05:00 |\n| 天æ°\x94 | | | | | | | | |\n| æ°\x94温 | 23.6â\x84\x83 | 28.3â\x84\x83 | 30.6â\x84\x83 | 28.2â\x84\x83 | 25.7â\x84\x83 | 24.4â\x84\x83 | 23.4â\x84\x83 | 20.1â\x84\x83 |\n| é\x99\x8dæ°´ | æ\x97 é\x99\x8dæ°´ | æ\x97 é\x99\x8dæ°´ | æ\x97 é\x99\x8dæ°´ | æ\x97 é\x99\x8dæ°´ | æ\x97 é\x99\x8dæ°´ | æ\x97 é\x99\x8dæ°´ | æ\x97 é\x99\x8dæ°´ | 1.4mm |\n| é£\x8eé\x80\x9f | 3.3m/s | 2.9m/s | 3.3m/s | 3.2m/s | 3.1m/s | 0.7m/s | 1.6m/s | 3.3m/s | [...] | | | | | | | | | |\n| --- | --- | --- | --- | --- | --- | --- | --- | --- |\n| æ\x97¶é\x97´ | 08:00 | 11:00 | 14:00 | 17:00 | 20:00 | 23:00 | 02:00 | 05:00 |\n| 天æ°\x94 | | | | | | | | |\n| æ°\x94温 | 22.6â\x84\x83 | 19.8â\x84\x83 | 21.7â\x84\x83 | 24.8â\x84\x83 | 27.9â\x84\x83 | 23.4â\x84\x83 | 18.3â\x84\x83 | 16.9â\x84\x83 |\n| é\x99\x8dæ°´ | æ\x97 é\x99\x8dæ°´ | æ\x97 é\x99\x8dæ°´ | æ\x97 é\x99\x8dæ°´ | æ\x97 é\x99\x8dæ°´ | æ\x97 é\x99\x8dæ°´ | æ\x97 é\x99\x8dæ°´ | æ\x97 é\x99\x8dæ°´ | æ\x97 é\x99\x8dæ°´ |\n| é£\x8eé\x80\x9f | 3.3m/s | 1.7m/s | 3.3m/s | 2.4m/s | 1.4m/s | 2.1m/s | 3.3m/s | 2.8m/s |\n - URL: https://weather.cma.cn/web/weather/57494.html', annotations=None)] isError=False]
ai assistant: <think>
好的,用户让我查北京和武汉今天的天气,我需要根据搜索结果来整理信息。首先看搜索结果里的内容,有几个相关链接,比如北京的天气预报和武汉的天气实况。
第一个结果提到北京今天气温19°C到29°C,多云,而武汉的天气实况是28度多云,湿度77%,东南风3级,白天有大雨,夜间小雨。另外,还有另一个结果提到武汉白天30度,大雨,夜间23度,建议穿短袖和七分裤。
需要确认这些信息是否一致,有没有矛盾的地方。比如北京的气温范围是19到29度,多云,而武汉的白天温度较高,有大雨,可能需要注意降雨情况。另外,用户可能关心的是今天的整体天气情况,包括温度、降水和风力等
。
可能需要综合多个来源的信息,确保准确性。比如,北京的天气预报和武汉的实况都提到多云,但武汉有雨,需要特别指出。同时,武汉的温度变化较大,白天和夜间温差明显,用户可能需要知道是否需要带伞或调整着装。
最后,用简洁明了的语言将北京和武汉的天气情况总结出来,确保用户能快速获取关键信息,比如温度范围、天气状况和是否有降雨等。同时提醒用户注意可能的天气变化,比如武汉的降雨情况。
</think>
根据搜索结果,以下是北京和武汉今天的天气情况:
---
### **北京**
- **气温**:19°C ~ 29°C
- **天气**:多云
- **风力**:3级
- **空气质量**:良(51)
- **建议**:适合户外活动,注意防晒和补水。
---
### **武汉**
- **气温**:白天28°C ~ 30°C,夜间23°C
- **天气**:多云转大雨(白天)/ 小雨(夜间)
- **湿度**:77%
- **风力**:东南风3级
- **空气质量**:良(51)
- **建议**:白天需携带雨具,夜间气温下降,注意保暖,建议穿短袖+七分裤。
---
**注意**:武汉白天有大雨,建议出行携带雨具,夜间气温较低,注意适时增减衣物。
user:
如何学习AI大模型?
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓
更多推荐
所有评论(0)