KARPATHYASD-STE100AGENT ENGINEERING

让 LLM 输出
成为可理解的技术工具

从简明文字到图示、交互网页与讲解视频,建立能表达行为、保留证据的输出流程。

中文技术学习文档 · 2026-10-06 · 附配图核对、Java 示例与离线交互演示

01推文主张:输出也是理解工具

当模型承担越来越多的执行工作,工程师需要花更多时间理解它做了什么、结果说明了什么,以及哪些地方需要核对。Karpathy 提出的四种输出形式,是围绕这个工作变化展开的。[1]

01 · WRITING

受控技术文字

用简短句子、明确动作和稳定术语解释技术问题。

02 · DIAGRAMS

图示与图片

把对象之间的关系、流程和依赖变成可观察的结构。

03 · WEB PAGES

交互式 HTML

把解释做成网页,让读者修改条件、查看变化。

04 · VIDEOS

定制讲解视频

用动画和旁白解释过程,并按读者的问题定制内容。

他对定制视频最有信心,并举了 3Blue1Brown 风格讲解和音频旁白的例子。他也指出,随着代码生成成本下降,可以制作过去不值得专门开发的一次性软件讲解工具。[1]

学习目标:把一个技术结果转成读者能复述、能操作、能追溯证据的解释。

以下工程方案、指标、示例代码和学习任务,是基于推文主题设计的实践扩展。它们不是 Karpathy 发布的系统架构,也不是经过实验验证的效果排名。

02ASD-STE100:约束语言表达

ASD-STE100 Simplified Technical English 是技术文档使用的受控自然语言标准。它由写作规则和受控词典两部分组成。官方资料列出 9 个规则章节、53 条规则,以及约 900 个获准的一般词汇。Issue 9 发布于 2025 年 1 月。[2]

约束对象正式规则的核心思想软件文档中的应用方式
句子操作性句子最多 20 个英文词;描述性句子最多 25 个英文词。[4]拆开“条件、动作、结果”;保留对象与限制条件。
词义与词性获准词应按规定的词义和词性使用。[3]建立术语表;同一个工具、状态、参数使用同一个名称。
专业术语允许符合规则的技术名词和技术动词。[3]保留 tool_call、tool_result 等精确标识,不用模糊同义词替换。
表达方式短句、清楚的动作和明确的主题。[3]让读者知道谁执行、执行什么、什么时候结束。

先区分“正式 STE”与“借鉴 STE 的中文表达”

ASD-STE100 约束英语文档。中文学习材料可以借鉴其表达原则,但不能把“20 个英文词”直接换算成“20 个汉字”,也不能把中文文档宣称为严格符合 ASD-STE100。

工程改写示例

改写前

系统通过工具能力协同与上下文动态更新,使智能体实现高效的任务闭环和结果优化。

改写后

模型生成工具调用。运行时检查工具名称和参数。工具执行后,运行时把结果加入消息列表。模型读取结果,再决定继续调用工具或回答用户。

改写后的收益来自对象和动作更明确。它没有证明工具结果正确,也没有证明 Agent 一定会完成任务。

03配图核对:清晰版式仍需事实校验

附件把标准整理为工程图纸风格,展示结构、句型、词典、长度限制和历史。它适合作为阅读入口。下列内容需要修正或按正式资料重新确认。

配图内容核对结果学习时采用的写法
D 区:TEST (v) 被标成获准,示例为 Test the circuit.Issue 9 的 Rule 1.2 明确说明 test 是获准名词,不能当作获准一般动词使用。[4]表示执行测试时,可改为 Do the test.;具体语境仍需完整规则核对。
D 区:approximately → ABOUT;Wait for ABOUT 10 minutes.官方 FAQ 说明 about 的获准含义是“关于”,不能表示“约”。[3]在该语义下使用 approximately 或 around,不采用 ABOUT。
F 区:2005 年改称 ASD-STE100官方 FAQ 记载相关组织合并及名称变更发生在 2004 年。[3]历史记录使用 2004 年;版本资料使用 Issue 9 / January 2025。
A 区的章节排列;D 区的替换表配图是摘要;章节编号、词条词性和替换建议必须与相应版本的正式资料对应。不依据配图自动生成“全部合规”的词典或检查器。
配图核对的工程启示:渲染越清楚,越应该让读者能定位证据。漂亮的图可能让错误更容易被记住。
查看你提供的配图
用户提供的 ASD-STE100 概览配图,包含文档结构、句型、动词、词典、规则限制和历史六个区域
用户提供的学习参考图。上述核对项应优先于图中对应说明。

核对范围:已核实表中 test、about 与 2004 年三项;未对配图每个词条完成严格合规检查。正式写作仍应逐条查规则与词典。

04理解成本:三个层面分别处理

下面的划分是一个工程设计方法。它用来发现“读不懂”的具体原因,便于选择相应的输出形式。

层面常见问题处理方法仍需核对
语言长句、空泛描述、术语漂移。简短表达;明确动作对象;统一术语。简化后是否删除了前提或例外。
结构读者需要在脑中重建关系。用表格比较;用图展示状态、分支和依赖。连线方向、顺序和边界是否正确。
验证只能看结论,无法查看依据。展示证据、执行轨迹、参数和可重复操作。展示的数据是否与真实运行一致。

一个句子拆成四个可核对单元

例如:“系统发现价格异常,因此建议核查。”这句话缺少输入、比较口径、计算结果和证据位置。可以拆成:① 输入为 A 项目的报价;② 比较对象为同规格、同币种的参考报价;③ 当前差异为计算得到的百分比;④ 提供两份报价的文件和页码。没有比较对象时,输出“缺少参考数据”。

可读性、正确性、可追溯性是三项独立验收目标。不能用排版通过来替代事实通过。

这也解释了为什么更复杂的输出不一定更好。检查一个字段用短句即可;确认执行顺序用状态图;理解参数变化用交互页面;观察随时间变化的过程才需要动画或视频。

05提示词:把格式要求写成验收条件

“按 ASD-STE100 解释”是一种风格提示。Karpathy 提到的“80% of the way”是对严格规则的适度放宽,不是可测量的合规分数。实际工作应把需要的行为写清楚。[1]

模板一:中文技术解释

PROMPT · 中文解释
请用中文解释:{技术主题}。
读者已经会 Java,但第一次接触该机制。
借鉴 ASD-STE100 的表达原则:短句、明确动作、稳定术语。
保留专业名称,并在第一次出现时给出定义。
每一步说明:输入、执行者、动作、输出、失败条件。
区分资料中的事实、推断和示例。不得为了简短删掉前提。
最后给出一个正常路径和一个失败路径。
引用具体来源;缺少证据时说明未知。

模板二:精确图示

PROMPT · 图示
根据下面的执行记录绘制状态图:{记录}。
节点只表示运行状态;箭头标明触发条件。
覆盖正常结束、工具失败、取消、达到模型轮数上限。
给出节点与记录字段的对应表。
使用可编辑的 Mermaid 或 SVG。每条连线都必须有依据。
不要加入资料没有描述的自动重试或回滚。

模板三:交互式 HTML

PROMPT · HTML
把 {技术机制} 解释为一个单文件 HTML 页面。
页面使用中文,离线可打开,不依赖 CDN。
读者可以修改 {参数},并观察 {可观察状态}。
公开计算规则;示例数据明确标注为模拟数据。
每次变化展示输入、计算结果和适用条件。
提供键盘操作、可读标签和减少动态效果支持。
检查目录、溢出、边界参数和错误路径。
按附带 UI 规范实现,不生成额外的页头工具栏。

模板四:讲解视频分镜

PROMPT · 视频分镜
为 {技术主题} 写一个约 90 秒的视频分镜。
读者是 {人群},要理解 {目标}。
每个镜头列出时间、画面、旁白、对应证据。
先审查脚本中的事实与单位,再生成动画和音频。
动画只展示已确认的状态变化,不补出未知的内部过程。
保留字幕,并提供可跳转的章节。
标明比喻的边界。

严格英语文档还需要指定标准版本、完整规则来源、术语表和检查方法。模型说“符合标准”不能代替词典核对。官方也指出,检查工具不能替代标准本身。[5]

06图示:用 Agent 循环解释结构

下面展示的是最小 Agent 循环的教学设计:模型提出工具调用,运行时执行工具,并将结果交回模型。它没有假定某个仓库已经实现这些行为。

Agent 模型调用与工具结果循环开始前检查取消和轮数上限,模型输出分为最终回答或工具调用。工具调用经名称和参数校验,结果写回消息后回到检查状态。工具失败也返回结果。 边界检查取消 / 轮数 / 截止时间调用模型Think:生成下一步输出完成保留结果与证据校验并执行工具无效参数或异常 → 错误结果记录工具结果Observation:加入消息列表 最终回答工具调用下一模型轮次
边界检查失败时直接终止;图中的返回箭头只表示继续模型循环,不表示工具自动重试。
对象含义必须保留的信息
assistant / tool_call模型提出下一步动作。工具名称、调用 ID、原始参数。
tool_result运行时记录工具执行结果。对应调用 ID、成功或失败、结果、错误类型。
final answer模型在已知观察基础上给出回答。结论、证据、未知事项。
termination运行时因边界条件终止。结束原因;是否已经形成最终回答。

画图时最容易遗漏的两件事

工具失败后谁做决策:可以把失败作为工具结果交给模型,让它选择下一步。运行时也可以按明确策略停止。两种策略都需要写出来,图中不能隐含重试。

取消与超时在哪里生效:循环入口检查不能中断正在等待的模型或工具。实际实现还需要传递取消信号,并给正在进行的操作设定截止时间。图示用于理解控制关系,执行细节应由代码验证。

07交互演示:观察轮数上限与失败路径

这个演示采用合成事件,不调用模型或工具。修改“模型轮数上限”和“工具情境”,再逐步推进,可以观察工具结果如何影响后续轮次。

等待推进

    计数口径:一次模型调用算一轮。工具调用不单独计入模型轮数;工具成功后形成最终回答,仍需要下一次模型调用。取消操作在该演示的事件边界立即生效。

    建议尝试的三组条件

    设置预期观察需要理解的边界
    成功 + 上限 1工具得到结果,但运行到轮数上限后结束。拿到工具结果不等于已经生成最终回答。
    首次失败后成功 + 上限 3第 1 轮失败;第 2 轮成功;第 3 轮形成最终回答。这里的再次调用是预设模型策略,不是工具的隐式重试。
    持续失败 + 上限 2失败结果两次写回,随后按上限终止。最终状态必须保留“达到上限”,不能显示任务完成。

    演示不包含真实网络延迟、并发工具、流式响应和资源释放。接入真实系统时,应直接展示运行时事件,而不是根据最终回答猜测执行过程。

    08视频:先验证脚本,再安排时间

    定制视频适合展示一个过程怎样随时间展开。Karpathy 提到,可以让模型制作 3b1b 风格讲解,配合音频旁白,或寻找使用本地计算的替代方式。[1]

    下面是一个 75 秒的 Agent 工具失败讲解分镜。它是课程练习,不是已生成的视频,也不意味着任何服务具备固定的生成能力。

    时间画面旁白重点核对材料
    0–10 秒用户任务与可用工具同时出现。模型负责选择动作,运行时负责执行。工具定义与示例任务。
    10–25 秒模型产生 tool_call;参数检查放大。工具名和参数通过检查后才能执行。调用 ID、参数结构与校验结果。
    25–40 秒失败结果返回并进入消息列表。工具失败属于观察;不能把它显示成成功。错误类型与 tool_result。
    40–55 秒下一轮模型看到失败,选择其他策略。换路径、再次尝试或结束,取决于明确策略。合成执行轨迹或真实日志。
    55–65 秒轮数上限触发,画面停止。运行时边界可以终止循环。计数器与结束原因。
    65–75 秒结论、证据、未知三列保留。读者应能指出任务是否完成及其依据。最终结果与未完成事项。

    生成顺序

    先写可核对的脚本,再做分镜与镜头时长;随后制作画面、旁白和字幕;最后逐帧检查对象、数值与状态是否同步。旁白说“已经完成”时,画面不能仍显示工具错误。

    同一数据源应驱动文本、图表和动画。不要分别让三个生成步骤自由改写数字。涉及重试、取消和返回值的内容,应通过同一份事件记录保持一致。

    09工程方案:事实、解释、渲染分开

    如果每次都让模型直接生成整个页面,事实、语言和排版会混在一起。一个更容易核对的设计,是先建立包含证据的结构化结果,再生成解释,最后由模板渲染。

    阶段输入 → 输出承担的职责不应承担的职责
    Evidence Store资料 / 工具结果 → 有 ID 的证据记录保存文件版本、定位信息和原始数值。用语言润色来改动原始数值。
    Explanation Builder证据 + 读者需求 → 解释结构选择需要解释的事实、顺序和术语。把未证实的推断改成事实。
    Verifier解释结构 + 原始证据 → 检查结果检查引用、数值、单位和逻辑前提。把模型自评当成通过依据。
    Renderer通过检查的结构 → HTML / 图示 / 视频脚本显示内容与交互;转义文本;稳定布局。重新计算业务结论或补出证据。

    最小中间结构

    JSON · 教学结构
    {
      "documentId": "lesson-001",
      "claims": [{
        "id": "claim-01",
        "kind": "observation",
        "text": "工具返回错误,任务尚未完成。",
        "evidenceIds": ["event-003"],
        "status": "supported"
      }],
      "unknowns": ["未获得成功的工具结果。"],
      "trace": [{
        "id": "event-003",
        "type": "tool_result",
        "callId": "call-01",
        "isError": true,
        "errorCode": "SIMULATED_ERROR"
      }],
      "termination": {"reason": "max_model_turns"}
    }

    supported 应由检查逻辑赋值,不能只相信生成模型填写的字段。对事实的引用至少需要检查“证据存在、定位正确、内容支持该结论”;只有第一个检查通过,还不能认定事实成立。

    验证可以分成三类

    确定性验证:结构、必填字段、事件 ID、原始数字和单位适合由代码检查。语义验证:结论是否由证据支持,需要结合资料和上下文判断。可用性验证:读者能否找到证据、理解失败路径,需要使用任务测试。

    模型可以辅助标出待核对内容;对关键结论,验证仍应使用原始资料和可复算逻辑。模型生成的“高置信度”不是证据。

    10Java 示例:证据支持后再渲染

    这个 JDK 8 兼容示例演示两条边界:证据不存在时拒绝输出;事件状态不支持失败时,也拒绝输出。工具名称按普通文本转义,避免被当作 HTML 解释。

    JAVA · EvidenceExample.java
    import java.util.*;
    
    public final class EvidenceExample {
        static final class Event {
            final String id, toolName;
            final boolean isError;
            Event(String id, String toolName, boolean isError) {
                this.id = id; this.toolName = toolName; this.isError = isError;
            }
        }
    
        // 只支持“某工具事件失败”这一种明确的教学结论。
        static String renderFailure(String evidenceId, Map<String, Event> events) {
            Event event = events.get(evidenceId);
            if (event == null) {
                throw new IllegalArgumentException("Unknown evidence: " + evidenceId);
            }
            if (!event.isError) {
                throw new IllegalArgumentException("Evidence does not support failure");
            }
            // 结论由事件状态构造,不接受模型任意填写的事实文本。
            return "<p>工具 " + escape(event.toolName) + " 返回错误。"
                + "<span>证据:" + escape(event.id) + "</span></p>";
        }
    
        static String escape(String value) {
            return value.replace("&", "&amp;").replace("<", "&lt;")
                .replace(">", "&gt;").replace("\"", "&quot;")
                .replace("'", "&#39;");
        }
    
        public static void main(String[] args) {
            Map<String, Event> events = new HashMap<String, Event>();
            events.put("e1", new Event("e1", "search <demo>", true));
            String output = renderFailure("e1", events);
            if (!output.contains("&lt;demo&gt;")) throw new AssertionError();
            events.put("e2", new Event("e2", "search", false));
            try {
                renderFailure("e2", events);
                throw new AssertionError("Unsupported claim was accepted");
            } catch (IllegalArgumentException expected) { }
            System.out.println(output);
        }
    }
    SHELL · 运行方式
    javac -encoding UTF-8 EvidenceExample.java
    java EvidenceExample

    这里验证了什么

    它验证了一个受限结论与事件状态之间的一致性,以及文本插入 HTML 前的转义。模型只能选择允许的结论类型和证据 ID;最终事实由确定性代码构造。

    这里还没有解决什么

    示例不验证任意自然语言结论,也不证明工具返回的业务数据真实。完整工程还需要事件来源可信、字段校验、正确的文件版本与单位,以及面向具体业务的规则。页面如果允许链接、样式或富文本,单纯的文本转义也不能替代对应的 URL 校验与内容策略。

    接入 Agent Runtime 时,可以订阅已有的工具执行事件,构造报告结构并渲染。最小 Think → Action → Tool → Observation 循环无需为了生成学习页面而引入会话、记忆或工作流组件。

    11应用示例:采购审阅与技术学习

    以下案例使用虚构数据,展示如何把结果变得便于核查。它不描述现有项目已经具备的功能,也不定义采购合规规则。

    案例 A:两个同规格报价的比较

    字段模拟内容应该如何展示
    输入 A设备 X,单价 12,000 元。关联文件、页码、规格和报价口径。
    输入 B同规格设备 X,单价 10,000 元。核对币种、数量、税费与服务范围。
    比较以 B 为基准,差异 = (12,000 − 10,000) / 10,000 = 20%。展示公式和基准;保留两份输入。
    可以得出的结论该示例中 A 的单价比 B 高 20%。仅描述可计算的差异。
    仍需判断是否合理、是否违反要求。需要业务规则和完整上下文;标记为待核查。

    用柱形图可以显示两个价格的关系;用表格更方便核对规格与单位。如果比较口径不同,页面应显示“暂不可比”,不能只输出醒目的差异百分比。

    案例 B:解释 Agent 取消

    先写一句可执行的描述:“收到取消信号后,运行时停止发起下一次模型调用,并向正在进行的操作传递取消信号。”再画出取消路径。最后展示真实事件:何时收到取消、哪个任务已经开始、哪个资源已关闭。将“请求取消”与“确认结束”分开显示。

    案例 C:学习一个源码模块

    选择一个明确入口;给出调用关系;用一条正常轨迹和一条错误轨迹解释机制;把关键节点映射到类或函数;最后让读者修改一个条件并预测结果。这样能检查是否掌握了行为,而不仅是记住几个术语。

    12效果评估:测理解,而非只测字数

    推文提供的是实践建议。要确认某种输出对自己的团队更有效,可以把同一任务、同一事实集渲染为不同形式,再比较读者的任务表现。下面是建议的评估设计,没有提供虚构的实验分数。

    指标测量方法解释限制
    理解正确率固定问题集:执行者、顺序、失败路径、结束原因。问题应覆盖关键行为,避免只考标题记忆。
    证据定位时间计时找到某个结论对应的事件或资料位置。任务与页面长度要可比。
    决策错误率要求判断任务完成、失败、取消或未知。完成状态必须由可信事件标注。
    事实保留率检查数值、条件、例外和未知是否被保留。不能只统计关键词出现次数。
    使用成本制作时间、阅读时间、维护时间和调用费用。视频成本与更新频率一起评估。

    一个可执行的对照过程

    1. 整理 6 个有明确答案的学习任务,冻结参考资料。
    2. 准备文字、图示和 HTML 三种版本;事实内容保持一致。
    3. 随机安排版本与任务,减少先看某一版本带来的记忆影响。
    4. 记录回答正确率、用时与证据定位情况。
    5. 汇报样本量、任务差异和失败案例,再决定默认输出形式。

    如果同一个人反复阅读同一个题目,应换用等难度任务并打乱顺序。小样本结果适合指导下一次迭代,不应宣称普遍的效率提升百分比。

    13常见失败:形式通过,内容未通过

    失败方式具体表现修正动作
    过度压缩删掉取消、超时和失败条件。先列出必须保留的事实,再改写句子。
    术语替换把工具调用、工具执行和工具结果都叫“行动”。术语表映射到真实字段和状态。
    画出不存在的能力图里自动重试、回滚,代码里没有。每个箭头对应事件或明确的设计策略。
    交互假象滑块只改变显示数字,结果没有按公式重算。公开计算规则,并检查边界输入。
    模型自证生成模型自己写“已验证”,页面就当作事实。验证读取独立来源和原始证据。
    视频叙事过强用流畅动画掩盖未知过程或错误结果。保留未知标签、失败状态和证据说明。
    失去来源版本资料更新后,解释仍引用旧记录。记录资料版本、生成时间与相关证据 ID。

    “一次性解释工具”可以临时生成,但应保留足以还原重要结论的输入与规则。对于长期维护的业务报告,应使用稳定模板、版本记录和回归样本。

    一个可用的交付应让读者回答:结果是什么?为什么?依据在哪里?什么还不知道?

    14五次练习:从表达走向验证

    建议围绕同一个小型 Agent 循环完成以下五次练习。每次约 45–90 分钟;这是练习安排,耗时取决于已有代码和熟悉程度。

    练习 01 · 表达

    把抽象描述改成动作说明

    选择 300–500 字的技术描述,明确执行者、输入、输出与失败条件。产物:改写稿、术语表、事实保留清单。

    通过条件:读者能说出“谁做了什么”,并能指出结束条件。

    练习 02 · 结构

    画正常路径与失败路径

    从真实代码或可信日志画图。把每个节点映射到函数、类或事件。产物:状态图与映射表。

    通过条件:没有无法解释来源的箭头;失败与取消均有去向。

    练习 03 · 交互

    制作一个参数实验页面

    用明确的合成规则模拟轮数上限、工具失败和结束原因。产物:离线 HTML 与边界输入样本。

    通过条件:上限为 1 时不会伪造最终回答;页面能用键盘操作。

    练习 04 · 接入

    把合成事件换成真实运行事件

    对接 Java Runtime 已有事件,保留 callId、错误状态、顺序与结束原因。产物:一条成功轨迹、一条失败轨迹。

    通过条件:报告可追溯到原始事件,且拒绝与事件不一致的结论。

    练习 05 · 评估

    做一次读者任务测试

    请读者判断完成状态并定位依据。修复一处真正影响理解的问题。产物:测试记录、修订说明和可选视频分镜。

    通过条件:汇报实际观察;没有实验数据就不宣称效果提升。

    15自测:检查是否能解释边界

    先自己回答,再逐项展开。重点是能解释行为与前提,而不是背诵术语。

    “80% ASD-STE100”是否表示通过了 80% 的规则检查?

    不是。它是风格上的放宽建议。没有版本、规则清单和测量方法,就不能形成合规分数。

    为什么仅统计句子长度不够?

    短句也可能含错误事实、模糊对象或缺失前提。还需要词义、术语、业务条件和证据检查。

    工具成功后为什么仍可能达到模型轮数上限?

    工具结果只是一条观察。模型生成最终回答通常需要下一次调用;上限必须说明计数口径。

    图中的回环箭头是不是自动重试?

    不一定。回环可以表示进入下一模型轮次。是否再次调用工具,由明确策略决定。

    引用的证据 ID 存在,能否认定结论正确?

    不能。还要核对证据内容是否支持该结论,以及来源版本、单位和前提。

    中文文档能否直接宣称严格符合 ASD-STE100?

    不能。它是英语技术文档标准。中文可以借鉴表达原则,并使用中文自己的验收规则。

    何时选 HTML,何时选视频?

    参数实验、检索与证据核对适合 HTML;需要观察时间顺序和连续状态变化的过程适合动画或视频。

    如果图、文字、视频中的数值不同,应优先处理什么?

    先核对原始资料和计算规则。冻结同一份数据,再统一各输出;不要只改排版来掩盖差异。

    16资料来源与内容边界

    1. Andrej Karpathy:理解语言模型输出的文字、图示、网页与视频建议

      依据:你在对话中提供的推文全文。配图使用你提供的 PNG。这里没有把推文中的实践意见当作比较实验结论。

    2. ASD 官方:About ASD-STE100

      用于核对标准结构、53 条规则、约 900 个一般词汇及 Issue 9 信息。

    3. ASD 官方:Frequently Asked Questions

      用于核对词义与词性、专业术语、about 的含义、2004 年名称变更,以及适用边界。

    4. ASD-STE100 Issue 9 · 2025-01-15

      用于核对 Rule 1.2 中 test 的词性与 Rule 8.4 的句长计数说明。规则内容通过官方 PDF 的公开检索摘录核对,未完成整部标准的逐页检查。

    5. ASD 官方:Tools for STE

      用于核对语言检查工具的能力与限制。严格标准写作仍需完整规则、词典与语境检查。

    如何使用这份资料

    推文观点见第 1 节;标准知识与配图核对见第 2–3 节;其余内容是工程实践扩展。交互演示、业务数据和 Java 事件均为教学示例。UI 依据你附带的《html_UI设计规范.md》实现。

    资料核对日期:2026-10-06。学习目标是清楚表达与可核对的解释;这份中文资料没有声称通过正式 STE 合规认证。

    ← 返回内容索引