MCP协议:AI工具互联互通的“普通话”与最小Server实践

最近一直在做智能体项目,最大的感受不是模型不够聪明,而是工具接入这件事实在太碎了。各家AI客户端和开发框架对工具的描述方式都不一样,今天要写一套JSON Schema,明天又要一种函数定义,换一个平台就要重写一遍对接逻辑。后来我认真折腾了 MCP(Model Context Protocol,模型上下文协议),才意识到它本质上就是AI工具互联互通的那套“普通话”。它不是某个具体插件,也不是一个平台,而是一份开放协议:让AI应用能通过统一的方式发现工具、读取资源、发起调用,也让工具作者只需要实现一次标准接口,就能被各种支持方复用。这篇文章我会从协议动机讲起,拆解工作机制,再给出一个可以照着抄的最小Server示例,最后聊聊我实际踩过的坑。适合正在做智能体、想把自己的业务能力接入大模型、或者被各种碎片化工具集成搞到头大的开发者参考。

1. MCP 到底解决的是什么问题

1.1 没有 MCP 之前的“方言乱象”

如果把模型比作一个刚入职的聪明新人,那么它天生会聊天,但不会用你们公司的系统。你得给它配一堆工具:查数据库、读文件、发邮件、调内部接口。问题在于每个工具都来自不同部门,接口风格完全不同。有的用REST,有的用Python函数,有的藏在命令行里。为了让模型学会调用,通常的做法是针对每个模型接口写一套适配层,也就是把工具定义成模型能理解的 JSON Schema 或函数签名。这就像每个地区都有自己的方言,模型每换一个工具就要重新学一种表达方式,沟通成本极高。

工具不只是“能被调用”就行,模型还需要知道工具是干什么的、参数怎么填、结果怎么解读。早期集成方案把这部分全部揉进Prompt里,工具一多Prompt就膨胀,模型开始胡猜参数,出错率直线上升。我在一个模拟项目X里接过五个内部API,每个都单独写了一套适配代码,后续加字段、加权限、换模型,每一个变动都要连带改一遍,非常痛苦。不是没有考虑过统一封装,但每个客户端都有自己的工具定义格式,封装到一半就变成了给各个厂商做适配的体力活。

1.2 MCP 的角色:把工具变成“可被发现的标准化服务”

MCP的思路是,与其让每个客户端重复造轮子,不如定义一套公共语言。凡是接入了MCP的工具,都会以标准化的方式暴露出来:客户端能通过协议拿到可用的工具列表,每个工具的名称、描述、输入输出结构都是机器可读的;调用时也是统一封装成标准请求,不管后端是Python还是Node,不管数据源是本地文件还是远程服务。这样工具作者只需要写一个MCP Server,就能服务所有支持该协议的客户端。

我经常用USB-C来类比:以前每个设备接口不同,现在接口统一了,虽然内部实现还是各自不同,但连接体验统一了。当然这个比喻不完美,MCP不只是“接口形状统一”,连“握手”和“会话”也一起约定了。比如客户端和Server要先交换协议版本,再确认彼此支持哪些能力,然后才进入工具发现和调用阶段。这种“先握手、再对话”的设计,让双方都知道对方擅长什么、边界在哪里,而不是把一切希望寄托在模型的理解能力上。

1.3 它与普通 API 的最大不同

普通API是给程序员调用的,接口契约是人类阅读的文档;MCP是给模型调用的,它既要机器可解析,还要语义可理解。普通API你只要知道request和response格式就能调用;MCP还需要考虑模型的上下文窗口、工具描述的词序、返回内容的长度。因为模型不是通过代码理解工具,而是通过自然语言描述。同一个工具,描述写得好不好,调用成功率差异很大。这一点我后面写Server时会专门展开。

再有一点,普通API往往是点对点授权,MCP在协议层面区分了Host、Client和Server,天然适合做多对多。当然,不是用了MCP就自动安全,它只是把权限边界和交互规则清晰化了,具体的鉴权、审批、审计还是要靠业务方自己实现。理解了这个区别,你就不会拿MCP去和普通HTTP接口硬比,也不会指望它能替代所有内部RPC方案。

2. MCP 的工作原理与核心组成

2.1 Host、Client、Server 三方如何分工

MCP的设计里,一次交互涉及三个角色,很多刚接触的人会搞混,这里我拆开说:

  • Host:模型所在的应用程序,负责调度模型、展示结果、管理会话。用户直接面对的就是这一层。
  • Client:Host内部的协议客户端,负责与Server建立连接、发送请求、维护会话状态。
  • Server:独立进程或服务,封装实际工具和数据源。

用户通常只感知Host,MCP Client和Server在后台协作。比如你让AI助手查文件,Assistant这一类产品就是Host,它内置了MCP Client,你的文件系统工具则是一个MCP Server。Host把用户意图交给模型,模型决定调用文件工具时,Client就把标准化请求发给Server。角色分离带来的好处是:工具开发不需要关心模型内部逻辑,模型客户端也不需要关心工具有没有历史包袱。两边只需要遵守同一套协议,剩下的事情各管各的。

2.2 一次工具调用的完整链路

典型调用流程分六步:初始化、协商能力、发现工具、模型做决策、执行调用、返回结果。第一步,Host里的Client连上Server后发送initialize请求,交换协议版本和能力集;第二步,双方确认支持的原语,避免后续出现“客户端想用SSE,Server只开stdio”这类尴尬;第三步,客户端请求工具列表,拿到工具名称、描述、输入参数定义;第四步,模型根据用户请求结合工具列表,选择合适工具并填参数;第五步,客户端发送tools/call请求,把参数传给Server;第六步,Server执行后返回结果,结果会被拼进上下文,让模型生成最终回答。

这个过程看起来简单,但每一步都是标准JSON-RPC消息,所以任何一侧换实现,只要遵守协议就能对接。我之前做传统API适配时,最头疼的就是两边对字段名、错误码、分页规则的理解不一致,而在MCP里这些都被协议固定住了。尤其是错误处理,MCP定义了结构化错误对象,客户端可以区分是“工具不存在”“参数不合法”还是“Server内部错误”,这样模型就能根据错误类型调整策略,而不是面对一堆莫名其妙的异常字符串。

2.3 协议层的关键细节:JSON-RPC、stdio、SSE

MCP底层用的是JSON-RPC 2.0。为什么选它?因为简单、轻量、语言无关,而且和Web生态天然契合。一个典型的initialize请求长这样:

{ "jsonrpc": "2.0", "id": 1, "method": "initialize", "params": { "protocolVersion": "2024-11-05", "capabilities": {}, "clientInfo": { "name": "demo-client", "version": "0.1.0" } } }

传输层有两种主流方式:stdio和HTTP+SSE。stdio适合本地进程,客户端启动一个子进程,通过标准输入输出互相发消息;远程场景一般用HTTP+SSE,客户端发送POST请求,服务端通过SSE流推送消息。选stdio的好处是进程隔离,不污染客户端进程,哪怕Server崩了也不会把主程序拖垮;选SSE的好处是可以部署在远端,多个客户端共享同一个Server。我的建议是本地优先stdio,跨机器再考虑SSE,这样调试起来简单,也不用操心端口和鉴权问题。传输层如果被抽象好,以后换成更高效的通道,协议层不需要改动,这是MCP设计里比较聪明的一点。

3. 自己动手:构建一个 MCP Server 并接入客户端

3.1 环境准备与项目初始化

我用的Python环境,MCP的Python SDK已经提供了一个叫FastMCP的便捷封装,开发体验接近常见的Web框架。建议先建虚拟环境,避免依赖冲突污染全局Python。初始化命令很简单:

mkdir mcp-demo cd mcp-demo python -m venv .venv source .venv/bin/activate pip install mcp

如果你需要更底层的控制,比如自定义传输逻辑或者手动处理会话状态,也可以直接用底层Server类。但新手第一次跑通,用FastMCP最容易建立信心,因为它把工具发现、参数解析、消息封装都自动化了。等后面真要接复杂业务,再回去读底层协议也不会太难,毕竟你已经知道整体链路是怎么跑的了。

3.2 用 FastMCP 写一个能查本机状态的 Server

下面这个server只做两件事:查磁盘空间和查系统运行时长。它能展示最核心的套路:定义工具函数,加装饰器,函数名就是工具名,docstring会被当作工具描述,函数参数会自动生成输入结构。代码如下:

from mcp.server.fastmcp import FastMCP import shutil import time mcp = FastMCP("LocalInfoServer") @mcp.tool() def disk_usage(path: str = "/") -> str: """获取指定路径的磁盘使用情况,返回总容量、已用空间和可用空间。""" total, used, free = shutil.disk_usage(path) return f"total={total // (2**30)}GB, used={used // (2**30)}GB, free={free // (2**30)}GB" @mcp.tool() def uptime() -> str: """返回系统运行时长,便于排查机器是否重启过。""" with open("/proc/uptime", "r") as f: uptime_sec = float(f.read().split()[0]) return f"uptime={uptime_sec:.1f} seconds" if __name__ == "__main__": mcp.run()

几个细节我要特别强调。第一,工具描述要具体,别写“查询磁盘”这种泛泛说法,因为模型靠描述决定是否调用,写得越具体越不容易误选。第二,路径参数给默认值最稳妥,避免模型漏填必填参数。第三,返回结构化文本比直接print更利于模型理解,最好一眼能看到关键字段和数值。还有一点,不要在工具函数里做太重的工作,比如把大文件整个读进来,那会把模型的上下文撑爆,后面再想处理别的任务就难了。

3.3 把 Server 接入客户端

先把Server跑起来,直接执行python server.py。然后在客户端的配置文件里注册Server。不同客户端配置文件的位置不一样,但核心结构类似,通常是这样:

{ "mcpServers": { "local-info": { "command": "python", "args": ["/absolute/path/to/server.py"], "env": {} } } }

这里要注意几个坑。路径要写绝对路径,因为客户端不一定用你当前的Shell环境;如果系统里同时有Python2和Python3,command最好写成python3;env用来传环境变量,比如API Key、数据库连接串,不要硬编码在代码里。配置完成后重启客户端,在对话里让AI“查一下磁盘空间”,正常情况下它会自动调用工具并返回真实数据。如果用的是SSE模式,这里就不是command和args了,而是一个url字段,指向你部署好的远程Server地址。两种模式我都用过,本地调试用stdio最省心,一旦涉及多人共用,SSE的价值就体现出来了。

3.4 参数与能力描述:为什么细节决定成败

同一个小工具,名称和描述不同,调用效果会天差地别。我见过有人把函数命名成f1,结果模型根本猜不到什么时候该用;也见过有人把描述写满几千字,结果反而干扰模型决策。实践下来的标准是:名称用动宾短语,比如get_order_status;描述里包含触发场景、关键参数、返回内容和失败条件。输入参数要有类型、范围和默认值,能枚举就枚举,别让模型自由发挥。

如果工具执行出了错误,也要在Server端捕获,并返回人类可读的错误信息,比如“数据库连接失败,请稍后重试”,而不是抛出一段堆栈。模型拿到堆栈很可能开始胡编原因,拿到明确错误反而能准确转述给用户,或者尝试备选工具。这个小小的习惯,能让整体调用的稳定性和用户体验提升一大截。我在实际项目里深有体会,很多时候不是模型不行,是工具返回的内容压根不适合模型阅读。

4. 常用模式与真实场景选型

4.1 适合用 MCP 的场景

我实际验证下来,下面几类场景价值最大:本地文件与代码库操作,数据库查询与报表生成,网页搜索与内容抓取,内部业务系统封装,自动化运维命令。这些能力要么需要跨应用复用,要么涉及多个数据源,MCP的标准化正好对症。尤其是团队里多人共用同一个工具服务时,把Server部署到内网,所有人通过SSE连接,能省掉为每个成员单独安装客户端插件的维护成本。

再举一个业务场景。某个跨平台系统需要让模型同时查订单、查库存、查物流,三个系统分别由不同团队维护。如果没有MCP,你需要分别给三个系统写适配层,还要协调参数格式。有了MCP,每个团队只需要维护自己的Server,对外暴露统一的工具列表,模型侧看到的永远是同一套调用方式。后面新增一个系统,客户端代码几乎不用改,只要注册新的Server就行。这种“新增而不改造”的特性,在长期演进的项目里非常值钱。

4.2 不适合用 MCP 的场景

MCP不是银弹。如果你只是在单个脚本里调用一次模型自带的函数调用能力,完全没有必要引入Server。如果你对延迟极其敏感,比如实时交易、音频流处理,MCP的握手和协商流程会增加额外开销,还不如在代码里直接绑定原生函数。如果你只是给一个永远不会换的客户端写一次性工具,也可以不硬上,毕竟协议带来的标准化收益是长期的,短期的开发成本和排障成本还是存在的。

判断标准就两条:第一,有没有“一对多”的复用需求,一个工具要给多个客户端或多个项目用;第二,协议带来的标准化收益是否超过额外进程和配置成本。如果两个答案都是否,那就别凑热闹。我见过好几个项目,工具就一个,用户就一个,非要引入MCP,最后卡在配置和版本问题上折腾了两天,这就是典型的“为了规范而规范”。

4.3 MCP 与函数调用、插件系统如何共存

很多朋友问,MCP和模型自带的函数调用是不是重复了?我的理解是:函数调用是模型侧的一种能力,解决“如何把用户的请求转成结构化调用意图”;MCP是工具侧的标准,解决“工具如何被统一描述、发现和调用”。两者不是同层竞争,而是可以叠加。MCP Server可以被一个适配层翻译成某个特定模型的函数调用格式,也可以作为一个独立的工具服务被插件系统引用。插件通常是某个客户端的具体扩展形态,MCP让插件不再只能为单一客户端而写。

所以更准确的图景是:模型能力在上层,工具协议在下层,插件只是容器。你可以在一个支持MCP的客户端里,把传统插件拆成多个MCP Server,也可以反过来,把多个MCP Server的逻辑封装成一个插件。关键是把“能力”和“连接方式”分开。有了这层认识,你在做技术选型的时候就不会纠结二选一,而是会想清楚自己在解决的是模型侧的意图理解,还是工具侧的互联互通。

5. 实操中的问题排查与避坑指南

5.1 常见问题速查表

我在接入MCP过程中遇到不少坑,下面这个表可以当速查手册用:

症状可能原因解决办法
工具列表为空Server启动失败或协议版本不匹配手动运行Server看是否报错;检查initialize返回的版本号
调用超时Server处理逻辑阻塞把耗时操作放后台线程;调大客户端超时时间
返回乱码或不可读工具输出格式不统一在Server内统一返回JSON或结构化文本
模型一直不选工具工具名称或描述不清晰改名;在描述里补充触发条件和典型用法
环境变量没生效客户端配置里env未填写或写错检查配置并重启客户端
端口被占用SSE服务端口冲突换端口或改用stdio模式

遇到问题第一步先分清楚是协议层还是业务层。协议层问题通常会表现为握手失败、消息解析失败、工具列表为空;业务层问题则大多是参数错误、权限不足、执行慢。我的经验是,九成新手问题都出在协议版本和配置路径上,而不是协议本身。先检查这两项,能省下大量时间。

5.2 几个容易忽视的细节

第一个是进程生命周期。MCP Server由客户端拉起,如果Server注册了后台线程,客户端退出时线程可能没被清理,导致端口残留和僵尸进程。我建议在Server里做好优雅退出,监听终止信号,主动关闭连接和释放资源。第二个是协议版本。MCP有版本迭代,服务端和客户端必须支持同一个版本才能完成初始化。遇到握手失败,先看版本号,不要急着升级依赖包。最好在项目里锁定测试过的版本组合。

第三个是权限控制。MCP Server一旦接入,模型就拥有了执行工具的能力。它虽然不会主动做坏事,但Prompt注入或者工具返回内容里的恶意指令有可能诱导模型做危险操作。不要让Server默认拥有高危权限,尽量按最小权限原则配置,比如查询工具只读,写操作单独开一个Server并加额外的鉴权。第四个是并发。stdio模式默认一个Client对应一个Server进程,如果多个客户端同时连同一个stdio Server,请求会被排队,表现就是调用慢或超时。需要共享场景就上SSE模式,并做好连接数管理。

5.3 我的排查工具和方法

我排查连接问题时,会先手动在命令行里启动Server,看它能不能正常监听和输出日志。这一步能排除大部分脚本语法错误和依赖缺失问题。然后再用带debug日志的客户端观察JSON-RPC消息,重点看initialize之后服务端返回的capabilities和tools列表。如果怀疑是返回内容把模型带偏,我会手动构造一次模拟调用,直接向Server发tools/call请求,看返回是否符合预期。这一套流程不需要很高级的工具,但能解决90%的对接问题。

另外建议每新增一个工具,先只暴露它,验证通过后再暴露下一个。一把梭把几十个工具全部暴露,出问题时很难判断是协议问题、描述问题还是执行逻辑问题。我会先在工具函数里打印入参和耗时,再对照客户端的调用日志,基本一眼就能看出是哪一步出了问题。这种分阶段验证的方法,看起来慢,实际是最快的。

这段时间实际用下来,我最深的体会是:MCP最大的价值不是省掉一两次开发,而是把工具接入从“点对点”变成了“一对多”,让模型应用和工具服务各自专心做自己擅长的事。很多朋友问我该不该学,我的建议是从今天这个最小Server开始,哪怕只有一个查询功能,先跑通全链路再谈扩展。协议本身还在快速演进,但“标准化”这个方向不会变。最后再分享一个小技巧:当你被各种配置折腾到怀疑人生时,先把环境变量、绝对路径、协议版本这三样重查一遍,大部分问题都出在这里。

相关新闻

Qt+Snap7实现西门子PLC通信的工程实践方案

Qt+Snap7实现西门子PLC通信的工程实践方案

简介:本资源是一份面向工业自动化领域Qt开发者的西门子PLC通信实战工程包,聚焦于使用开源Snap7库在Qt C环境中实现与S7-1200/S7-1500等主流西门子PLC的稳定数据交互,解决上位机界面开发中协议对接难、配置门槛高、示例不完整等痛点。压缩包共…

2026/10/20 2:47:43 阅读更多 →
视频孪生与镜像孪生:空间计算驱动的库区主动防控

视频孪生与镜像孪生:空间计算驱动的库区主动防控

视频孪生、镜像孪生、空间计算、主动防控——这几个词放一起,如果没在项目里滚过一遍,第一反应多半是“又一套重型系统集成”。我在接手这类场景之前也这么想,直到真把一套“高安全等级物资库区 危化品库区”的联动防控方案从蓝图推到实弹测…

2026/10/20 2:47:43 阅读更多 →
可解释深度学习与基因组图谱:从病理切片预测前列腺癌转移风险

可解释深度学习与基因组图谱:从病理切片预测前列腺癌转移风险

一份前列腺癌病理报告上,Gleason评分7分、PSA中等水平,医生其实很难判断这位患者究竟会安安稳稳随访十年,还是术后两年就出现骨转移。同一个风险分组里,个体的结局差异可能极大。这种差异的背后,是肿瘤组织在分子水平上…

2026/10/20 2:47:43 阅读更多 →

最新新闻

MoGe 输出格式完全指南:一张图跑出的点云、深度、法线一次看懂

MoGe 输出格式完全指南:一张图跑出的点云、深度、法线一次看懂

MoGe 输出格式完全指南:一张图跑出的点云、深度、法线一次看懂 【免费下载链接】MoGe [CVPR25 Oral] MoGe: Unlocking Accurate Monocular Geometry Estimation for Open-Domain Images with Optimal Training Supervision 项目地址: https://gitcode.com/GitHub_…

2026/10/20 3:43:11 阅读更多 →
MFACB:让RT-DETR在红外小目标和遥感检测中稳定涨点的多尺度融合卷积模块

MFACB:让RT-DETR在红外小目标和遥感检测中稳定涨点的多尺度融合卷积模块

1. 一个让我失眠的涨点实验:从RT-DETR到MFACB的完整动机做目标检测算法改进的人大概都有过这种经历:跑了一个月的实验,改了十几个模块,mAP纹丝不动,甚至掉点。我之所以把RT-DETR作为基线来做卷积模块的替换改进&#x…

2026/10/20 3:43:11 阅读更多 →
Kafka数据丢失与重复消费:从投递语义到工程实践

Kafka数据丢失与重复消费:从投递语义到工程实践

做 Kafka 生产运维这些年,有一个话题永远绕不开,就是 Kafka 的数据丢失与数据重复。每次出事故,群里最先炸开的永远是两句话:“消息是不是丢了?” “下游怎么收到两遍?” 很多团队第一次用 Kafka 都把它当成…

2026/10/20 3:43:11 阅读更多 →
从技能识别到产出:构建可迭代的个人技能体系实战指南

从技能识别到产出:构建可迭代的个人技能体系实战指南

1. 从“skills”这个词说起:它到底指什么“skills”这个词最近频繁出现在各种讨论里,很多人第一反应是“技能”这个翻译,但如果你只把它理解成简历上那一栏“掌握技能”,那就把问题想简单了。我做了十多年一线项目,带过…

2026/10/20 3:43:11 阅读更多 →
网盘直链下载助手:把网盘文件喂给多连接下载器的浏览器脚本

网盘直链下载助手:把网盘文件喂给多连接下载器的浏览器脚本

网盘直链下载助手:把网盘文件喂给多连接下载器的浏览器脚本 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 /…

2026/10/20 3:43:11 阅读更多 →
Linux磁盘管理实战:分区、挂载与LVM在线扩容全攻略

Linux磁盘管理实战:分区、挂载与LVM在线扩容全攻略

磁盘告警在凌晨三点响起来的时候,没有哪个运维是不崩溃的。连续两周,某台线上服务器的 /data 分区使用率一路上涨,日志轮转、临时文件、数据库归档全往里面堆,眼看就要顶到 100%。当时最尴尬的是:这块盘当初直接整盘格…

2026/10/20 3:42:11 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →