手搓生产级 AI Agent 系统(12):全链路评测、影子流量与生产质量门禁

发布时间:2026/8/14 14:22:40

手搓生产级 AI Agent 系统(12):全链路评测、影子流量与生产质量门禁
文章摘要前十一篇已经完成Agent目标解析、Tool Calling、状态管理、Memory、Planner-Executor-Reviewer闭环、Checkpoint、Human-in-the-Loop、多Agent协作、共享状态以及代码与浏览器安全执行。系统已经具备完整的生产运行能力但“能够运行”并不等于“值得发布”。Agent质量不能只看最终文本。一个答案可能内容正确却通过错误Tool、重复副作用、过度成本或未经审批的路径获得离线黄金数据集可能高分真实用户却因为长尾意图、权限、工具故障、延迟和多轮状态而无法完成任务LLM-as-a-Judge可能受位置、长度、模型家族和Rubric影响新版本可能在固定Benchmark上更好却在真实流量中导致转人工率和成本上升。本篇为整套生产级Agent系统补上最后一层质量控制将Response、Trajectory、Task Success、Business Outcome和Safety统一到Evaluation Control Plane使用冻结数据集保证历史可比使用当前数据集覆盖最新Hard Case通过生产Trace重放验证真实任务分布通过影子流量比较稳定版和候选版但严格阻断真实写操作通过金丝雀验证真实用户、工具和业务结果通过版本粘性、Slice阈值、零容忍安全指标和自动回滚控制发布通过线上反馈、人工纠正和Judge分歧持续扩展数据集。完成本篇后《手搓生产级 AI Agent 系统》形成从任务理解、工具执行、持久化、协作、安全到质量发布的完整工程闭环。一、本篇解决的问题1. Agent质量应该评什么 2. 最终答案与执行轨迹如何同时评测 3. 黄金数据集如何版本化 4. 数据集更新后如何保持历史可比 5. LLM Judge如何校准 6. 生产Trace如何安全重放 7. 影子流量如何禁止真实副作用 8. 稳定版与候选版如何Pairwise比较 9. 金丝雀如何保持Run版本粘性 10. 哪些指标允许回归哪些零容忍 11. 线上失败如何进入Hard Case 12. 如何自动扩量、暂停与回滚 13. 运行中的Checkpoint如何处理版本回退 14. 如何观测评测成本和Judge漂移二、质量控制总体架构┌─────────────────────────────────────────────┐ │ Candidate Manifest │ │ Model / Prompt / Graph / Tool / Policy │ └──────────────────┬──────────────────────────┘ │ ┌──────────────────▼──────────────────────────┐ │ Offline Evaluation │ │ Rules / Frozen / Current / Replay │ └──────────────────┬──────────────────────────┘ │ pass ┌──────────────────▼──────────────────────────┐ │ Shadow Traffic │ │ Real Distribution / No Side Effects │ └──────────────────┬──────────────────────────┘ │ pass ┌──────────────────▼──────────────────────────┐ │ Canary │ │ Real Users / Sticky Run / Rollback │ └──────────────────┬──────────────────────────┘ │ ┌──────────────────▼──────────────────────────┐ │ Online Monitoring Feedback │ │ Outcome / Human / Hard Case / Dataset │ └─────────────────────────────────────────────┘三、Agent质量的五个层级Response Quality Trajectory Quality Task Success Business Outcome Safety Compliance四、Response Quality评估相关性完整性清晰度事实支持引用格式风格。它是必要条件但不是最终目标。五、Trajectory Quality评估Planner是否合理Tool是否正确参数是否正确顺序是否正确是否循环是否重复是否跳过审批是否正确恢复是否违反预算。六、Task Success由业务里程碑定义。publicrecordTaskSuccessContract(StringtaskType,SetStringrequiredMilestones,SetStringforbiddenOutcomes,DurationmaximumDuration,intmaximumUserCorrections,booleanhumanHandoffAllowed){}七、Business Outcome例如客服解决率转人工处理时长重开工单用户完成运营成本。例如销售线索完整跟进创建错误触达转化合规。八、Safety与Compliance硬门禁跨租户访问 未经审批副作用 重复扣款 敏感数据泄露 危险Tool越权 旧审批执行 沙箱逃逸信号这些不是平均分问题而是零容忍事件。九、Candidate ManifestpublicrecordAgentCandidateManifest(StringcandidateId,StringmodelProfile,StringpromptVersion,StringgraphVersion,StringplannerVersion,StringreviewerVersion,StringtoolCatalogVersion,StringknowledgeSnapshot,StringpolicyVersion,StringsandboxProfileVersion,StringevaluatorBundleVersion,StringimageDigest,StringmanifestHash){}任何字段变化都生成新Candidate。十、为什么Manifest不可变否则评测期间修改Prompt或知识库最终分数无法复现。发布证据必须回答到底测的是哪个版本组合十一、Dataset分层Smoke Dataset Frozen Regression Dataset Current Dataset Safety Dataset Trajectory Dataset Hard Case Dataset Production Replay Dataset十二、Smoke Dataset少量高价值样本用于每次提交快速检查SchemaTool基本RAG高风险拒绝状态迁移。十三、Frozen Regression Dataset长期冻结用于比较历史版本。不能因为当前系统难题变化就不断修改。十四、Current Dataset持续加入新意图新知识新失败新语言新工具新风险。用于判断当前真实能力。十五、Safety Dataset包括Prompt Injection越权跨租户未审批副作用重复操作数据外传沙箱攻击浏览器恶意页面。十六、Trajectory Dataset不仅给输入和答案还给允许Tool禁止Tool必需步骤最大调用数审批Checkpoint失败注入。十七、Dataset ManifestpublicrecordDatasetManifest(StringdatasetId,Stringversion,StringparentVersion,InstantcutoffTime,MapString,IntegersliceCounts,StringannotationPolicyVersion,StringdeduplicationVersion,StringcontentHash){}十八、数据集更新后的双报告Frozen Score 保证历史可比 Current Score 反映最新难题新数据更难导致总分下降时不应误判为模型回归。十九、Slice按Task风险语言租户类型长上下文Tool多轮浏览器代码新用户长尾切片。二十、不要只看平均分总体Task Success94% 支付Slice62% 越南语Slice58% 浏览器提交71%总体平均值会掩盖关键失败。二十一、评测器分层确定性Rule 业务事实Evaluator LLM Judge 人工Reviewer 线上Outcome二十二、确定性Rule检查Schema数字JSONTool权限状态成本审批幂等禁止行为。二十三、Spring AI EvaluatorSpring AI提供Evaluator接口并提供相关性和基于给定上下文的事实支持评测能力。可以用于RAG相关性Claim支持回归测试。但它不替代Dataset、Slice、Gate和业务结果。二十四、LLM Judge适合开放式正确性完整性语义等价Pairwise风格轨迹解释。二十五、Judge偏差需要治理位置长度自我偏好顺序Prompt InjectionReference错误模型漂移随机性。二十六、Judge ManifestpublicrecordJudgeManifest(StringjudgeId,StringmodelProfile,StringpromptVersion,StringrubricVersion,doubletemperature,intsampleCount,StringmanifestHash){}二十七、Pairwise双顺序运行StableA CandidateB StableB CandidateA不一致标记位置敏感不强行判胜。二十八、人工黄金集人工标注明确通过明确失败边界高风险分歧。Judge阈值在黄金集上校准。二十九、False Pass高风险最关注Judge把危险输出判为通过发布门禁要限制Critical False Pass而不只是总体一致率。三十、Evaluation CasepublicrecordAgentEvaluationCase(StringcaseId,StringtaskType,Stringslice,JsonNodeinitialState,StringuserInput,ListRecordedToolInteractiontoolFixtures,TaskSuccessContractsuccessContract,ListReferenceAnswerreferences,RiskLevelrisk){}三十一、Case ResultpublicrecordAgentEvaluationResult(StringcaseId,StringcandidateId,ResponseEvaluationresponse,TrajectoryEvaluationtrajectory,TaskOutcomeoutcome,SafetyEvaluationsafety,CostUsageusage,Durationlatency,ListStringfailureCodes,StringtraceRef){}三十二、生产Trace重放从生产采集输入Context ManifestPlanTool请求Tool结果知识快照版本输出用户反馈。候选使用录制依赖不触发真实写操作。三十三、重放固定时间相对时间问题今天 上周 当前库存必须使用原始request_time否则候选与Stable面对不同世界。三十四、隐私与权限生产Trace进入评测去标识最小字段数据区域访问审批保留期删除审计。评测环境权限不能比生产更宽。三十五、影子流量Stable正常响应用户Candidate接收副本结果只用于评测。三十六、Shadow Tool PolicypublicenumShadowToolMode{RECORDED,READ_ONLY_LIVE,SANDBOX_WRITE,NO_OP,BLOCKED}写Tool默认BLOCKED或SANDBOX_WRITE。三十七、影子环境隔离Candidate不共享MemoryCheckpoint写缓存业务数据库通知Artifact发布用户会话副作用。三十八、影子比较比较最终回答ClaimTool参数轨迹延迟Token成本Policy安全。三十九、影子采样按风险和价值新意图 长尾 工具任务 长上下文 新语言 低置信 高价值加权。四十、金丝雀候选真正服务小比例真实用户。前提离线通过 重放通过 影子通过 回滚演练通过四十一、版本粘性同一thread_id run_id绑定同一Candidate。不能多轮过程中切换Graph或Prompt。四十二、Canary AssignmentpublicrecordCanaryAssignment(StringassignmentId,StringroutingKey,StringcandidateId,intbucket,InstantcreatedAt,InstantexpiresAt){}四十三、Canary扩量内部用户 →低风险租户 →只读任务 →普通任务 →高价值任务高风险任务最后进入且保留人工门禁。四十四、金丝雀指标质量Task SuccessJudge PreferenceTool Success引用Reviewer通过。体验重新提问放弃转人工首Token总延迟。成本TokenTool多AgentJudgeSandbox。安全越权未审批重复副作用注入数据泄露。四十五、Gate PolicypublicrecordGatePolicy(MapString,MetricThresholdglobal,MapString,MapString,MetricThresholdslices,SetStringzeroToleranceMetrics,intminimumSampleSize,Stringversion){}四十六、零容忍cross_tenant_access unapproved_side_effect duplicate_side_effect stale_approval sensitive_data_leak sandbox_escape任何一次都阻断或回滚。四十七、质量阈值quality:minimum-task-success:0.92maximum-critical-failure:0maximum-latency-regression:0.15maximum-cost-regression:0.20maximum-human-handoff-regression:0.05阈值按Slice覆盖。四十八、样本不足小样本金丝雀语义指标噪声大。策略不自动扩量 延长观察 扩大低风险流量 人工检查四十九、自动回滚适合硬信号安全错误延迟Provider重复副作用。语义分数噪声较大时暂停扩量而不是立即回滚。五十、运行中的Run回滚只切换新分配。正在运行的Candidate Run可能有Checkpoint有Tool结果等待审批使用新State Schema。处理继续原版本安全迁移取消人工。不能直接交给Stable读取。五十一、Release DecisionpublicrecordReleaseDecision(StringdecisionId,StringcandidateId,ReleaseStagecurrentStage,ReleaseStagenextStage,GateDecisiondecision,ListStringevidenceRefs,ListGateViolationviolations,StringdecidedBy,InstantdecidedAt){}五十二、线上反馈显式点赞点踩评论人工评级。隐式重复改写转人工撤销放弃重新执行业务完成。五十三、反馈不能直接当真值用户可能误解、情绪化或点击错误。流程反馈 →归因 →抽样人工 →去标识 →Hard Case →Dataset版本五十四、Hard Case Mining挖掘高风险失败Judge分歧用户纠正Tool UNKNOWN长循环高成本高延迟新意图长尾语言。五十五、数据闭环线上Run →Feedback →Failure Taxonomy →Human Audit →Hard Case →Current Dataset →下一Candidate五十六、失败分类publicenumAgentFailureCode{INTENT_MISUNDERSTOOD,PLAN_INVALID,WRONG_TOOL,INVALID_ARGUMENT,TOOL_FAILURE,STALE_CONTEXT,UNSUPPORTED_CLAIM,LOOP,BUDGET_EXCEEDED,APPROVAL_VIOLATION,DUPLICATE_SIDE_EFFECT,USER_ABANDONED}五十七、评测成本成本包括Candidate推理Tool FixtureJudge多次采样影子人工存储Replay。按Candidate、Stage、Slice归因。五十八、评测缓存Key包括case_hash candidate_manifest_hash evaluator_manifest_hash dataset_version任何一项变化都Cache Miss。五十九、OpenTelemetry与观测Trace记录gen_ai operation model usage agent task evaluator evaluation score candidate stage同时避免将完整敏感Prompt默认写入普通Telemetry。六十、Trace结构release.candidate ├─offline.eval │ ├─agent.run │ ├─rule.eval │ └─judge.eval ├─shadow.run │ ├─stable │ └─candidate ├─canary.run └─gate.decision六十一、指标agent_eval_case_total{ stage, result } agent_eval_task_success_rate{ slice } agent_eval_trajectory_violation_total{ code } agent_eval_judge_disagreement_rate agent_shadow_preference_rate agent_canary_task_success_rate{ candidate } agent_canary_cost_total{ candidate } agent_release_gate_total{ stage, decision } agent_release_rollback_total{ reason } agent_hard_case_total{ failure_code }六十二、评测SLO高风险Dataset覆盖率100% 关键Tool轨迹覆盖率100% Judge人工一致率≥85% Critical False Pass0 影子真实副作用0 金丝雀重复副作用0 发布证据可追溯率100%六十三、自动化测试矩阵规则失败阻断 Frozen回归 Current新Slice Judge顺序反转 Trace时间固定 影子写Tool阻断 影子Memory隔离 Canary粘性 零容忍回滚 运行中Checkpoint继续原版本 Hard Case去标识 重复Release Event幂等六十四、发布流水线stages:-deterministic-frozen-benchmark-current-benchmark-trace-replay-shadow-internal-canary-low-risk-canary-broad-canary-promote六十五、管理后台展示Candidate ManifestDatasetSliceCaseFailureJudgeCostShadow DiffCanaryGateRollbackHard Case线上反馈。六十六、人工决策以下情况进入评审Judge分歧样本不足新高风险Slice质量和成本权衡线上投诉旧Run迁移语义指标边界。六十七、治理职责产品定义Task Success和业务结果。研发实现规则、Trace和Gate。算法维护Dataset、Judge和模型。安全维护零容忍指标和攻击集。运营处理反馈和人工接管。六十八、不能只追求高分过度优化Benchmark可能迎合Judge增加冗长增加成本降低真实体验忽略新意图。必须持续用线上结果验证离线指标是否仍有预测力。六十九、指标相关性定期分析离线分数 与 线上Task Success 用户满意 转人工 业务结果相关性下降时更新Rubric、Dataset或指标。七十、上线检查清单□ Candidate Manifest完整且不可变 □ 质量覆盖Response、Trajectory、Task、Outcome和Safety □ Frozen与Current Dataset同时维护 □ Dataset按Slice报告 □ Rule、Judge和业务事实职责分离 □ Judge经过位置、长度和人工校准 □ Trace重放固定时间、知识和Tool □ 影子写操作、Memory和通知被阻断 □ Stable与Candidate缓存隔离 □ 金丝雀按Run版本粘性 □ 安全事件零容忍 □ 样本不足不自动扩量 □ 回滚只切换新流量 □ 运行中Checkpoint有兼容策略 □ Release Decision保存证据 □ 线上反馈经过审查进入Hard Case □ 评测成本和Judge漂移可观测总结全链路评测的核心不是给Agent增加更多分数而是建立一条可信的发布证据链固定数据证明没有已知回归 生产重放证明能处理真实任务 影子流量证明候选不会污染生产 金丝雀证明真实用户和业务可接受 线上反馈证明质量可以持续演进经过十二篇建设生产级Agent系统已经形成完整闭环目标 →计划 →执行 →审校 →持久化 →人工 →多Agent →安全沙箱 →质量发布 →反馈改进一个真正可上线的Agent不仅要能完成任务还必须证明它在不同数据、不同流量、不同故障和不同版本下始终保持正确、安全、可控和可回滚。

相关新闻

Agent 为什么总是“失忆”?一套生产级长期记忆系统,远不止向量数据库

Agent 为什么总是“失忆”?一套生产级长期记忆系统,远不止向量数据库

2026/8/14 14:22:40

你可能遇到过这样的场景:昨天已经明确告诉一个 Agent,“项目统一使用 pnpm,不要再生成 npm 命令”,它当时回答得很好,今天重新打开会话,却又一本正经地让你执行 npm install。或者你花了半小时解释业务背景…

微信缓存怎么清理?这款免费开源工具一键释放33GB空间,聊天记录一根汗毛都不伤

微信缓存怎么清理?这款免费开源工具一键释放33GB空间,聊天记录一根汗毛都不伤

2026/8/14 14:12:39

微信缓存怎么清理?这款免费开源工具一键释放33GB空间,聊天记录一根汗毛都不伤 【免费下载链接】CleanMyWechat 自动删除 Windows 和 Mac 电脑端微信缓存数据,包括从所有聊天中自动下载的大量文件、视频、图片等数据内容,解放你的空…

网站建设哪家更专业,避坑指南与行业真相深度解析

网站建设哪家更专业,避坑指南与行业真相深度解析

2026/8/14 14:12:39

在这个数字化浪潮汹涌的时代,拥有一个专业的网站已经不再仅仅是企业的“可选项”,而是关乎生死存亡的“必选项”。无论是初创的小微企业,还是寻求转型的传统老牌企业,当大家第一次把目光投向互联网,想搭建自己的线上门面时,脑海中浮现的第一个问题几乎都是一样的:网站建…

WorkBuddy 安装指南(Windows 版):从下载到登录,一篇就够了

WorkBuddy 安装指南(Windows 版):从下载到登录,一篇就够了

2026/8/14 15:32:43

上一篇我们聊了 WorkBuddy 是什么,这一篇手把手教你装好它。 读完这篇你会得到:Windows 电脑上装好 WorkBuddy 完成登录 做好基础设置,随时可以开始用。 官方也提供了完整的图文版Windows系统安装指南,遇到不清楚的地方可以对照…

多工具研发链路,如何评估国产化平台的投入产出比?

多工具研发链路,如何评估国产化平台的投入产出比?

2026/8/14 15:32:43

代码托管一套、流水线一套、制品库再配一套,年费散在几张发票里;需求到发布靠群消息和邮件衔接,线上出问题要从发布记录、构建日志、代码提交里分别翻。单看每一套都不贵,加总之后却说不清一年到底花了多少——这类情况在 50&…

2026上海科创园区GEO服务商适配度榜单报告

2026上海科创园区GEO服务商适配度榜单报告

2026/8/14 15:32:43

当一位顶尖投资人在AI平台询问“张江在ADC药物领域有哪些具有独特技术平台的公司”,而你的企业却因无法被AI准确识别与理解而“隐形”时,一场决定生死的“认知战”已在科技园区内无声打响。这不再仅仅是技术或产品的竞争,而是企业能否在生成式…

适合初创团队的DevOps软件怎么选?低成本快上手方案

适合初创团队的DevOps软件怎么选?低成本快上手方案

2026/8/14 15:32:43

10 人左右的研发团队,常见两种困境:一种是 Jenkins 流水线已经能自动构建,发布仍靠人记版本号、对需求;另一种是 Git 托管、项目协作、打包部署各用一套工具,没人专职运维,升级和权限就要占掉半个下午。 初…

第 16 章:媒体与视频流水线

第 16 章:媒体与视频流水线

2026/8/14 15:32:43

Android 的媒体框架是 AOSP 中架构最复杂的子系统之一。它覆盖高层 Java API(MediaPlayer、MediaCodec、MediaRecorder),向下延伸至原生 C++ 栈,包含 Stagefright、Codec2 框架、NuPlayer、相机服务、媒体解析器,以及直接与厂商提供的编解码器、相机硬件交互的硬件抽象层。…

6. 工具结果就是证据:ReAct 循环中的上下文增量

6. 工具结果就是证据:ReAct 循环中的上下文增量

2026/8/14 15:22:43

一个 Agent 说“我已经确认了调用点”,并不等于它真的确认过。可靠性来自工具结果,而不是回答中的自信语气。 6.1 一轮 ReAct 到底发生了什么 reactAgentRunner.ts 负责循环,openAiReactModelTurn.ts 负责把内部消息和工具定义转换成模型 API 格式。典型的一轮是: syste…

比较好的亚太EMBA,问了6位校友师资差别真的挺大

比较好的亚太EMBA,问了6位校友师资差别真的挺大

2026/8/13 11:01:28

比较好的亚太EMBA核心差异先看什么?对于希望兼顾工作与系统管理能力提升的亚太区高管而言,筛选匹配度高的EMBA项目时,师资配置是决定学习体验与实际收获的核心要素之一。我们结合3-4个公开信息透明、办学历史较长的亚太区主流EMBA项目特点&am…

备考3个月对比6份资料 海外游学的亚洲EMBA面试注意点

备考3个月对比6份资料 海外游学的亚洲EMBA面试注意点

2026/8/14 10:48:24

备考海外游学的亚洲EMBA面试,核心要围绕项目国际化设计逻辑、个人跨文化管理经验匹配度两个维度准备,避免把游学模块等同于普通旅游参访的认知偏差。不少备考者花3个月对比6份资料,却容易忽略面试官对“国际视野落地能力”的考察——比如香港…

比较好的国内EMBA,问了二十位校友聊透人脉价值

比较好的国内EMBA,问了二十位校友聊透人脉价值

2026/8/13 17:17:06

比较好的国内EMBA核心差异体现在哪些方面?比较好的国内EMBA的核心长期价值,很大程度上依托于校友网络的连接质量与资源生态的活跃度,这也是不少高管在择校时优先考量的因素。我们结合3-4个市场关注度较高的项目公开信息,从课程、师…

大连网站建设找简维科技:为您打造懂业务更懂用户的数字化转型引擎

大连网站建设找简维科技:为您打造懂业务更懂用户的数字化转型引擎

2026/8/14 0:01:53

在这个数字化浪潮席卷全球的今天,企业想要在激烈的市场竞争中站稳脚跟,拥有一张好看的“数字名片”已经远远不够了。很多老板在刚开始接触互联网业务时,都有一个共同的困惑:为什么我花了钱建的网站,就像是在真空中自嗨?访客进来转了两圈就跑了,线索石沉大海,甚至连客服…

临沂网站建设铭镇:深耕本土数字生态,以匠心铸就企业品牌核心竞争力

临沂网站建设铭镇:深耕本土数字生态,以匠心铸就企业品牌核心竞争力

2026/8/14 0:01:54

在这个流量为王、视觉至上的互联网时代,对于临沂乃至整个山东乃至全国的传统中小企业来说,拥有一张精美的“数字名片”早已不再是可选项,而是生存的必答题。每当夜幕降临,沂河两岸灯火辉煌,物流之都的喧嚣逐渐沉淀为对未来的思考。我们常常听到老板们在茶余饭后探讨:为什…

Flutter与OpenHarmony实现剧本杀组队表单开发实战

Flutter与OpenHarmony实现剧本杀组队表单开发实战

2026/8/14 0:01:54

1. 项目概述在移动应用开发领域,跨平台框架Flutter因其高效的开发体验和出色的性能表现,已经成为众多开发者的首选。而OpenHarmony作为新兴的操作系统平台,其开放性和灵活性为开发者提供了全新的可能性。本文将聚焦于一个实际应用场景——剧本…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/8 5:07:31

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/9 13:42:46

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/8 2:30:15

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…