不装SDK,用curl和Python标准库裸调大模型API实战

1. 为什么我要绕开 SDK 直接裸调 API

1.1 一个真实的需求场景

前段时间接手一个内部工具项目,需要把某个模型服务平台的能力集成到已有的数据处理流水线里。官方文档给的是 Python SDK 方案,装包、初始化客户端、调用方法,三步走看起来挺省事。但实际动手时问题就来了:我们的流水线跑在一个资源受限的容器里,依赖管理用的是锁文件,每加一个第三方包都要走一轮安全扫描和版本对齐。SDK 本身又拖了一串依赖,光是依赖树就多出十几个包,扫描报告直接飘红。

更麻烦的是,这个 SDK 的版本迭代节奏和我们项目的发布周期对不上。有一次升级后接口签名变了,本地测试通过,上了预发环境才发现调用报错,排查了半天才定位到是 SDK 内部做了兼容处理。这种"黑盒"式的依赖,出问题时你根本不知道它内部干了什么。

于是我就想,能不能不装 SDK,直接用最原始的方式调?毕竟这类服务本质上就是 HTTP 接口,SDK 无非是帮你封装了请求构造、鉴权、重试这些逻辑。只要我把这些逻辑自己写清楚,反而更可控。这就是"裸调"的由来——不借助任何官方或第三方的封装库,用 curl 和 Python 标准库直接和服务端对话。

1.2 裸调到底适合谁

先说清楚,裸调不是万能药,也不是说 SDK 不好。SDK 适合快速验证、原型开发,或者你对这个服务完全不了解、想先跑通再说。但如果你符合下面几种情况,裸调的价值就体现出来了:

  • 依赖管控严格:项目对第三方依赖有硬性限制,每加一个包都要审批,或者运行环境根本装不了额外依赖。
  • 需要精细控制:你想自己决定超时时间、重试策略、请求头、日志埋点,不想被 SDK 的默认行为绑架。
  • 跨语言或跨环境:你的主技术栈不是 Python,或者要在 shell 脚本、CI 流水线里直接调用,SDK 反而成了累赘。
  • 排查问题需要:出问题时你想看到原始的请求和响应,而不是 SDK 抛出来的一层包装异常。

我这次就是典型的"依赖管控 + 精细控制"双重需求。下面把我踩过的路、总结出来的方法完整分享一遍,包括用 curl 快速验证和用 Python 标准库封装两套方案,你可以直接抄作业。

1.3 裸调的核心思路

不管用什么语言,调用一个 HTTP API 的本质就四件事:拼 URL、带鉴权、发请求、解响应。SDK 帮你做的也是这四件事,只不过它把这些藏在方法调用后面。裸调就是把这四件事摊开,每一步都自己掌控。

具体到这个模型服务平台,它的接口遵循的是比较通用的 REST 风格:一个基础域名加上版本路径,鉴权走请求头里的密钥,请求体是 JSON,响应也是 JSON。搞清楚了这套约定,剩下的就是体力活了。我会先讲清楚接口的通用结构,再分别用 curl 和 Python 演示,最后把生产环境要注意的坑一个个列出来。

2. 动手前必须搞清楚的接口约定

2.1 请求地址的组成结构

任何 API 调用,第一步都是把 URL 拼对。这类模型服务平台的接口地址通常由三部分组成:基础域名、版本前缀、具体资源路径。基础域名是服务商提供的接入点,版本前缀一般是/v1这种形式,用来区分接口版本,资源路径则指向你要调用的具体能力,比如对话补全、文本嵌入、模型列表等。

我建议你拿到文档后,先别急着写代码,而是把这几段拆开记下来。因为不同环境的域名可能不一样,测试环境和生产环境往往用不同的接入点。把域名做成配置项,路径做成常量,后面切换环境时只改一个地方,不容易出错。

提示:拼接 URL 时特别注意斜杠。基础域名末尾有没有斜杠、路径开头有没有斜杠,处理不当就会出现双斜杠或者缺斜杠,有些服务端对此敏感,会直接返回 404。我的做法是统一在拼接时做一次规范化,去掉重复斜杠。

2.2 鉴权方式与请求头

鉴权是裸调里最容易出错的一环。这类平台绝大多数用的是 Bearer Token 方案,也就是在请求头里加一行Authorization: Bearer <你的密钥>。密钥从控制台申请,通常是一长串字符,注意它和账号密码不是一回事,泄露了别人就能拿你的额度去调用。

除了鉴权头,还有两个头基本是标配:Content-Type: application/json告诉服务端你发的是 JSON,Accept: application/json表示你希望收到 JSON。有些平台还会要求额外的头,比如指定接口版本或者客户端标识,这些以文档为准。

我踩过的一个坑是:密钥里如果含有特殊字符,直接拼进请求头可能出问题。虽然大多数平台的密钥是纯字母数字,但保险起见,用代码构造请求时让 HTTP 库去处理转义,别自己手拼字符串。用 curl 测试时,密钥用单引号包起来,避免 shell 把特殊字符解释掉。

2.3 请求体与响应体的字段约定

请求体是 JSON,核心字段一般包括模型名称、输入内容、以及一些控制参数。模型名称决定了你调用哪个模型,输入内容就是你要处理的文本,控制参数比如温度、最大长度这些,用来调节输出的随机性和长度。

响应体同样是 JSON,结构上通常有一个顶层对象,里面包含结果数据和使用量统计。结果数据可能是列表,每个元素对应一条输出;使用量统计会告诉你这次调用消耗了多少输入和输出额度,方便你做成本核算。

这里有个经验:永远不要假设响应结构一成不变。不同模型、不同接口返回的字段可能有细微差别。我的做法是解析时用"取不到就给默认值"的策略,而不是直接按固定路径取值,否则服务端稍微调整字段,你的代码就崩了。

2.4 错误码与限流机制

服务端返回非 200 状态码时,响应体里一般会有错误信息。常见的状态码有这么几类:401 表示鉴权失败,多半是密钥错了或者没带;403 表示没权限,可能是密钥对应的账号没有开通这个模型;429 表示请求太频繁被限流;5xx 表示服务端出问题。

限流这块要特别注意。平台通常按分钟或按天限制调用次数和 token 用量,超了就会返回 429。裸调的好处就在这里——你可以自己实现退避重试,比如遇到 429 就等几秒再试,而不是像某些 SDK 那样直接抛异常。我在生产代码里对 429 和 5xx 都做了指数退避重试,对 4xx 里的鉴权类错误则直接失败,不浪费时间重试。

3. 用 curl 五分钟跑通第一次调用

3.1 最小可用命令的构造

curl 是验证接口最快的方式,不用写任何代码,一条命令就能看到结果。构造命令时,把方法、地址、请求头、请求体四样东西按顺序摆好就行。下面是一个通用的模板,你把自己的密钥、域名、模型名替换进去就能用:

curl -X POST 'https://你的接入点/v1/chat/completions' \ -H 'Authorization: Bearer 你的密钥' \ -H 'Content-Type: application/json' \ -H 'Accept: application/json' \ -d '{ "model": "你的模型名称", "messages": [ {"role": "user", "content": "用一句话解释什么是API"} ], "temperature": 0.7, "max_tokens": 256 }'

这条命令里,-X POST指定方法,-H加请求头,-d跟请求体。请求体用单引号包住,里面的双引号就不会被 shell 吃掉。如果你在 Windows 的命令行里跑,引号规则不太一样,建议用 Git Bash 或者 WSL,体验和 Linux 一致。

3.2 让输出更好读的几个参数

默认情况下 curl 会把响应原样打印出来,一长串 JSON 挤在一起,看着费劲。加两个参数就清爽多了:

  • -s静默模式,不显示进度条和统计信息,输出更干净。
  • -w '\nHTTP状态码: %{http_code}\n'在响应末尾追加状态码,方便你一眼看出成功还是失败。

组合起来就是curl -s -w '\nHTTP状态码: %{http_code}\n' ...。如果响应是 JSON,你还可以接一个格式化工具,比如| python -m json.tool,把压缩的 JSON 展开成带缩进的形式,字段一目了然。这个技巧在调试复杂响应时特别有用。

3.3 用 curl 做快速排查

curl 最大的价值在于排查问题。当你的代码调用失败时,先用 curl 跑一遍同样的请求,能快速区分是代码问题还是接口问题。如果 curl 成功而代码失败,那问题就在你的代码里,比如请求头没带全、JSON 序列化有问题;如果 curl 也失败,那就是密钥、网络或者服务端的问题。

我习惯把常用的 curl 命令存成一个 shell 脚本,参数用变量替换,这样切换模型、改输入内容都很方便。比如把密钥放在环境变量里,脚本里用$API_KEY引用,既避免了密钥硬编码在命令历史里,也方便在不同环境切换。

注意:用 curl 测试时,命令会进入 shell 历史记录,如果密钥直接写在命令里,可能被记录下来。生产环境务必用环境变量或者配置文件读取,别图省事直接写死。

4. 用 Python 标准库封装一个轻量客户端

4.1 为什么选 urllib 而不是 requests

Python 里发 HTTP 请求,很多人第一反应是 requests 库。但 requests 是第三方库,需要额外安装,这就违背了我们"不装 SDK、不加依赖"的初衷。Python 标准库自带的urllib.request虽然用起来啰嗦一点,但胜在零依赖,任何 Python 环境都能跑。

urllib.request的核心用法是构造一个Request对象,设置 URL、方法、请求头和请求体,然后用urlopen发出去。响应对象可以当文件一样读取,拿到字节后再解码成字符串。虽然比 requests 多几行代码,但换来的是完全的可控性和零依赖,对于集成到流水线的场景,这个取舍很值。

4.2 请求构造与鉴权封装

下面是我封装的一个最小客户端,核心就是把重复的请求构造逻辑抽出来:

import json import urllib.request import urllib.error class ModelClient: def __init__(self, base_url, api_key, timeout=30): self.base_url = base_url.rstrip('/') self.api_key = api_key self.timeout = timeout def _build_request(self, path, payload): url = f"{self.base_url}{path}" data = json.dumps(payload).encode('utf-8') req = urllib.request.Request(url, data=data, method='POST') req.add_header('Authorization', f'Bearer {self.api_key}') req.add_header('Content-Type', 'application/json') req.add_header('Accept', 'application/json') return req def chat(self, model, messages, temperature=0.7, max_tokens=256): payload = { "model": model, "messages": messages, "temperature": temperature, "max_tokens": max_tokens } req = self._build_request('/v1/chat/completions', payload) try: with urllib.request.urlopen(req, timeout=self.timeout) as resp: body = resp.read().decode('utf-8') return json.loads(body) except urllib.error.HTTPError as e: error_body = e.read().decode('utf-8') raise RuntimeError(f"HTTP {e.code}: {error_body}")

这段代码里,_build_request负责拼 URL、序列化请求体、加请求头,chat负责组装业务参数并处理响应。把构造逻辑和业务逻辑分开,后面加新接口时只需要写新的业务方法,复用同一个构造逻辑。

4.3 超时、重试与异常处理

裸调最需要自己操心的就是健壮性。urlopen的timeout参数控制单次请求的超时,我一般设 30 秒,模型推理有时候比较慢,设太短容易误判超时。但光有超时不够,网络抖动、服务端偶发 5xx 都需要重试。

我的重试策略是这样的:对 429 和 5xx 做重试,最多三次,每次等待时间翻倍,也就是 1 秒、2 秒、4 秒的指数退避;对 4xx 里的鉴权错误和参数错误直接失败,因为重试也没用。实现上用一个循环包住请求,捕获异常后判断状态码决定是否继续。

import time def chat_with_retry(self, model, messages, max_retries=3, **kwargs): last_error = None for attempt in range(max_retries): try: return self.chat(model, messages, **kwargs) except RuntimeError as e: msg = str(e) if 'HTTP 429' in msg or 'HTTP 5' in msg: last_error = e wait = 2 ** attempt time.sleep(wait) continue raise raise last_error

这段重试逻辑看着简单,但实际很管用。我上线后遇到过几次服务端短暂波动,都是靠这个自动重试扛过去的,用户完全无感知。

4.4 响应解析与用量统计

拿到响应后,解析要稳。前面说过,别假设字段一定存在。我的做法是写一个小工具函数,按路径逐层取值,取不到就返回默认值:

def safe_get(data, *keys, default=None): current = data for key in keys: if isinstance(current, dict) and key in current: current = current[key] else: return default return current

用的时候就是safe_get(resp, 'choices', 0, 'message', 'content', default=''),即使某一层缺失也不会抛异常。用量统计字段一般在响应的usage里,包含输入和输出的 token 数,我把它记到日志里,方便月底核算成本。这个数据平台一般都会返回,别浪费了。

5. 生产环境必须处理的几个坑

5.1 密钥管理与环境隔离

密钥绝对不能硬编码在代码里,也不能提交到版本库。我的做法是放在环境变量里,代码启动时读取,读不到就直接报错退出,避免用空密钥去调用。不同环境用不同的密钥,测试环境的密钥权限可以小一点,生产环境的密钥严格管控。

如果团队有配置中心或者密钥管理服务,那就更好了,代码里只留一个读取接口。裸调的好处是你可以完全控制密钥怎么加载,不像某些 SDK 会把它缓存到某个地方,你都不知道它存哪了。

5.2 超时与并发控制

超时前面说了,这里重点说并发。如果你的流水线要批量调用,千万别无脑开一堆线程同时打。平台有限流,并发太高直接 429,反而拖慢整体速度。我的做法是用一个信号量控制并发数,比如最多同时 5 个请求,配合重试,整体吞吐反而更稳。

另外,单次请求的超时要和整体任务超时配合。比如一个批处理任务总超时 10 分钟,单个请求超时 30 秒,那就要算好最多能重试几次,别让重试把总时间耗光。

5.3 日志与可观测性

裸调因为没有 SDK 的封装,日志要自己打。我至少记录这几样:请求的模型、输入长度、响应状态、耗时、消耗的 token 数。出问题时,这些日志能帮你快速定位是哪个环节慢、哪个模型报错多。

提示:日志里千万别打完整的密钥和完整的用户输入。密钥打码,用户输入如果涉及敏感信息也要脱敏。这是合规底线,别嫌麻烦。

5.4 常见问题速查表

现象可能原因排查方向
401 鉴权失败密钥错误、没带鉴权头、密钥过期检查请求头格式,确认密钥有效
403 无权限账号未开通该模型、额度耗尽登录控制台确认权限和余额
404 找不到URL 拼错、版本前缀不对核对域名和路径,检查斜杠
429 限流请求太频繁、超出配额降低并发,加退避重试
5xx 服务端错误服务端波动指数退避重试,观察是否恢复
响应解析失败字段结构变化用安全取值,打印原始响应

这张表是我实际排查时总结的,遇到问题先对号入座,能省不少时间。

6. 裸调方案的实际收益与取舍

6.1 依赖树干净带来的好处

裸调之后,我的项目依赖树里没有多出任何第三方包,安全扫描一次通过,版本对齐的烦恼也没了。部署时不用再担心某个依赖的版本冲突,容器镜像也小了一圈。这个收益在依赖管控严格的环境里特别明显,省下的沟通和审批成本远超写代码的那点时间。

6.2 可控性提升的具体体现

可控性体现在很多细节上。比如超时时间,SDK 可能给你一个默认值,你想改还得查文档;裸调里就是urlopen的一个参数,想设多少设多少。再比如重试策略,SDK 的重试逻辑是黑盒,裸调里完全由你决定哪些错误重试、等多久。还有日志,你想记什么就记什么,不用受 SDK 的日志格式限制。

6.3 什么情况下还是该用 SDK

说了这么多裸调的好,也得客观讲,有些场景 SDK 更合适。如果你只是做个原型验证,或者对接口完全不熟想快速上手,SDK 能帮你省掉理解接口细节的时间。再比如平台提供了流式输出、文件上传等复杂能力,SDK 可能封装了分块处理、断点续传这些逻辑,自己实现成本较高。这时候用 SDK 是理性的选择,没必要为了"裸调"而裸调。

我的建议是:先理解接口本质,再决定用不用 SDK。理解了接口,你用 SDK 也知道它背后在干什么,出问题能定位;不理解接口,用 SDK 就是碰运气。裸调的过程本身就是一次深入理解接口的过程,这个收获比省下的依赖更有价值。

6.4 后续可以扩展的方向

这套裸调客户端跑通后,我陆续加了几个扩展。一个是把模型名称和参数做成配置,不同任务用不同配置,不用改代码。另一个是加了简单的本地缓存,相同输入短时间内重复调用直接返回缓存结果,省额度。还有一个是加了调用统计,按天汇总 token 消耗,方便做成本分析。

这些扩展都不复杂,但因为代码是自己写的,加什么都顺手。如果用的是 SDK,加这些功能可能得绕开它的封装,反而更麻烦。这也是裸调的一个隐性收益——你的代码你做主。

最后分享一个我踩过的坑:刚开始裸调时,我图省事把请求体里的max_tokens设得很大,结果有一次输入特别长,加上输出,直接超了模型的上下文限制,服务端返回错误。后来我加了一个输入长度预估,动态调整max_tokens,保证输入加输出不超过上限。这个细节文档里不一定写清楚,但实际用起来很关键,尤其是处理长文本的时候。

相关新闻

小样本无人机频射信号检测:YOLOv5数据集训练避坑指南

小样本无人机频射信号检测:YOLOv5数据集训练避坑指南

简介&#xff1a;面向无人机目标检测与射频信号识别研究者的专用数据集&#xff0c;以无人机频射信号图像为核心对象&#xff0c;可有效解决真实场景下样本稀缺、标注困难等问题。资源适配YOLOv5训练流程&#xff0c;每张原始图片均配有对应txt标注文件&#xff0c;标注类别清晰…

2026/10/19 20:25:15 阅读更多 →
LangChain集成LLM Guard:筑牢大模型应用输入输出安全防线

LangChain集成LLM Guard:筑牢大模型应用输入输出安全防线

最近在搭一套基于LangChain的内部知识库问答系统&#xff0c;核心链路其实不复杂&#xff1a;用户提问、检索增强、交给模型生成、返回结果。真正让我意识到问题严重的&#xff0c;是上线前的安全工作。用户输入的提示词可以被构造得非常刁钻&#xff0c;比如“忽略上面所有指令…

2026/10/19 20:25:15 阅读更多 →
Vision Mamba(Vim)图像分类实践:从状态空间模型到CUDA算子编译与训练避坑

Vision Mamba(Vim)图像分类实践:从状态空间模型到CUDA算子编译与训练避坑

简介&#xff1a;这是一份使用 Vim&#xff08;Vision Mamba&#xff09;视觉模型实现图像分类的完整工程包&#xff0c;面向深度学习与计算机视觉开发者&#xff0c;解决新一代状态空间模型在图像分类场景中的落地实践问题。包内含 2000 个文件&#xff1a;1916 个 png 构成植…

2026/10/19 20:24:12 阅读更多 →

最新新闻

CMake execute_process 深度解析:跨平台构建中的进程控制核心

CMake execute_process 深度解析:跨平台构建中的进程控制核心

1. 项目概述&#xff1a;为什么一个看似冷门的 CMake 指令值得单独写三千字&#xff1f; CMake 的 execute_process 指令&#xff0c;常年被淹没在 add_executable 、 target_link_libraries 这些高频指令的阴影下。很多刚接触 CMake 的开发者甚至不知道它的存在&#xf…

2026/10/19 21:13:54 阅读更多 →
diagram-design实战:从需求分析到团队图库的信息设计方法论

diagram-design实战:从需求分析到团队图库的信息设计方法论

1. 从“diagram-design”这个标题里能读出什么第一次看到“diagram-design”这个标题&#xff0c;很多人会以为它只是讲“怎么画图”。但如果你真正做过技术方案、写过设计文档、给团队讲过架构&#xff0c;就会明白&#xff1a;画图只是表象&#xff0c;背后是一整套信息压缩与…

2026/10/19 21:13:54 阅读更多 →
数据库入门核心:从表结构、索引到事务的实战解析

数据库入门核心:从表结构、索引到事务的实战解析

我在带新人入门的时候&#xff0c;最常听到的一句话是&#xff1a;“数据库到底是个啥&#xff1f;感觉就是个存数据的软件呗。”这话没毛病&#xff0c;但只对了一半。如果只是存数据&#xff0c;Excel也能干&#xff0c;为啥要搞出个专门的“王国”出来&#xff1f;因为数据库…

2026/10/19 21:10:50 阅读更多 →
从MLA到DeepSeekMoE:DeepSeek系列大模型架构演进与技术拆解

从MLA到DeepSeekMoE:DeepSeek系列大模型架构演进与技术拆解

很多人聊大模型架构的时候&#xff0c;总喜欢从Transformer开始铺开&#xff0c;但真正把架构演进讲透的&#xff0c;恰恰要看国内开源模型这几年的实操路线。我自己的感受是&#xff0c;2024年初那会儿大家还在卷榜单&#xff0c;到了年底风向就变了&#xff0c;变成卷单次推理…

2026/10/19 21:09:49 阅读更多 →
顶级投资人称过去只是热身:AI智能跃迁1000倍意味着什么

顶级投资人称过去只是热身:AI智能跃迁1000倍意味着什么

1. 当一位顶级投资人说出“过去只是热身”第一次看到这个访谈标题时&#xff0c;我的直觉反应不是“又在吹AI”&#xff0c;而是注意到一个细节&#xff1a;说这话的人&#xff0c;过去四十年几乎每一次都押中了时代级的技术浪潮。从个人电脑时代的操作系统与芯片&#xff0c;到…

2026/10/19 21:09:49 阅读更多 →
决策树在电信客户流失预测中的实战应用与规则落地

决策树在电信客户流失预测中的实战应用与规则落地

1. 先摸清业务&#xff1a;流失预测到底在解决什么问题接手电信客户流失预测这类项目&#xff0c;很多人第一反应就是找数据集、跑模型、调参出准确率。我之前做过一个运营商侧的流失预警项目&#xff0c;踩过不少坑之后发现&#xff0c;第一步根本不是建模&#xff0c;而是把“…

2026/10/19 21:08:47 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介&#xff1a;本资源为电源技术方向的学术研究文档&#xff0c;聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略&#xff0c;面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 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 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址&#xff1a; https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集&#xff0c;共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 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 阅读更多 →