<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>软件责任 on Lingming 灵明</title><link>https://lingming.blog/tags/%E8%BD%AF%E4%BB%B6%E8%B4%A3%E4%BB%BB/</link><description>Recent content in 软件责任 on Lingming 灵明</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Tue, 21 Jul 2026 23:04:10 -0400</lastBuildDate><atom:link href="https://lingming.blog/tags/%E8%BD%AF%E4%BB%B6%E8%B4%A3%E4%BB%BB/index.xml" rel="self" type="application/rss+xml"/><item><title>黑箱转向（七）：AI 生成代码出错，谁负责</title><link>https://lingming.blog/posts/2026/the-ethics-of-the-black-box/</link><pubDate>Sat, 07 Mar 2026 17:38:13 -0500</pubDate><author>Lingming</author><guid>https://lingming.blog/posts/2026/the-ethics-of-the-black-box/</guid><description>AI 生成代码模糊了文本作者，却不会让责任自动转移给模型或生成过程。本文区分作者身份、版权、来源证据、专业问责与法律责任，分析工程师、组织、工具供应商和模型提供者在不同控制范围内的责任，并给出兼顾审计与隐私的生成记录方案。</description><content:encoded>&lt;p>代码代理生成了一段身份验证逻辑，工程师审查后合并，企业部署到生产，攻击者随后利用其中的权限绕过漏洞。谁负责？&lt;/p>
&lt;p>回答“模型写的”过于简单；回答“最后点合并的人承担一切”也同样简单。&lt;a href="https://lingming.blog/posts/2026/the-new-engineer-from-coder-to-constraint-designer/">上一篇&lt;/a>说明工程师的任务正在扩展到约束和验证。本篇进一步区分几种经常被混在一起的责任问题。&lt;/p>
&lt;p>以下讨论用于工程与治理分析，不构成特定法域的法律意见。&lt;/p>
&lt;h2 id="先拆开五个不同问题">先拆开五个不同问题&lt;/h2>
&lt;h3 id="文本作者是谁">文本作者是谁&lt;/h3>
&lt;p>这关乎一段表达如何产生。AI 可能生成初稿，人类选择、修改和组合，团队又通过模板、测试和代码审查影响最终形态。“作者”在事实层面可能是分布式的。&lt;/p>
&lt;h3 id="版权归谁">版权归谁&lt;/h3>
&lt;p>版权是法律问题，取决于法域、人的创造性贡献、合同和具体制品。它不能仅凭 Git 提交者或模型名称决定，也不等同于事故责任。&lt;/p>
&lt;h3 id="制品从哪里来">制品从哪里来&lt;/h3>
&lt;p>来源记录关心模型、输入、依赖、工具、构建环境和批准过程。它提供证据，帮助复现与调查，但记录本身不会承担道德或法律责任。&lt;/p>
&lt;h3 id="谁应当解释和纠正">谁应当解释和纠正&lt;/h3>
&lt;p>这是组织问责。谁有决策权、谁能停止系统、谁掌握资源、谁应通知受影响者？答案通常落在团队与机构的职责设计，而不是某个词的作者身份。&lt;/p>
&lt;h3 id="谁承担法律责任">谁承担法律责任&lt;/h3>
&lt;p>产品责任、合同责任、过失、监管义务和雇佣关系会给出不同答案。它们取决于控制能力、可预见性、注意义务、产品角色和损害类型，不能从“代码由 AI 生成”直接推出。&lt;/p>
&lt;p>把五者分开以后，所谓“作者消失导致责任真空”就不再成立。文本来源可能模糊，责任仍可以沿控制、受益和义务进行分配。&lt;/p>
&lt;h2 id="模型不是可以被追责的组织主体">模型不是可以被追责的组织主体&lt;/h2>
&lt;p>当前代码模型不能被罚款、赔偿受害者、修订公司流程或接受职业处分。把错误归给“AI”只能描述因果链中的一个工具节点，不能完成规范分配。&lt;/p>
&lt;p>同样，责任也不能“依附于生成过程本身”。流程可以强制留痕、阻止发布和提供调查证据，但只有人和法律组织能够承担义务并采取补救行动。&lt;/p>
&lt;p>更有用的问题是：&lt;/p>
&lt;ul>
&lt;li>谁选择了工具并决定适用场景？&lt;/li>
&lt;li>谁设定了权限、数据和审查门槛？&lt;/li>
&lt;li>谁批准发布并从系统中受益？&lt;/li>
&lt;li>谁最有能力发现、预防和纠正风险？&lt;/li>
&lt;li>工具或模型供应商作出了哪些安全与能力承诺？&lt;/li>
&lt;li>哪一方违反了适用合同、专业规范或法律义务？&lt;/li>
&lt;/ul>
&lt;p>这些问题可能把责任分配给多方，而不是寻找唯一作者。&lt;/p>
&lt;h2 id="一条责任链怎样展开">一条责任链怎样展开&lt;/h2>
&lt;p>回到身份验证漏洞的例子。&lt;/p>
&lt;p>&lt;strong>开发与审查人员&lt;/strong>需要按组织约定检查高风险鉴权变化，不能把模型输出当作可信来源。如果变更巨大、证据不足，工程师有责任缩小范围或拒绝合并。但个人责任应与其权限、时间、培训和组织压力相称。&lt;/p>
&lt;p>&lt;strong>部署组织&lt;/strong>决定把系统用于真实用户，设置开发流程、资源和风险容忍度，通常也最有能力监控、停止服务、通知用户和补救损害。它不能仅用“员工用了第三方模型”解除自己的治理责任。&lt;/p>
&lt;p>&lt;strong>AI 工具供应商&lt;/strong>可能对数据处理、产品安全、能力说明和合同保证承担责任。如果产品在合理预见的使用中隐瞒重大限制或引入供应链风险，不能自动以“只是工具”结束分析。&lt;/p>
&lt;p>&lt;strong>基础模型提供者&lt;/strong>对下游具体应用的控制较弱，但仍可能对模型开发、文档、系统性风险和适用监管义务负责。责任范围需要按具体产品关系判断。&lt;/p>
&lt;p>&lt;strong>开源或第三方组件维护者&lt;/strong>也可能进入因果链，但“代码被训练数据包含”本身不意味着原作者对后来生成的漏洞负责。&lt;/p>
&lt;p>责任链因此是控制结构，不是 Git blame 的放大版。&lt;/p>
&lt;h2 id="生成代码与运行时模型需要不同审计">生成代码与运行时模型需要不同审计&lt;/h2>
&lt;p>如果 AI 只在开发阶段生成普通源代码，安全分析的主要对象仍是最终制品：代码、依赖、构建结果和部署配置。研究模型内部特征通常不能替代静态分析、测试和审查。&lt;/p>
&lt;p>如果大模型在生产环境中直接生成答案、做分类或调用工具，模型版本、系统提示、检索数据、解码设置、评测结果和运行事件才成为产品行为的重要组成部分。此时只审查外层代码又明显不够。&lt;/p>
&lt;p>如果代理会在运行时修改并执行代码，还要记录每次授权、工具调用、沙箱边界、制品摘要和外部副作用。&lt;/p>
&lt;p>三种场景使用同一个“AI 可解释性”标签，会把审计资源投错地方。&lt;/p>
&lt;h2 id="生成记录应该保存什么">生成记录应该保存什么&lt;/h2>
&lt;p>一个可调查的证据链可以包括：&lt;/p>
&lt;ul>
&lt;li>工具与模型的明确版本；&lt;/li>
&lt;li>仓库、依赖和输入制品的版本或摘要；&lt;/li>
&lt;li>生成任务和关键约束；&lt;/li>
&lt;li>输出 diff 及其后续人工修改；&lt;/li>
&lt;li>审查者、批准者和例外决定；&lt;/li>
&lt;li>自动测试、静态分析与安全扫描结果；&lt;/li>
&lt;li>构建环境、制品摘要和部署记录；&lt;/li>
&lt;li>运行监控、回退和事故处置记录。&lt;/li>
&lt;/ul>
&lt;p>SLSA 把 provenance 定义为说明制品怎样生成的证明性元数据，包括构建平台和外部参数。这个思路比保存一段聊天截图更可靠：记录应绑定具体制品，能够校验完整性，并区分受信与不受信来源。&lt;/p>
&lt;h2 id="不要无条件保存全部-prompt">不要无条件保存全部 prompt&lt;/h2>
&lt;p>Prompt 和上下文可能包含源码、密钥、客户数据、个人信息与安全细节。为了审计而永久保存一切，会制造新的隐私和攻击面。&lt;/p>
&lt;p>更稳妥的策略是：&lt;/p>
&lt;ol>
&lt;li>先按任务风险决定记录粒度和保留期限。&lt;/li>
&lt;li>对密钥与个人数据进行禁止、脱敏或隔离。&lt;/li>
&lt;li>能用版本号和加密摘要证明的内容，不重复存储完整副本。&lt;/li>
&lt;li>限制日志访问，并记录谁查看过审计材料。&lt;/li>
&lt;li>把关键设计理由提炼进版本化决策记录，不依赖冗长对话。&lt;/li>
&lt;li>明确哪些数据会发送给第三方模型和保留多久。&lt;/li>
&lt;/ol>
&lt;p>可追溯性本身也必须接受最小化和权限控制。&lt;/p>
&lt;h2 id="模型为什么这样写不是可靠免责证据">“模型为什么这样写”不是可靠免责证据&lt;/h2>
&lt;p>让模型事后解释一段代码可能帮助审查，但生成的解释不保证忠实重现当时内部计算。即使保存了模型输出的推理文本，它也更像一项待核验说明，而不是决定性因果记录。&lt;/p>
&lt;p>事故调查更应关注可验证链条：输入了什么，产生了哪个制品，谁修改并批准，哪些测试运行，部署了什么版本，生产发生了什么。对运行时模型，还要结合系统化评测和真实事件，而不是把自然语言解释当作事实。&lt;/p>
&lt;h2 id="法律框架已经在按角色分配义务">法律框架已经在按角色分配义务&lt;/h2>
&lt;p>责任并没有等待“代码作者”概念解决后才出现。欧盟 2024 年产品责任指令已经明确把软件和 AI 系统纳入产品范围，并围绕制造商控制、缺陷与损害建立责任规则。欧盟 AI Act 则区分提供者、部署者等角色，对高风险系统设置文档、监控、人类监督和事件处理义务。&lt;/p>
&lt;p>这些规则会随法域、系统用途和生效时间不同而变化，但它们共同说明一件事：现代责任越来越围绕产品生命周期和控制角色分配，而不是寻找实际敲下每个字符的人。&lt;/p>
&lt;p>工程架构因此确实具有制度意义。权限、日志、批准和恢复路径不仅影响可靠性，也决定组织能否证明自己履行了应有注意。但合规证据不能替代真实安全，更不能把责任悄悄下放给权限不足的个人工程师。&lt;/p>
&lt;h2 id="结语来源可以分布责任必须可行动">结语：来源可以分布，责任必须可行动&lt;/h2>
&lt;p>AI 生成代码让文本作者身份变得不再简单，却没有创造一个无人负责的自然真空。真正危险的是组织允许责任链变得不可行动：每个人都参与一点，却没人有权停止、解释、通知和补救。&lt;/p>
&lt;p>好的责任设计不追求一个万能背锅者，而是让每个有控制力的角色拥有相称义务，让关键过程留下可信证据，并确保事故发生后有人能够采取实际行动。&lt;/p>
&lt;p>代码可以由模型生成，责任不能由模型代领。&lt;/p>
&lt;h2 id="延伸阅读与参考资料">延伸阅读与参考资料&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://csrc.nist.gov/pubs/sp/800/218/final">NIST SP 800-218：Secure Software Development Framework&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://slsa.dev/spec/v1.1/terminology">SLSA：Provenance and Build Terminology&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://eur-lex.europa.eu/legal-content/EN/LSU/?uri=CELEX%3A32024L2853">欧盟：Directive (EU) 2024/2853 on Liability for Defective Products&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://digital-strategy.ec.europa.eu/en/faqs/navigating-ai-act">欧盟委员会：Navigating the AI Act&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.nist.gov/publications/artificial-intelligence-risk-management-framework-generative-artificial-intelligence">NIST：Generative AI Profile for the AI Risk Management Framework&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>&lt;em>上一篇：&lt;a href="https://lingming.blog/posts/2026/the-new-engineer-from-coder-to-constraint-designer/">《黑箱转向（六）：从编码者到约束设计者？》&lt;/a>；下一篇：&lt;a href="https://lingming.blog/posts/2026/redefining-control-in-the-age-of-generative-systems/">《黑箱转向（八）：三种黑箱，三种控制》&lt;/a>。&lt;/em>&lt;/p></content:encoded></item></channel></rss>