VS Code 插件开发实战:打造专属 DeepSeek 编程助手
简介这份PDF文档面向具备一定编程基础、希望借助大模型提升编码效率的开发者系统讲解如何从零开发一款定制化的VS Code插件将DeepSeek编程助手接入日常编辑器。内容覆盖插件开发基础、开发环境搭建、DeepSeek API申请与调用以及代码补全、错误检查与修复、代码解释、代码生成等核心功能的实现思路并延伸至命令注册、菜单与快捷键绑定、状态条通知、编辑器内容交互、单元测试与调试配置最后给出打包发布到扩展市场及后续维护推广的完整路径。资源包共1个PDF文件约1.8MB26页篇幅目录层级分明、图表与文字显示正常便于按章节查阅。目前已有104人学习。读者可据此掌握插件项目初始化、API集成与功能定制的关键方法并参考测试与发布流程把个性化编程助手真正落地到自己的开发工作流中。1. 从「装个插件」到「造个插件」为什么我要把 DeepSeek 塞进 VS CodeVS Code 插件开发这件事很多人第一次动心不是因为想学 TypeScript而是因为市面上的 AI 编程助手总差那么一口气。DeepSeek 的代码能力在开发者圈子里口碑不差API 价格也友好但官方并没有一个能完全按自己习惯定制的 VS Code 客户端。于是问题就变成了与其在扩展市场里反复试错不如自己写一个。这个标题讲的就是这件事——用 VS Code 插件开发的方式把 DeepSeek 的对话、补全、代码解释能力做成一个只服务于自己工作流的编程助手。适合谁适合已经会用 VS Code、写过一点 JavaScript 或 TypeScript、手里有 DeepSeek API Key、并且愿意花一个周末把「玄学」变成「可控」的开发者。它不解决「AI 能不能写代码」的问题它解决的是「AI 能不能按我的方式写代码」的问题。2. 动手之前VS Code 插件开发的最小知识底座2.1 插件到底跑在哪个进程里VS Code 插件开发最容易让人翻车的地方是没搞清楚代码运行的位置。VS Code 本身是 Electron 应用但插件并不直接跑在渲染进程里。它运行在一个独立的 Node.js 进程叫扩展宿主Extension Host。这个设计的好处是插件崩溃不会拖垮整个编辑器坏处是你不能直接操作 DOM也不能随便访问浏览器 API。插件和 VS Code 主进程之间通过 RPC 通信。你在插件里调用vscode.window.showInformationMessage实际上是在向主进程发消息主进程再操作 UI。理解这一点后面遇到「为什么我的插件拿不到当前编辑器实例」或者「为什么异步操作顺序不对」时就能少走很多弯路。另一个关键概念是激活事件activationEvents。插件不是一启动就运行的而是等到某个条件触发才被激活。比如onCommand表示用户执行了某个命令时才激活onLanguage:python表示打开了 Python 文件才激活。激活事件配得越精准VS Code 启动就越快。很多新手插件让编辑器变卡就是因为激活事件写成了*相当于每次打开 VS Code 都把所有插件跑一遍。2.2 用 Yeoman 生成器搭出第一个骨架手动从零建目录不是不行但没必要。VS Code 官方维护了一个 Yeoman 生成器能直接产出可运行的最小插件结构。前提是本机有 Node.js 和 npm版本建议 Node 18 以上npm 9 以上。# 全局安装 Yeoman 和 VS Code 插件生成器 npm install -g yo generator-code # 在空目录下运行生成器 yo code运行后会进入交互式选择。对于 DeepSeek 助手这个场景选「New Extension (TypeScript)」然后依次填写插件名称、标识符、描述。标识符建议用deepseek-assistant这种小写加连字符的格式因为它是发布到市场时的唯一 ID。生成完成后目录结构大致如下deepseek-assistant/ ├── src/ │ └── extension.ts # 插件入口 ├── package.json # 插件清单命令和激活事件都在这 ├── tsconfig.json └── .vscode/ └── launch.json # 调试配置package.json是插件的核心清单。其中contributes.commands定义了插件向命令面板注册的命令activationEvents定义了激活时机。生成器默认会给一个deepseek-assistant.helloWorld命令按 F5 会打开一个「扩展开发宿主」窗口在里面按 CtrlShiftP 输入 Hello World 就能看到效果。这一步跑通说明开发环境没问题。2.3 命令、菜单与快捷键的注册方式插件的能力入口是命令。注册一个命令需要两步在package.json的contributes.commands里声明在extension.ts里用vscode.commands.registerCommand绑定实现。{ contributes: { commands: [ { command: deepseek-assistant.ask, title: DeepSeek: 询问选中代码 } ], menus: { editor/context: [ { command: deepseek-assistant.ask, when: editorHasSelection, group: navigation } ] }, keybindings: [ { command: deepseek-assistant.ask, key: ctrlaltd, mac: cmdaltd, when: editorTextFocus } ] } }这段配置做了三件事声明命令、把它加到编辑器右键菜单只在有选中文本时出现、绑定快捷键 CtrlAltD。when条件是 VS Code 插件开发里非常实用的机制它决定了命令在什么上下文里可见。常见的还有editorLangId python限定只在 Python 文件里出现。对应的extension.ts实现import * as vscode from vscode; export function activate(context: vscode.ExtensionContext) { // 注册命令回调里拿到当前编辑器选中的文本 const disposable vscode.commands.registerCommand( deepseek-assistant.ask, async () { const editor vscode.window.activeTextEditor; if (!editor) { vscode.window.showWarningMessage(没有打开的编辑器); return; } const selection editor.selection; const selectedText editor.document.getText(selection); if (!selectedText) { vscode.window.showWarningMessage(请先选中一段代码); return; } // 这里先占位下一章接入 DeepSeek API vscode.window.showInformationMessage(选中了 ${selectedText.length} 个字符); } ); context.subscriptions.push(disposable); } export function deactivate() {}context.subscriptions是插件的资源回收机制。所有注册的命令、事件监听、状态栏项都应该 push 进去插件停用时 VS Code 会自动清理。不这么做的话插件反复激活可能导致重复注册表现为命令执行两次或者内存缓慢增长。这是血泪经验早期我写的一个插件就是因为没管 subscriptions调试时命令触发了两遍排查了半天才发现是热重载导致的重复注册。3. 接入 DeepSeek API从 API Key 到流式对话3.1 把 API Key 存进 SecretStorageAPI Key 绝对不能硬编码在源码里也不能明文写在settings.json里。VS Code 提供了context.secrets底层走的是系统钥匙串Windows 用 Credential ManagermacOS 用 KeychainLinux 用 libsecret。// 存储 API Key async function saveApiKey(context: vscode.ExtensionContext, key: string) { await context.secrets.store(deepseek.apiKey, key); } // 读取 API Key async function getApiKey(context: vscode.ExtensionContext): Promisestring | undefined { return await context.secrets.get(deepseek.apiKey); } // 注册一个设置 API Key 的命令 const setKeyCmd vscode.commands.registerCommand( deepseek-assistant.setApiKey, async () { const key await vscode.window.showInputBox({ prompt: 请输入 DeepSeek API Key, password: true, // 输入时显示为圆点 ignoreFocusOut: true // 切换窗口时不取消输入 }); if (key) { await saveApiKey(context, key); vscode.window.showInformationMessage(API Key 已保存); } } ); context.subscriptions.push(setKeyCmd);password: true让输入框不回显内容ignoreFocusOut: true避免用户去别处复制 Key 时输入框自动关闭。这两个参数看着小但直接影响第一次使用的体验。存好之后每次调用 API 前用getApiKey取出来即可取不到就提示用户先设置。3.2 用 fetch 调 DeepSeek 的 chat completionsDeepSeek 的 API 兼容 OpenAI 的接口格式所以调用方式很直接。Node 18 以上内置了 fetch不需要额外装 axios。下面是一个非流式的调用封装interface ChatMessage { role: system | user | assistant; content: string; } async function callDeepSeek( apiKey: string, messages: ChatMessage[], model: string deepseek-chat ): Promisestring { const response await fetch(https://api.deepseek.com/chat/completions, { method: POST, headers: { Content-Type: application/json, Authorization: Bearer ${apiKey} }, body: JSON.stringify({ model, messages, temperature: 0.3, // 代码场景建议低温度 max_tokens: 2048, stream: false }) }); if (!response.ok) { const errText await response.text(); throw new Error(DeepSeek API 错误 ${response.status}: ${errText}); } const data await response.json() as any; return data.choices[0].message.content; }参数说明model常用deepseek-chat如果要做代码补全可以用deepseek-codertemperature在代码场景建议 0.2 到 0.4太高会写出风格飘忽的代码max_tokens控制回复长度设太大不仅慢还费 token。错误处理里把响应体打出来很重要DeepSeek 返回的错误信息通常能直接告诉你问题比如余额不足、Key 无效、模型名写错。3.3 流式输出让代码一个字一个字蹦出来非流式调用要等模型全部生成完才返回长回答时界面会卡住好几秒。流式输出通过 SSEServer-Sent Events逐块返回体验好很多。DeepSeek 的流式接口在 body 里把stream设为true响应体是一行行的data: {...}。async function streamDeepSeek( apiKey: string, messages: ChatMessage[], onChunk: (text: string) void, model: string deepseek-chat ): Promisevoid { const response await fetch(https://api.deepseek.com/chat/completions, { method: POST, headers: { Content-Type: application/json, Authorization: Bearer ${apiKey} }, body: JSON.stringify({ model, messages, stream: true, temperature: 0.3 }) }); if (!response.ok || !response.body) { throw new Error(流式请求失败: ${response.status}); } const reader response.body.getReader(); const decoder new TextDecoder(utf-8); let buffer ; while (true) { const { done, value } await reader.read(); if (done) break; buffer decoder.decode(value, { stream: true }); // SSE 以换行分隔逐行解析 const lines buffer.split(\n); buffer lines.pop() || ; // 最后一行可能不完整留到下次 for (const line of lines) { const trimmed line.trim(); if (!trimmed.startsWith(data:)) continue; const payload trimmed.slice(5).trim(); if (payload [DONE]) return; try { const json JSON.parse(payload); const delta json.choices?.[0]?.delta?.content; if (delta) onChunk(delta); } catch { // 忽略解析失败的行通常是心跳或空行 } } } }这里有个容易踩的坑SSE 的数据块不保证按行完整到达一个 JSON 可能被切成两半。所以必须用 buffer 缓存不完整的行等下一块数据到了再拼接。直接对每个 chunk 做JSON.parse迟早会遇到「Unexpected end of JSON input」。decoder.decode(value, { stream: true })里的stream: true也很关键它保证多字节的 UTF-8 字符比如中文不会被截断成乱码。4. 把对话嵌进编辑器Webview 与结果呈现4.1 用 Webview 做一个对话面板命令面板和输入框适合轻量交互但要做多轮对话还是得有个面板。VS Code 的 Webview API 允许插件在编辑器区域或侧边栏嵌入一个类似 iframe 的网页。创建方式function createChatPanel(context: vscode.ExtensionContext) { const panel vscode.window.createWebviewPanel( deepseekChat, // 面板类型标识 DeepSeek 助手, // 标题 vscode.ViewColumn.Beside, // 在侧边打开 { enableScripts: true, // 允许运行 JS retainContextWhenHidden: true // 切走再切回不丢状态 } ); panel.webview.html getWebviewHtml(panel.webview, context.extensionUri); // 接收来自 Webview 的消息 panel.webview.onDidReceiveMessage( async (message) { if (message.type ask) { const apiKey await getApiKey(context); if (!apiKey) { panel.webview.postMessage({ type: error, text: 请先设置 API Key }); return; } await streamDeepSeek( apiKey, [{ role: user, content: message.text }], (chunk) panel.webview.postMessage({ type: chunk, text: chunk }) ); panel.webview.postMessage({ type: done }); } }, undefined, context.subscriptions ); }retainContextWhenHidden: true会让 Webview 在隐藏时保留 DOM 状态代价是内存占用高一些。如果对话历史不长可以设为 false 并在onDidChangeViewState里手动恢复。enableScripts: true是必须的否则 Webview 里的 JS 不会执行但这也意味着要小心 XSS所有来自模型的内容在插入 DOM 前都应该转义。4.2 Webview 与插件之间的消息协议Webview 和插件是隔离的只能通过postMessage通信。设计一个清晰的消息协议能省很多事。我一般用type字段区分方向方向type含义Webview → 插件ask用户发送了一条提问Webview → 插件clear清空对话历史插件 → Webviewchunk流式返回的一段文本插件 → Webviewdone本次回复结束插件 → Webviewerror发生错误附带错误信息Webview 侧的接收逻辑const vscode acquireVsCodeApi(); let currentReply ; window.addEventListener(message, (event) { const msg event.data; if (msg.type chunk) { currentReply msg.text; renderReply(currentReply); // 更新界面 } else if (msg.type done) { currentReply ; } else if (msg.type error) { showError(msg.text); } }); function sendAsk(text) { vscode.postMessage({ type: ask, text }); }acquireVsCodeApi()只能在 Webview 里调用一次重复调用会抛异常。它返回的对象有postMessage和getState/setState方法后者用于在 Webview 被销毁重建时恢复状态。如果对话历史重要建议用setState持久化而不是依赖retainContextWhenHidden。4.3 把选中代码作为上下文传进去一个只会聊天的助手价值有限能读到当前编辑器上下文的助手才实用。常见做法是把选中代码、当前文件名、语言类型一起拼进 promptfunction buildPrompt(selectedCode: string, fileName: string, langId: string): string { return [ 当前文件${fileName}语言${langId}, 以下是我选中的代码, langId, selectedCode, , 请解释这段代码的作用并指出潜在问题。 ].join(\n); }注意 prompt 里用代码块包裹选中代码并标注语言这样模型更容易理解上下文。如果选中代码很长要考虑 token 限制可以在发送前截断或者只取前后若干行。DeepSeek 的上下文窗口虽然不小但把整个文件塞进去既慢又贵按需取片段更划算。5. 避坑与排查插件开发里那些让人抓狂的瞬间5.1 改了代码但扩展开发宿主没反应现象修改extension.ts后按 CtrlR 重载行为还是旧的。原因通常是 TypeScript 没有重新编译或者 watch 任务没跑起来。解决在项目根目录执行npm run watch它会监听文件变化并增量编译。如果已经跑着 watch 还是没生效检查launch.json里的outFiles是否指向了正确的out目录。另一个可能是扩展开发宿主窗口缓存了旧版本彻底关掉那个窗口重新按 F5 更稳妥。5.2 API 调用返回 401 或 402现象请求 DeepSeek 接口返回 401 Unauthorized 或 402 Payment Required。原因401 通常是 API Key 无效或没带上402 是余额不足。解决先用getApiKey确认取到了值再检查请求头里Authorization的格式是不是Bearer加 Key注意 Bearer 后面有个空格。如果 Key 是从网页复制的留意有没有多余的空格或换行。余额问题只能去控制台充值代码层面无法绕过。5.3 流式输出中文乱码现象流式返回的中文显示成问号或方块。原因TextDecoder没有开启流式模式多字节字符被截断。解决确保decoder.decode(value, { stream: true })带了第二个参数。另外如果 Webview 的 HTML 没有声明meta charsetUTF-8即使数据正确也会显示乱码。这两个地方都要检查。5.4 Webview 里的按钮点了没反应现象Webview 页面渲染正常但点击按钮不触发任何逻辑。原因enableScripts没设为 true或者 CSP内容安全策略阻止了内联脚本。解决创建 Webview 时确认enableScripts: true。如果用了内联script需要在 HTML 里加 CSP meta 标签并允许unsafe-inline但更推荐把脚本放到单独的.js文件里通过webview.asWebviewUri引入这样既安全又不容易被拦。5.5 插件在市场发布后激活失败现象本地调试一切正常发布到市场后用户反馈命令找不到。原因package.json里的activationEvents和main字段配置不对或者.vscodeignore把必要文件排除了。解决确认main指向编译后的入口文件通常是./out/extension.jsactivationEvents至少包含命令对应的onCommand:你的命令ID。用vsce ls命令可以列出打包时会包含的文件对照检查有没有漏掉out目录或node_modules里的运行时依赖。6. 进阶技巧让助手真正长在你的工作流里走到这一步一个能对话、能读选中代码的 DeepSeek 助手已经能用了。但真正让它从「能用」变成「离不开」的是一些细节上的打磨。我自己的习惯是给助手加一个「解释并替换」的命令选中代码后让模型生成改进版本然后用WorkspaceEdit直接替换编辑器里的原文。这样就不用复制粘贴来回倒腾。async function replaceSelection(newCode: string) { const editor vscode.window.activeTextEditor; if (!editor) return; const selection editor.selection; await editor.edit((editBuilder) { editBuilder.replace(selection, newCode); }); }editor.edit返回一个 Promise替换操作是原子的要么全成功要么全失败。如果新代码里包含模型生成的 Markdown 代码块标记记得先剥掉再替换否则会把 写进源文件。我一般会在 prompt 里明确要求「只输出代码不要任何解释和 Markdown 标记」但模型偶尔还是会加所以代码侧再做一层清洗更保险。另一个值得投入的方向是自定义指令。与其每次都在 prompt 里重复「你是资深工程师回答要简洁」不如把系统提示词做成可配置项存在workspaceState或globalState里用户可以在设置界面里改。VS Code 的contributes.configuration可以声明配置项然后在代码里用vscode.workspace.getConfiguration(deepseek-assistant).get(systemPrompt)读取。这样不同项目可以用不同的助手人格前端项目让它关注可访问性后端项目让它关注并发安全。验证插件是否真的稳定我的做法是拿三个场景反复跑选中一段有 bug 的代码让它找问题、选中一段长函数让它重构、在空文件里让它从零写一个工具函数。这三个场景覆盖了读、改、写三种交互任何一个出问题都说明 prompt 或上下文处理有漏洞。跑通之后再把它打包成.vsix发给同事试用收集到的反馈往往比自测更能暴露边界情况。最后一个习惯每次改完 API 调用相关的代码先在一个独立的 Node 脚本里验证请求格式确认没问题再搬进插件。插件调试的反馈链路比纯 Node 长把网络层单独拎出来测能省下大量按 F5 的时间。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

YOLOv11工业质检实战:从环境配置到产线部署的误检率优化指南

YOLOv11工业质检实战:从环境配置到产线部署的误检率优化指南

简介:这份PDF文档面向工业质检领域的技术开发人员与算法工程师,围绕YOLOv11展开高精度缺陷检测与实时分类的完整方案讲解,帮助读者应对传统质检效率低、成本高、复杂缺陷难以捕捉等痛点。文档共37页,以单一PDF形式打包&#xff0c…

2026/10/5 7:06:29 阅读更多 →
框架表示法入门:从槽、继承到匹配机制的核心原理

框架表示法入门:从槽、继承到匹配机制的核心原理

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

2026/10/5 7:06:29 阅读更多 →
人声节奏对齐软件推荐:从专业DAW到AI人声制作工具怎么选

人声节奏对齐软件推荐:从专业DAW到AI人声制作工具怎么选

人声节奏对齐软件推荐:从专业DAW到AI人声制作工具怎么选 很多人录完一首歌后会遇到同一个问题:旋律大体没错,但某些字总是抢拍或拖拍;副歌情绪到了,人声却没有和鼓点、贝斯或伴奏卡在一起;再加上音准不稳、…

2026/10/5 7:06:29 阅读更多 →

最新新闻

AI应用架构设计四原则:分层解耦、能力网关、编排与数据飞轮

AI应用架构设计四原则:分层解耦、能力网关、编排与数据飞轮

先抛个问题:你们团队把大模型接进来之后,系统是变得更清爽了,还是更乱了?我近年陆续复盘过不少AI应用系统,坦白讲,很多团队的问题不在模型能力,而在架构设计——把 API 调用直接塞进业务代码里&…

2026/10/5 7:33:45 阅读更多 →
DeepSeek智能助教与课程设计自动化引擎落地实践

DeepSeek智能助教与课程设计自动化引擎落地实践

简介:这份969页的PDF文档面向教育行业技术开发者、AI应用架构师及教研产品团队,系统讲解如何基于DeepSeek大模型搭建对话式辅导系统与课程设计自动化引擎。内容从教育智能助教的技术痛点与方案价值切入,逐步展开DeepSeek在教育场景的适配性分…

2026/10/5 7:33:45 阅读更多 →
OpenClaw接入Chrome完整指南:Windows环境配置与踩坑记录

OpenClaw接入Chrome完整指南:Windows环境配置与踩坑记录

折腾OpenClaw接入Chrome这件事,我前后花了三天。单纯装个包其实很快,麻烦的是Windows底下的环境串联——WSL2、Node.js、Chrome的调试通道、OpenClaw自己的Companion服务,任何一环没有对上,你看到的都是一堆让人头皮发麻的报错。把…

2026/10/5 7:33:45 阅读更多 →
Windows本地AI管家实战:基于WSL2与Ollama的部署指南

Windows本地AI管家实战:基于WSL2与Ollama的部署指南

后台好几条私信都在问同一个问题:Windows上到底能不能正经跑一个本地AI管家?能,但从来不是“下个软件双击安装”那么回事。我最近在一台Win11笔记本上,用WSL2把一套完整的AI管家服务跑了起来——项目代号就叫“龙虾”,…

2026/10/5 7:33:45 阅读更多 →
电力系统小干扰稳定性分析:特征值法从建模到工程避坑指南

电力系统小干扰稳定性分析:特征值法从建模到工程避坑指南

简介:这份PDF文献面向电力系统专业研究人员、电气工程研究生及从事电网稳定性分析的工程技术人员,聚焦基于特征值分析法的电力系统稳定性研究,尤其针对串补输电系统中次同步谐振(SSO)的机理与判别问题。资源包内含1个P…

2026/10/5 7:33:45 阅读更多 →
KeyarchOS性能基线实战:UnixBench完整跑分指南

KeyarchOS性能基线实战:UnixBench完整跑分指南

前阵子给一批新服务器做上线前的性能基线,几台同款机器装的是浪潮信息KeyarchOS(KOS)。业务同学反馈说某些批处理任务偶尔变慢,我需要先确认问题出在系统配置还是硬件本身,于是第一件事就是把UnixBench拉起来跑了一轮。…

2026/10/5 7:32:45 阅读更多 →

日新闻

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

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

2026/10/5 0:00:22 阅读更多 →
AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

1. 从“plugins”这个词说起:它到底在解决什么问题如果你最近在折腾 AI 编程工具,尤其是 Cursor、Codex CLI、Claude Code 这类带 CLI 的编辑器或命令行助手,那你大概率绕不开一个词——plugins。这个词本身不新鲜,从浏览器到 IDE…

2026/10/5 0:00:23 阅读更多 →
第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

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

2026/10/5 0:00:23 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

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

2026/10/5 5:06:42 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

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

2026/10/5 1:10:22 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

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

2026/10/5 3:06:17 阅读更多 →

月新闻

我发现了一个新思路:用 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/4 11:40:45 阅读更多 →
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/4 9:43:54 阅读更多 →
黑夜航拍船只数据集训练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/4 20:14:29 阅读更多 →