研究了3800个Codex、Claude Code、Gemini CLI Bug后,我发现最容易出错的根本不是模型

作者:袖梨 2026-08-24

处理研究了3800个Codex、Claude Code、Gemini CLI Bug后,我发现最容易出错的根本不是模型这类问题时,先确认目标场景,再按步骤核对配置或玩法细节。

{"type":"doc","content":[{"type":"blockquote","attrs":{"id":"ab6c81fc-d4f3-4085-8105-bbdb198acef3","textAlign":"inherit","isHoverDragHandle":false},"content":[{"type":"paragraph","attrs":{"id":"0de4dad1-8ea2-4565-92fc-ab18889b17fa","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"一项针对三大 AI 编程工具的实证研究,揭开了 Coding Agent 最容易翻车的地方。"}]}]},{"type":"horizontalRule","attrs":{"id":"c7a09693-c1b0-4c6b-8d60-629d4851bcfa","isHoverDragHandle":false}},{"type":"paragraph","attrs":{"id":"a30ab717-9ff8-4574-9bf3-51bb0936d100","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"最近一年,我使用 Codex、Claude Code 和 Gemini CLI 时,经常遇到一种很反直觉的情况:"}]},{"type":"paragraph","attrs":{"id":"5131525c-1e49-4173-9489-9e7e469194b3","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","marks":[{"type":"bold"}],"text":"模型明明越来越强,工具却不一定越来越省心。"}]},{"type":"paragraph","attrs":{"id":"3b84435d-43ac-4d80-a2ba-aee353612403","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"让它解释一段代码,回答很漂亮;真让它进入项目、读取文件、调用终端、修改代码、执行测试,各种问题就来了:"}]},{"type":"bulletList","attrs":{"id":"218061a1-feb8-42b9-b9de-30ffa4a11b10","isHoverDragHandle":false},"content":[{"type":"listItem","attrs":{"id":"7fe8d7e6-fdfe-408e-b9b1-0bb246e9e013"},"content":[{"type":"paragraph","attrs":{"id":"50f16301-4c2f-442b-a865-01bc7289de2c","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"API 请求突然报错"}]}]},{"type":"listItem","attrs":{"id":"f4f997cc-9c66-428a-9699-cb845f75e150"},"content":[{"type":"paragraph","attrs":{"id":"8cdf888d-ec7d-44c9-bafe-4dfdb01a7a80","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"工具调用没有执行"}]}]},{"type":"listItem","attrs":{"id":"741769e6-ce3a-49f9-9105-738a973fa50b"},"content":[{"type":"paragraph","attrs":{"id":"8ad86283-1039-4d89-bccf-aa1a91ad2471","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"命令跑到一半卡住"}]}]},{"type":"listItem","attrs":{"id":"7a0467d5-3c30-40e2-a332-dd2a964306b9"},"content":[{"type":"paragraph","attrs":{"id":"4c946116-dc17-4590-8038-f1d9027e30d8","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"环境变量明明配置了,却提示找不到 Key"}]}]},{"type":"listItem","attrs":{"id":"cf421176-d853-41e9-81b2-3acca18b1ce4"},"content":[{"type":"paragraph","attrs":{"id":"56da2559-9522-4ee7-bd34-2baaf1e9b6a8","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"同一条指令重试几次,结果完全不同"}]}]},{"type":"listItem","attrs":{"id":"09e43998-3a82-432f-9126-d8d2daa601c3"},"content":[{"type":"paragraph","attrs":{"id":"a7d917f9-38e1-4315-981c-c4e398def169","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"代码已经改完,Agent 却因为最后一次测试失败宣布任务失败"}]}]}]},{"type":"paragraph","attrs":{"id":"342e0d12-5050-4b96-abbd-7f4d6a2ff60c","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"大多数人的第一反应是:"},{"type":"text","marks":[{"type":"bold"}],"text":"是不是模型不够聪明?是不是该换一个更贵的模型?"}]},{"type":"paragraph","attrs":{"id":"58811a03-9b7a-4a30-a42f-2c669057c08d","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"但一篇 2026 年发布的研究,给出了完全不同的答案。"}]},{"type":"blockquote","attrs":{"id":"7780021e-9aec-4d5a-ac65-c584f2c2e7ed","textAlign":"inherit","isHoverDragHandle":false},"content":[{"type":"paragraph","attrs":{"id":"28ee165a-c555-4d9d-817a-a9bb6fb20be3","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","marks":[{"type":"bold"}],"text":"很多 Coding Agent 的问题,根本没有发生在模型推理层,而是发生在 API、配置、工具调用和命令执行这些“看起来没那么高级”的地方。"}]}]},{"type":"horizontalRule","attrs":{"id":"5a7a0356-49e9-4751-803b-f7517820266f","isHoverDragHandle":false}},{"type":"heading","attrs":{"id":"8e01e5c5-515d-4c29-92ed-1caf0eb377b6","textAlign":"inherit","indent":0,"level":2,"isHoverDragHandle":false},"content":[{"type":"text","text":"一、研究者真的翻了3800多个Bug"}]},{"type":"paragraph","attrs":{"id":"7ef1c086-0846-42fa-ad8b-319fd67f7195","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"这篇论文名为 "},{"type":"text","marks":[{"type":"italic"}],"text":"Engineering Pitfalls in AI Coding Tools: An Empirical Study of Bugs in Claude Code, Codex, and Gemini CLI"},{"type":"text","text":"。"}]},{"type":"paragraph","attrs":{"id":"b24aa68a-b228-4104-948e-0ea0a305e45c","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"研究团队系统分析了三个 AI 编程工具开源仓库中公开报告的 "},{"type":"text","marks":[{"type":"bold"}],"text":"3800 多个 Bug"},{"type":"text","text":",不只看 Issue 标题,还人工检查了问题描述、用户讨论和开发者回复,并从 Bug 类型、根因、症状和发生位置等维度进行分类。"}]},{"type":"paragraph","attrs":{"id":"58689bd2-d24f-4487-b75f-bd145eb3583a","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"最终得到的几组数据非常有意思:"}]},{"type":"table","attrs":{"id":"4d00fab3-b7cf-4730-833a-e3587e0db5d9","isHoverDragHandle":false},"content":[{"type":"tableRow","content":[{"type":"tableHeader","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"style":null},"content":[{"type":"paragraph","attrs":{"id":"8bf669cb-b586-4ae4-8118-e499b4032048","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"研究发现"}]}]},{"type":"tableHeader","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"style":"text-align: right;"},"content":[{"type":"paragraph","attrs":{"id":"5c95a5b0-d05a-4bc7-b0db-fd3ed1a77d10","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"占比"}]}]}]},{"type":"tableRow","content":[{"type":"tableCell","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"background":null,"color":null,"textAlign":null,"style":null},"content":[{"type":"paragraph","attrs":{"id":"daf2b4d4-7877-40e3-b84a-9826b9b07a06","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"与功能有关的 Bug"}]}]},{"type":"tableCell","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"background":null,"color":null,"textAlign":null,"style":"text-align: right;"},"content":[{"type":"paragraph","attrs":{"id":"62b8c99d-e4c1-4d94-8696-88687956f150","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","marks":[{"type":"bold"}],"text":"超过 67%"}]}]}]},{"type":"tableRow","content":[{"type":"tableCell","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"background":null,"color":null,"textAlign":null,"style":null},"content":[{"type":"paragraph","attrs":{"id":"0de68800-2e86-40cf-b369-8be5e6eee9e8","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"根因来自 API、集成或配置错误"}]}]},{"type":"tableCell","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"background":null,"color":null,"textAlign":null,"style":"text-align: right;"},"content":[{"type":"paragraph","attrs":{"id":"0fe3910a-583e-4d1b-9184-3c6165a4ab71","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","marks":[{"type":"bold"}],"text":"36.9%"}]}]}]},{"type":"tableRow","content":[{"type":"tableCell","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"background":null,"color":null,"textAlign":null,"style":null},"content":[{"type":"paragraph","attrs":{"id":"490207d8-4a1d-483a-a97c-ec0610bc8c60","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"用户看到的 API 错误"}]}]},{"type":"tableCell","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"background":null,"color":null,"textAlign":null,"style":"text-align: right;"},"content":[{"type":"paragraph","attrs":{"id":"ebd727dc-3e34-4801-b590-b52bbe1363e0","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","marks":[{"type":"bold"}],"text":"18.3%"}]}]}]},{"type":"tableRow","content":[{"type":"tableCell","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"background":null,"color":null,"textAlign":null,"style":null},"content":[{"type":"paragraph","attrs":{"id":"cbd2773c-6cb4-4f02-8c41-0a33513b15cb","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"终端问题"}]}]},{"type":"tableCell","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"background":null,"color":null,"textAlign":null,"style":"text-align: right;"},"content":[{"type":"paragraph","attrs":{"id":"08d18790-ebb5-4188-b1ba-bde118d8e3b0","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","marks":[{"type":"bold"}],"text":"14%"}]}]}]},{"type":"tableRow","content":[{"type":"tableCell","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"background":null,"color":null,"textAlign":null,"style":null},"content":[{"type":"paragraph","attrs":{"id":"536ee28d-15bf-44dd-b44b-7522025398a4","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"命令执行失败"}]}]},{"type":"tableCell","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"background":null,"color":null,"textAlign":null,"style":"text-align: right;"},"content":[{"type":"paragraph","attrs":{"id":"aecd1fb8-ec22-4c07-a19f-fec0faefab6d","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","marks":[{"type":"bold"}],"text":"12.7%"}]}]}]},{"type":"tableRow","content":[{"type":"tableCell","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"background":null,"color":null,"textAlign":null,"style":null},"content":[{"type":"paragraph","attrs":{"id":"383e9aac-e691-435c-b527-c0fe61ab9d38","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"Bug 影响工具调用阶段"}]}]},{"type":"tableCell","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"background":null,"color":null,"textAlign":null,"style":"text-align: right;"},"content":[{"type":"paragraph","attrs":{"id":"bd7bc402-5476-4464-a753-9c775efe5e86","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","marks":[{"type":"bold"}],"text":"37.2%"}]}]}]},{"type":"tableRow","content":[{"type":"tableCell","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"background":null,"color":null,"textAlign":null,"style":null},"content":[{"type":"paragraph","attrs":{"id":"b28c895c-8278-433f-b684-869f2d7aa344","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"Bug 影响命令执行阶段"}]}]},{"type":"tableCell","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"background":null,"color":null,"textAlign":null,"style":"text-align: right;"},"content":[{"type":"paragraph","attrs":{"id":"9642b6ea-52cf-4829-a959-8f4db71c553c","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","marks":[{"type":"bold"}],"text":"24.7%"}]}]}]}]},{"type":"paragraph","attrs":{"id":"537a39bd-a750-4e4d-b61f-d64c059343e3","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"换句话说,Coding Agent 最脆弱的地方,并不是大家天天讨论的参数量、推理能力和榜单分数,而是模型之外那一整套工程链路。"}]},{"type":"paragraph","attrs":{"id":"fdb14370-1637-4d76-b8d7-2e771bc8fd57","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"不过这里必须说明研究边界:**这篇论文统计的是 AI 编程工具的工程 Bug,不是在比较三个模型谁写代码更强。**它不能证明模型永远不会犯错,但足以说明——当 Agent 无法完成任务时,直接把责任推给模型,往往会找错方向。"}]},{"type":"horizontalRule","attrs":{"id":"1b298b64-4c6a-41b4-a1ea-24aa5d25372c","isHoverDragHandle":false}},{"type":"heading","attrs":{"id":"232f7e03-233c-4efd-a99f-5949c6f2d36a","textAlign":"inherit","indent":0,"level":2,"isHoverDragHandle":false},"content":[{"type":"text","text":"二、为什么模型很强,Coding Agent 还是会翻车"}]},{"type":"paragraph","attrs":{"id":"c6dddff5-46c6-4978-869f-00c5e759155a","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"因为 Coding Agent 从来不只是一个大模型。"}]},{"type":"paragraph","attrs":{"id":"d34056ed-a72e-4129-be87-97a31a137f45","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"一个能读项目、改代码、跑测试的 Agent,至少要经过下面这条链路:"}]},{"type":"codeBlock","attrs":{"id":"25411c2a-1e83-46ef-be12-4bbbbe10ffa8","language":"javascript","theme":"atom-one-dark","runtimes":0,"isHoverDragHandle":false,"key":"","languageByAi":"javascript"},"content":[{"type":"text","text":"用户指令n ↓n上下文与项目文件n ↓n大模型规划n ↓n工具参数生成n ↓n文件系统 / Shell / Git / MCPn ↓n命令执行结果n ↓n状态更新与下一轮推理n ↓n最终答案"}]},{"type":"paragraph","attrs":{"id":"970c487b-0ba2-40b7-b986-3d9fee7f9ea7","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"这条链路中,模型只负责其中一部分。"}]},{"type":"paragraph","attrs":{"id":"29b67fa0-7153-40c4-ad62-350e0ef294be","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"只要 API 协议、Key、模型名、工作目录、Shell、权限、流式连接、工具参数或会话状态中有一项不对,整个任务都会失败。"}]},{"type":"paragraph","attrs":{"id":"cdeb019e-33c5-41ae-bc16-54e87e6ceff6","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"这也是普通 Chat 和 Coding Agent 最大的区别:"}]},{"type":"bulletList","attrs":{"id":"3733016f-a3fa-41af-baa8-5cd6b46ae887","isHoverDragHandle":false},"content":[{"type":"listItem","attrs":{"id":"401a4055-ad56-4217-8300-faa766a04157"},"content":[{"type":"paragraph","attrs":{"id":"53a12e08-7700-4643-9fd8-09b08c3ac04b","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"普通 Chat 生成错了,通常只是答案不好。"}]}]},{"type":"listItem","attrs":{"id":"e44f00fd-834f-4b42-9eac-9526cf68b341"},"content":[{"type":"paragraph","attrs":{"id":"2006e6b7-dbfc-4e98-ad8c-f3c75c4e5889","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"Coding Agent 某一环错了,可能表现为命令没执行、文件没修改、测试被中断,甚至重复执行同一个操作。"}]}]}]},{"type":"blockquote","attrs":{"id":"9391764f-65f4-442a-9fa8-3153bdb8badf","textAlign":"inherit","isHoverDragHandle":false},"content":[{"type":"paragraph","attrs":{"id":"0e6010f9-ecae-4a61-a740-4b73556a8b88","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","marks":[{"type":"bold"}],"text":"Agent 的可靠性,不等于模型的可靠性;它取决于整条执行链路中最不稳定的一环。"}]}]},{"type":"horizontalRule","attrs":{"id":"11cd576b-5d7f-46b8-a5ae-0f55be900cd8","isHoverDragHandle":false}},{"type":"heading","attrs":{"id":"d1562029-5011-432b-86e8-feabb9fae289","textAlign":"inherit","indent":0,"level":2,"isHoverDragHandle":false},"content":[{"type":"text","text":"三、最常见的5类问题,很多人第一步就查错了"}]},{"type":"heading","attrs":{"id":"a5c6d9fe-a8cd-40ee-9e49-cec850fc9494","textAlign":"inherit","indent":0,"level":3,"isHoverDragHandle":false},"content":[{"type":"text","text":"1. Base URL 能访问,不代表协议兼容"}]},{"type":"paragraph","attrs":{"id":"77fab6a2-ff17-433a-a251-ac6d8bda01e3","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"这是目前最容易踩的坑。"}]},{"type":"paragraph","attrs":{"id":"3d3fc88a-bae0-442a-bf8b-58eb9ef09f48","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"不少平台都写着“OpenAI 兼容”,开发者便默认只要把 "},{"type":"text","marks":[{"type":"code"}],"text":"base_url"},{"type":"text","text":" 换掉,所有工具都能直接运行。"}]},{"type":"paragraph","attrs":{"id":"edd9aa71-72ef-4298-a657-d299cf876762","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"但“OpenAI 兼容”可能只代表它支持 "},{"type":"text","marks":[{"type":"code"}],"text":"/v1/chat/completions"},{"type":"text","text":",不代表完整支持 "},{"type":"text","marks":[{"type":"code"}],"text":"/v1/responses"},{"type":"text","text":"、流式事件、工具调用和状态字段。"}]},{"type":"paragraph","attrs":{"id":"74455ba1-bda8-4d9d-ae84-6f8aa6d8ecd2","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"而当前 Codex 自定义模型提供方使用的是 Responses 协议。OpenAI 官方配置参考中,"},{"type":"text","marks":[{"type":"code"}],"text":"wire_api"},{"type":"text","text":" 目前唯一支持的值就是 "},{"type":"text","marks":[{"type":"code"}],"text":"responses"},{"type":"text","text":"。"}]},{"type":"paragraph","attrs":{"id":"aac88bca-6b04-48dc-931e-49bd714b5f7d","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"于是就会出现一种典型现象:"}]},{"type":"bulletList","attrs":{"id":"5aeaa9b7-4a77-479d-b004-e183d24361a3","isHoverDragHandle":false},"content":[{"type":"listItem","attrs":{"id":"8ff927c7-b55f-48d9-a62e-aec47518ad73"},"content":[{"type":"paragraph","attrs":{"id":"a48c4888-256a-4a8f-a855-ce150fce7a6a","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"同一个 Key,用 Python SDK 聊天正常;"}]}]},{"type":"listItem","attrs":{"id":"aee527a6-46c9-4117-974a-80b25bd81968"},"content":[{"type":"paragraph","attrs":{"id":"8abccd4b-779b-4c85-8982-b75cf644a967","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"放进 Codex 后却出现 404、流式输出中断或工具调用异常。"}]}]}]},{"type":"paragraph","attrs":{"id":"f3e261de-1eba-4078-8d5b-c0c751599d82","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"这时不是模型坏了,而是"},{"type":"text","marks":[{"type":"bold"}],"text":"客户端发送的协议,和网关真正实现的协议没有对上"},{"type":"text","text":"。"}]},{"type":"heading","attrs":{"id":"7545d403-578e-4ae3-aa6b-80ef0b4c829e","textAlign":"inherit","indent":0,"level":3,"isHoverDragHandle":false},"content":[{"type":"text","text":"2. Key 没错,但程序读到的不是这个 Key"}]},{"type":"paragraph","attrs":{"id":"2b3c9429-fc80-4ee7-bc3c-50bbe31ebf76","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"API Key 问题比想象中复杂。"}]},{"type":"paragraph","attrs":{"id":"f9c17053-486b-444c-9c87-f8f4975abb51","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"你在当前终端里执行了 "},{"type":"text","marks":[{"type":"code"}],"text":"export"},{"type":"text","text":",不代表 IDE、新开的终端、子进程、Docker 容器和 CI Runner 都能读到它。"}]},{"type":"paragraph","attrs":{"id":"f45c4ea9-7827-48bc-a746-bcef0d9b5a7e","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"更麻烦的是,不同 Coding Agent 使用的变量名和认证流程并不相同。Gemini CLI 官方文档要求 API Key 模式设置 "},{"type":"text","marks":[{"type":"code"}],"text":"GEMINI_API_KEY"},{"type":"text","text":";Claude Code 也有自己的认证与网关配置;Codex 自定义提供方则通过 "},{"type":"text","marks":[{"type":"code"}],"text":"env_key"},{"type":"text","text":" 指定从哪个环境变量读取密钥。"}]},{"type":"paragraph","attrs":{"id":"4ab4942d-4d85-4fac-94fd-12ca4115cea7","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"所以,“我明明配过 Key”不是有效证据。真正该确认的是:"}]},{"type":"codeBlock","attrs":{"id":"548e24f8-d335-4be4-bae3-50bc089d1da2","language":"javascript","theme":"atom-one-dark","runtimes":0,"isHoverDragHandle":false,"key":"","languageByAi":"javascript"},"content":[{"type":"text","text":"# 只检查变量是否存在,不要把完整密钥打印到日志ntest -n "$GENVIS_API_KEY" && echo "Key loaded" || echo "Key missing""}]},{"type":"paragraph","attrs":{"id":"c19d453d-b6a6-4315-b439-c4c641327180","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"如果是在 Windows、WSL、容器或远程开发环境里,还要确认 Agent 进程究竟运行在哪一层。"}]},{"type":"heading","attrs":{"id":"ae4cf3c6-74ff-4459-ad22-8446f2522d87","textAlign":"inherit","indent":0,"level":3,"isHoverDragHandle":false},"content":[{"type":"text","text":"3. 模型会调用工具,不代表参数一定能执行"}]},{"type":"paragraph","attrs":{"id":"6c9612a1-4e83-44d5-85cf-b1b5c2821c4b","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"Coding Agent 的关键能力不是“会聊天”,而是把模型生成的工具调用,转换成真实操作。"}]},{"type":"paragraph","attrs":{"id":"bca50e3f-9fec-4ad0-b930-6a9a9f75c422","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"模型可能正确判断出需要运行测试,但生成了错误的参数;也可能工具 Schema 更新了,客户端仍按旧格式解析;还可能流式响应中少了一个事件,导致工具调用只接收到一半。"}]},{"type":"paragraph","attrs":{"id":"410e7077-76fc-42dc-a5d9-8206f9165f12","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"表面上看,是 Agent “突然变笨”;实际上,问题可能出在:"}]},{"type":"bulletList","attrs":{"id":"257bd9b5-9426-4ec3-a1a2-f1be062caace","isHoverDragHandle":false},"content":[{"type":"listItem","attrs":{"id":"f0bfb406-e6a2-44b7-a53f-7a6d71423df3"},"content":[{"type":"paragraph","attrs":{"id":"f67e491c-02cd-4e19-a814-0052626e93be","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"工具名称不一致"}]}]},{"type":"listItem","attrs":{"id":"49e78e66-8d30-4de3-89e1-08b8878d59c5"},"content":[{"type":"paragraph","attrs":{"id":"9a9ba6cc-4307-47f6-8c41-1732923649ee","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"JSON 参数不符合 Schema"}]}]},{"type":"listItem","attrs":{"id":"61119bfa-19c5-4214-b92f-0ade94ef0a6b"},"content":[{"type":"paragraph","attrs":{"id":"0cd0bb7b-a4a7-4ba6-8d3d-2bbaa7fa4e3e","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"必填字段丢失"}]}]},{"type":"listItem","attrs":{"id":"d3120090-7ade-46e0-a620-1cff3ec6e1e8"},"content":[{"type":"paragraph","attrs":{"id":"8ceb08c5-572f-4f3f-9645-a003318df11e","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"流式事件没有完整拼接"}]}]},{"type":"listItem","attrs":{"id":"121a41fe-170e-4f20-8d9a-50fd9596625e"},"content":[{"type":"paragraph","attrs":{"id":"46e0cb46-658b-4e5e-9fa5-bc8a357c03ad","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"工具返回值过大,被截断后污染了下一轮上下文"}]}]}]},{"type":"paragraph","attrs":{"id":"485c57cd-85df-4d75-9efa-57ebd78dd8e8","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"论文中,"},{"type":"text","marks":[{"type":"bold"}],"text":"37.2% 的 Bug 会影响工具调用阶段"},{"type":"text","text":"。这正是 Coding Agent 与普通对话产品之间最难补齐的工程差距。"}]},{"type":"heading","attrs":{"id":"f032fc18-4bfe-4032-afd0-c23ecc456799","textAlign":"inherit","indent":0,"level":3,"isHoverDragHandle":false},"content":[{"type":"text","text":"4. 命令正确,也可能跑在错误的环境里"}]},{"type":"paragraph","attrs":{"id":"e994c883-6424-464e-92a9-cec986e5050e","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"Agent 生成了正确命令,不等于命令一定能成功。"}]},{"type":"paragraph","attrs":{"id":"77316ac8-b8f8-4fb5-a6d5-59a6c36b24ed","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"同一个项目,在 macOS、Linux、Windows、WSL 和容器里的行为可能不同;同一个 "},{"type":"text","marks":[{"type":"code"}],"text":"python"},{"type":"text","text":" 命令,也可能指向完全不同的解释器。"}]},{"type":"paragraph","attrs":{"id":"eb380fcf-6c37-4374-ae2a-cdec97a0f271","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"高频问题包括:"}]},{"type":"bulletList","attrs":{"id":"12332903-ad35-4fd2-8c22-b3653a5cbb78","isHoverDragHandle":false},"content":[{"type":"listItem","attrs":{"id":"e94999fc-4cf0-4e55-8b7c-7ead17efd3a8"},"content":[{"type":"paragraph","attrs":{"id":"a28a2c62-9183-4538-8fc5-8f4066f90060","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"工作目录错误,找不到配置文件"}]}]},{"type":"listItem","attrs":{"id":"2968ec87-0558-402a-9cad-04695230301e"},"content":[{"type":"paragraph","attrs":{"id":"92bf3349-2022-4f9b-81ae-3ff8d2788d71","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"Node.js 或 Python 版本不一致"}]}]},{"type":"listItem","attrs":{"id":"44ff66d1-7a30-4c0e-8eba-97f8cb1f79c6"},"content":[{"type":"paragraph","attrs":{"id":"abb7ad58-7630-415d-ac28-35b99c51a3fd","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"依赖安装在另一个虚拟环境"}]}]},{"type":"listItem","attrs":{"id":"1967d557-1bff-44b4-b46e-efcbe2e604a2"},"content":[{"type":"paragraph","attrs":{"id":"2a486004-5a14-43fd-8370-e61b8ae90f0d","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"Shell 语法不兼容"}]}]},{"type":"listItem","attrs":{"id":"9159253c-de11-4dd2-ade2-4032be86d082"},"content":[{"type":"paragraph","attrs":{"id":"c368b369-55fc-41dd-a5eb-8debda38d16a","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"文件没有执行权限"}]}]},{"type":"listItem","attrs":{"id":"454c952f-7c00-42ff-8c66-a33e7a28e84d"},"content":[{"type":"paragraph","attrs":{"id":"f6af109b-a2d1-4336-b9d6-43a2e70372bc","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"Agent 处于只读或受限沙箱"}]}]},{"type":"listItem","attrs":{"id":"0171f42d-88ae-4bac-bbc9-d5f885d55481"},"content":[{"type":"paragraph","attrs":{"id":"4960a40a-96cc-471d-a707-c472d0b24dd5","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"测试依赖数据库、网络或系统服务,但运行环境没有提供"}]}]}]},{"type":"paragraph","attrs":{"id":"760f4127-85bb-4d54-ba36-3fd8fce4314c","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"这类错误最终常常只显示一句 “command failed”,于是用户又回头换模型,结果换完依然失败。"}]},{"type":"heading","attrs":{"id":"ddcb803e-c8ef-447f-9fa2-8474097bd714","textAlign":"inherit","indent":0,"level":3,"isHoverDragHandle":false},"content":[{"type":"text","text":"5. 失败后的重试,可能制造更多失败"}]},{"type":"paragraph","attrs":{"id":"732a52f9-e4a0-462a-892b-619aaaed175e","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"Agent 不是一次请求,而是一个循环。"}]},{"type":"paragraph","attrs":{"id":"0b4ad089-fb46-46c3-9be8-f011cfd1f8dc","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"请求超时后,客户端可能自动重试;工具失败后,模型也可能主动换方案再执行一次。如果状态管理不严谨,就会出现:"}]},{"type":"bulletList","attrs":{"id":"8143ff5c-b8d2-4735-bc69-dd1385749293","isHoverDragHandle":false},"content":[{"type":"listItem","attrs":{"id":"fe5f22aa-1cd9-4df3-91e5-db2ed5357e6c"},"content":[{"type":"paragraph","attrs":{"id":"9fe2d397-513e-4f87-8b91-c90012072d85","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"同一个命令被执行两次"}]}]},{"type":"listItem","attrs":{"id":"9e5ded3e-57e0-405b-a163-10c68466bc41"},"content":[{"type":"paragraph","attrs":{"id":"415dcd83-0fbd-4e1b-b5d6-0f525057269b","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"文件已经修改,却因为响应断开被再次覆盖"}]}]},{"type":"listItem","attrs":{"id":"e2cf5303-7356-45ad-b7bd-9b8c531259fc"},"content":[{"type":"paragraph","attrs":{"id":"060f67aa-b387-4d20-9ec7-eb10b522d428","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"第一次调用成功,第二次重试触发限流"}]}]},{"type":"listItem","attrs":{"id":"31530e53-79f6-4d41-8368-6c9fbb12b454"},"content":[{"type":"paragraph","attrs":{"id":"9abad132-5d0a-4a5d-b414-f2a75b56861b","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"上一轮工具结果没有写入会话,模型反复排查同一问题"}]}]},{"type":"listItem","attrs":{"id":"3297e19e-0867-4da6-ade5-f6b5d56cc227"},"content":[{"type":"paragraph","attrs":{"id":"f718f00f-7c5a-440e-a7e4-458928d05fda","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"重试不断增加上下文,Token 越烧越多"}]}]}]},{"type":"blockquote","attrs":{"id":"fe69021f-4553-442f-b9a9-a42cec5098eb","textAlign":"inherit","isHoverDragHandle":false},"content":[{"type":"paragraph","attrs":{"id":"e01f4e1a-0629-4951-ae61-6f41314f10a5","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","marks":[{"type":"bold"}],"text":"对 Coding Agent 来说,稳定性问题不仅浪费时间,还会直接变成 Token 成本。"}]}]},{"type":"horizontalRule","attrs":{"id":"3befd800-d850-43b4-9130-b75de4c1d4d1","isHoverDragHandle":false}},{"type":"heading","attrs":{"id":"addf7fc2-05b1-4f2c-a5ff-1f7259323158","textAlign":"inherit","indent":0,"level":2,"isHoverDragHandle":false},"content":[{"type":"text","text":"四、别急着换模型:先按这个顺序排查"}]},{"type":"paragraph","attrs":{"id":"c5b3ff56-cb67-45aa-870c-2c4959057386","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"以后再遇到 Codex 报错,我建议按下面的顺序查。越靠前,成本越低,也越容易定位。"}]},{"type":"heading","attrs":{"id":"6320163c-1fa1-4721-b002-c730848a71ef","textAlign":"inherit","indent":0,"level":3,"isHoverDragHandle":false},"content":[{"type":"text","text":"第一步:先把问题缩小到“模型之前”还是“模型之后”"}]},{"type":"table","attrs":{"id":"52077524-d0dc-4eb2-9249-1647c65562b7","isHoverDragHandle":false},"content":[{"type":"tableRow","content":[{"type":"tableCell","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"background":null,"color":null,"textAlign":null,"style":null},"content":[{"type":"paragraph","attrs":{"id":"8d3e6032-6aed-46e7-8959-3f4d3fad6aeb","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"现象"}]}]},{"type":"tableCell","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"background":null,"color":null,"textAlign":null,"style":null},"content":[{"type":"paragraph","attrs":{"id":"2efc33f6-4c8e-483d-9427-81d7412caf57","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"优先检查"}]}]}]},{"type":"tableRow","content":[{"type":"tableCell","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"background":null,"color":null,"textAlign":null,"style":null},"content":[{"type":"paragraph","attrs":{"id":"b4b1466d-f70e-4e39-b118-63ffe8ae9e46","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"401 / 403"}]}]},{"type":"tableCell","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"background":null,"color":null,"textAlign":null,"style":null},"content":[{"type":"paragraph","attrs":{"id":"e8f8f739-fed7-4a90-9abf-2efa301c2f18","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"Key、权限、认证 Header"}]}]}]},{"type":"tableRow","content":[{"type":"tableCell","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"background":null,"color":null,"textAlign":null,"style":null},"content":[{"type":"paragraph","attrs":{"id":"d3584c14-af90-4fa8-bed5-c2c2e799d935","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"404"}]}]},{"type":"tableCell","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"background":null,"color":null,"textAlign":null,"style":null},"content":[{"type":"paragraph","attrs":{"id":"b00de401-dda2-4764-b544-0f91b1823158","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"Base URL、接口路径、协议是否支持"}]}]}]},{"type":"tableRow","content":[{"type":"tableCell","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"background":null,"color":null,"textAlign":null,"style":null},"content":[{"type":"paragraph","attrs":{"id":"af0dd9f7-2380-48a7-8d1e-76f03d9b6370","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"429"}]}]},{"type":"tableCell","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"background":null,"color":null,"textAlign":null,"style":null},"content":[{"type":"paragraph","attrs":{"id":"1fb2730c-db48-412b-8298-f10b4ee58dbd","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"额度、并发、RPM/TPM、路由限流"}]}]}]},{"type":"tableRow","content":[{"type":"tableCell","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"background":null,"color":null,"textAlign":null,"style":null},"content":[{"type":"paragraph","attrs":{"id":"009b9437-b2be-488d-b766-b0b152dc3bbb","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"一直等待或中途断流"}]}]},{"type":"tableCell","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"background":null,"color":null,"textAlign":null,"style":null},"content":[{"type":"paragraph","attrs":{"id":"b11a3aa3-197f-40dc-a00a-1b7b2a4d8927","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"SSE、网关超时、反向袋里缓冲"}]}]}]},{"type":"tableRow","content":[{"type":"tableCell","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"background":null,"color":null,"textAlign":null,"style":null},"content":[{"type":"paragraph","attrs":{"id":"a00aa315-cb8d-4146-9a80-137fc44bb511","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"能回答但不会调用工具"}]}]},{"type":"tableCell","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"background":null,"color":null,"textAlign":null,"style":null},"content":[{"type":"paragraph","attrs":{"id":"2b0951ce-8dae-4491-9c17-0f87551a179e","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"Responses / tool call 兼容性"}]}]}]},{"type":"tableRow","content":[{"type":"tableCell","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"background":null,"color":null,"textAlign":null,"style":null},"content":[{"type":"paragraph","attrs":{"id":"c0e9e741-f9bb-487c-b36a-972bd2426f22","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"工具调用成功但命令失败"}]}]},{"type":"tableCell","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"background":null,"color":null,"textAlign":null,"style":null},"content":[{"type":"paragraph","attrs":{"id":"42dfe956-b554-4622-ac4f-18b9a950fa9e","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"工作目录、权限、Shell、依赖环境"}]}]}]},{"type":"tableRow","content":[{"type":"tableCell","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"background":null,"color":null,"textAlign":null,"style":null},"content":[{"type":"paragraph","attrs":{"id":"f0870c38-30ce-47a8-963f-0c6e81109668","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"重复修改或重复执行"}]}]},{"type":"tableCell","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"background":null,"color":null,"textAlign":null,"style":null},"content":[{"type":"paragraph","attrs":{"id":"b9668d1b-0eb6-4ca9-a091-581a5a45855f","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"重试策略、会话状态、幂等性"}]}]}]}]},{"type":"heading","attrs":{"id":"ab7434c8-ab2d-46d6-8b86-aa9f12a93431","textAlign":"inherit","indent":0,"level":3,"isHoverDragHandle":false},"content":[{"type":"text","text":"第二步:绕过 Agent,直接测试 API"}]},{"type":"paragraph","attrs":{"id":"961c5bbd-ed96-41a9-80ad-41b7106d2a99","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"不要一上来就在 Agent 里反复重试。先用最小请求确认模型、Key 和 Responses 接口能否正常工作。"}]},{"type":"codeBlock","attrs":{"id":"44ae1efe-671b-453a-8af4-670cc28a162a","language":"javascript","theme":"atom-one-dark","runtimes":0,"isHoverDragHandle":false,"key":"","languageByAi":"javascript"},"content":[{"type":"text","text":"curl https://genvis.xyz/v1/responses n-H "Authorization: Bearer $GENVIS_API_KEY" n-H "Content-Type: application/json" n-d '{n"model": "gpt-5.6-sol",n"input": "只回复 OK"n}'"}]},{"type":"paragraph","attrs":{"id":"36890adc-3318-4959-a619-adab68a3cf0b","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"如果这个请求都失败,问题与项目代码无关,先检查入口、模型名、账户额度和接口兼容性。模型名称请以平台控制台当时实际开放的列表为准。"}]},{"type":"paragraph","attrs":{"id":"d4e4d2e4-e183-4c20-ae42-5c9599cfee9a","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"如果最小请求正常,而 Agent 仍失败,再继续查工具调用、Shell 和项目环境。这样可以快速把故障范围砍掉一半。"}]},{"type":"heading","attrs":{"id":"87a0572e-b7d4-4a94-b6dc-1a06ab4d1112","textAlign":"inherit","indent":0,"level":3,"isHoverDragHandle":false},"content":[{"type":"text","text":"第三步:给 Codex 一份明确的提供方配置"}]},{"type":"paragraph","attrs":{"id":"a4096968-eeff-4b0f-956c-6e212f4a8360","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"我现在更倾向于把 Coding Agent 的模型入口统一起来,避免每换一个模型,就重新管理一套 Key 和配置。"}]},{"type":"paragraph","attrs":{"id":"19cfa8a3-d43a-482b-b1c7-73f2df4e6db5","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"下面是我使用 Genvis 作为统一入口时的 Codex 配置示例。把它放进用户级 "},{"type":"text","marks":[{"type":"code"}],"text":"~/.codex/config.toml"},{"type":"text","text":":"}]},{"type":"codeBlock","attrs":{"id":"f4daf198-7a42-4149-8528-81b76e09a040","language":"javascript","theme":"atom-one-dark","runtimes":0,"isHoverDragHandle":false,"key":"","languageByAi":"javascript"},"content":[{"type":"text","text":"model = "gpt-5.6-sol"nmodel_provider = "genvis"nn[model_providers.genvis]nname = "Genvis"nbase_url = "https://genvis.xyz/v1"nenv_key = "GENVIS_API_KEY"nwire_api = "responses"nrequest_max_retries = 4nstream_max_retries = 5nstream_idle_timeout_ms = 300000"}]},{"type":"paragraph","attrs":{"id":"adfc2311-e6d5-46a8-bded-6ab20f59ae30","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"再把 Key 放进环境变量,不要硬编码进配置文件:"}]},{"type":"codeBlock","attrs":{"id":"c847c8a9-fbb5-493c-8bf0-ada756ff8165","language":"javascript","theme":"atom-one-dark","runtimes":0,"isHoverDragHandle":false,"key":"","languageByAi":"javascript"},"content":[{"type":"text","text":"export GENVIS_API_KEY="你的 API Key""}]},{"type":"paragraph","attrs":{"id":"dab73715-f00f-4e17-beae-5efd81251f18","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"这段配置里,真正重要的不是模型名称,而是下面四项必须互相对应:"}]},{"type":"orderedList","attrs":{"id":"8f70857b-394e-469f-814f-fe112f6d5816","start":1,"isHoverDragHandle":false},"content":[{"type":"listItem","attrs":{"id":"51152e01-7ca2-42b6-9b54-1a9b2ae66542"},"content":[{"type":"paragraph","attrs":{"id":"f0471981-282e-427d-a151-1ae2f7625a23","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","marks":[{"type":"code"}],"text":"model_provider"},{"type":"text","text":" 必须指向已经声明的提供方 ID。"}]}]},{"type":"listItem","attrs":{"id":"3bc85153-4fef-4a5c-8609-a7b034903b09"},"content":[{"type":"paragraph","attrs":{"id":"4cdbcf40-abdc-4ab4-ae8b-b9092a280c55","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","marks":[{"type":"code"}],"text":"base_url"},{"type":"text","text":" 必须是实际可访问的 API 根路径。"}]}]},{"type":"listItem","attrs":{"id":"9a77492d-9cda-4e4a-9bbd-80aa496647de"},"content":[{"type":"paragraph","attrs":{"id":"32629d20-63fa-4a91-9ddb-bfe3c1876734","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","marks":[{"type":"code"}],"text":"env_key"},{"type":"text","text":" 必须与终端中设置的变量名完全一致。"}]}]},{"type":"listItem","attrs":{"id":"3fb59422-d1d0-4681-a582-da69847eb452"},"content":[{"type":"paragraph","attrs":{"id":"ebdec34a-1b8f-4b33-bc65-35f00cf1b7a0","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","marks":[{"type":"code"}],"text":"wire_api"},{"type":"text","text":" 必须与网关真实支持的协议一致。"}]}]}]},{"type":"paragraph","attrs":{"id":"67824b09-9e11-405a-9118-f2a37dd5bfff","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"我选择统一入口,并不是因为“一个 Key 能调很多模型”这句宣传本身,而是因为排障时可以把模型切换、调用记录和 Token 消耗集中到一个地方看。"}]},{"type":"paragraph","attrs":{"id":"15bdbeb9-65f4-4b2c-9fbe-21977291302d","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","marks":[{"type":"bold"}],"text":"对 Coding Agent 来说,统一网关最大的价值不是模型多,而是缩短故障链路。"}]},{"type":"heading","attrs":{"id":"8026a787-5ada-4965-92dd-35c6d7f8a549","textAlign":"inherit","indent":0,"level":3,"isHoverDragHandle":false},"content":[{"type":"text","text":"第四步:只跑一个最小任务"}]},{"type":"paragraph","attrs":{"id":"fea93426-bc02-4c26-94bc-a942c9085c43","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"API 正常后,不要立即让 Agent 重构整个项目。先选择一个可验证、低风险的任务:"}]},{"type":"codeBlock","attrs":{"id":"efeaafd5-0848-4a77-b7fb-5e5133776384","language":"javascript","theme":"atom-one-dark","runtimes":0,"isHoverDragHandle":false,"key":"","languageByAi":"javascript"},"content":[{"type":"text","text":"读取当前项目的 README.md,告诉我第一行内容。n不要修改任何文件,不要安装依赖。"}]},{"type":"paragraph","attrs":{"id":"4abb73b1-1504-44ee-bfcf-71c6a917a487","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"然后逐级增加能力:"}]},{"type":"codeBlock","attrs":{"id":"3d79cdb5-a7ef-4b55-b0c5-d2d47d19bcff","language":"javascript","theme":"atom-one-dark","runtimes":0,"isHoverDragHandle":false,"key":"","languageByAi":"javascript"},"content":[{"type":"text","text":"1. 只读一个文件n2. 搜索一个符号n3. 运行一条无副作用命令n4. 修改一个临时文件n5. 执行单个测试n6. 再运行完整任务"}]},{"type":"paragraph","attrs":{"id":"7304c8f8-994c-4a01-ba96-e64915e9c66c","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"在哪一级开始失败,问题大概率就在哪一层。"}]},{"type":"heading","attrs":{"id":"6e2077ee-ddcd-44e6-8ce9-dd35c1f8e218","textAlign":"inherit","indent":0,"level":3,"isHoverDragHandle":false},"content":[{"type":"text","text":"第五步:最后才考虑换模型"}]},{"type":"paragraph","attrs":{"id":"6934df4e-4562-4192-bcad-f071b7fc7541","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"只有在下面这些情况下,换模型才真正有意义:"}]},{"type":"bulletList","attrs":{"id":"e332d39f-89b5-433b-88b8-5e9652d489cf","isHoverDragHandle":false},"content":[{"type":"listItem","attrs":{"id":"64c69a35-a896-4a5f-91d5-7d527b6c7dae"},"content":[{"type":"paragraph","attrs":{"id":"83198c28-574a-44c5-a433-978beeffa286","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"模型持续误解任务目标"}]}]},{"type":"listItem","attrs":{"id":"a1526401-ecdb-44dc-8a8d-e0b9d4439e57"},"content":[{"type":"paragraph","attrs":{"id":"52f14746-a358-4508-bab1-b852f55244dd","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"无法正确拆解复杂修改"}]}]},{"type":"listItem","attrs":{"id":"82e4cc17-b7e6-4b29-aa2a-f249de901452"},"content":[{"type":"paragraph","attrs":{"id":"1dc92ac0-b727-4e82-acae-17a74d0b0502","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"多次生成不符合 Schema 的工具参数"}]}]},{"type":"listItem","attrs":{"id":"9da5ba7b-aa2a-483b-b26a-18ea867eca4d"},"content":[{"type":"paragraph","attrs":{"id":"8b16b2c8-05e4-495f-95d2-d17b8d308086","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"面对大项目时上下文理解明显不足"}]}]},{"type":"listItem","attrs":{"id":"f296c41e-218c-4c79-9b9d-390965652925"},"content":[{"type":"paragraph","attrs":{"id":"0067471d-047c-4de9-92e8-4997a95da754","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"代码能运行,但实现质量或测试覆盖不达标"}]}]}]},{"type":"paragraph","attrs":{"id":"d9f4ec76-76c5-426c-8221-431deba44424","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"如果错误是 401、404、命令不存在或目录错误,换再贵的模型也解决不了。"}]},{"type":"horizontalRule","attrs":{"id":"eebdf606-a656-4444-a197-696e4577a26d","isHoverDragHandle":false}},{"type":"heading","attrs":{"id":"5ed5f07b-d5f0-4d9b-a3a4-f505aac8ca17","textAlign":"inherit","indent":0,"level":2,"isHoverDragHandle":false},"content":[{"type":"text","text":"五、统一API入口能解决什么,又不能解决什么"}]},{"type":"paragraph","attrs":{"id":"9888762a-2fdc-4ef4-843f-6a7db25179ef","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"说到这里,也要避免另一个误区:统一网关不是万能药。"}]},{"type":"paragraph","attrs":{"id":"4611dfaf-fc39-4495-9df2-9d805a555678","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"它适合解决的是:"}]},{"type":"bulletList","attrs":{"id":"8769f088-1597-476a-b3e0-b0f38865c4fa","isHoverDragHandle":false},"content":[{"type":"listItem","attrs":{"id":"2e1d5f69-5b4c-41f7-aa3f-0dd5b6c00756"},"content":[{"type":"paragraph","attrs":{"id":"e64ae8ae-7e4f-4f4b-88ad-699cbb7b2e95","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"多个 Key 分散管理"}]}]},{"type":"listItem","attrs":{"id":"c3c37bea-e586-4e51-856d-a955be793805"},"content":[{"type":"paragraph","attrs":{"id":"fedd2380-4461-4796-ac6c-6bc06dfa7def","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"模型切换需要反复改业务代码"}]}]},{"type":"listItem","attrs":{"id":"53518438-6437-4832-9c93-08491a5911b6"},"content":[{"type":"paragraph","attrs":{"id":"c269f1c2-447a-4fab-85ad-836631b63bb4","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"调用记录和 Token 账单分散"}]}]},{"type":"listItem","attrs":{"id":"69a1c13b-84f4-4d31-bf44-35ef9d6d2230"},"content":[{"type":"paragraph","attrs":{"id":"9f1bd2ae-3f8d-4498-856c-0ee9fb2fe7ee","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"单条线路不稳定时难以排查"}]}]},{"type":"listItem","attrs":{"id":"5797e68f-0cce-43cb-8011-965e4cb78e4d"},"content":[{"type":"paragraph","attrs":{"id":"12dab6fe-a8c1-43e1-ad28-ab39d208ee58","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"团队无法统一额度和访问策略"}]}]}]},{"type":"paragraph","attrs":{"id":"140ba312-caf2-4739-8c38-55ce0ea7eb41","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"但它不能替你解决:"}]},{"type":"bulletList","attrs":{"id":"54ca2aec-09d2-4e26-8d5f-f6054d7dbfe3","isHoverDragHandle":false},"content":[{"type":"listItem","attrs":{"id":"2af1b5ff-6f4f-4e0e-a914-7f39995da6af"},"content":[{"type":"paragraph","attrs":{"id":"aef73b8e-869a-4b99-af1f-866d93b1f083","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"本地依赖缺失"}]}]},{"type":"listItem","attrs":{"id":"e7a338a9-db6d-4874-b065-3d3d70d8722f"},"content":[{"type":"paragraph","attrs":{"id":"6fc14454-7b5d-4725-9083-6039d9d3b0ec","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"Shell 和操作系统不兼容"}]}]},{"type":"listItem","attrs":{"id":"9714ac88-66eb-4b8f-88e3-1b5556b93a7f"},"content":[{"type":"paragraph","attrs":{"id":"8b45698a-9ed6-4b39-915e-2cb578dd210b","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"项目测试本身不稳定"}]}]},{"type":"listItem","attrs":{"id":"049efe45-2076-4bda-b777-f86321ac8ff3"},"content":[{"type":"paragraph","attrs":{"id":"72ab7bec-3fe1-424d-a91b-6169a24eba55","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"Agent 权限配置错误"}]}]},{"type":"listItem","attrs":{"id":"b3e04f9f-bf12-4e7a-a33f-9749bb130a67"},"content":[{"type":"paragraph","attrs":{"id":"5c34eeee-aca1-4410-a57e-d54d6270ab1a","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"工具 Schema 设计不合理"}]}]},{"type":"listItem","attrs":{"id":"dd1dab83-ea67-4b1d-ac5d-6da718ce0862"},"content":[{"type":"paragraph","attrs":{"id":"4448f1b6-1cac-4942-ac01-79c59933eafc","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"客户端不支持目标协议"}]}]}]},{"type":"paragraph","attrs":{"id":"2d84268c-fcb4-4943-ac13-7ccbc3098253","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"尤其要注意:"},{"type":"text","marks":[{"type":"bold"}],"text":"“一个 API 接入多个模型”不等于“一个配置原生兼容所有 Coding Agent”。"}]},{"type":"paragraph","attrs":{"id":"5ea49203-8036-478a-838f-c91f62a42ed4","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"Codex、Claude Code 和 Gemini CLI 有不同的认证、协议与配置方式。网关必须实现对应客户端需要的接口,不能只把模型名称换一下,就假设三者完全互通。"}]},{"type":"paragraph","attrs":{"id":"6cc2718a-d096-438b-896d-9aafa273b550","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"这也是为什么我在 Codex 配置里明确写出 "},{"type":"text","marks":[{"type":"code"}],"text":"wire_api = "responses""},{"type":"text","text":",而不是只改一个地址就结束。"}]},{"type":"horizontalRule","attrs":{"id":"8e680b3a-06f0-4562-9188-7547c335b527","isHoverDragHandle":false}},{"type":"heading","attrs":{"id":"f0f68536-bda6-4de1-b812-731cf03f2ee2","textAlign":"inherit","indent":0,"level":2,"isHoverDragHandle":false},"content":[{"type":"text","text":"六、这3800多个Bug,真正提醒了我们什么"}]},{"type":"paragraph","attrs":{"id":"2e32cf4a-ee26-4157-bad1-1cb6f5f88422","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"AI 编程工具已经进入一个新的阶段。"}]},{"type":"paragraph","attrs":{"id":"35d62932-e491-4c28-a251-535c7e156f45","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"以前大家比的是谁更会补全代码;现在比的是谁能稳定地理解项目、规划任务、调用工具、修改文件、运行测试并交付结果。"}]},{"type":"paragraph","attrs":{"id":"d2fbd1c2-f14b-48f4-aba7-d98a6a2da657","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"模型能力当然重要,但当模型能力逐渐接近时,真正决定体验的,反而是那些不容易出现在发布会上的细节:"}]},{"type":"bulletList","attrs":{"id":"ba10ca43-968a-4ad8-83ed-9e0f29c5b719","isHoverDragHandle":false},"content":[{"type":"listItem","attrs":{"id":"14ab3a07-99fc-4af4-964a-a39be2b028eb"},"content":[{"type":"paragraph","attrs":{"id":"38dad8db-04f8-428f-92ef-d7703b7e8d3d","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"API 是否稳定"}]}]},{"type":"listItem","attrs":{"id":"2b20b91d-43a6-422d-8863-d25c75eeb04b"},"content":[{"type":"paragraph","attrs":{"id":"4f3dfb88-d7dd-4ce8-8c00-e4db42611ebd","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"协议是否完整兼容"}]}]},{"type":"listItem","attrs":{"id":"965e8301-3bd4-4da2-9959-c5d0621eecc1"},"content":[{"type":"paragraph","attrs":{"id":"49d9965b-d73a-48eb-97d7-eddf3da30845","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"工具调用能否正确落地"}]}]},{"type":"listItem","attrs":{"id":"c8b8f2ea-1b7c-41b6-a37b-abcd6f7c1cd2"},"content":[{"type":"paragraph","attrs":{"id":"11abd691-2e12-4391-bafe-c7f99de0efcf","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"失败后能否安全恢复"}]}]},{"type":"listItem","attrs":{"id":"2f999961-87bf-4309-9488-c67aea859ce2"},"content":[{"type":"paragraph","attrs":{"id":"04f1b6fc-86a3-4d71-a2fa-e0b4c32f2f4e","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"日志能否快速定位问题"}]}]},{"type":"listItem","attrs":{"id":"445d1b76-e2bd-476a-8fa0-4ff73149f274"},"content":[{"type":"paragraph","attrs":{"id":"237b0a27-2988-41e2-b26b-d739f3f19f57","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"Token 是否被无意义重试消耗"}]}]}]},{"type":"paragraph","attrs":{"id":"84e4e102-a69e-48cf-a240-165d3a31466f","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"所以,下次 Codex、Claude Code 或 Gemini CLI 又突然“犯傻”时,先别急着吐槽模型。"}]},{"type":"paragraph","attrs":{"id":"3fd02b09-5c41-43ad-8d3b-1d5ba1ad5d2e","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"先问自己三个问题:"}]},{"type":"orderedList","attrs":{"id":"399018ef-3951-4f94-9c5d-11045fc48716","start":1,"isHoverDragHandle":false},"content":[{"type":"listItem","attrs":{"id":"f74a99be-9a8a-4543-9c41-3a29ffa7aa1a"},"content":[{"type":"paragraph","attrs":{"id":"38dbe182-014b-42b9-b883-6a34156f2e90","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"请求到底有没有正确到达模型?"}]}]},{"type":"listItem","attrs":{"id":"9bb4af0d-976d-4add-bce1-79cb9c8719a2"},"content":[{"type":"paragraph","attrs":{"id":"455afefe-ceed-4e41-ae71-bca5cb2d24e7","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"模型输出有没有被客户端正确解析?"}]}]},{"type":"listItem","attrs":{"id":"3217aa18-649a-46b6-b8a5-b6e496912233"},"content":[{"type":"paragraph","attrs":{"id":"8fe0e827-5e71-4cf9-bc98-be7fe72400a0","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"工具和命令有没有在正确环境中执行?"}]}]}]},{"type":"blockquote","attrs":{"id":"39a83416-997e-4282-b43c-ac7776e5edd7","textAlign":"inherit","isHoverDragHandle":false},"content":[{"type":"paragraph","attrs":{"id":"01d45755-68d2-44af-9f8a-8344a2f3afbf","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","marks":[{"type":"bold"}],"text":"真正成熟的 Coding Agent,不是从不出错,而是每一次出错都能被定位、被恢复、被控制。"}]}]},{"type":"paragraph","attrs":{"id":"26b23e90-c09e-4ae2-8e57-96afbf35a130","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","text":"而这,可能比再换一个排行榜第一的模型,更值得开发者花时间。"}]},{"type":"horizontalRule","attrs":{"id":"07f4d390-2462-4bb2-bdc9-4ffafa1d7fd9","isHoverDragHandle":false}},{"type":"heading","attrs":{"id":"3f52fc56-4708-4c42-b62c-cb84b73f56e7","textAlign":"inherit","indent":0,"level":2,"isHoverDragHandle":false},"content":[{"type":"text","text":"参考资料"}]},{"type":"orderedList","attrs":{"id":"03b99448-e175-42e5-9aee-f72885de342d","start":1,"isHoverDragHandle":false},"content":[{"type":"listItem","attrs":{"id":"0cd6af21-3839-440c-b400-72f03b2c60fc"},"content":[{"type":"paragraph","attrs":{"id":"93d17dcf-84cf-4785-a6bf-7dff105aeec2","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","marks":[{"type":"link","attrs":{"href":"https://arxiv.org/abs/2603.20847","target":"_blank","rel":"noopener noreferrer nofollow","class":null}}],"text":"Engineering Pitfalls in AI Coding Tools: An Empirical Study of Bugs in Claude Code, Codex, and Gemini CLI"}]}]},{"type":"listItem","attrs":{"id":"3ef073e4-c491-4df2-845c-d36021ab3c5e"},"content":[{"type":"paragraph","attrs":{"id":"499c34c0-6b29-42cd-87df-582baf9757ec","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","marks":[{"type":"link","attrs":{"href":"https://learn.chatgpt.com/docs/config-file/config-reference","target":"_blank","rel":"noopener noreferrer nofollow","class":null}}],"text":"OpenAI 官方 Codex Configuration Reference"}]}]},{"type":"listItem","attrs":{"id":"b1f48503-2989-417f-9215-3393404e58bf"},"content":[{"type":"paragraph","attrs":{"id":"0b4ef103-ca9d-4d35-b7fa-ebac334ccd8f","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","marks":[{"type":"link","attrs":{"href":"https://docs.anthropic.com/en/docs/claude-code/llm-gateway","target":"_blank","rel":"noopener noreferrer nofollow","class":null}}],"text":"Anthropic 官方 Claude Code LLM Gateway Configuration"}]}]},{"type":"listItem","attrs":{"id":"4f7c68af-bcba-4eb2-a5e2-4c5e5208971b"},"content":[{"type":"paragraph","attrs":{"id":"e4f1285b-7da1-4857-840d-ea17ae9076c4","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false},"content":[{"type":"text","marks":[{"type":"link","attrs":{"href":"https://github.com/google-gemini/gemini-cli/blob/main/docs/get-started/authentication.mdx","target":"_blank","rel":"noopener noreferrer nofollow","class":null}}],"text":"Google Gemini CLI Authentication Setup"}]}]}]},{"type":"paragraph","attrs":{"id":"6d110da3-a333-4871-b8e0-79bfd30fe61f","textAlign":"inherit","indent":0,"color":null,"background":null,"isHoverDragHandle":false}}]}","createTime":1786346996,"ext":{"closeTextLink":0,"comment_ban":0,"description":"","focusRead":0},"favNum":0,"html":"","isOriginal":0,"likeNum":0,

img_6a8c3d3ae0c3830.webp

相关文章

精彩推荐