Components入门20 分钟组件库

组件库 (Component Library)

跨多个 Playground 反复出现的可复用工程模式 - 与 T0-T3 知识节点平行存在

组件库 COMPONENTS

组件库: 跨节点的可复用模式

收录散落在多个 Playground 里反复出现的工程小模式 —— 与 T0–T3 知识节点平行存在

预计掌握时间
20 分钟
阶段等级
组件库 · 入门

这个库是什么、不是什么

是什么

Atlas 的正式节点(T0–T3)各自深入一个架构主题。但有一些「小模式」散落在多个节点里,单独抽成节点会造成既视感重复,且可能把 Atlas 从「工程地图」拖向「技术教程合集」。

怎么用

组件库与 T0–T3 知识节点平行存在,专门收录这种「会在多个 Playground 里反复出现的可复用小模块」。每个组件页简短 —— 核心是「这个模式在哪些案例里被用到、通用实现思路是什么」,并链接回具体案例。

收录边界

收录标准:① 在 ≥ 2 个正式节点中以不同形态出现;② 是架构/工程模式而非 NLP 基础技术(命名实体识别、情感分析等不收录,避免退化为教程)。

置信度评估与降级 (Confidence & Degradation)

当 Agent 的某一步输出「不确定」或「工具不可用」时,如何显式表达不确定性、并触发安全的降级路径,而非静默给出缺省值。

在 Atlas 中的出现点

通用实现思路

通用实现思路:① 每步输出携带显式置信度/可用性信号(数值 + 状态枚举),而非埋在自由文本里;② 定义降级优先级(默认值 / 跳过 / 报错)按业务风险选择;③ 严禁 fail-silent —— 不可用信号必须向上冒泡触发人工或熔断,而非被加权平均稀释。

通用实现示例
# 通用降级调度:把"不确定/不可用"显式上抛,而非默认静默 from enum import Enum from dataclasses import dataclass class Availability(Enum): OK = "ok" UNAVAILABLE = "unavailable" # 工具失败/超时 LOW_CONFIDENCE = "low" # 分数低于阈值 @dataclass class StepResult: value: object availability: Availability confidence: float # 0..1 reason: str def degrade(result: StepResult, policy: str) -> StepResult: if result.availability == Availability.UNAVAILABLE: # 严禁 fail-silent:直接冒泡,交由上层熔断/升级人工 raise UpstreamUnavailable(result.reason) if result.availability == Availability.LOW_CONFIDENCE: if policy == "skip": return None # 跳过该要素 if policy == "default": return StepResult(defaults, OK, 0.0, "used default") if policy == "error": raise LowConfidenceError(result.reason) return result

结构化评分协议 (Structured Scoring Protocol)

把「多个来源的判断」收敛成一个可比较、可审计的数值 + 理由结构,而非自由文本投票。是加权汇总、一票否决、方差预警等决策的承载格式。

在 Atlas 中的出现点

通用实现思路

通用实现思路:① 评分必须是「数值 + 理由」二元结构,理由用于审计与事后抽查;② 多源汇聚时,单纯加权平均易被低分项稀释致命信号,需叠加硬约束(一票否决/方差预警);③ 评分协议与决策规则解耦 —— 同一份结构化评分可被不同裁决逻辑复用。

通用实现示例
# 结构化评分 + 加权裁决,叠加硬约束防止致命信号被平均稀释 from dataclasses import dataclass @dataclass class Score: source: str value: float # 0..100 reason: str # 可审计:为何给这个分 WEIGHTS = {"aml": 0.4, "pattern": 0.35, "kyc": 0.25} VETO_BELOW = 30 # 一票否决:任一子项过低直接判高危 VAR_WARN = 25 # 方差预警:评分分歧过大升级人工 def adjudicate(scores: list[Score]) -> dict: values = [s.value for s in scores] if any(v < VETO_BELOW for v in values): return {"decision": "ESCALATE", "why": "single source below veto threshold"} weighted = sum(s.value * WEIGHTS[s.source] for s in scores) if (max(values) - min(values)) > VAR_WARN: return {"decision": "REVIEW", "why": "score variance too high", "weighted": weighted} return {"decision": "AUTO_PASS" if weighted < 50 else "AUTO_FLAG", "weighted": weighted}

约束 / 意图识别 (Constraint & Intent Recognition)

候补中 · 占位

从用户请求中抽取「硬性约束」(如禁忌、预算、格式)与「意图类别」,作为下游检索/决策/工具选择的过滤与路由依据。

在 Atlas 中的出现点

通用实现思路

通用实现思路:① 区分「约束」(必须成立,否则拒绝/澄清) 与「意图」(决定走哪条处理路径);② 约束最好结构化为类型化对象(category + value + polarity),便于下游做冲突检测而非字符串匹配;③ 识别失败应触发澄清而非猜测 —— 缺失约束不默认成立。

通用实现示例
# 约束/意图抽取 + 冲突检测(自包含通用示意) from dataclasses import dataclass from typing import Literal Polarity = Literal["require", "forbid"] # 需要 / 禁止 @dataclass class Constraint: category: str # 口味 / 健康 / 预算 ... value: str polarity: Polarity def extract(query: str) -> tuple[list[Constraint], str]: # 真实系统用 LLM 或规则抽取;此处示意两条约束 constraints = [ Constraint("口味", "辣", "require"), Constraint("健康", "胃不适", "forbid"), # 与"辣"潜在冲突 ] intent = "找餐厅推荐" return constraints, intent def detect_conflict(cs: list[Constraint]) -> list[str]: warns = [] if any(c.value == "辣" and c.polarity == "require" for c in cs) and any(c.category == "健康" for c in cs): warns.append("用户想要辣,但存在健康禁忌约束,需澄清或降辣") return warns
与编排模式节点的关系:编排模式(组织多个 Agent 的方式)是架构级抽象,组件库是更细粒度的工程模式聚合。两者都与 T0–T3 平行,互为补充 —— 前者讲「如何组织」,后者讲「反复出现的小构件」。