2026年5月

要求:

大模型请求1分钟内每10秒钟的温度,MCP server每10秒返回一次温度给大模型。
通过Server Notification的方式返回,MCP Server示例代码如下(这个任务千问3.6没有完成,让google ai完成的):


import asyncio
import random
from fastmcp import FastMCP, Context

初始化 FastMCP 服務,並為其命名

mcp = FastMCP("TemperatureStreamer")

@mcp.tool()
async def monitor_temperature(duration_seconds: int = 60, interval_seconds: int = 10, ctx: Context = None) -> str:
"""
在指定的時間內,每隔固定秒數監測並返回一次環境溫度。

Args:
    duration_seconds: 總監測時長(秒),預設 60 秒
    interval_seconds: 數據採集間隔(秒),預設 10 秒
"""
# 計算總共需要採集幾次數據
total_steps = duration_seconds // interval_seconds
temperatures_log = []

print(f"開始溫度監控任務:預計執行 {duration_seconds} 秒,每 {interval_seconds} 秒採集一次...")

for step in range(1, total_steps + 1):
    # 模擬讀取硬體傳感器溫度
    current_temp = round(random.uniform(22.0, 28.0), 2)
    temperatures_log.append(current_temp)

    # 構造本次採集的進度訊息
    status_msg = f"第 {step * interval_seconds} 秒 - 當前實時溫度: {current_temp}°C"
    print(f"[Server Log] {status_msg}")

    # 【核心】如果客戶端支持並傳入了 Context,則通過 SSE 通道即時推送進度通知
    if ctx:
        # report_progress 參數: (當前進度值, 總進度值, 附帶的文本訊息)
        await ctx.report_progress(
            progress=step,
            total=total_steps,
            message=status_msg
        )

    # 異步等待下一次採集
    if step < total_steps:
        await asyncio.sleep(interval_seconds)

# 任務結束,返回最終的標準 Response
avg_temp = round(sum(temperatures_log) / len(temperatures_log), 2)
return f"【監控任務完成】共採集 {total_steps} 次數據。歷史溫度: {temperatures_log}。平均溫度: {avg_temp}°C"

if name == "main":

以 sse 傳輸模式啟動服務,默認會掛載在 http://127.0.0

# 備註:新版 FastMCP 也支持 "http" (Streamable HTTP),兩者在網路層皆可實現流式推送
mcp.run(transport="sse", host="127.0.0.1", port=8000)

在Inpector中,仍然是采用常规的tools调用方式,不同的是,每过10秒在右下角会出现`notifications/progress`的返回结果,例如:

```json
{
  "method": "notifications/progress",
  "params": {
    "progress": 1,
    "total": 6,
    "message": "第 10 秒 - 當前實時溫度: 23.22°C"
  }
}

在此期间,工具一直是Running状态,在60秒结束后,才会返回正常的结果。

这两天学习了一下YOLO,也就是You Only Look Once。学习这个模型的原因是GitHub上有一个激光打蚊子的项目,有不少的Star数目,就是用的这个模型。这个项目已经好多年没有更新了,使用的还是 YOLO v4 模型。
这个模型是快速的视频实时目标识别的模型,发展至今已经历了很多代。YOLOv4模型使用的是CNN框架,也就是卷积神经网络,基于一个叫做Darknet的神经网络实现。这个版本的模型还有比较多问题,第一,它是有锚框的,也就是Anchor-based,主要是增加了很多运算量,然后无法实时处理特别长或者扁的物体,另外就是只能进行目标识别,不能做其他的工作。第二是建立了NMS非极大值抑制的后处理方式,不要在一个物体上圈好多个框。
在后面的版本 V8 11,26这些版本中都增加了更多的功能,并且从C++转向了PyTorch,维护者也变成了ultralytics。首先就是取消了锚框,变成了无锚框的方式,其次除了目标识别,还增加了图片分类/实例分割(就是把目标抠图出来而不是只画个框)。其次还有多目标检测/姿态检测等。
YOLO26这是一个轻量化的版本,还取消了NMS,进一步降低运算量,使其可以在嵌入式设备上或者说是运算能力比较差的设备上运行。
YOLO模型有不同的规模,从小到大有nano/small/medium/large/extra large。 其中nano只有几兆大,extra large也不到300M,经过FP16或者INT8量化还能进一步降低体积和运算量。
YOLO模型的原始格式是.pt(pytorch),可以导出为不同的格式,最重要的是onnx,这个格式支持openCV中的dnn(深度神经网络)来调取,也支持在浏览器中/ios/android/react native/flutter中调取。最重要的一个项目是微软的https://github.com/microsoft/onnxruntime 跨平台项目,对多端调用提供了可能。
还支持tflite格式,是谷歌tensorflow的一种格式,官方维护了 https://github.com/tensorflow/tfjs 这个js库,支持node和浏览器等环境调用。在安卓手机上由特别的性能优化。
其他巨头也有自己的格式,如英伟达GPU上有TensorRT (.engine 或 .trt)格式,苹果手机上有CoreML (.mlpackage 或 .mlmodel) 格式,Intel有OpenVINO (_openvino_model/),国产的瑞芯微也有rknn格式。

介绍下原始训练的模型格式,最重要的是pytorch保存的pt模型,以及pytorch延伸框架(如 PyTorch Lightning)的ckpt(checkpoint)模型。 这两种模型除了权重数据还打包了python代码,所以被认为是不安全的,后来huggingface等社区就推出了只有权重数据的safesensor模型,并且做了内存映射,加载更快。

测试了driodCam和iriun webcam, 两者都有水印,其中iriun webcam没有画面,driodcam会更好用些。需要注意的是,PC和手机要在同一个路由器下。
免费无水印的方案里面, OBS studio就有虚拟相机功能,结合scrcpy就可以。
另外还有vdo.ninja 通过网页读取摄像头,传输给obs。然而清晰度不是很好,并且摄像头参数要反复调整,比较麻烦。
另外,github上有一个开源项目 VCamDriod ,然而它需要在android app中扫PC APP上的QR码来配置,然而就是死活扫不出来。不推荐。

推荐方案:
droidCam 连接方便,但是免费版有水印。
scrcpy + OBS studio, 功能强大但是连接麻烦。