内容简介
《模型作为组件:契约、失效模式与选型》是一组共六篇的系列文章,是《AI 应用工程师学习地图》第一层(L1)的正文。它面向有后端工程基础、准备在模型 API 之上做产品的工程师,回答一个看起来简单的问题:当你把一个大模型当作系统里的一个组件时,这个组件的规格书是什么?
后端工程师熟悉的组件都有规格书。数据库有隔离级别与一致性保证,消息队列有投递语义(至多一次、至少一次),HTTP 服务有状态码与幂等性约定。这些规格书告诉你组件在什么条件下做什么、怎么失败、失败了你该怎么办。大模型 API 没有这样一份文档——供应商的 API 文档告诉你字段怎么填,不告诉你同一个输入两次调用为什么返回不同的东西、它什么时候会自信地编造、你在第 300K 个 token 放进去的信息它为什么找不到、一次调用花的钱为什么随着对话轮数平方增长、供应商在你没改一行代码的情况下把你的模型换成了另一个。这份规格书要应用工程师自己写。本系列就是这份规格书的写法。
它回答的问题是:
模型这个组件的契约是什么?它以哪些方式失效?花多少钱、多慢?怎么在几十个候选里选一个?调用它的客户端要处理哪些其他第三方服务没有的失败?
答案分五部分。失效模式(第一篇):非确定性、幻觉、指令遵循不稳、上下文长度带来的”中间遗忘”与”上下文腐化”、知识截止、对 prompt 微小改动的敏感——每一条都不是 bug,是这类组件的固有性质,后面六层的每一种工程手段都是对其中某一条的应对。API 契约(第二、三篇):消息与角色、工具调用、结构化输出、流式、多模态输入,以及推理模型带来的新维度——thinking / effort、跨轮保留的推理状态——这些在 OpenAI、Anthropic、Google、DeepSeek 四家的 API 里已经收敛成一套共同骨架,差异在细节,而细节决定成本与正确性。成本与延迟的账(第四篇):按 token 计费的四种价格(输入、缓存命中、缓存写入、输出)、批处理与峰谷折价、长上下文的加价门限、首 token 延迟与逐 token 速度的来源——这是后面 L6 做成本与延迟优化的账本。选型(第五篇):为什么公开榜单不能直接用来选模型、怎样用自己的评测集选、闭源 API 与开源自托管的判据、大小模型分流、embedding 与 rerank 的选法,以及供应商的弃用周期怎样进入你的选型决策。客户端工程(第六篇):重试、超时、幂等、限流、流式解析、token 计数——与调用任何不稳定的第三方服务相同的部分,和模型 API 独有的失败类型(内容过滤、上下文超限、工具调用格式错、推理超预算)。
系列的组织原则是先知道病,再学药:L2 到 L6 的每一种工程手段——上下文工程、检索、评测、guardrails、网关——都是对第一篇某一条失效模式的应对。读完本系列,读者应该能对一个模型 API 写出一份像数据库文档那样的组件规格:它保证什么、不保证什么、失败的形态、每次调用的成本区间,以及替换它的代价。
为什么写这个系列?
“五行代码调用一个模型”是这一层最大的误导
调用一个模型 API 确实只要五行代码。这让”AI 应用开发”看起来是所有 AI 方向里门槛最低的一个,也让很多团队在第六行之后撞墙:demo 里模型回答得很好,上线后用户抱怨它”有时候说错”;测试时每次调用一秒,上线后 p99 十几秒;第一个月账单是预算的三倍,而且找不到钱花在哪;供应商一封邮件通知某个模型三个月后下线,而这个模型名硬编码在十几个服务里。这些问题没有一个是”模型不够聪明”,全部是把模型当作确定性组件来用的后果。
2026 年的几起公开事件把这个代价写得很清楚。德国哈姆高等地区法院 5 月判决一家诊所对其网站聊天机器人编造的医生专科资质负责——”是 AI 说的”不构成抗辩;慕尼黑地区法院同月要求 Google 停止其 AI Overview 对一家出版社的虚假指控。4 月,一家汽车租赁 SaaS 公司的生产数据库被一个 coding agent 在 9 秒内连同备份一起删除,起因是 agent 在一个无关文件里找到了一个权限过宽的 API token 并”猜测”删除操作只作用于 staging。7 月,OpenAI 自己的一群处于测试中的 agent 为完成一个网络安全评测任务,入侵了 Hugging Face 的生产基础设施并试图掩盖痕迹,OpenAI 因此暂停了两周的 RL 训练并推迟了下一代模型。这些事件的共同点是:组件的失效模式是已知的,出事的系统没有为它们设计。
契约正在收敛,但每年都在变
好消息是,模型 API 的契约在 2024–2026 年间已经收敛:四家主要供应商的接口都是”消息列表进、消息出”,都有工具调用、结构化输出、流式、prompt caching,OpenAI 兼容格式成了事实标准(DeepSeek 同时提供 OpenAI 格式、Anthropic 格式与 Responses 格式的端点;vLLM 等自托管引擎提供同一接口)。学一次,处处可用。
坏消息是,契约的细节每年都在变,而且变化直接影响正确性与成本。2026 年内:OpenAI 于 8 月 26 日关闭了 Assistants API,Responses API 成为推荐入口,Chat Completions 从 GPT-5.4 起不再支持带 reasoning_effort 的工具调用;Anthropic 的 Claude Sonnet 5(6 月 30 日)把 adaptive thinking 改为默认开启、拒绝非默认的 temperature / top_p / top_k(返回 400)、并换了一个对同样文本多产出约 30% token 的 tokenizer;Claude Fable 5.1(9 月 1 日)让强制工具调用返回错误、让旧模型无法读取它的 thinking block;Google 的 Interactions API 于 6 月 GA 并把 outputs 改成 steps、删掉 response_mime_type(旧 schema 6 月 8 日移除);DeepSeek 于 9 月 10 日发布 V4.1 Flash 并宣布从 9 月 14 日起把所有 deepseek-v4-pro 的请求路由到 V4.1 Flash——模型名不变,模型换了。一个把模型当作稳定组件的应用,在这一年里至少要经历四次”没改代码但行为变了”。本系列讲的是这些变化背后不变的结构,以及怎样让你的应用对变化免疫。
现有材料的断层
- 供应商文档按字段组织,讲”怎么填”,不讲”为什么”与”什么时候会坏”;四家文档各说各的,没有一份把共同骨架抽出来;
- prompt 工程教程教你写更好的 prompt,把模型的失效当作 prompt 没写好——但非确定性、上下文腐化、知识截止不是 prompt 能解决的;
- 框架文档(LangChain、各家 Agent SDK)把模型包成一个
llm.invoke(),正好把契约的细节——缓存前缀、推理状态、计费的四种 token——藏起来,账单与 bug 从被藏起来的地方冒出来; - 学术论文(Lost in the Middle、NoLiMa、RULER、Context Rot、The Leaderboard Illusion、Defeating Nondeterminism)各自精确地刻画了一种失效或一种失真,但没有人把它们翻译成”你的应用该怎么设计”。
本系列想填补的是从”能调通一个 API”到”能为一个模型写出组件规格书、算清每次调用的账、在供应商换模型的当天知道”之间的那段路。
适合哪些读者?
准备做第一个 AI 应用的后端工程师
你熟悉服务、数据库、API 与部署,第一次把一个模型接进系统。本系列告诉你这个组件与你用过的所有组件在哪里不同:它不确定、会编造、按 token 计费、有上下文上限、供应商会换它。读完你会知道该在设计里预留什么。
已经上线一个 AI 应用、被账单或 bug 困扰的工程师
demo 到产品之间的那些问题——为什么有时候答错、为什么慢、为什么贵、为什么换了模型版本效果变差——本系列把它们归到失效模式与契约的具体条目上,每一条都有对应的检测手段与后续层的应对。
要做模型选型决策的技术负责人
第五篇专讲选型:榜单为什么不能直接用、评测集怎么从几十条开始、闭源与开源的判据、大小模型分流的账。第四篇给出四家当前价目的对照与一次调用的成本公式。
算法与 Infra 工程师
你造模型或跑模型,想知道你的产出在应用侧被怎样使用、评测与反馈从哪里来。第一篇的失效模式与第四篇的成本账把算法侧的”能力”与 Infra 侧的”吞吐 / 延迟”翻译成了应用侧的”可靠性”与”每任务成本”。
系列的整体主线
系列有一条明确的主线:组件观——把模型当作一个有明确契约与失效模式的组件,而不是一个聪明的黑盒。六篇沿这条主线从”它怎么坏”走到”怎么调用它”:
| 篇 | 主题 | 建立的东西 | 后面哪一层用它 |
|---|---|---|---|
| 1 | 失效模式 | 一张失效模式表:非确定性、幻觉、指令遵循、上下文长度、知识截止、prompt 敏感、自主行为的越界 | L2–L6 的每种手段都是对其中一条的应对 |
| 2 | API 契约(一) | 四家 API 的共同骨架:消息与角色、工具调用、结构化输出、流式、多模态输入、状态管理 | L2 上下文工程、L4 工具与 Agent |
| 3 | API 契约(二) | 推理模型的新维度:thinking / effort、推理 token 的计费、跨轮保留的推理状态与它对缓存的影响 | L4 Agent 循环、L6 成本 |
| 4 | 成本与延迟 | 一次调用的成本公式与延迟分解;四家价目的对照;缓存、批处理、峰谷、长上下文加价 | L6 成本与延迟优化 |
| 5 | 选型 | 榜单的失真机制;用自己的评测集选;闭源 vs 开源、大小分流、embedding / rerank;弃用周期 | L5 评测、L6 发布 |
| 6 | 客户端工程 | 重试、超时、幂等、限流、流式解析、token 计数、错误分类 | L6 生产化、L4 运行时 |
三条贯穿全系列的线:
- 每一条失效模式对应一种工程应对。 非确定性 → 评测要跑多次、看分布(L5);幻觉 → 检索与引用(L3)、guardrails(L5);上下文腐化 → 上下文预算与压缩(L2);知识截止 → 检索与工具(L3、L4);自主行为越界 → 权限与沙箱(L4)。第一篇建立这张对应表,后面几层填内容。
- 契约的每一项都有成本含义。 消息的排列决定缓存能不能命中;工具定义放在哪里决定前缀是否稳定;thinking 的 effort 决定输出 token 数;结构化输出注入的 schema 也算 token。第二、三篇讲契约时同时标出它在第四篇账上的位置。
- 供应商会变,应用要对变化免疫。 模型名要可配置、版本要钉住、评测集要能在供应商发通知的当天跑出回归、客户端要能在一个模型下线时切到替代模型。第五、六篇讲怎样做到。
章节结构与分章导读
1. 失效模式:把”模型会出错”拆成七条可检测的性质
核心问题:同一个输入两次调用为什么结果不同?temperature = 0 为什么也不行?模型什么时候会自信地编造?为什么放在上下文中间的信息更容易被忽略?
第一篇建立整个系列的基础:一张失效模式表。每一条给出机制(为什么会这样)、证据(论文或公开事件里的数字)、检测(怎么在自己的系统里发现它)与应对所在的层。非确定性一条讲清楚 Thinking Machines 2025 年的结论——LLM 推理端点的非确定性主要来自 batch 不变性的缺失而不是浮点并发,所以 temperature = 0 也不能保证复现,你的评测必须按分布而不是按单次;幻觉一条从 Mata v. Avianca(2023)到 Deloitte 澳大利亚报告退款(2025)到哈姆法院判决(2026)梳理”自信地编造”在不同产品形态下的代价;上下文长度一条把 Lost in the Middle、RULER、NoLiMa、Context Rot 四项研究的结论汇成一句可操作的话——标称上下文长度与有效上下文长度是两个数,NoLiMa 里 11 个模型在 32K 处掉到短上下文基线的一半以下;自主行为一条用 PocketOS 的 9 秒删库与 OpenAI agent 入侵 Hugging Face 两个事件说明:当组件能执行动作时,失效模式从”说错”变成”做错”,应对从输出检查变成权限设计。
2. API 契约(一):消息、工具、结构化输出、流式——四家 API 的共同骨架
核心问题:OpenAI、Anthropic、Google、DeepSeek 的 API 有哪些共同结构?工具调用的一轮往返在协议上是怎样的?结构化输出保证了什么、没保证什么?流式的事件模型是什么?
第二篇把四家 API 放在一张表上:消息与角色(system / user / assistant / tool)、多模态内容块、工具定义与工具调用的往返(模型返回 tool_call → 应用执行 → 把结果作为 tool 消息送回 → 模型继续)、结构化输出(JSON schema 约束解码 vs 仅提示)、流式(SSE 的事件类型与增量拼接)、状态管理(无状态的 Chat Completions / Messages vs 服务端存状态的 Responses / Interactions)。重点讲三件文档不强调的事:工具调用是一个协议而不是一个功能——tool_call_id 的配对、并行工具调用的顺序、工具结果的截断都在应用侧;结构化输出的”strict”保证的是语法不是语义——schema 合法的 JSON 可以填满编造的值;服务端状态的默认值——Responses 默认存 30 天、Chat Completions 对新账户也默认存,隐私敏感的迁移要显式 store: false。附 2026 年内四家契约的变更清单:Assistants API 的关闭、Interactions API 的 outputs → steps、Sonnet 5 拒绝采样参数、Fable 5.1 拒绝强制工具调用。
3. API 契约(二):推理模型——thinking、effort 与跨轮的推理状态
核心问题:推理模型的”思考”在 API 上是什么?effort 参数控制什么、花多少钱?thinking block 为什么要原样送回?它对 prompt caching 有什么影响?
2026 年,四家的主力模型都是推理模型,而且”思考”的控制方式在收敛:OpenAI 的 reasoning.effort(low 到 xhigh、max)、Anthropic 的 effort(low 到 max)配 adaptive thinking、Google 的 thinking_level(low / medium / high)、DeepSeek 的 thinking mode 配 low / high / max。第三篇讲这一维度的四个后果:计费——思考 token 按输出价计费,Gemini 的价目表明写”output(including thinking tokens)”,一个 max effort 的调用可以比 low 贵一个量级;延迟——思考发生在首 token 之前,effort 直接决定 TTFT;状态——Anthropic 要求把上一轮的 thinking block 原样送回,Fable 5.1 起还校验它之前的内容没有被改动(改了返回 400 或丢弃),OpenAI 的 Responses 用 reasoning item 跨轮保留推理、ZDR 下用加密 item,Google 用 thought signature——这意味着”编辑历史消息”这个在 Chat Completions 时代随意的操作现在有了约束;默认值的迁移风险——Sonnet 5 与 Opus 5 把 thinking 改为默认开启,同样的请求在新模型上多出思考 token,max_tokens 的含义随之变化。
4. 成本与延迟的账:一次调用花多少钱、慢在哪一段
核心问题:一次调用的成本公式是什么?四家当前的价目差多少?缓存写入为什么要额外收费、什么时候划算?为什么多轮对话的成本是二次增长?TTFT 与逐 token 速度各由什么决定?
第四篇是这一层的账本。成本公式:\(C = n_{\text{in}} p_{\text{in}} + n_{\text{hit}} p_{\text{hit}} + n_{\text{write}} p_{\text{write}} + n_{\text{out}} p_{\text{out}}\),四种 token 各有价格。四家 2026 年 9 月的价目放在一张表上——GPT-6 Astra $10 / $50、GPT-5.6 Sol $4 / $20、Terra $2 / $12、Luna $0.20 / $1.20;Claude Fable 5.1 $10 / $50、Opus 5 $5 / $25、Sonnet 5 $2 / $10、Haiku 4.5 $1 / $5;Gemini 3.8 Flash $0.75 / $3.75(2026 年内的引入价,2027 年起翻倍);DeepSeek V4.1 Flash 闲时 $0.15 / $0.60、缓存命中 $0.003——跨度三个量级,而输出价普遍是输入价的 4–5 倍。然后讲账上的每一项:缓存命中的折价(OpenAI 与 Anthropic 0.1×,Fable 5.1 0.025×,DeepSeek 0.02×)与缓存写入的加价(OpenAI GPT-5.6 起 1.25×,Anthropic 5 分钟 1.25× / 1 小时 2×)的收支平衡点;批处理的 50% 折价与 24 小时时限;DeepSeek 的峰谷定价(UTC 01–04、06–10 为峰,价格翻倍);长上下文的加价门限(OpenAI 272K 以上输入 2×、输出 1.5×,Gemini 3.1 Pro 200K 以上翻倍);多轮对话不做缓存时成本随轮数二次增长的推导。延迟部分把 TTFT 分解为排队 + prefill + 思考,逐 token 速度归到 decode 的 memory-bound 性质(只需要 Infra 地图 08 系列前两篇的结论)。
5. 选型:榜单、评测集与供应商的弃用周期
核心问题:为什么不能按榜单选模型?自己的评测集要多大才能做选型?闭源 API 与开源自托管怎么判断?大小模型分流的账怎么算?供应商的弃用周期怎样进入选型?
第五篇从”榜单为什么失真”开始:The Leaderboard Illusion(NeurIPS 2025)审计了 Chatbot Arena——一家供应商在 Llama 4 发布前私测了 27 个变体、只公布最好的分数,闭源模型获得的对战数据远多于开源模型,Arena 分数因此测量的是”对 Arena 分布的过拟合”而不是通用能力;静态 benchmark 则有污染问题——训练数据里包含了测试题。结论是榜单用来缩小候选范围,选型用自己的评测集,几十条真实问题就能开始,几百条能看趋势。然后是判据:闭源 vs 开源自托管(数据不能出域、规模到了自托管更便宜的临界点、需要开源模型的特定能力——这些判断的成本一半在 Infra 地图 08 / 11),推理 vs 非推理模型、大小模型分流(用小模型处理简单请求,路由的准确率与省下的钱),embedding 与 rerank 的选法(MTEB 的局限、语言与领域、维度与延迟)。最后一节讲弃用周期作为选型维度:OpenAI 2026 年 4 月与 6 月两轮通知共下线二十多个模型快照(7 月 23 日、10 月 23 日、12 月 11 日三批),Anthropic 承诺每个模型至少一年不退役,DeepSeek 在 4 天预告后把 V4-Pro 的流量整体路由到 V4.1 Flash;选型时要问”这个模型名钉住的是什么、供应商能在多短时间内换掉它”。
6. 客户端工程:重试、超时、幂等、限流与流式解析
核心问题:调用模型 API 的客户端要处理哪些失败?重试什么、不重试什么?流式响应中途断了怎么办?怎样在发请求前就知道它会不会超上下文?
第六篇讲调用侧的工程。与调用任何不稳定第三方服务相同的部分:指数退避加抖动的重试、Retry-After 与限流头(x-ratelimit-*、anthropic-ratelimit-*)、超时的分层(连接、首字节、总时长)、幂等键、熔断与降级;模型 API 独有的部分:错误分类(限流 429、过载 529 / 503、上下文超限 400、内容过滤、工具调用格式错、推理超预算),哪些可以重试、哪些重试只会再花一次钱;流式解析(SSE 的增量拼接、工具调用参数的分片拼接、中途断开后的处理——不能从中间续,只能重发并接受成本);token 计数(tiktoken 与各家 count_tokens 端点、Sonnet 5 换 tokenizer 后同样文本多 30% 的教训、把计数放在发请求之前而不是收到 400 之后);以及限流的两个维度(RPM 与 TPM)和使用层级(OpenAI 的 tier、Anthropic 的 Start / Build / Scale)对容量规划的含义。
7. 系列总结与通关自测
最后一篇不引入新内容:一张总表回顾六篇各自回答的问题与必记的数字,逐篇的核心结论与常见误解,贯穿全系列的几条线,然后是三段自测——判断与计算、跨篇综合、面试题——加一份”读过 / 掌握 / 能教人”的判据。读完六篇正文再做。
贯穿全系列的实践线
本系列不设配套实验(应用地图的系列都不做 labs)。每篇末尾有一节实践建议,给出可以直接在自己的项目里做的事:
| 篇 | 实践建议的内容 |
|---|---|
| 1 | 给你的应用写一份失效模式清单:每一条失效在你的场景里的代价、目前的检测手段、应对所在的层 |
| 2 | 用一个中间层把四家 API 的差异收在一处;把工具调用的往返写成显式循环而不是交给框架;把 store 的默认值写进代码审查清单 |
| 3 | 在评测集上跑 effort 的每一档,记录质量 / 成本 / TTFT 三条曲线;检查你的历史编辑逻辑是否会破坏 thinking block 的校验 |
| 4 | 用本篇的公式给你的应用建一张成本表:每种请求类型的四类 token 数与单价;算出缓存前缀的收支平衡点;用 usage 字段核对账单 |
| 5 | 从真实流量采 50 条建评测集;订阅四家的弃用通知;把模型名从代码里挪到配置里并加上替代模型 |
| 6 | 审计客户端的重试策略(哪些错误码、退避参数、幂等);在发请求前计数 token;给流式响应加中断处理 |
前置要求与说明
前置要求
- 后端工程基础:HTTP、JSON、异步 I/O、重试与超时这些概念不需要解释;
- 调过至少一次任何一家的模型 API;
- 不要求机器学习背景。涉及模型内部的地方只引用结论,并给出到《Transformer 与 LLM》系列的链接。
版本与价目基线
本系列的 API 字段、模型名与价目以 2026 年 9 月下旬各家的公开文档为准:
| 供应商 | 模型(发布日) | API 入口 | 备注 |
|---|---|---|---|
| OpenAI | GPT-6 Astra(2026-09-03)、GPT-5.6 Sol / Terra / Luna(2026-07-09) | Responses API(推荐)、Chat Completions(维持) | Assistants API 已于 2026-08-26 关闭;Agents API 2026-09-10 公测 |
| Anthropic | Claude Fable 5.1(2026-09-01)、Opus 5(2026-07-24)、Sonnet 5(2026-06-30)、Haiku 4.5(2025-10) | Messages API | 5 系列 1M 上下文默认、128K 最大输出、adaptive thinking 默认开启 |
| Gemini 3.8 Flash(2026-09-02)、Gemini 3.1 Pro(preview) | Interactions API(2026-06 GA,推荐)、generateContent(维持) |
3.8 Flash 引入价至 2026-12-31 | |
| DeepSeek | DeepSeek-V4.1-Flash(2026-09-10,MIT 开放权重) | OpenAI 格式、Anthropic 格式、Responses 格式三种兼容端点 | V4-Pro 自 2026-09-14 起路由到 V4.1 Flash |
价目会变,本系列引用时都标注”2026 年 9 月价目页”。文中的成本计算以公式为主,数字是代入当时价目的示例;读者应代入自己读到本文时的价目重算。论文与研究报告引用其发表版本:Lost in the Middle(2023)、RULER(2024)、NoLiMa(2025)、Context Rot(Chroma,2025)、The Leaderboard Illusion(NeurIPS 2025)、Defeating Nondeterminism in LLM Inference(Thinking Machines,2025)。公开事件以法院判决书、当事方声明与主流媒体报道为据。
章节目录
- 失效模式:非确定性、幻觉、上下文与越界——把”模型会出错”拆成七条可检测的性质
- API 契约(一):消息、工具调用、结构化输出与流式——四家 API 的共同骨架
- API 契约(二):推理模型——thinking、effort 与跨轮的推理状态
- 成本与延迟的账:一次调用花多少钱、慢在哪一段
- 选型:榜单的失真、自己的评测集与供应商的弃用周期
- 客户端工程:重试、超时、幂等、限流与流式解析
- 系列总结与通关自测
最终目标
读完本系列,面对任何一个模型 API,读者应该能够:
| 追问 | 答案来自 |
|---|---|
| 这个组件在我的场景里会以哪几种方式失效?每种的代价与检测手段是什么? | 第一篇 |
| 一次工具调用的往返在协议上经过哪几步?哪些配对与截断是我的责任? | 第二篇 |
| 结构化输出的 strict 保证了什么?没保证什么? | 第二篇 |
把 effort 从 high 调到 low,成本、延迟、质量各怎么变?怎么测? |
第三篇 |
| 为什么不能随意编辑历史消息?改了会怎样? | 第三篇 |
| 这次调用花了多少钱?四类 token 各多少?缓存有没有命中? | 第四篇 |
| 多轮对话第 20 轮的成本是第 1 轮的多少倍?缓存能把它降到多少? | 第四篇 |
| 为什么榜单第一的模型在我的任务上不如第五?该怎么选? | 第五篇 |
| 供应商通知模型三个月后下线,我该在哪一天知道、做什么? | 第五篇、第六篇 |
| 哪些错误该重试、哪些重试只是再花一次钱?流式中断怎么处理? | 第六篇 |
| 发请求前怎么知道它会不会超上下文?换了模型 token 数为什么变了? | 第六篇 |
这份能力就是这一层要建立的组件观。有了它,L2 到 L7 的每一种工程手段都有了明确的目标:它在对付第一篇的哪一条失效、它在第四篇的账上换的是什么。
本文由 arganzheng 创作,采用 CC BY 4.0 许可协议。在保留原文作者、署名以及完整原文链接(https://arganzheng.life/model-as-a-component.html)的前提下,欢迎各种形式的转载、翻译或商业引用。
COMMENTS
评论存放在 GitHub Discussions, 用 GitHub 账号登录即可发表,支持 Markdown。 想针对正文某句话说?选中那段文字,点浮出的「评论」即可划线评论;觉得哪里写错了,发表时勾上「同时提交 Issue」。 有人回复你时 GitHub 会按你的通知设置发邮件,不用守在这里。