跳到内容
主题

AI开发与编程:用AI构建应用的实战指南

用AI提升开发效率。代码生成、应用构建、调试和测试自动化的实用指南。

97 篇文章

排序文章以找到您需要的内容

AI开发与编程 分类下的文章

Jev是什么?TypeSafe决策AI的用途、价格与局限

Jev是什么?TypeSafe决策AI的用途、价格与局限

Jev是TypeSafe推出的AI模型,不生成长篇文本,而是返回选项、评分和“是/否”的概率。本文介绍Choice、Score与Noul的区别、confidence的含义,以及分派客服请求的API结构。类型保证并不保证判断正确。我们梳理官方列出的计算、日期和诱导输入等弱点,解释价格与两个输入限制,并说明使用日语前应如何评估。内容依据官方资料整理,并非API性能实测。

Claude Code 的 opusplan 是什么?计划用 Opus、实现用 Sonnet 的自动切换设置与注意事项

Claude Code 的 opusplan 是什么?计划用 Opus、实现用 Sonnet 的自动切换设置与注意事项

只把制定计划的部分交给聪明的模型,实现交给又快又便宜的模型。Claude Code 的 opusplan 就是自动做到这一点的模型指定。它在 plan mode 期间用 Opus,其余时候用 Sonnet 运行,可以通过 /model opusplan 或 settings.json 的 model 使用。不过,它不会出现在 /model 的列表中,而且每次进入或退出 plan mode 都会切换模型,因此每次都会在没有缓存的情况下重新读入整段对话。本文根据截至2026年9月15日的官方文档、更新日志和 GitHub 上的 issue,整理设置方法(包括固定版本和 1M 上下文)、从 plan mode 批准计划再进入实现的流程、它在 v2.0.0 中从选择界面被移除的经过与 Anthropic 工作人员的说明、切换所产生缓存费用的估算及压低方法、与 advisor 工具和子智能体的区别,以及适合与不适合的用法。

Claude Code 子智能体换用其他模型运行的方法——交给 Sonnet、Haiku 的设置与实测

Claude Code 子智能体换用其他模型运行的方法——交给 Sonnet、Haiku 的设置与实测

Claude Code 的主对话保持 Opus 5,只把翻译、批量检查这类工作交给 Sonnet 或 Haiku 的子智能体,能做到吗?结论是可以。子智能体的模型按调用时的指定、定义文件中的 model、环境变量 CLAUDE_CODE_SUBAGENT_MODEL、主对话的模型这一顺序决定,effort(投入度)也可以为每个子智能体单独指定。本文根据截至2026年9月15日的官方文档,整理这一顺序在不同版本间的差异、把所有子智能体固定为同一模型的 CLAUDE_CODE_SUBAGENT_MODEL_FORCE、别名因接入平台而指向不同模型,以及内置的 Explore 自 v2.1.198 起改为沿用主对话模型这几点。在此基础上,给出实际用其他模型启动并对照对话日志确认的结果:子智能体按指定的模型运行;光是启动就要读入数万 token;即使是订阅,子智能体的缓存也是 5 分钟过期;以及把同一段翻译交给 Opus 5、Sonnet 5、Haiku 4.5 各做 2 次时,耗时、费用和译文质量的差异。最后总结对费用和用量的影响,以及判断哪些工作可以降档的依据。

Claude Code 按会话查看使用量的方法——是哪个会话在吃你的套餐额度

Claude Code 按会话查看使用量的方法——是哪个会话在吃你的套餐额度

并行运行多个会话时,你难免会想知道是哪一个在吃每周额度。然而 Claude Code 的 /usage 只显示当前会话的数字,以及把整个套餐的消耗按技能、子智能体、插件、MCP 服务器拆分后的比例;每个会话各用了多少,桌面应用的用量环和 claude.ai 的设置页面上都看不到(截至2026年9月)。答案就在本机保存的对话日志里(~/.claude/projects 中的 JSONL 文件),但直接相加会得出错误的结果,因为一次回复会按内容块拆成好几行写入,而子智能体的记录又保存在单独的文件里。在我自己的机器上实测,直接相加的总量约为正确值的两倍,而且误差倍数因会话而异,连排名都变了。本文介绍官方界面能看到和看不到的内容、如何用约 50 行的汇总脚本正确统计日志、一个会话用掉近三分之一用量的实测结果、这些数字能说明问题的边界,以及想持续观察时如何配置 OpenTelemetry。

Claude Code 的上下文到底被什么吃掉了——测量方法与削减顺序

Claude Code 的上下文到底被什么吃掉了——测量方法与削减顺序

“技能装太多会挤占上下文”——这话一半是对的,一半是错的。按 Claude Code 官方文档的说法,技能列表用的是模型上下文窗口的 1% 这样一份固定预算,无论再往里加多少技能,都会在那里封顶。它不会膨胀,取而代之发生的是“不再被调用”——一旦超出预算,Claude Code 就从调用次数最少的技能开始丢弃说明,只留下名字。失去说明的技能再也对不上你的请求,可是不会报错,也不会变慢。本文梳理以下内容:三种测量手段(/context、/usage、/skill-doctor)各自的分工;缓存未命中被定义为“5% 且 2,000 token”;缓存的寿命会随合约形态从 1 小时降到 5 分钟;在 MCP 工具定义已经默认延迟加载的今天,CLI 为什么依然更轻;把 CLAUDE.md 保持在 200 行以内的依据;以及测完之后先削什么——全部限定在官方文档能够确认的范围之内。

The model returned no content 的原因与对策——Claude 的报错信息,含义随“是谁写的”而变

The model returned no content 的原因与对策——Claude 的报错信息,含义随“是谁写的”而变

用 Claude 的时候卡住了,把屏幕上出现的那句话原样拿去搜,却几乎什么都搜不到——这样的字符串是存在的。The model returned no content because the response was blocked by content filtering、The response was blocked by the provider's content filter、Streaming response ended before any complete data was received、Could not locate the Claude CLI on PATH、Connection to Claude's response was lost. Claude may still be working 这五条就是例子。它们的共同点是“明明是在用 Claude 时出现的,可翻 Claude 的资料也找不到(看上去是这样)”,理由很简单——写下你此刻屏幕上这句话的,未必是你以为的那个程序。本文不打算从零讲解每一种原因,而是作为一个入口:先判定这句话是谁写的,再把你送到正确的那篇文章去。首先把可能写出这句话的层分成四个:提供模型的后端、Claude Code 本体、启动它的 IDE 扩展或封装器、第三方客户端。在此基础上真去比对,五条里有两条作为条目就写在 Claude Code 官方的错误参考里。Streaming response ended… 的官方定义是“头返回了,可体里没有 Claude API 的消息”,并不是中途断掉的意思。Could not locate the Claude CLI on PATH 则被官方放进“Wrapper and IDE errors”这个独立的一章,也就是由启动方程序打印、而不是 Claude Code 自身的内容。另一方面,content filter 那两条属于第三方一侧的词汇,而且 OpenCode 的 Issue #35736 报告说,Vertex 的 404、套接字断开、真正的拒绝这三种完全不同的失败,全部以同一句“blocked by content filter”显示出来。三种里与字面相符的只有一种。GitHub 的官方文档也写明,使用 Claude 时输入与输出同样会经过 GitHub Copilot 的内容过滤器,所以你在用 Claude,并不代表拦下你的就是 Anthropic 的过滤器。剩下的一条,在官方错误参考和 Remote Control 的官方文档里都找不到这串字,没能确定出处,因此本文不点出名字,而是给出自己查明的四步。已经确定的与尚未确定的,用标签分开写。

API Error: Connection lost mid-response 的原因与对策——v2.1.227 改名而来的“连接断了”错误

API Error: Connection lost mid-response 的原因与对策——v2.1.227 改名而来的“连接断了”错误

Claude Code 在响应中途停住,屏幕上出现 API Error: Connection lost mid-response. The response above may be incomplete.——把这句话原样拿去搜却几乎找不到资料,是因为这是一个比较新的名字。官方错误参考明确写着,在 v2.1.227 之前,Connection lost mid-response 显示为 Connection closed mid-response;与此同时,Response stalled mid-stream 被换成了 The response stopped arriving,Connection closed while thinking, before producing a response 被换成了 Connection lost before a response was produced。也就是说,现象早就存在,只是单词变了。本文以这次改名为起点,只依据官方文档和公开 Issue 来梳理。先讲“中途被切断”的 4 条消息(Server error、Connection lost、computer went to sleep、The response stopped arriving)的官方定义,以及已经流出来的输出为什么会被刻意保留——因为重发有可能把同一次工具调用执行两遍——还有恢复步骤就是回复 continue 这一点。接着用官方的 Automatic retries 分支说明为什么不会自动重试:什么都还没完成时的断开会以指数退避最多重发 10 次,思考结束但还没输出时最多重发 2 次并以 Connection lost before a response was produced 收尾,完成一个块之后则不再重发,只附上这条提示。再往后是可能断开的 3 个层次(本机与线路、代理和网关等链路、服务端与连接复用)、mTLS 证书轮换时的重新读取(v2.1.232 之后)、9 步排查清单、4 个流监视计时器的默认值(first-byte 180 秒、event 300 秒、byte 180 秒、body idle 5 分钟)与 CLAUDE_CODE_MAX_RETRIES、CLAUDE_CODE_RETRY_WATCHDOG、API_TIMEOUT_MS 等环境变量、与 8 种相似消息的区分对照表,以及原始 HTTPS 一切健康却只有 CLI 因 ECONNRESET 而掉的真实报告(#86473 和 #85979)。最后按确信度分开说明:症状和恢复步骤在官方有文档,但原因的官方说明还没有出来,CHANGELOG 里也找不到这次改名的记载。

Claude Fable 5.1 的3个破坏性变更与迁移指南

Claude Fable 5.1 的3个破坏性变更与迁移指南

迁移到 Claude Fable 5.1,并不是把模型ID换掉就完事。官方明确把其中3项标为破坏性变更,而且有2项报错的位置和原因离得很远。第1项会立刻报错:给 tool_choice 指定 type any 或 type tool 会返回 400 invalid_request_error,因为强制调用工具会跳过这个模型一直在做的思考,参数质量也会跟着下降。第2项是安静的那一个。思考块现在会记录它由哪个模型生成,而且只在一个方向上被保留,所以迁到 Fable 5.1 的对话能带着推理继续跑,而路由器或降级回退把它退回上一代时,那一轮就整个丢掉。默认情况下,API会在交给模型之前就把读不了的块丢弃,被丢掉的部分既不计入 input_tokens 也不计费,于是账单上什么都看不到。想让它可见,需要加上 thinking-binding-controls-2026-08-01 这个 beta 请求头。第3项影响面最广:只要改动了位于 Fable 5.1 思考块之前的东西,包括 system 提示词、tools 数组或更早的任何一条消息,它以及它之后的块就全部失效。是否强制生效取决于账户的创建时间,这意味着刚建好的验证环境会失败,而生产环境不会。本文也写清楚了没有变坏的部分:输入仍是每百万token $10,输出仍是 $50,而缓存读取降到 $0.25,即基础输入的0.025倍,其他Claude模型是0.1倍。官方给出的效果是典型工作负载约降低25%,智能体色彩浓的作业最多约降低45%。此外有7个行为不改代码也会变,包括并行工具调用变少、高 effort 下进度播报变少、low effort 下更倾向凭记忆作答;官方一共列了5项新增,其中缓存读取降价单独放在第5章讲,剩下4项里的 beta 功能,正是为了替换破坏性变更所禁止的那些做法而存在的。

用本地 LLM 写代码:Ollama + Cline / Continue 的配置,和那道会静静坏掉的上下文关口

用本地 LLM 写代码:Ollama + Cline / Continue 的配置,和那道会静静坏掉的上下文关口

让跑在自己电脑上的模型写代码,这件事几年前就能做,但当年能做的只是补全。而从 2025 年底到 2026 年,“读一遍仓库、改动多个文件、跑一遍测试”这种智能体式的用法终于落到了本地:Qwen 的官方模型卡直接点名 CLINE,Mistral 也把标榜智能体式编程的 Devstral Small 2(24B)以 Apache 2.0 开放了出来。本文只取开发方自己公布的数据,不从汇总文章里转手引用——因为查证时不止一次遇到把某个尺寸模型的分数安在另一个尺寸头上的例子。全文最重要的一章是上下文长度:Ollama 的默认值不是固定的,而是按显存决定的,不足 24GiB 是 4k、24〜48GiB 是 32k、48GiB 以上才是 256k。一般的游戏配置正好落在最上面那一行,于是系统提示词加文件内容加工具调用的一来一回轻松溢出,对话从最前面被悄悄削掉,表现为忘记指令、反复做同一个操作、丢失目的,而且全程不报错。官方对编程这类负荷高的用途明确推荐把上下文设到 64000 以上,但调大之后必须用 ollama ps 确认模型仍完整装在 GPU 上,否则会被挤到 CPU 而慢得像换了个东西。文中还厘清了 Continue 和 Cline 在设计上的根本差异(前者按 chat / edit / apply / rerank / autocomplete 分配不同模型、要求低;后者是一个模型从规划做到执行、要求高),按显存给出三档现实选择,摆出 Qwen3.6-35B-A3B(35B 总参数、激活 3B、SWE-bench Verified 73.4)和 Devstral Small 2(24B、68.0%)的官方数字,并指出“本地相当于云端百分之多少”这种比较已经站不住脚——前沿模型正在不再公布 SWE-bench Verified。最后是成本:不收 API 账单不等于免费,答案会随着“你是不是已经有那块 24GB 级别的 GPU”而彻底反转。

Claude Code Remote Control 详解:从手机接管跑在自己电脑上的会话

Claude Code Remote Control 详解:从手机接管跑在自己电脑上的会话

Remote Control 把 Claude 手机应用或 claude.ai/code 连到一个已经跑在你自己机器上的 Claude Code 会话上,而多数讲解都漏掉的关键在于:什么都没有搬到云上——代码的执行和文件的访问自始至终留在本地,手机只是窥看那个会话的一扇窗。本文把这个设计带来的好处和代价一条条摊开。本地的文件系统、MCP 服务器、工具和项目配置全都照常可用(敲 @ 补全出来的是本地项目里的路径),对话和子智能体的进度会在终端、浏览器和手机之间保持同步,笔记本睡眠或网络掉线也扛得住,因为 Claude Code 会自动重连并把排队的更新补投过来。使用条件比看上去严格:需要 Pro、Max、Team 或 Enterprise(API 密钥用不了),要用 claude.ai 登录而不是 setup-token,必须直连 api.anthropic.com,而且四个关闭遥测的环境变量一个都不能设——这正是那些出于隐私考虑设了 DO_NOT_TRACK 的人被告知功能未启用的原因。文中覆盖三个入口(用 /remote-control 承接当前对话、claude --remote-control,以及带 --spawn、--capacity 32 和 --continue 的服务器模式),也划出了哪些斜杠命令能远程用、哪些像 /resume 一样仅限本地,还有对权限提示并不生效的 5 分钟对话框超时,以及两个推送开关。安全部分写得很克制:全程不开任何入站端口,网络那一侧的攻击面几乎消失,风险转移到了账号上;二维码只是近路而非认证;默认的门恰好只有已登录的账号这一道,所以设置通行密钥是回报最高的一步。此外还有会话记录的保留期限(5 年或 30 天)、手机丢失时该怎么办、Trusted Devices 的 18 小时登录窗口、服务器模式约 10 分钟的超时、约 4 小时的恢复窗口、远程机器上必须用 tmux 的规矩、按实际错误信息编排的排查表,以及和 Dispatch 的对比。

Claude 自适应思考与扩展思考:到底变了什么

Claude 自适应思考与扩展思考:到底变了什么

Claude 的思考方式经历了一次代际更替。旧的扩展思考要求你在每次请求里指定 token 预算——thinking: {“type”: “enabled”, “budget_tokens”: N}——但合适的预算因任务而异、无法事先猜准,改动预算值还会让提示词缓存失效。当前的自适应思考只需一行 type: “adaptive”:是否思考、思考多深,由模型根据请求难度自行判断。迁移是分阶段推进的:budget_tokens 在 Opus 4.6 / Sonnet 4.6 上被弃用,从 Opus 4.7 起被以 400 错误拒绝。本文把各模型的规则浓缩成一张表——Fable 5 始终思考(无法关闭),Opus 5 与 Sonnet 5 默认开启思考(Opus 5 仅在 effort high 及以下允许关闭),Opus 4.8 / 4.7 需要显式设置 adaptive,而 Sonnet 4.5 / Haiku 4.5 等旧代模型仍以 budget_tokens 作为唯一模式。深度控制转移到了 output_config: {“effort”: ...},共五档(默认 high),而且改动 effort 会像当年改预算一样打穿缓存。可见性由 display 决定:新一代的默认值是 “omitted”(空的 thinking 块),但无论哪种设置都会为全部思考 token 计费——用 usage.output_tokens_details.thinking_tokens 来测量;任何配置都不会返回原始思考链。在 Opus 5 上关闭思考有官方写明的副作用(工具调用被写成纯文本、内部标签泄漏),因此调低 effort 才是更安全的省钱杠杆。交错思考——在工具调用之间推理——在自适应模式下自动生效,旧的 beta 请求头不再需要。需要速度时,快速模式以 2 倍价格把同一个 Opus 提速约 2.5 倍(仅 Opus 5/4.8,在 Claude Code 里用 /fast 切换)。全部内容均以 Anthropic 官方的 Thinking、Extended thinking 与 Fast mode 文档为依据。

GPU process gone 导致 Claude Desktop 卡死——为什么毫不相干的会话也会被一起拖下水

GPU process gone 导致 Claude Desktop 卡死——为什么毫不相干的会话也会被一起拖下水

工作到一半 Claude Desktop 突然卡住,开着的 Claude Code 会话全部一起停摆;强制退出再重启,有时应用干脆起不来了——这种时候日志的最后一行往往都是 GPU process gone: { type: GPU, reason: crashed, exitCode: 101457950, serviceName: GPU }。本文要说清楚的是:这个 exitCode 101457950(即 0x060C201E)意味着什么,为什么毫不相干的会话也会被一起拖下水,以及现实中哪些办法能用、哪些用不了。先做切分:就算你感觉是“Claude Code 崩了”,崩掉的其实并不是 Claude Code(CLI),而是承载它的桌面应用(Electron)的 GPU 进程;判断方法很简单,看 %APPDATA%\Claude\logs\main.log 的末尾,如果重启前那一行是 GPU process gone 就是本文这件事。它最难缠的地方在于应用不会消失,而是无响应地留在那里——既不弹崩溃对话框,也不会自己重启,在用户察觉并强制退出之前就那么僵着(笔者机器上观测到的一次长达约 30 分钟,期间开着的 8 个会话全都停着)。全军覆没的原因是结构性的:Electron(Chromium)把渲染集中到一个 GPU 进程里,而这个进程每个应用只有一个,所有窗口、标签页、会话都共享它,所以应用内浏览器里的某一个页面把它弄死,八竿子打不着的会话就会同时遭殃,而且用户没法靠设置把它们隔离开。触发因素方面,公开 issue 里最常见的是应用内浏览器:#80444 记录了 WebGL/WebGPU 能力检测后 15~36 秒 GPU 进程死掉、四次都是同一个 0x060C201E;#82967 把触发点定位到预览截图抓取(capturePreviewScreenshotIfChanged);#83478 称一直开着不断刷新的预览就能复现。但浏览器不是唯一触发因素——#68049 报告 ARM64 环境下启动时就以同样的 exitCode 崩掉,#83028 称 Intel 集成显卡上能复现。本文还给出用三个文件(main.log、unknown-window.log、Crashpad 目录)确认的方法,以及用 exitCode 区分正常退出的对照表,并特别提醒:同一份日志里的 requestAdapter 警告不是罪魁祸首,那只是 Chromium 告知“在 Windows 上 powerPreference 不起作用”的常规消息,不能拿它当依据。恢复部分讲“修复”能救回来的情况(#80444 的 appxState=2)和救不回来的情况(#82967 走到 Modified, NeedsRemediation 后只能彻底重装),并把能做的与做不了的分开列出——--disable-gpu 在 MSIX 版会以“拒绝访问”被挡回来,更新应用与改驱动设置都有不管用的报告,关掉浏览器功能也只能挡住浏览器引起的那一部分。数据这一块要分开理解:transcript 已经写到磁盘上,重启之后重新打开会话就能接着读,但 #81698 报告说正在执行中的工作整个丢了,连并行跑着的子智能体的结果也一起没了——已保存的留得住,正在跑的回不来。如果用的是混合显卡配置,在 Windows 的显卡设置里给 Claude 固定 GPU 优先级值得一试(依据是 Chromium issue 40268366:Windows 上应用侧无法指定用哪块 GPU 绘制),但并没有找到说这招对本文这件事有效的报告,不要抱太大期望。最后区分了容易混淆的商店更新强制退出(日志留下 Windows session ending (close-app),不会出现 GPU process gone)。截至 2026 年 8 月 15 日,Anthropic 没有发布任何官方的原因说明或修复公告。