<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Blog on jqknono Blogs</title><link>https://blog.jqknono.com/zh-cn/blog/</link><description>Recent content in Blog on jqknono Blogs</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><managingEditor>https://blog.jqknono.com (jqknono)</managingEditor><webMaster>https://blog.jqknono.com (jqknono)</webMaster><lastBuildDate>Mon, 13 Nov 2023 14:15:31 +0800</lastBuildDate><atom:link href="https://blog.jqknono.com/zh-cn/blog/index.xml" rel="self" type="application/rss+xml"/><item><title>关了老妈的抖音个性化推荐</title><link>https://blog.jqknono.com/zh-cn/blog/2026/03/03/turned-off-moms-douyin-recommendations/</link><pubDate>Tue, 03 Mar 2026 10:00:00 +0800</pubDate><author>https://blog.jqknono.com (jqknono)</author><guid>https://blog.jqknono.com/zh-cn/blog/2026/03/03/turned-off-moms-douyin-recommendations/</guid><description>一个关于帮助母亲关闭抖音个性化推荐功能的家庭随笔,记录数字时代代际关怀的细微瞬间.</description></item><item><title>Project Translator VSCode 插件实现项目多语言本地化</title><link>https://blog.jqknono.com/zh-cn/blog/2026/02/26/project-translator-vscode-extension/</link><pubDate>Thu, 26 Feb 2026 14:00:00 +0800</pubDate><author>https://blog.jqknono.com (jqknono)</author><guid>https://blog.jqknono.com/zh-cn/blog/2026/02/26/project-translator-vscode-extension/</guid><description>Project Translator 是一款功能强大的 VSCode 插件, 能够基于 AI 实现项目级别的多语言自动翻译, 保持代码结构完整性的同时高效完成文档本地化。</description></item><item><title>GPT-5.3-Codex 初体验：从惊喜到理性评估</title><link>https://blog.jqknono.com/zh-cn/blog/2026/02/17/gpt-53-codex-experience/</link><pubDate>Tue, 17 Feb 2026 10:30:00 +0800</pubDate><author>https://blog.jqknono.com (jqknono)</author><guid>https://blog.jqknono.com/zh-cn/blog/2026/02/17/gpt-53-codex-experience/</guid><description>&lt;p&gt;OpenAI 在 GPT-5.3 正式版尚未发布之际，率先推出了 GPT-5.3-Codex 这一特化模型。从商业逻辑来看，这一决策不难理解。GPT-5.3-Codex 与标准版 GPT-5.3 定价相同，但其输出更为积极，执行时间更短，内存占用更少，这意味着更高的利润空间。对于 OpenAI 而言，GPT-5.3-Codex 显然是一个更具成本效益的选择。&lt;/p&gt;
&lt;p&gt;在 GPT-5.3-Codex 发布的第一周，其使用体验确实令人惊喜。模型响应速度明显优于之前的版本，代码生成的反馈非常及时。对于需要快速迭代、频繁交互的开发场景，这种效率提升带来了直观的生产力改善。当需要在短时间内获得多个实现方案或快速验证想法时，Codex 的积极输出特性显得尤为有用。&lt;/p&gt;
&lt;p&gt;然而进入第二周后，情况发生了明显变化。模型的响应速度出现显著下降，原本流畅的交互体验开始变得卡顿。这种性能波动让人联想到云服务中常见的资源调度问题，可能是在用户量增长后，服务器负载分配策略导致的降级服务。&lt;/p&gt;
&lt;p&gt;除了性能波动，更值得关注的是 Codex 在思维缜密程度上的不足。与非 Codex 系列相比，它在处理复杂逻辑、边缘情况处理和代码健壮性方面表现较弱。当面对需要深度推理、多步骤规划或抽象理解的任务时，Codex 更倾向于给出表面可行的方案，而缺乏对潜在问题的预判。&lt;/p&gt;
&lt;p&gt;这种差异背后反映了两个模型在设计目标上的不同。Codex 似乎更注重生成速度和输出活跃度，适合快速原型开发、代码补全和简单任务的自动化。而非 Codex 系列则保留了更强的泛化能力，更注重方案的正确性和可靠性。&lt;/p&gt;
&lt;pre class="mermaid"&gt;flowchart LR
subgraph A[&amp;#34;GPT-5.3-Codex&amp;#34;]
direction LR
A1[&amp;#34;生成速度: 快&amp;#34;]
A2[&amp;#34;输出活跃度: 高&amp;#34;]
A3[&amp;#34;思维缜密度: 中等&amp;#34;]
A4[&amp;#34;适合场景: 快速原型、代码补全、探索阶段&amp;#34;]
end
subgraph B[&amp;#34;GPT-5.3 非Codex&amp;#34;]
direction LR
B1[&amp;#34;生成速度: 中等&amp;#34;]
B2[&amp;#34;输出活跃度: 稳定&amp;#34;]
B3[&amp;#34;思维缜密度: 高&amp;#34;]
B4[&amp;#34;适合场景: 生产环境、关键项目、稳定期&amp;#34;]
end
A &amp;lt;--&amp;gt;|选择权衡| B
classDef codex fill:#E3F2FD,stroke:#1565C0,stroke-width:2px,color:#0D47A1;
classDef standard fill:#E8F5E9,stroke:#2E7D32,stroke-width:2px,color:#1B5E20;
class A,A1,A2,A3,A4 codex;
class B,B1,B2,B3,B4 standard;&lt;/pre&gt;
&lt;p&gt;从实际开发场景来看，如果你的需求是快速获得代码片段、实现已知明确的功能，或者需要在短时间内尝试多种方案，Codex 的积极输出和快速响应会带来明显优势。但当项目进入稳定期，对代码质量、可维护性和长期稳定性有更高要求时，非 Codex 系列仍然是更可靠的选择。&lt;/p&gt;</description></item><item><title>DoH 与 DoT 技术对比分析</title><link>https://blog.jqknono.com/zh-cn/blog/2026/02/11/doh-vs-dot-comparison/</link><pubDate>Wed, 11 Feb 2026 00:00:00 +0800</pubDate><author>https://blog.jqknono.com (jqknono)</author><guid>https://blog.jqknono.com/zh-cn/blog/2026/02/11/doh-vs-dot-comparison/</guid><description>&lt;p&gt;DNS over HTTPS (DoH) 和 DNS over TLS (DoT) 是两种常见的加密 DNS 传输方式, 它们通过不同的协议栈来实现 DNS 查询的安全传输. DoT 的标准由 &lt;a href="https://datatracker.ietf.org/doc/html/rfc7858"&gt;RFC 7858&lt;/a&gt; 定义, 而 DoH 则由 &lt;a href="https://datatracker.ietf.org/doc/html/rfc8484"&gt;DNS Queries over HTTPS (DoH)&lt;/a&gt; 标准化. 理解这两种技术的本质区别, 需要从网络协议层次结构入手分析.&lt;/p&gt;
&lt;h2 id="网络协议层次结构"&gt;网络协议层次结构&lt;/h2&gt;
&lt;p&gt;现代网络协议栈采用分层设计, 每一层提供不同的功能. DNS 作为应用层协议, 本身并不绑定特定的传输方式, 可以运行在多种承载协议之上.&lt;/p&gt;
&lt;p&gt;应用层 (L7) 包含 HTTP/1.1, HTTP/2, HTTP/3, FTP 和 DNS 等协议. 值得注意的是, HTTP/3 的语义仍然在应用层, 只是 QUIC 作为传输承载. 安全层位于应用层和传输层之间, 主要包括 TLS 及其变体. TLS 通常运行在 TCP 上, 比如 HTTPS 和 DoT. DTLS 是 TLS 的数据报版本, 可以运行在 UDP 上. QUIC 协议比较特殊, 它将 TLS 1.3 的握手与密钥派生直接集成在协议内部.&lt;/p&gt;</description></item><item><title>OpenRouter gpt-oss-120b 模型不支持中文请求的调试记录</title><link>https://blog.jqknono.com/zh-cn/blog/2026/02/09/openrouter-gpt-oss-120b-chinese-bug/</link><pubDate>Mon, 09 Feb 2026 22:00:00 +0800</pubDate><author>https://blog.jqknono.com (jqknono)</author><guid>https://blog.jqknono.com/zh-cn/blog/2026/02/09/openrouter-gpt-oss-120b-chinese-bug/</guid><description>&lt;p&gt;在使用 &lt;a href="https://openrouter.ai/"&gt;OpenRouter&lt;/a&gt; 提供的免费模型 API 时, 我遇到了一个令人困惑的问题. 同样的请求结构, 仅仅修改了提示词的语言, 就会出现完全不同的结果.&lt;/p&gt;
&lt;h2 id="问题复现"&gt;问题复现&lt;/h2&gt;
&lt;p&gt;我使用 &lt;code&gt;openai/gpt-oss-120b:free&lt;/code&gt; 模型进行测试, 两个请求的唯一区别在于提示词语言. 第一个请求使用中文提示:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl https://openrouter.ai/api/v1/chat/completions &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -H &lt;span class="s2"&gt;&amp;#34;Content-Type: application/json&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -H &lt;span class="s2"&gt;&amp;#34;Authorization: Bearer sk-or-v1-xxxxxxxxxxxxxxxxxxxxxx&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -d &lt;span class="s1"&gt;&amp;#39;{
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;model&amp;#34;: &amp;#34;openai/gpt-oss-120b:free&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;messages&amp;#34;: [
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;role&amp;#34;: &amp;#34;user&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;content&amp;#34;: &amp;#34;你是一个专业的本地化翻译专家&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; ]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这个请求总是返回 429 状态码, 表示请求过于频繁或超出了配额限制. 然而当我使用英文提示时:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl https://openrouter.ai/api/v1/chat/completions &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -H &lt;span class="s2"&gt;&amp;#34;Content-Type: application/json&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -H &lt;span class="s2"&gt;&amp;#34;Authorization: Bearer sk-or-v1-xxxxxxxxxxxxxxxxxxxxxx&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -d &lt;span class="s1"&gt;&amp;#39;{
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;model&amp;#34;: &amp;#34;openai/gpt-oss-120b:free&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;messages&amp;#34;: [
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;role&amp;#34;: &amp;#34;user&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;content&amp;#34;: &amp;#34;You are a professional localization translation expert&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; ]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;请求能够正常响应, 返回预期的模型输出.&lt;/p&gt;</description></item><item><title>免费AI图标生成工具汇总</title><link>https://blog.jqknono.com/zh-cn/blog/2026/02/02/free-ai-icon-generators/</link><pubDate>Mon, 02 Feb 2026 10:00:00 +0800</pubDate><author>https://blog.jqknono.com (jqknono)</author><guid>https://blog.jqknono.com/zh-cn/blog/2026/02/02/free-ai-icon-generators/</guid><description>&lt;p&gt;随着人工智能技术的发展，设计师和开发者现在可以通过简单的文字提示快速生成各类图标。这些免费AI图标生成工具大大降低了设计门槛，让不具备专业设计技能的用户也能创建出高质量的视觉元素。以下这些工具都支持通过文字描述生成图像，输出格式通常为PNG或SVG，部分工具还提供风格和配色调整功能。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.freepik.com/ai/icon-generator"&gt;Freepik AI图示生成器&lt;/a&gt;是一款在线AI图示生成工具，能够根据文字描述生成SVG或PNG格式的图标。这款工具非常适合网页设计和UI设计场景，免费用户可以使用但存在每日生成数量的限制。对于需要快速获取图标素材的设计工作来说，Freepik提供了一个便捷的解决方案。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.pixelcut.ai/create/icon-generator"&gt;Pixelcut AI图标生成器&lt;/a&gt;专注于提供简单直观的图标生成体验。用户只需输入文字提示，即可生成自定义图标。该工具的操作流程简洁明了，适合不熟悉复杂设计软件的用户快速上手。生成的图标可以直接下载使用，为个人项目或小型网站提供视觉支持。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://iconscout.com/ai/icon-generator"&gt;IconScout AI图标生成器&lt;/a&gt;支持通过简单文本生成图标，并提供多种风格选择。这款工具特别适合设计项目、博客文章和展示用途。多样化的风格选项让用户可以根据项目需求选择合适的视觉风格，从而保持整体设计的一致性。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://quillbot.com/image-tools/ai-icon-generator"&gt;QuillBot AI图标生成器&lt;/a&gt;作为免费在线工具，允许用户通过文字描述快速生成图标。该工具的一大优势是生成后可以直接下载，无需额外的转换步骤。这种即时可用的特性使得它成为需要快速获取图标素材用户的理想选择。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.recraft.ai/generate/icons"&gt;Recraft AI图标生成器&lt;/a&gt;提供了更高级的定制选项。用户可以选择预设风格，或者从已有的品牌图像生成一致风格的图标。该工具还支持自定义色彩等参数，这对于需要维护品牌视觉识别的企业来说尤为重要。通过Recraft生成的图标可以与现有品牌元素保持视觉一致性。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.miricanvas.com/features/ja/ai-icon"&gt;MiriCanvas AI图标工具&lt;/a&gt;是一款免费的AI图标和徽标生成工具。它支持样式选择和文本输入，通过简单的操作流程即可生成图标。该工具的设计注重用户体验，让即使没有设计背景的用户也能轻松创建出满意的图标。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://perchance.org/ai-icon-generator"&gt;Perchance AI Icon Generator&lt;/a&gt;是一个无需注册、无水印的免费AI图标生成实验工具。它的开放性和便捷性使其成为临时项目或测试用途的不错选择。无需账户和登录步骤意味着用户可以立即开始使用，这种简化的使用流程适合追求效率的用户。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://openart.ai/generator/icon"&gt;OpenArt AI图标生成器&lt;/a&gt;提供免费AI图标生成功能，可用于定制应用图标或其他视觉元素。该工具的生成能力较为全面，适合需要创建完整图标集的用户。通过文本提示控制生成结果，用户可以根据具体需求调整图标的细节。&lt;/p&gt;
&lt;pre class="mermaid"&gt;flowchart TD
A[AI图标生成工具选择] --&amp;gt; B{使用需求类型}
B --&amp;gt;|快速简单| C[Pixelcut&amp;lt;br/&amp;gt;QuillBot]
B --&amp;gt;|设计专业| D[Freepik&amp;lt;br/&amp;gt;IconScout]
B --&amp;gt;|品牌一致性| E[Recraft]
B --&amp;gt;|无需注册| F[Perchance]
B --&amp;gt;|完整图标集| G[OpenArt]
B --&amp;gt;|样式选择| H[MiriCanvas]
C --&amp;gt; I{输出格式}
D --&amp;gt; I
E --&amp;gt; I
F --&amp;gt; I
G --&amp;gt; I
H --&amp;gt; I
I --&amp;gt;|PNG/JPG| J[网页使用]
I --&amp;gt;|SVG| K[矢量设计]
I --&amp;gt;|两者| L[多场景适配]
J --&amp;gt; M[注意版权条款]
K --&amp;gt; M
L --&amp;gt; M
M --&amp;gt; N[确认商业使用许可]&lt;/pre&gt;
&lt;p&gt;这些工具虽然提供了免费使用选项，但用户需要注意免费额度和生成次数的限制。在使用前应当仔细阅读各平台的使用条款，特别是关于输出图像版权的说明。部分工具的免费版可能禁止商业用途，或者要求在使用时注明来源。明确这些限制条件可以避免后续的法律风险。&lt;/p&gt;</description></item><item><title>Vibe Coding 的省钱公式与临界点</title><link>https://blog.jqknono.com/zh-cn/blog/2026/01/07/vibe-coding-cost-formulas/</link><pubDate>Wed, 07 Jan 2026 10:00:00 +0800</pubDate><author>https://blog.jqknono.com (jqknono)</author><guid>https://blog.jqknono.com/zh-cn/blog/2026/01/07/vibe-coding-cost-formulas/</guid><description>&lt;p&gt;AI 编码工具的计费模式可归纳为三类:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;按 token 计费&lt;/strong&gt;: 包括各类 API, Claude Code (Claude Pro), Codex Cli (ChatGPT Plus), 智谱 Lite/Pro, Cursor 新版等. 本质均为 token 计费, 部分产品提供套餐折扣.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;按 API 调用次数计费&lt;/strong&gt;: 如 OpenRouter (免费额度), ModelScope, Gemini Code Assistant (每日免费 1000 次), Chutes 等.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;按提示词次数计费&lt;/strong&gt;: 如 Cursor 老版 (500 次), Github Copilot (300 次) 等.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这三类模式本质上均为模型推理与上下文处理付费, 差异体现在计价粒度和限额形式.&lt;/p&gt;
&lt;p&gt;本文建立统一的成本模型, 提供可操作的变量定义与计算公式, 确定在不同工作负载和方式下的工具选择临界点. 成本考量涵盖现金支出, 时间消耗和返工风险.&lt;/p&gt;
&lt;h2 id="统一的总成本函数"&gt;统一的总成本函数&lt;/h2&gt;
&lt;p&gt;对任意工具 i, 在一个计费周期内的总成本可以写成:&lt;/p&gt;
&lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;math xmlns="http://www.w3.org/1998/Math/MathML" display="block"&gt;&lt;semantics&gt;&lt;mtable rowspacing="0.25em" columnalign="right left" columnspacing="0em"&gt;&lt;mtr&gt;&lt;mtd&gt;&lt;mstyle scriptlevel="0" displaystyle="true"&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;T&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;o&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;t&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;a&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;l&lt;/mi&gt;&lt;/mrow&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;/msub&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;mtd&gt;&lt;mstyle scriptlevel="0" displaystyle="true"&gt;&lt;mrow&gt;&lt;mrow&gt;&lt;/mrow&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;C&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;a&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;s&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;h&lt;/mi&gt;&lt;/mrow&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;/msub&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;T&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;i&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;m&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;e&lt;/mi&gt;&lt;/mrow&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;/msub&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;R&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;i&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;s&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;k&lt;/mi&gt;&lt;/mrow&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;/mtr&gt;&lt;mtr&gt;&lt;mtd&gt;&lt;mstyle scriptlevel="0" displaystyle="true"&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;T&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;i&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;m&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;e&lt;/mi&gt;&lt;/mrow&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;/msub&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;mtd&gt;&lt;mstyle scriptlevel="0" displaystyle="true"&gt;&lt;mrow&gt;&lt;mrow&gt;&lt;/mrow&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;R&lt;/mi&gt;&lt;mo&gt;⋅&lt;/mo&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;H&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;o&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;u&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;r&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;s&lt;/mi&gt;&lt;/mrow&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;/mtr&gt;&lt;mtr&gt;&lt;mtd&gt;&lt;mstyle scriptlevel="0" displaystyle="true"&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;R&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;i&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;s&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;k&lt;/mi&gt;&lt;/mrow&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;/msub&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;mtd&gt;&lt;mstyle scriptlevel="0" displaystyle="true"&gt;&lt;mrow&gt;&lt;mrow&gt;&lt;/mrow&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;R&lt;/mi&gt;&lt;mo&gt;⋅&lt;/mo&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi mathvariant="normal"&gt;R&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;e&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;w&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;o&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;r&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;k&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;H&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;o&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;u&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;r&lt;/mi&gt;&lt;mi mathvariant="normal"&gt;s&lt;/mi&gt;&lt;/mrow&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;/mtr&gt;&lt;/mtable&gt;&lt;annotation encoding="application/x-tex"&gt;\begin{aligned}
\mathrm{Total}_i &amp;amp;= \mathrm{Cash}_i + \mathrm{Time}_i + \mathrm{Risk}_i \\
\mathrm{Time}_i &amp;amp;= R \cdot \mathrm{Hours}_i \\
\mathrm{Risk}_i &amp;amp;= R \cdot \mathrm{ReworkHours}_i
\end{aligned}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class="katex-html" aria-hidden="true"&gt;&lt;span class="base"&gt;&lt;span class="strut" style="height:4.5em;vertical-align:-2em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mtable"&gt;&lt;span class="col-align-r"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:2.5em;"&gt;&lt;span style="top:-4.66em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;span class="mord mathrm"&gt;Total&lt;/span&gt;&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.3117em;"&gt;&lt;span style="top:-2.55em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="top:-3.16em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;span class="mord mathrm"&gt;Time&lt;/span&gt;&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.3117em;"&gt;&lt;span style="top:-2.55em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="top:-1.66em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;span class="mord mathrm"&gt;Risk&lt;/span&gt;&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.3117em;"&gt;&lt;span style="top:-2.55em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:2em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="col-align-l"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:2.5em;"&gt;&lt;span style="top:-4.66em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;span class="mord mathrm"&gt;Cash&lt;/span&gt;&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.3117em;"&gt;&lt;span style="top:-2.55em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;span class="mord mathrm"&gt;Time&lt;/span&gt;&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.3117em;"&gt;&lt;span style="top:-2.55em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;span class="mord mathrm"&gt;Risk&lt;/span&gt;&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.3117em;"&gt;&lt;span style="top:-2.55em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="top:-3.16em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mord mathnormal" style="margin-right:0.00773em;"&gt;R&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;⋅&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;span class="mord mathrm"&gt;Hours&lt;/span&gt;&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.3117em;"&gt;&lt;span style="top:-2.55em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="top:-1.66em;"&gt;&lt;span class="pstrut" style="height:3em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2778em;"&gt;&lt;/span&gt;&lt;span class="mord mathnormal" style="margin-right:0.00773em;"&gt;R&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;⋅&lt;/span&gt;&lt;span class="mspace" style="margin-right:0.2222em;"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;span class="mord mathrm"&gt;ReworkHours&lt;/span&gt;&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.3117em;"&gt;&lt;span style="top:-2.55em;margin-right:0.05em;"&gt;&lt;span class="pstrut" style="height:2.7em;"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:0.15em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist" style="height:2em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p&gt;其中 R 是你的时间单价(元/小时). 如果你不想把时间算进来, 可以把 R 设为 0, 公式退化为纯现金成本比较.&lt;/p&gt;</description></item><item><title>在 Windows 上搭建远程浏览器调试入口</title><link>https://blog.jqknono.com/zh-cn/blog/2026/01/01/windows-remote-browser-cdp/</link><pubDate>Thu, 01 Jan 2026 10:30:00 +0800</pubDate><author>https://blog.jqknono.com (jqknono)</author><guid>https://blog.jqknono.com/zh-cn/blog/2026/01/01/windows-remote-browser-cdp/</guid><description>&lt;p&gt;本文说明如何在 Windows 主机上运行 Chrome 并通过 CDP 提供远程调试入口, 供局域网内的 Linux 客户端或 MCP 连接使用. 方案核心是 Chrome 仅监听 127.0.0.1, 由 portproxy 映射到 LAN 地址, 再通过防火墙限制远端来源.&lt;/p&gt;
&lt;h2 id="拓扑与流向"&gt;拓扑与流向&lt;/h2&gt;
&lt;p&gt;下图展示了端口在 Windows 主机内部的流向, 以及客户端如何通过 LAN 地址访问.&lt;/p&gt;
&lt;pre class="mermaid"&gt;flowchart TB
subgraph Windows
A[Chrome DevTools 127.0.0.1:9222] --&amp;gt; B[portproxy 192.168.31.2:9222]
B --&amp;gt; C[Windows Firewall]
end
D[Linux Client] --&amp;gt;|CDP| B
classDef local fill:#2c3e50,stroke:#ecf0f1,stroke-width:2px,color:#ecf0f1
classDef proxy fill:#3498db,stroke:#2980b9,stroke-width:2px,color:#fff
classDef firewall fill:#f39c12,stroke:#d35400,stroke-width:2px,color:#fff
classDef client fill:#27ae60,stroke:#229954,stroke-width:2px,color:#fff
class A local
class B proxy
class C firewall
class D client&lt;/pre&gt;
&lt;h2 id="启动-chrome"&gt;启动 Chrome&lt;/h2&gt;
&lt;p&gt;建议使用独立的用户目录, 并显式指定 remote debugging 地址, 这样 Chrome 只对本机开放调试端口. 下面示例以 9222 端口为例, 请根据实际情况调整.&lt;/p&gt;</description></item><item><title>技术博客已死</title><link>https://blog.jqknono.com/zh-cn/blog/2025/12/23/technical-blogs-are-dead/</link><pubDate>Tue, 23 Dec 2025 17:05:13 +0800</pubDate><author>https://blog.jqknono.com (jqknono)</author><guid>https://blog.jqknono.com/zh-cn/blog/2025/12/23/technical-blogs-are-dead/</guid><description>&lt;p&gt;在过去的几年里, 人工智能 (AI) 写作工具如 ChatGPT, Claude 等迅速普及. 它们能够生成流畅的技术文章, 甚至能模仿人类的写作风格. 这一变化引发了技术博客圈的广泛讨论: 许多人声称&amp;quot;技术博客已死&amp;quot;. 本文将探讨 AI 工具对技术博客的影响, 并分析技术博客的未来走向.&lt;/p&gt;
&lt;h2 id="ai-写作工具的崛起"&gt;AI 写作工具的崛起&lt;/h2&gt;
&lt;p&gt;AI 写作工具的核心能力是理解自然语言并生成高质量文本. 对于技术博客作者而言, 这些工具可以快速生成草稿, 提供灵感, 或者直接产出完整的文章. 例如, 当作者需要解释一个复杂概念时, AI 可以生成清晰的说明段落; 当作者缺乏时间时, AI 可以快速整理出一篇教程.&lt;/p&gt;
&lt;p&gt;然而, 这种便利也带来了副作用. 大量低质量的 AI 生成内容开始充斥互联网. 这些内容往往缺乏深度, 甚至包含错误, 却因为 SEO 优化而获得高排名, 挤占了真正有价值的技术博客的曝光机会.&lt;/p&gt;
&lt;h2 id="技术博客的初衷"&gt;技术博客的初衷&lt;/h2&gt;
&lt;p&gt;技术博客最初是开发者分享经验, 记录问题和建立个人品牌的方式. 它的价值在于真实性和独特性: 作者将自己的实践, 思考和失败经历融入文章中, 为读者提供第一手的见解.&lt;/p&gt;
&lt;p&gt;AI 生成的内容虽然看似专业, 但缺乏这种真实体验. 它无法分享作者在实际项目中遇到的坑, 也无法提供独特的解决方案. 因此, 纯粹由 AI 生成的技术文章很难取代那些源自真实经验的作品.&lt;/p&gt;
&lt;h2 id="人机协作的未来"&gt;人机协作的未来&lt;/h2&gt;
&lt;p&gt;与其将 AI 视为威胁, 不如将其视为助手. 聪明的技术博主已经开始利用 AI 来提高效率: 用 AI 进行头脑风暴, 检查语法, 优化表达, 甚至生成代码示例. 但文章的核心观点和独特洞察仍然来自作者本人.&lt;/p&gt;</description></item><item><title>OpenAI的取名艺术鉴赏</title><link>https://blog.jqknono.com/zh-cn/blog/2025/12/12/openai%E7%9A%84%E5%8F%96%E5%90%8D%E8%89%BA%E6%9C%AF%E9%89%B4%E8%B5%8F/</link><pubDate>Fri, 12 Dec 2025 11:46:01 +0800</pubDate><author>https://blog.jqknono.com (jqknono)</author><guid>https://blog.jqknono.com/zh-cn/blog/2025/12/12/openai%E7%9A%84%E5%8F%96%E5%90%8D%E8%89%BA%E6%9C%AF%E9%89%B4%E8%B5%8F/</guid><description>&lt;p&gt;这里&lt;a href="https://platform.openai.com/docs/models/"&gt;https://platform.openai.com/docs/models/&lt;/a&gt;记录了 OpenAI 的所有模型.&lt;/p&gt;
&lt;p&gt;太远了的不说, 从 &lt;code&gt;GPT-4&lt;/code&gt; 系列及同世代模型聊起, 这是我汇总的表格:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;名称&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;th&gt;模型卡片链接&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ChatGPT-4o&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;GPT-4o model used in ChatGPT&lt;/td&gt;
&lt;td&gt;&lt;a href="https://platform.openai.com/docs/models/chatgpt-4o-latest"&gt;https://platform.openai.com/docs/models/chatgpt-4o-latest&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;GPT-4&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;An older high-intelligence GPT model&lt;/td&gt;
&lt;td&gt;&lt;a href="https://platform.openai.com/docs/models/gpt-4"&gt;https://platform.openai.com/docs/models/gpt-4&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;GPT-4 Turbo&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;An older high-intelligence GPT model&lt;/td&gt;
&lt;td&gt;&lt;a href="https://platform.openai.com/docs/models/gpt-4-turbo"&gt;https://platform.openai.com/docs/models/gpt-4-turbo&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;GPT-4 Turbo Preview&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Deprecated An older fast GPT model&lt;/td&gt;
&lt;td&gt;&lt;a href="https://platform.openai.com/docs/models/gpt-4-turbo-preview"&gt;https://platform.openai.com/docs/models/gpt-4-turbo-preview&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;GPT-4.1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Smartest non-reasoning model&lt;/td&gt;
&lt;td&gt;&lt;a href="https://platform.openai.com/docs/models/gpt-4.1"&gt;https://platform.openai.com/docs/models/gpt-4.1&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;GPT-4.1 mini&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Smaller, faster version of GPT-4.1&lt;/td&gt;
&lt;td&gt;&lt;a href="https://platform.openai.com/docs/models/gpt-4.1-mini"&gt;https://platform.openai.com/docs/models/gpt-4.1-mini&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;GPT-4.1 nano&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Fastest, most cost-efficient version of GPT-4.1&lt;/td&gt;
&lt;td&gt;&lt;a href="https://platform.openai.com/docs/models/gpt-4.1-nano"&gt;https://platform.openai.com/docs/models/gpt-4.1-nano&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;GPT-4.5 Preview&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Deprecated large model.&lt;/td&gt;
&lt;td&gt;&lt;a href="https://platform.openai.com/docs/models/gpt-4.5-preview"&gt;https://platform.openai.com/docs/models/gpt-4.5-preview&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;GPT-4o&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Fast, intelligent, flexible GPT model&lt;/td&gt;
&lt;td&gt;&lt;a href="https://platform.openai.com/docs/models/gpt-4o"&gt;https://platform.openai.com/docs/models/gpt-4o&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;GPT-4o Audio&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;GPT-4o models capable of audio inputs and outputs&lt;/td&gt;
&lt;td&gt;&lt;a href="https://platform.openai.com/docs/models/gpt-4o-audio-preview"&gt;https://platform.openai.com/docs/models/gpt-4o-audio-preview&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;GPT-4o mini&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Fast, affordable small model for focused tasks&lt;/td&gt;
&lt;td&gt;&lt;a href="https://platform.openai.com/docs/models/gpt-4o-mini"&gt;https://platform.openai.com/docs/models/gpt-4o-mini&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;GPT-4o mini Audio&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Smaller model capable of audio inputs and outputs&lt;/td&gt;
&lt;td&gt;&lt;a href="https://platform.openai.com/docs/models/gpt-4o-mini-audio-preview"&gt;https://platform.openai.com/docs/models/gpt-4o-mini-audio-preview&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;GPT-4o mini Realtime&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Smaller realtime model for text and audio inputs and outputs&lt;/td&gt;
&lt;td&gt;&lt;a href="https://platform.openai.com/docs/models/gpt-4o-mini-realtime-preview"&gt;https://platform.openai.com/docs/models/gpt-4o-mini-realtime-preview&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;GPT-4o mini Search Preview&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Fast, affordable small model for web search&lt;/td&gt;
&lt;td&gt;&lt;a href="https://platform.openai.com/docs/models/gpt-4o-mini-search-preview"&gt;https://platform.openai.com/docs/models/gpt-4o-mini-search-preview&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;GPT-4o mini Transcribe&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Speech-to-text model powered by GPT-4o mini&lt;/td&gt;
&lt;td&gt;&lt;a href="https://platform.openai.com/docs/models/gpt-4o-mini-transcribe"&gt;https://platform.openai.com/docs/models/gpt-4o-mini-transcribe&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;GPT-4o mini TTS&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Text-to-speech model powered by GPT-4o mini&lt;/td&gt;
&lt;td&gt;&lt;a href="https://platform.openai.com/docs/models/gpt-4o-mini-tts"&gt;https://platform.openai.com/docs/models/gpt-4o-mini-tts&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;GPT-4o Realtime&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Model capable of realtime text and audio inputs and outputs&lt;/td&gt;
&lt;td&gt;&lt;a href="https://platform.openai.com/docs/models/gpt-4o-realtime-preview"&gt;https://platform.openai.com/docs/models/gpt-4o-realtime-preview&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;GPT-4o Search Preview&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;GPT model for web search in Chat Completions&lt;/td&gt;
&lt;td&gt;&lt;a href="https://platform.openai.com/docs/models/gpt-4o-search-preview"&gt;https://platform.openai.com/docs/models/gpt-4o-search-preview&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;GPT-4o Transcribe&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Speech-to-text model powered by GPT-4o&lt;/td&gt;
&lt;td&gt;&lt;a href="https://platform.openai.com/docs/models/gpt-4o-transcribe"&gt;https://platform.openai.com/docs/models/gpt-4o-transcribe&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;GPT-4o Transcribe Diarize&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Transcription model that identifies who&amp;rsquo;s speaking when&lt;/td&gt;
&lt;td&gt;&lt;a href="https://platform.openai.com/docs/models/gpt-4o-transcribe-diarize"&gt;https://platform.openai.com/docs/models/gpt-4o-transcribe-diarize&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;o1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Previous full o-series reasoning model&lt;/td&gt;
&lt;td&gt;&lt;a href="https://platform.openai.com/docs/models/o1"&gt;https://platform.openai.com/docs/models/o1&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;o1-mini&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;A small model alternative to o1&lt;/td&gt;
&lt;td&gt;&lt;a href="https://platform.openai.com/docs/models/o1-mini"&gt;https://platform.openai.com/docs/models/o1-mini&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;o1-pro&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Version of o1 with more compute for better responses&lt;/td&gt;
&lt;td&gt;&lt;a href="https://platform.openai.com/docs/models/o1-pro"&gt;https://platform.openai.com/docs/models/o1-pro&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;o3&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Reasoning model for complex tasks, succeeded by GPT-5&lt;/td&gt;
&lt;td&gt;&lt;a href="https://platform.openai.com/docs/models/o3"&gt;https://platform.openai.com/docs/models/o3&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;o3-pro&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Version of o3 with more compute for better responses&lt;/td&gt;
&lt;td&gt;&lt;a href="https://platform.openai.com/docs/models/o3-pro"&gt;https://platform.openai.com/docs/models/o3-pro&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;o3-mini&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;A small model alternative to o3&lt;/td&gt;
&lt;td&gt;&lt;a href="https://platform.openai.com/docs/models/o3-mini"&gt;https://platform.openai.com/docs/models/o3-mini&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;o4-mini&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Fast, cost-efficient reasoning model, succeeded by GPT-5 mini&lt;/td&gt;
&lt;td&gt;&lt;a href="https://platform.openai.com/docs/models/o4-mini"&gt;https://platform.openai.com/docs/models/o4-mini&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;针对音频(Audio), 实时(Realtime), 搜索(Search), 音频到文字(Transcribe), 文字到声音(TTS) 等场景, 全都有相应模型.&lt;br&gt;
对同一场景, 如 音频&lt;code&gt;Audio&lt;/code&gt; 场景, 提供了 &lt;code&gt;GPT-4o Audio&lt;/code&gt; 和 &lt;code&gt;GPT-4o mini Audio&lt;/code&gt; 两个模型, 用户需要通过尝试决定能否接受效果.&lt;br&gt;
音频到文字&lt;code&gt;Transcribe&lt;/code&gt; 场景, 提供了 &lt;code&gt;GPT-4o Transcribe&lt;/code&gt;, &lt;code&gt;GPT-4o mini Transcribe&lt;/code&gt;, &lt;code&gt;GPT-4o Transcribe Diarize&lt;/code&gt; 三个模型.&lt;br&gt;
&lt;code&gt;ChatGPT-4o&lt;/code&gt; 是 &lt;code&gt;GPT-4o&lt;/code&gt; 的特别版, 用于 ChatGPT 中, 其他场景不能用.
&lt;code&gt;GPT-4.1&lt;/code&gt;比&lt;code&gt;GPT-4&lt;/code&gt;更好, 是符合直觉的, 但&lt;code&gt;GPT-4o&lt;/code&gt;(4 欧)和&lt;code&gt;GPT-4.1&lt;/code&gt;或&lt;code&gt;GPT-4&lt;/code&gt;却不好比较. 时间线上, 先出现的是&lt;code&gt;GPT-4&lt;/code&gt;, 然后是&lt;code&gt;GPT-4o&lt;/code&gt;, 再然后是&lt;code&gt;GPT-4.1&lt;/code&gt;, 当然, 仍然无法判断&lt;code&gt;GPT-4o&lt;/code&gt;和&lt;code&gt;GPT-4.1&lt;/code&gt;谁更好.
这里插入下对&amp;quot;好&amp;quot;的定义, 我个人将数学和推理结果正确率高作为&amp;quot;好&amp;quot;的定义, 完全不将&amp;quot;速度&amp;quot;纳入&amp;quot;好&amp;quot;的定义. 但此前 OpenAI 可能认为速度和智慧同样重要, 因此出现奇怪的模型对比. 进入 GPT-5 时代后, 庆幸 OpenAI 开始放弃速度, 追求智慧, 至此模型间的对比才没有歧义. 一个快速的错误回答是浪费时间, 没有意义.&lt;/p&gt;</description></item></channel></rss>