七、结果校验与反思模块(Agent Self-Review):AI 内置自我纠错机制
目录
七、结果校验与反思模块(Agent Self-Review):AI 内置自我纠错机制
通用大模型输出内容即流程终止,面向企业正式办公场景的 AI Agent,必须配套内置自检审核机制,规避数据错误、内容遗漏、流程错乱问题,属于办公使用的安全底线。工具调用完成原始数据返回之后,若是直接交给应答层输出,极易因为模型幻觉、接口异常、参数错位产出无效甚至错误的办公文件,自省校验模块就是整套 Agent 的 “质检岗”。
一、核心能力
1. 工具返回结果核验
对接口、脚本、数据库返回的原始数据做多维度校验:校验数据完整性、字段是否缺失、数值区间是否符合业务常识、文档格式是否合规、返回内容有无乱码与空值。例如调取月度营收报表数据时,自动判断营收数值不可能为负数、合计行数值是否等于明细累加值,拦截异常脏数据流入后续流程。
2. 缺失信息主动追问
解析本次任务全部入参与返回数据,识别参数缺失、数据源不足、执行条件不完善等问题。当缺少必要办公信息时,不会盲目执行、编造数据,主动向用户发起问询补齐内容。比如用户只要求 “整理上月运维报表”,未指定报表存放路径、报表统计口径,Agent 主动弹窗索要关键信息。
3. 任务一致性检查
对齐用户原始指令诉求与工具实际产出内容,全局校验执行成果是否匹配需求边界,防止子任务执行跑偏、多余执行无关操作。用户需求为 “导出 PDF 版月度工作总结”,校验环节就会拦截错误生成 Word 文件、额外发送文件至工作群这类偏离行为。
4. 失败回滚策略
设计分级异常处置机制:任务执行报错、内容校验不通过、触发系统违规规则时,立刻终止整条任务链路;对已完成的文件改动、数据写入操作执行回滚复原,同步记录完整异常堆栈、出错节点、原始入参,留存故障日志用于运维排查。
5. 任务经验沉淀
将本次校验发现的错误类型、问题诱因、修正方案存入长期记忆库,同类指令再次下发时,前置规避重复问题,持续优化 Agent 执行准确率。
二、落地价值
- 根治大模型幻觉通病 依靠刚性校验规则 + 模型二次复核双重机制,修正 AI 凭空编造数据、编造表格内容、虚构业务信息的问题,保障公文、报表、台账这类正式办公资料真实可用。
- 降低人工复核成本 绝大多数低级格式错误、数值错误、流程偏差由 Agent 自主修正,员工无需花费大量时间核对 AI 产出内容,只需要复核核心业务逻辑,大幅削减校对工作量。
- 守住企业办公数据安全红线 出错自动回滚、异常全程留痕,避免错误文件覆盖原有正式资料、脏数据写入业务数据库,防止 AI 误操作带来的办公资料损毁风险。
- 实现 Agent 闭环自优化 依靠自省反思的日志与纠错记录,形成 “执行 - 校验 - 纠错 - 沉淀经验” 的闭环,Agent 使用频次越高,出错概率越低,越贴合企业自身业务规范。
三、可落地操作手册(工程实操级)
1. 分层校验规则设计
分为三层校验:第一层为硬规则校验(数值范围、文件路径、文件格式、SQL 语法、系统黑名单),代码强制拦截;第二层为业务规则校验(财务数据勾稽关系、审批流程节点规范);第三层为 LLM 语义复核,判断内容语义是否匹配用户原始需求。
2. 分级异常处置规范
- 轻微异常:自动修正格式、补齐缺失字段,静默处理并在日志标注提醒;
- 中度异常:无法自主修复,主动向用户确认信息、确认执行方案;
- 严重异常:立刻终止任务,回滚全部操作,推送告警信息并记录完整故障日志。
3. 校验结果标准化输出模板
统一设计校验回执结构体,包含:校验状态、风险等级、异常点位、修正动作、原始结果、修正后结果、处理建议,方便上层应答模块统一解析展示。
4. 自省日志持久化方案
所有校验行为、纠错行为、回滚行为统一写入业务数据库,绑定本次会话 ID、用户 ID、任务 ID,做到每一次自检行为全程可溯源审计。
5. 与记忆模块联动配置
将高频错误场景、标准修正方案写入向量长期记忆,意图识别阶段匹配同类历史错误,提前做参数校验拦截,前置规避故障。
四、配套落地代码(生产级可直接运行)
7.1 自检规则配置文件(review_rules.py)
from typing import Dict, List, Any
# 数值类业务校验阈值
NUMERIC_RULE = {
"revenue": {"min": 0, "max": 99999999},
"person_num": {"min": 0, "max": 10000}
}
# 合法文件格式白名单
FILE_ALLOW_TYPE = [".xlsx", ".pdf", ".docx", ".md"]
# 高危操作关键词拦截
DANGER_SQL_KEY = ["delete", "drop", "alter", "truncate"]
class ReviewRuleConfig:
@staticmethod
def check_number(field_name: str, value: float) -> tuple[bool, str]:
if field_name not in NUMERIC_RULE:
return True, ""
rule = NUMERIC_RULE[field_name]
if not (rule["min"] <= value <= rule["max"]):
return False, f"字段{field_name}数值{value}超出合法区间【{rule['min']}~{rule['max']}】"
return True, ""
@staticmethod
def check_file_suffix(filename: str) -> tuple[bool, str]:
suffix = filename.lower().split(".")[-1]
if f".{suffix}" not in FILE_ALLOW_TYPE:
return False, f"文件格式.{suffix}不在系统允许的格式列表内"
return True, ""
@staticmethod
def check_sql_safe(sql: str) -> tuple[bool, str]:
sql_text = sql.lower()
for key in DANGER_SQL_KEY:
if key in sql_text:
return False, f"SQL包含高危操作指令:{key},已拦截执行"
return True, ""
7.2 核心自省校验主体(agent_review.py)
import copy
from review_rules import ReviewRuleConfig
from typing import Dict, Any
class AgentSelfReview:
def __init__(self):
self.review_logs = []
def write_review_log(self, task_id: str, original_data: Any, review_result: Dict):
log_item = {
"task_id": task_id,
"original_data": original_data,
"review_result": review_result
}
self.review_logs.append(log_item)
def data_inspect(self, task_id: str, original_data: Dict, demand_text: str) -> Dict[str, Any]:
"""数据刚性规则校验"""
review_res = {
"pass": True,
"risk_level": "safe",
"msg_list": [],
"fixed_data": copy.deepcopy(original_data)
}
# 数值校验
if "num_fields" in original_data:
for field, val in original_data["num_fields"].items():
ok, msg = ReviewRuleConfig.check_number(field, val)
if not ok:
review_res["pass"] = False
review_res["risk_level"] = "mid"
review_res["msg_list"].append(msg)
# 文件名校验
if "file_name" in original_data:
ok, msg = ReviewRuleConfig.check_file_suffix(original_data["file_name"])
if not ok:
review_res["pass"] = False
review_res["risk_level"] = "mid"
review_res["msg_list"].append(msg)
# SQL语句校验
if "sql_text" in original_data:
ok, msg = ReviewRuleConfig.check_sql_safe(original_data["sql_text"])
if not ok:
review_res["pass"] = False
review_res["risk_level"] = "high"
review_res["msg_list"].append(msg)
self.write_review_log(task_id, original_data, review_res)
return review_res
def rollback_action(self, task_id: str):
"""高危错误执行事务回滚"""
print(f"【任务{task_id}】检测到高危异常,已执行全部操作回滚")
return {"rollback_status": "success", "task_id": task_id}
7.3 调用演示 Demo
from agent_review import AgentSelfReview
if __name__ == "__main__":
review = AgentSelfReview()
test_task_id = "task_20260726_001"
# 模拟工具返回异常数据
test_data = {
"num_fields": {"revenue": -5000},
"file_name": "测试文件.exe",
"sql_text": "delete from biz_table"
}
res = review.data_inspect(test_task_id, test_data, "导出本月营收报表")
print("自检结果:", res)
if res["risk_level"] == "high":
review.rollback_action(test_task_id)
print("全部自检日志:", review.review_logs)
五、代码与理论对应关系
ReviewRuleConfig:承载全部硬性校验规则,对应结果核验、格式数值校验能力;AgentSelfReview主体类:实现数据检测、日志记录、异常回滚三大核心能力,匹配自省纠错、失败回滚业务规范;- 分层风险等级机制:对应轻度自动修复、中度询问用户、重度回滚终止的分级处置方案;
- 日志持久化数组:满足企业审计溯源要求,贴合私有化部署的合规标准。
六、章节总结
结果校验与反思模块是整套办公 Agent 的 “安全刹车与质检工序”。前面的意图识别、任务规划、工具调用、系统对接负责 “做事”,本模块负责 “查对错、纠错误、控风险”。在企业正式办公场景下,一旦失去自省校验机制,AI 的幻觉、接口异常、参数错误都会直接作用于真实业务文件与业务系统,带来不可预估的办公损失。搭配刚性规则代码校验 + LLM 语义复核的双层方案,既能保障自动化办公效率,又牢牢锁住数据与业务安全,是生产级 Agent 必不可少的安全防护层。
更多推荐


所有评论(0)