跳到内容
主题

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

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

124 篇文章

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

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

API Error: The response stopped arriving 的含义与解决方法——Claude Code 的响应数据中途停止时

API Error: The response stopped arriving 的含义与解决方法——Claude Code 的响应数据中途停止时

在 Claude Code 中,如果响应中途出现“API Error: The response stopped arriving. The response above may be incomplete.”,说明连接仍然开着,数据却不再送达,Claude Code 的监视计时器将其切断了。已完成的输出会保留下来,先确认工作的状态,再回复 continue,就能从中断处继续。这条提示是 v2.1.227 之前显示为“Response stalled mid-stream”的那条提示改名后的版本。本文依据官方错误参考和网络配置文档,整理了它与 Connection lost mid-response、The response stalled before a response was produced、Streaming response ended before any complete data was received 的区别,不重新发送的理由,-p 和子代理中的处理,检查版本、链路和监视计时器的方法,以及报告时要留下的信息。我们在 GitHub 上打开阅读的 5 份报告,与官方说明分开,作为尚未确定的案例处理。

Login expired · Please run /login 的含义与解决方法——Claude Code 无法续期已保存的登录时

Login expired · Please run /login 的含义与解决方法——Claude Code 无法续期已保存的登录时

Claude Code 显示“Login expired · Please run /login”,表示已保存登录的自动续期被拒绝,Claude Code 已删除凭据。之后的指令不会发送到 API,而是停在本地,所以不要重试,要用 /login 重新登录。本文依据官方错误参考,梳理了它与 Not logged in、OAuth token has expired、Your account is on hold 的区别,v2.1.206 中提示变更的经过,从用 /status 确认到重新登录的步骤,-p 和 CI 中的处理方法,以及反复出现时要检查的版本、钥匙串、时钟和 CLAUDE_CONFIG_DIR。GitHub 上的 6 条报告作为原因尚未确定的案例单独介绍。

Jev是什么?不生成文章、专注判断的AI,用途、价格与局限

Jev是什么?不生成文章、专注判断的AI,用途、价格与局限

Jev是TypeSafe推出的AI模型,不生成文章,而是返回选项、评分值以及Yes/No的概率。文章说明Choice、Score与Noul的使用区别、confidence的读法,以及用于问题分流的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 来梳理。先讲“中途被切断”的 6 条消息(Server error、Connection lost、computer went to sleep、The response stopped arriving、Part of the response never arrived、The response stream was malformed)的官方定义,以及已经流出来的输出为什么会被刻意保留——因为重发有可能把同一次工具调用执行两遍——还有恢复步骤就是回复 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”而彻底反转。