尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Upsonic Reliability Layer 深度解析:基于 Verifier 与 Editor 子代理的幻觉防御管线

Upsonic Reliability Layer 深度解析:基于 Verifier 与 Editor 子代理的幻觉防御管线 Upsonic Reliability Layer 深度解析基于 Verifier 与 Editor 子代理的幻觉防御管线【免费下载链接】gpt-computer-assistantBuild autonomous AI agents in Python.项目地址: https://gitcode.com/GitHub_Trending/gp/gpt-computer-assistant导读reliability_layer/是 Upsonic构建自主 AI Agent 的 Python 框架中负责生成后幻觉防御的核心模块它在Agent产出回复之后、把回复交还给调用方之前通过一组小型verifier验证子代理对原始任务上下文重新校验输出再由editor编辑子代理清洗被标记的可疑内容从而识别并去除幻觉——包括编造的 URL、凭空捏造的数字、无法溯源的论断与合成代码。读完本文你将掌握该层的架构、prevent_hallucination分级语义、ReliabilityProcessor.process_task的完整执行流程、子代理用量核算方式以及如何为它新增一种自定义 verifier。1. 这个模块是什么src/upsonic/reliability_layer/实现了 Upsonic 的生成后可靠性管线post-generation reliability pipeline它运行在Agent产生响应之后、响应被交还调用方之前是一道额外的防御层。其目标是在 Agent 输出中检测并移除幻觉——编造的 URL、虚构的数字、不可追溯的论断以及被合成的代码——手段是针对原始任务上下文重新运行一组小型verifier 子代理再将任何被标记的内容交给editor 子代理清洗或将可疑值置为None。概念上这是一轮迭代式的agent-on-agent 质量提升概念作用Verifier 代理独立的专业代理各自针对答案的某一个维度URL、数字、信息、代码与可信来源上下文比对校验。Editor 代理净化代理当任意verifier 提出怀疑时重写最终响应——将可疑字段替换为None同时保留其余内容。ReliabilityProcessor静态编排器把 verifier、editor、正则预过滤与用量核算串联起来。ReliabilityStep管线步骤位于 src/upsonic/agent/pipeline/steps.py在每次 agent 运行时调用处理器。ReliabilityManager轻量的异步上下文管理器封装位于 src/upsonic/agent/context_managers/reliability_manager.py由该步骤使用。整个层级是**可选启用opt-in**的没有传reliability_layer参数的 agent 直接原样通过。启用后通常通过一个暴露prevent_hallucination 10的配置对象每次成功响应都会被扇出校验且只有明显可疑的响应才承担 editor 重写的额外成本。该目录本身刻意保持极小——仅一个文件——因为所有复杂度都集中在一个纪律严明的模块里。其余一切都位于该目录之外、agent 管线之中。2. 目录结构src/upsonic/reliability_layer/ └── reliability_layer.py # 唯一源文件——整个可靠性子系统这就是全部目录树没有子包、没有__init__.py再导出、没有辅助模块。使用方直接深入引用from upsonic.reliability_layer.reliability_layer import ReliabilityProcessor作为对照以下是外部代码引用它的方式src/upsonic/ ├── reliability_layer/ │ └── reliability_layer.py # ReliabilityProcessor helpers prompts ├── agent/ │ ├── agent.py # Agent.reliability_layer 属性约 L249/L465 │ ├── pipeline/ │ │ └── steps.py # ReliabilityStepL2485— 管线集成 │ └── context_managers/ │ └── reliability_manager.py # ReliabilityManager — 轻量 async 封装3. 顶层文件reliability_layer.py这个单一文件按源码顺序划分为六个逻辑区域。3.1 区域地图行号约区域职责1–11Imports 与TYPE_CHECKING惰性导入Task以避免循环引用引入Model、BaseModel、正则、asyncio。13–42strip_context_tags预处理辅助函数移除 Upsonic 的结构化 XML 风格框架标签Context、Tasks、Knowledge Base等使 verifier 只看到纯文本。45–118校验提示词五个字符串常量——每个 verifier 一个editor 一个。120–142SourceReliability、ValidationPoint、ValidationResult作为 verifier 代理结构化输出的 Pydantic 模型。144–202ValidationResult.calculate_suspicion汇总把每个 verifier 的裁决聚合成整体反馈字符串与单一布尔值。204–464ReliabilityProcessor编排器含process_task静态方法。466–528正则预过滤find_urls_in_text、find_numbers_in_text、find_code_in_text及其批量版本contains_*。3.2strip_context_tags(text: str) - strUpsonic 的任务管线会在上下文块周围注入框架标签。当该上下文转发给 verifier 时标签会膨胀提示词并干扰模式识别。该辅助函数执行一趟幂等的正则替换移除以下标签的开闭实例见 reliability_layer.pyContext//ContextKnowledge Base//Knowledge BaseAgents//AgentsTasks//TasksDefault Prompt//Default Prompt移除标签后它会折叠连续的空白行\n\s*\n→\n\n并 trim。任何非字符串输入都会被原样返回因此可以安全地在混合类型上下文条目的列表推导式中调用。3.3 校验提示词verifier 的“评判标准”四条提示词共享同一个反幻觉论点“检查来源是否来自该内容。不要做假设只检查上下文并尝试找到精确的事物。如果找不到就标记它。如果你能在上下文中看到这些内容那么一切都没问题Trusted Source / 可信来源。”提示词常量Verifier 角色url_validation_prompt确认响应中的每个 URL 都逐字出现在可信上下文中。number_validation_prompt对数字同样处理——货币、百分比、科学计数法。code_validation_prompt对代码块、函数名等同样处理。information_validation_prompt通用论断校验——覆盖其他三者未涉及的任何内容。这四条提示词都被写成推动 verifier 走向保守拒绝conservative refusal无法验证的条目必须被标记而不是被合理化放过。下方 editor 提示词则负责清理后果。3.4editor_task_prompt单条提示词模板含一个{validation_feedback}插槽规则刻意严格完整文本见 reliability_layer.pyProcessing Rules: 1. For ANY suspicious content identified in validation: - Replace the suspicious value with None - Do not suggest alternatives - Do not provide explanations - Do not modify other parts of the content 2. For non-suspicious content: - Keep the original value unchanged - Do not enhance or modify - Do not add additional information Processing Steps: - Set suspicious fields to None - Keep other fields as is - Remove any suspicious content entirely - Maintain original structure IMPORTANT: - Set ALL suspicious values to None - Keep verified values unchanged - No explanations or suggestions - No partial validations - Maintain response format - DO NOT output XML, code blocks, or any markup - Return only the clean content in the same format as the originaleditor从不“修复”幻觉无法修复凭空捏造的东西它只是删除。这是一个关键不变量该层是减法过滤器subtractive filter而非纠正性重写器。3.5 Pydantic 模型class SourceReliability(Enum): HIGH high MEDIUM medium LOW low UNKNOWN unknown class ValidationPoint(BaseModel): is_suspicious: bool feedback: str suspicious_points: list[str] Field(description Suspicious informations raw name) source_reliability: SourceReliability SourceReliability.UNKNOWN verification_method: str confidence_score: float 0.0 class ValidationResult(BaseModel): url_validation: ValidationPoint number_validation: ValidationPoint information_validation: ValidationPoint code_validation: ValidationPoint any_suspicion: bool suspicious_points: list[str] overall_feedback: str overall_confidence: float 0.0每个 verifier 代理都以response_formatValidationPoint配置因此它被强制返回结构化 JSON 对象编排器随后把每个ValidationPoint填入单个ValidationResult的对应槽位。ValidationResult.calculate_suspicion()一个纯聚合器——不发起任何 LLM 调用实现见 reliability_layer.py设置any_suspicion 四个 is_suspicious 标志的 OR。把每个 verifier 的suspicious_points拼接成扁平列表。对每个可疑的 verifier构建一段“标题 项目符号列表”的反馈小节如URL Issues: ...。计算overall_confidence 四个 confidence_score 的均值。把一切拼成多行 “Validation Summary” 字符串并返回。既产生副作用又返回值调用方把它存到模型上同时把返回的字符串传给 editor。4. 无子目录扁平设计的取舍该包没有子文件夹——就是一个 Python 模块。这是刻意为之可靠性层只有一项工作用一个文件实现提示词、数据模型、编排器和辅助正则都可以在一屏滚动内完成审阅。若未来新增子目录自然的划分会是假设子目录其中会放什么prompts/四条校验提示词与 editor 提示词作为.txt模板。models/SourceReliability、ValidationPoint、ValidationResult。detectors/正则预过滤函数。processors/ReliabilityProcessor本身。但在增加更多可靠性策略例如基于引用的校验、工具调用重放、形式化验证之前扁平布局是正确的选择。5. 跨文件关系可靠性层不是自包含库——它被多个 Upsonic 子系统调用并向其贡献数据。┌───────────────────────────────────────────────────────────────────────┐ │ Agent.do_async / Agent.run │ │ └── pipeline.run_step(...) │ │ ├── ... (other steps) ... │ │ └── ReliabilityStep (src/upsonic/agent/pipeline/ │ │ │ steps.py — L2485) │ │ │ │ │ ▼ │ │ ReliabilityManager (src/upsonic/agent/context_ │ │ │ managers/reliability_manager.py│ │ │ │ │ ▼ │ │ ReliabilityProcessor.process_task (reliability_layer.py) │ │ │ │ │ ├──► 生成 AgentConfiguration(URL Validation Agent) │ │ ├──► 生成 AgentConfiguration(Number Validation Agent) │ │ ├──► 生成 AgentConfiguration(Information Validation A.) │ │ ├──► 生成 AgentConfiguration(Code Validation Agent) │ │ │ (asyncio.gather 并行执行) │ │ │ │ │ └──► 若有任意怀疑 │ │ 生成 AgentConfiguration(Information Editor Agent) │ │ 重写 task._response │ └───────────────────────────────────────────────────────────────────────┘5.1 编排器从外部拉取的输入来源读取内容原因task.response/task.response.output当前 AI 回答待验证的“不可信”载荷。task.description原始用户提示词作为 “Given Task: ...”给定任务转述给 verifier。task.contextstr 或 list用户提供的可信材料构成 “Trusted Source”可信来源块。task.response_formatPydantic 模式提醒 verifier 请求的形态editor 重发时原样复用。task.images、task.tools、task.price_id多模态与成本管道重新挂到 verifier 与 editor 子任务上保持成本追踪与工具可用性。reliability_layer.prevent_hallucination整数等级0 关闭10 完整门控整个管线。model参数使用的 LLM每个 verifier 与 editor 使用与父代理相同的模型。5.2 编排器写回的输出目的地写入内容task._responseeditor 清洗后的响应仅在any_suspicionTrue时。task._reliability_sub_agent_usage一个RunUsage累加器包含每个 verifier 与 editor 的 token/成本统计。管线步骤随后把它并入父上下文。5.3 从本目录导入的文件src/upsonic/agent/context_managers/reliability_manager.py from upsonic.reliability_layer.reliability_layer import ReliabilityProcessor这是代码库中唯一的直接导入。其余所有交互都由 manager 中介。管线步骤ReliabilityStep导入的是ReliabilityManager经由 src/upsonic/agent/context_managers/init.py 的惰性工厂从不直接导入ReliabilityProcessor。6. 公共 API该目录暴露了刻意收窄的接口面。只有ReliabilityProcessor.process_task意图被模块外部代码调用其余内容虽然可自由导入但属于内部实现。6.1ReliabilityProcessorclass ReliabilityProcessor: def __init__(self, confidence_threshold: float 0.7) - None: ... staticmethod async def process_task( task: Task, reliability_layer: Optional[Any] None, model: Optional[Union[Model, str]] None, ) - Task: 变更 task使任何可验证的幻觉被移除。 行为矩阵 ----------------- reliability_layer is None - 原样返回 task prevent_hallucination 0 - 原样返回 task prevent_hallucination 10 - 运行完整 verifiereditor 管线 其他正值 - 保留当前为 no-op 返回同一个 task 实例。若有怀疑task._response 被替换为 editor 清洗后的响应。 注意__init__中的confidence_threshold默认 0.7字段会被存储但当前并不被process_task消费属于为未来“软怀疑”门控预留见 reliability_layer.py。此外prevent_hallucination若是 property处理器会通过property.fget(reliability_layer)取值见 reliability_layer.py。6.2 Pydantic 模型class SourceReliability(Enum): HIGH | MEDIUM | LOW | UNKNOWN class ValidationPoint(BaseModel): is_suspicious: bool feedback: str suspicious_points: list[str] source_reliability: SourceReliability verification_method: str confidence_score: float class ValidationResult(BaseModel): url_validation: ValidationPoint number_validation: ValidationPoint information_validation: ValidationPoint code_validation: ValidationPoint any_suspicion: bool suspicious_points: list[str] overall_feedback: str overall_confidence: float def calculate_suspicion(self) - str: ...6.3 自由函数正则层def strip_context_tags(text: str) - str: ... def find_urls_in_text(text: str) - List[str]: ... def find_numbers_in_text(text: str) - List[str]: ... def find_code_in_text(text: str) - bool: ... def contains_urls(texts: List[str]) - bool: ... def contains_numbers(texts: List[str]) - bool: ... def contains_code(texts: List[str]) - bool: ...具体正则实现reliability_layer.pyfind_urls_in_text匹配http[s]://...也覆盖ftp://。find_numbers_in_text匹配整数、浮点、百分比、货币$1.99、科学计数法1e5。find_code_in_text扫描代码围栏...、行内反引号、关键字def/class/import等、常见代码标点{}[]();、f(x)形 token 与obj.method模式返回bool。contains_*批量版本会跳过非字符串条目。注意没有find_information_in_text——信息永远是候选所以information_validation始终运行。6.4 模块级提示词常量字符串类型url_validation_prompt number_validation_prompt information_validation_prompt code_validation_prompt editor_task_prompt # 含 {validation_feedback} 插槽它们在“可导入”意义上是公开的但属于实现契约的一部分、可能变化。使用方应将其视为不透明内容。7. 与 Upsonic 其余部分的集成7.1 如何嵌入 agent 管线ReliabilityStep作为标准 agent 管线中的一个固定步骤注册见 src/upsonic/agent/agent.py# src/upsonic/agent/agent.py — 标准管线摘录 ModelExecutionStep(), # 14 ResponseProcessingStep(), # 15 ReflectionStep(), # 16 TaskManagementStep(), # 17 ReliabilityStep(), # 18 -- Verify and clean output AgentPolicyStep(), # 19 CacheStorageStep(), # 20 FinalizationStep(), # 21 MemorySaveStep(), # 22在流式管线stream_*中该步骤同样存在紧随ReflectionStep之后。流式变体中步骤还会通过ayield_reliability_event发出一个reliability事件见 src/upsonic/utils/agent/events.py让下游观察者知道是否发生了修改对应事件类型为 src/upsonic/run/events/events.py 中的ReliabilityEvent。7.2 如何启用Agent构造时接受可选的reliability_layer参数任何带有prevent_hallucination整数属性的对象见 agent.py 与属性存储处 agent.pyclass HighReliability: prevent_hallucination 10 # 完整管线 ON agent Agent( modelopenai/gpt-4o, reliability_layerHighReliability(), )同样的机制也流过AutonomousAgent.__init__它会把自己的reliability_layer转发给内部的Agent见 src/upsonic/agent/autonomous_agent/autonomous_agent.py 与转发处 autonomous_agent.py。7.3 管线步骤在处理器周围做了什么ReliabilityStep.execute的真实实现steps.py要点如下if not agent.reliability_layer: # no-op 若流式发出 reliability_appliedFalse 事件 return StepResult(..., statusCOMPLETED, messageNo reliability layer) if task._cached_result: return StepResult(..., messageSkipped due to cache hit) if task._policy_blocked: return StepResult(..., messageSkipped due to policy block) original_output context.output reliability_manager ReliabilityManager(task, agent.reliability_layer, model) await reliability_manager.aprepare() try: processed_task await reliability_manager.process_task(task) task processed_task context.output processed_task.response finally: await reliability_manager.afinalize() # 子代理用量已通过 contextvars 进入注册表清理暂存字段即可 task._reliability_sub_agent_usage None modifications_made str(original_output) ! str(context.output)有三点值得注意缓存与策略阻断会绕过该层。若任务已返回缓存答案或被AgentPolicyStep阻断就没有新内容可验证——运行它会浪费 token。ReliabilityStep.execute在构造 manager 之前先检查task._cached_result与task._policy_blocked。用量遥测被保留。verifier 与 editor 的调用在处理器内部累加进task._reliability_sub_agent_usageRunUsage由于子代理通过 contextvars 继承父作用域标签其 LLM 用量已经进入注册表步骤只需把暂存字段清空即可见 steps.py。原始输出在处理前被捕获因此步骤可以计算modifications_made str(original_output) ! str(context.output)供流式事件与调试日志使用。7.4 遥测当agent.debug且agent.debug_level 2时步骤发出一个标记为ReliabilityStep的debug_log_level2条目包含{ modifications_made: bool, original_output_preview: str[:300], processed_output_preview: str[:300], reliability_layer_type: type(agent.reliability_layer).__name__, }这是诊断误报false positives的主要可观测性钩子。8. 端到端流程下面完整走一遍prevent_hallucination 10路径从ReliabilityStep.execute调用ReliabilityProcessor.process_task开始。8.1 阶段 A —— 提前退出检查if reliability_layer is None: return task # 未挂载层 prevent_hallucination getattr(reliability_layer, prevent_hallucination, 0) if isinstance(prevent_hallucination, property): prevent_hallucination prevent_hallucination.fget(reliability_layer) if prevent_hallucination 0: return task # 显式禁用 if prevent_hallucination ! 10: return task # 目前只有等级 10 被接线8.2 阶段 B —— 快照并解包响应copy_task deepcopy(task) copy_task._response task.response # 尝试提取包装器下的原始 output old_task_output task.response if hasattr(task.response, output): old_task_output task.response.output elif hasattr(task.response, model_dump): old_task_output task.response.model_dump()deepcopy 保证原始task在处理过程中被保留同时处理器为 verifier 构建上下文。8.3 阶段 C —— 构建共享上下文包同一上下文块被发给每个 verifiercontext_strings [fGiven Task: {copy_task.description}] if copy_task.context: items copy_task.context if isinstance(copy_task.context, list) else [copy_task.context] if copy_task.response_format: items.append(copy_task.response_format) for item in items: if isinstance(item, str): cleaned strip_context_tags(item) context_strings.append( fContext That Came From User (Trusted Source): fUser given context {cleaned} ) elif item.__bases__[0].__name__ BaseModel.__name__: context_strings.append( fUser requested output: Requested Output {item.model_fields} ) context_strings.append( fCurrent AI Response (Untrusted Source, last AI response that we are checking now): f{old_task_output} ) context_strings [strip_context_tags(s) if isinstance(s, str) else s for s in context_strings]这是信任模型的核心用户提供的上下文被标记为Trusted Source可信来源AI 自己的输出被标记为Untrusted Source不可信来源verifier 被告知检查前者是否扎根于后者。8.4 阶段 D —— 生成 verifier 子代理对四种校验类型分别执行步骤细节构建命名AgentAgentConfiguration(modelmodel, namef{validation_type.replace(_, ).title()} Agent)。与父代理使用相同模型。预过滤若类型是url_validation/number_validation/code_validation对[prompt] context_strings运行对应contains_*正则。若没有该类内容则直接把合成的ValidationPoint(is_suspiciousFalse, confidence_score1.0, verification_methodregex_*_detection)写入validation_result并continue。信息校验没有预过滤始终运行。构建 verifier 任务Task(prompt, response_formatValidationPoint, contextcontext_strings, imagestask.images, toolstask.tools, task_usage_id_task.task_usage_id, not_main_taskTrue)追加到列表加入validation_tasks、validation_types下一步 gather。8.5 阶段 E —— 并行运行 verifiervalidation_coroutines [ validator_agents[vt].do_async(validation_tasks[i], return_outputTrue) for i, vt in enumerate(validation_types) ] validation_outputs await asyncio.gather(*validation_coroutines) # 用量核算 from upsonic.usage import RunUsage if task._reliability_sub_agent_usage is None: task._reliability_sub_agent_usage RunUsage() for v_output in validation_outputs: if hasattr(v_output, usage) and v_output.usage: task._reliability_sub_agent_usage.incr(v_output.usage) for i, vt in enumerate(validation_types): setattr(validation_result, vt, validation_tasks[i].response)使用asyncio.gather而非顺序 await——四个 verifier 相互独立因此墙钟成本大约是一次LLM 调用而非四次。8.6 阶段 F —— 汇总validation_result.calculate_suspicion()这会填充any_suspicion、扁平的suspicious_points列表、人类可读的overall_feedback以及平均的overall_confidence。any_suspicion动作False原样返回task。verifier 签发了通行证。True继续阶段 G——调用 editor。8.7 阶段 G —— Editor 重写editor_agent AgentConfiguration(modelmodel, nameInformation Editor Agent) formatted_prompt editor_task_prompt.format( validation_feedbackvalidation_result.overall_feedback ) formatted_prompt ( f\n\nORIGINAL AI RESPONSE TO CLEAN:\n{old_task_output}\n\n fReturn the cleaned version of this response in the same format f(not as code or XML): ) cleaned_context [] if copy_task.context: for item in copy_task.context: if isinstance(item, str): cleaned_context.append(strip_context_tags(item)) else: cleaned_context.append(item) editor_task Task( formatted_prompt, imagestask.images, context[copy_task.response_format, validation_result] cleaned_context, response_formattask.response_format, # 与父任务相同的 schema toolstask.tools, task_usage_id_task.task_usage_id, not_main_taskTrue, ) editor_output await editor_agent.do_async(editor_task, return_outputTrue) # Editor 用量核算 if hasattr(editor_output, usage) and editor_output.usage: if not hasattr(task, _reliability_sub_agent_usage): task._reliability_sub_agent_usage RunUsage() task._reliability_sub_agent_usage.incr(editor_output.usage) task._response editor_task.response return task三个承重细节response_format被保留——清洗后的输出仍须匹配调用方的 Pydantic schema因此 editor 收到相同 schema且原始 Pydantic 模型类作为上下文元素一并给出。ValidationResult是 editor 上下文的一部分——editor 看到的不仅是要清洗什么还有为什么逐字段的suspicious_points、校验反馈。not_main_taskTrue——verifier 与 editor 子任务都被打标使框架其他部分遥测、回调能区分可靠性内部调用与用户主任务。8.8 阶段 H —— 管线返回清洗后的任务处理器返回task。管线步骤随后context.output processed_task.response # 设置新输出 task._reliability_sub_agent_usage None # 清理暂存标记 modifications_made str(original_output) ! str(context.output) # 发出 reliability 事件 / 调试日志debug_level 2 时…然后 agent 运行继续到其后的步骤通常是结果格式化与收尾。8.9 时序图ReliabilityStep ReliabilityManager ReliabilityProcessor Verifier×4 Editor │ │ │ │ │ │── aprepare() ────────►│ │ │ │ │ │ │ │ │ │── process_task ──────►│── process_task ────────►│ │ │ │ │ │ │ │ │ │── strip_context_tags / regex ── │ │ │ │ │ │ │ │── Task(URL) ────►Agent.do_async ──┤ │ │ │── Task(Num) ────►Agent.do_async ──┤ │ │ │── Task(Info) ────►Agent.do_async ──┤ asyncio.gather │ │ │── Task(Code) ────►Agent.do_async ──┤ │ │ │ │ │ │ │◄── 4×ValidationPoint ──────────────┤ │ │ │ │ │ │ │── calculate_suspicion() │ │ │ │ │ │ │ │── if any_suspicion: ───────────────►│ │ │ │ │── do_async │ │ │◄── cleaned response ───────────────│ │ │ │ │ │ │◄── task (mutated) ──────│ │ │◄── processed_task ────│ │ │ │── afinalize() ───────►│ │ │ │ │ │ │ │── fold usage / emit reliability event ─────────────────────────────────────────────► │8.10 成本特征场景LLM 调用最坏情况说明reliability_layer None0步骤为 no-op。prevent_hallucination 00处理器为 no-op。等级 10响应只有纯文本1仅 information verifierURL/数字/代码正则预过滤短路。等级 10文本 数字2information number等级 10混合内容干净最多 4 个 verifier并行不调用 editor。等级 10混合内容可疑最多 4 个 verifier 1 个 editoreditor 增加一次末尾的顺序调用。每一次这样的调用都会贡献给task._reliability_sub_agent_usage管线步骤随后将其并入父运行用量使用户看到单一准确的成本数字。8.11 失败模式与不变量不变量在哪里强制始终返回原始task对象。process_task的每个分支都以return task结束。仅在any_suspicionTrue时才变更task._response。只有 editor 分支赋值task._response。Verifier 失败只会标记/移除绝不会升级内容质量。editor 提示词禁止给出替代方案与解释。子代理用量始终被核算即使跳过 editor。verifier 循环无条件incr进_reliability_sub_agent_usage步骤随后并入父用量。缓存命中或策略阻断的任务完全绕过该层。ReliabilityStep.execute在构造 manager 前检查task._cached_result与task._policy_blocked。附录 A —— 事实依据文件路径关注点仓库相对路径ReliabilityProcessor、提示词、模型、正则辅助src/upsonic/reliability_layer/reliability_layer.pyReliabilityManager异步生命周期封装src/upsonic/agent/context_managers/reliability_manager.pyReliabilityStep管线集成src/upsonic/agent/pipeline/steps.py步骤注册标准管线第 18 步src/upsonic/agent/agent.pyAgent.reliability_layer属性src/upsonic/agent/agent.pyAutonomousAgent转发src/upsonic/agent/autonomous_agent/autonomous_agent.pyReliabilityEvent事件定义src/upsonic/run/events/events.py流式可靠性事件生成src/upsonic/utils/agent/events.py附录 B —— 新增一个 verifier若要新增一个比如citation引用verifier在现有四条提示词旁新增一个提示词常量如citation_validation_prompt。在ValidationResult中新增citation_validation: ValidationPoint并更新calculate_suspicion把它的标志、要点与置信度纳入聚合。在process_task内部的迭代列表中追加(citation_validation, citation_validation_prompt)。可选新增find_citations_in_text正则预过滤以及对应的if validation_type citation_validation: ...短路分支。无需管线改动——ReliabilityStep是数据驱动的会原样处理新增类型。这种最小触碰设计是有意为之每个新 verifier 的成本就是一条提示词 一个模型字段 一个元组条目。【免费下载链接】gpt-computer-assistantBuild autonomous AI agents in Python.项目地址: https://gitcode.com/GitHub_Trending/gp/gpt-computer-assistant创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表