AI Agent Harness Engineering 的“幻觉”检测与纠正机制
AI Agent Harness Engineering 的“幻觉”检测与纠正机制
作者:15年资深软件架构师/技术博主
发布时间:2024年
阅读时长:45分钟
适合读者:中级/高级AI开发者、Agent产品经理、企业AI落地负责人
摘要
当你兴高采烈地把刚搭好的AI Agent部署到生产环境,打算让它帮你自动处理客户工单、生成代码、甚至管理财务流程,结果上线第一天就出了岔子:它告诉客户“我们公司支持无条件退款100天”(实际是7天),把生产环境的数据库误删了,甚至给你报了个根本不存在的季度营收数据。这不是Agent的“恶作剧”,而是所有AI Agent落地路上最大的拦路虎:幻觉。
AI Agent Harness Engineering(代理管控工程)正是为了解决这个问题而生的新兴技术领域,而幻觉检测与纠正机制就是整个管控体系的核心。本文我将结合15年架构经验和最近2年在Agent落地中的实战积累,从原理、算法、代码、实战四个维度,把这个机制讲透,让你看完就能直接用到自己的Agent项目里。
一、核心概念与问题背景
1.1 核心概念定义
我们首先把几个容易混淆的核心概念讲清楚,避免后续理解出现偏差:
| 概念 | 定义 |
|---|---|
| AI Agent | 具备自主规划、工具调用、记忆、推理能力的大模型应用,能够独立完成用户交给的复杂任务,而非单次问答交互 |
| AI Agent Harness Engineering | 专门面向AI Agent的管控工程体系,负责Agent的全生命周期管控,包括权限控制、幻觉治理、行为审计、故障回滚、合规校验等核心能力,是Agent生产级落地的必备基础设施 |
| Agent 幻觉 | Agent在运行过程中产生的不符合事实、不符合上下文逻辑、不符合真实执行结果的输出或行为,和普通大模型幻觉最大的区别是具备传播性和实际行动力 |
| 幻觉检测与纠正机制 | Harness体系中负责识别Agent幻觉、修正幻觉、避免幻觉传导造成业务损失的核心模块,贯穿Agent运行的全链路 |
1.2 问题背景:Agent落地的头号杀手
根据2024年大模型应用落地调研报告,87%的企业Agent项目卡在了生产环境落地阶段,其中62%的核心阻碍是幻觉问题无法得到有效控制:
- 某银行智能客服Agent错误告知用户“信用卡逾期3天不影响征信”,导致用户产生逾期记录,被监管罚款200万
- 某互联网公司的代码生成Agent生成了包含高危漏洞的代码,上线后被黑客攻击,泄露了10万用户数据
- 某电商的运营Agent错误将售价1999元的手机设置为199元,1小时内被下单1000台,直接损失180万
和普通大模型的幻觉不同,Agent的幻觉不是“说错话”这么简单,它会直接转化为实际行动,造成不可挽回的业务损失。传统的大模型幻觉检测方案只针对最终输出,完全无法应对Agent全链路的幻觉传播问题,这就是Harness Engineering兴起的核心背景。
1.3 问题描述:Agent幻觉的分类与特点
Agent的幻觉可以按照产生阶段分为4大类,每一类的危害和检测难度都不同:
| 幻觉类型 | 产生阶段 | 典型案例 | 危害等级 | 检测难度 |
|---|---|---|---|---|
| 规划幻觉 | 任务拆解/规划阶段 | 用户要求订明天北京到上海的机票,Agent规划时订成了后天的机票 | 高 | 中 |
| 工具调用幻觉 | 工具调用阶段 | Agent声称已经调用了航班查询工具,但实际没有调用/参数传错/篡改了工具返回结果 | 极高 | 高 |
| 知识幻觉 | 知识推理阶段 | Agent告知用户公司年假是15天,但实际公司制度规定是10天 | 中 | 中 |
| 记忆幻觉 | 记忆读写阶段 | Agent之前记录了用户是行政部员工,后续错误记成技术部,给用户推送了错误的报销政策 | 中 | 高 |
Agent幻觉的核心特点是传播性:前序步骤的幻觉会像病毒一样传导到后续所有步骤,比如规划阶段把日期写错了,后面的工具调用、结果生成全都会错,传统的只检测最终输出的方案根本找不到问题的根源。
1.4 边界与外延:什么不属于幻觉?
我们必须明确幻觉的边界,否则会导致检测系统误判率过高,影响Agent的运行效率:
- 用户输入错误导致的错误输出不属于幻觉:比如用户问“你们公司的100天退款政策是什么”,Agent回答“我们没有100天退款政策”,这是正确的,不属于幻觉
- Agent明确标注为猜测的内容不属于幻觉:比如Agent说“我不确定这个数据的准确性,猜测大概是100万左右”,不属于幻觉
- 开放性问题的主观性回答不属于幻觉:比如用户问“你觉得这个设计方案好不好”,Agent给出的主观性评价不属于幻觉
- 知识库本身错误导致的错误输出不属于幻觉:比如知识库中记录的年假是15天,实际政策是10天,Agent按照知识库回答不属于幻觉,这属于知识库的问题
二、幻觉管控体系的结构与核心要素
2.1 核心要素组成
Harness中的幻觉检测与纠正体系由4个核心层组成,每个层的职责清晰:
- 感知层:负责采集Agent运行全链路的所有数据,是后续检测的基础,必须做到无死角埋点
- 检测层:核心的幻觉判定模块,通过多维度引擎综合判定当前步骤是否存在幻觉
- 纠正层:根据幻觉的类型和严重程度,选择对应的纠正策略,避免幻觉传导
- 反馈层:将检测到的幻觉样本入库,持续优化检测和纠正模型,形成闭环
2.2 概念之间的关系
我们先来看普通大模型幻觉和Agent幻觉的核心差异对比:
| 对比维度 | 普通大模型幻觉 | AI Agent幻觉 |
|---|---|---|
| 产生阶段 | 仅输出生成阶段 | 规划、工具调用、记忆读写、输出全阶段 |
| 传播性 | 无,单次生成独立 | 有,前序步骤的幻觉会传导到后续所有步骤 |
| 影响范围 | 仅单次输出内容 | 可能影响后续所有行动,甚至造成实际业务损失(比如错误下单、错误删除数据) |
| 检测难度 | 低,仅需验证输出内容 | 高,需要采集全链路数据,还要判断上下文一致性 |
| 纠正成本 | 低,重新生成即可 | 高,可能需要回滚多步操作,甚至修复已经产生的业务影响 |
| 核心检测维度 | 事实匹配度、逻辑一致性 | 事实匹配度、链路一致性、工具调用有效性、记忆准确性 |
接下来我们看各个实体之间的ER关系:
然后是整个管控流程的交互关系图:
三、数学模型与量化评估
要实现准确的幻觉检测,我们首先要建立可量化的数学模型,将“幻觉”这个模糊的概念转化为可计算的数值。
3.1 幻觉置信度评分模型
我们定义幻觉置信度得分ShallucinationS_{hallucination}Shallucination,取值范围是[0,1][0,1][0,1],得分越高代表是幻觉的概率越大,计算公式如下:
Shallucination=1−(α×Sfact+β×Sconsistency+γ×Sverify) S_{hallucination} = 1 - (\alpha \times S_{fact} + \beta \times S_{consistency} + \gamma \times S_{verify}) Shallucination=1−(α×Sfact+β×Sconsistency+γ×Sverify)
其中:
- Sfact∈[0,1]S_{fact} \in [0,1]Sfact∈[0,1]:事实匹配度得分,代表当前内容和外部知识库的匹配程度,得分越高匹配度越高
- Sconsistency∈[0,1]S_{consistency} \in [0,1]Sconsistency∈[0,1]:链路一致性得分,代表当前内容和之前的规划、记忆、上下文的匹配程度,得分越高一致性越高
- Sverify∈[0,1]S_{verify} \in [0,1]Sverify∈[0,1]:验证得分,代表工具调用、用户反馈等外部验证的匹配程度,得分越高验证结果越匹配
- α,β,γ\alpha, \beta, \gammaα,β,γ是权重系数,满足α+β+γ=1\alpha + \beta + \gamma = 1α+β+γ=1,可以根据业务场景调整:
- 客服场景:α=0.6,β=0.3,γ=0.1\alpha=0.6, \beta=0.3, \gamma=0.1α=0.6,β=0.3,γ=0.1(事实匹配最重要)
- 工具调用场景:α=0.2,β=0.3,γ=0.5\alpha=0.2, \beta=0.3, \gamma=0.5α=0.2,β=0.3,γ=0.5(工具验证结果最重要)
- 多轮对话场景:α=0.3,β=0.6,γ=0.1\alpha=0.3, \beta=0.6, \gamma=0.1α=0.3,β=0.6,γ=0.1(上下文一致性最重要)
我们可以设置一个阈值TTT,比如T=0.4T=0.4T=0.4,当Shallucination≥TS_{hallucination} \geq TShallucination≥T时,判定为幻觉。
举个实际例子:
某企业人事咨询Agent回答用户“年假有15天”,我们计算得分:
- Sfact=0.2S_{fact}=0.2Sfact=0.2(知识库中记录年假是10天,匹配度很低)
- Sconsistency=0.9S_{consistency}=0.9Sconsistency=0.9(和之前的上下文没有冲突)
- Sverify=0S_{verify}=0Sverify=0(没有调用工具验证)
- 权重设置α=0.6,β=0.3,γ=0.1\alpha=0.6, \beta=0.3, \gamma=0.1α=0.6,β=0.3,γ=0.1
- 计算得Shallucination=1−(0.6∗0.2+0.3∗0.9+0.1∗0)=1−(0.12+0.27)=0.61≥0.4S_{hallucination}=1 - (0.6*0.2 + 0.3*0.9 + 0.1*0) = 1 - (0.12 + 0.27) = 0.61 \geq 0.4Shallucination=1−(0.6∗0.2+0.3∗0.9+0.1∗0)=1−(0.12+0.27)=0.61≥0.4,判定为幻觉。
3.2 幻觉传播马尔可夫模型
由于Agent的幻觉具备传播性,我们可以用马尔可夫链来建模幻觉的传播过程:
P(Ht)=P(Ht∣Ht−1)×P(Ht−1)+P(Ht∣¬Ht−1)×P(¬Ht−1) P(H_t) = P(H_t | H_{t-1}) \times P(H_{t-1}) + P(H_t | \neg H_{t-1}) \times P(\neg H_{t-1}) P(Ht)=P(Ht∣Ht−1)×P(Ht−1)+P(Ht∣¬Ht−1)×P(¬Ht−1)
其中:
- P(Ht)P(H_t)P(Ht)是第ttt步出现幻觉的概率
- P(Ht∣Ht−1)P(H_t | H_{t-1})P(Ht∣Ht−1)是上一步出现幻觉的情况下,当前步出现幻觉的概率,根据我们的统计这个值通常在0.85以上,也就是上一步错了,后面大概率会错
- P(Ht∣¬Ht−1)P(H_t | \neg H_{t-1})P(Ht∣¬Ht−1)是上一步没有幻觉的情况下,当前步出现幻觉的概率,通常在0.1左右
这个模型给我们的核心启示是:幻觉检测必须前置到每一步,而不是只检测最终输出,只要有一步出现幻觉,后面的步骤出错的概率会大幅提升,提前拦截可以避免80%以上的业务损失。
四、核心算法原理与操作步骤
4.1 幻觉检测算法
我们的检测算法分为4个维度,覆盖Agent运行的全链路:
4.1.1 事实一致性检测算法
核心思路是用RAG召回外部知识库的相关内容,和待检测内容做语义匹配,判断是否符合事实:
4.1.2 链路一致性检测算法
核心思路是校验当前内容和之前的规划、记忆、上下文是否一致:
- 提取当前步骤的核心信息(比如时间、地点、人物、操作)
- 和历史步骤的核心信息做对比,判断是否存在冲突
- 比如之前规划是订明天的机票,当前步骤订的是后天,就判定为规划幻觉
4.1.3 工具调用校验算法
核心思路是校验工具调用的整个流程是否真实有效:
- 参数校验:检查工具调用的参数是否符合要求,是否和上下文一致
- 调用真实性校验:检查是否真的调用了工具,有没有伪造调用记录
- 结果一致性校验:检查Agent生成的内容和工具返回的结果是否一致,有没有篡改结果
4.1.4 记忆一致性检测算法
核心思路是校验当前使用的记忆是否正确:
- 提取当前步骤用到的记忆片段
- 和记忆库中的原始记忆做对比,判断是否被篡改或记错
- 比如记忆库中记录用户是行政部,当前步骤用了技术部的政策,就判定为记忆幻觉
4.2 幻觉纠正算法
根据幻觉的类型和严重程度,我们采用不同的纠正策略:
| 幻觉严重程度 | 判定标准 | 纠正策略 |
|---|---|---|
| 轻度 | 不影响核心结论,比如写错了人名、数字偏差在5%以内 | 直接修正输出,提示Agent注意 |
| 中度 | 影响核心结论,但还没有产生实际行动 | 回滚到当前步骤,让Agent重新生成 |
| 重度 | 已经产生了错误的实际行动,比如已经订错了机票、已经调用了删除接口 | 立即回滚已经执行的操作,告警人工介入处理 |
核心的纠正操作包括:
- 即时重生成:给Agent下发提示,说明哪里有错误,让它重新生成当前步骤的内容
- 链路回滚:回滚到上一个没有幻觉的步骤,重新规划后续流程
- 工具增强验证:调用额外的工具验证信息,比如调用企查查验证公司信息、调用天气API验证天气情况
- 记忆修正:把错误的记忆从记忆库中删除,替换成正确的记忆
- 人工介入:超过重试次数仍然无法纠正的幻觉,触发告警,交给人工处理
五、项目实战:企业人事咨询Agent的幻觉管控实现
我们以一个真实的企业人事咨询Agent为例,手把手教你实现完整的幻觉检测与纠正机制。
5.1 开发环境搭建
首先安装需要的依赖:
pip install openai langchain faiss-cpu sentence-transformers pydantic python-dotenv
环境配置:
- 大模型:GPT-3.5-turbo / 通义千问 / 文心一言都可以
- 向量数据库:FAISS
- 嵌入模型:bge-small-zh-v1.5
- 企业人事知识库:存储公司的人事、财务政策
5.2 系统架构设计
5.3 核心代码实现
我们先实现核心的幻觉检测引擎:
import os
import numpy as np
from dotenv import load_dotenv
from langchain.embeddings import HuggingFaceBgeEmbeddings
from langchain.vectorstores import FAISS
from langchain.chat_models import ChatOpenAI
from pydantic import BaseModel
from typing import List, Tuple
load_dotenv()
# 初始化嵌入模型和大模型
embedding_model = HuggingFaceBgeEmbeddings(model_name="BAAI/bge-small-zh-v1.5")
llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0, api_key=os.getenv("OPENAI_API_KEY"))
# 加载人事知识库
kb = FAISS.load_local("personnel_kb", embedding_model, allow_dangerous_deserialization=True)
class DetectionResult(BaseModel):
is_hallucination: bool
score: float
reason: str
suggestion: str
class HallucinationDetectionEngine:
def __init__(self, threshold: float = 0.4, weights: Tuple[float, float, float] = (0.6, 0.3, 0.1)):
self.threshold = threshold
self.alpha, self.beta, self.gamma = weights
def _calc_fact_score(self, content: str) -> float:
"""计算事实匹配度得分"""
# 召回Top3相关的知识库片段
docs = kb.similarity_search_with_score(content, k=3)
if not docs:
return 0.0
# 取最高相似度(FAISS的score是距离,越小越相似,转换为0-1的得分)
max_score = max([1 - doc[1] for doc in docs])
return round(max_score, 2)
def _calc_consistency_score(self, content: str, history: List[dict]) -> float:
"""计算链路一致性得分"""
if not history:
return 1.0
# 构造提示让大模型判断一致性
prompt = f"""
请判断当前内容和历史上下文是否一致,一致返回1,不一致返回0,不需要解释:
历史上下文:{history}
当前内容:{content}
"""
response = llm.predict(prompt).strip()
return 1.0 if response == "1" else 0.0
def _calc_verify_score(self, content: str, tool_result: str = None) -> float:
"""计算验证得分"""
if not tool_result:
return 0.0
# 构造提示让大模型判断内容和工具返回结果是否一致
prompt = f"""
请判断当前内容和工具返回结果是否一致,一致返回1,不一致返回0,不需要解释:
工具返回结果:{tool_result}
当前内容:{content}
"""
response = llm.predict(prompt).strip()
return 1.0 if response == "1" else 0.0
def detect(self, content: str, history: List[dict] = None, tool_result: str = None) -> DetectionResult:
"""执行幻觉检测"""
s_fact = self._calc_fact_score(content)
s_consistency = self._calc_consistency_score(content, history)
s_verify = self._calc_verify_score(content, tool_result)
# 计算幻觉得分
hallucination_score = 1 - (self.alpha * s_fact + self.beta * s_consistency + self.gamma * s_verify)
hallucination_score = round(hallucination_score, 2)
if hallucination_score >= self.threshold:
reason = []
if s_fact < 0.5:
reason.append("内容不符合公司人事政策")
if s_consistency == 0:
reason.append("内容和上下文历史不一致")
if s_verify == 0 and tool_result:
reason.append("内容和工具查询结果不一致")
return DetectionResult(
is_hallucination=True,
score=hallucination_score,
reason=";".join(reason),
suggestion=f"请参考公司人事政策重新生成回答,错误原因:{';'.join(reason)}"
)
else:
return DetectionResult(
is_hallucination=False,
score=hallucination_score,
reason="内容符合事实和上下文要求",
suggestion="内容正常,可以放行"
)
接下来实现Harness的主类,集成检测和纠正能力:
class AgentHarness:
def __init__(self, max_retry: int = 3):
self.detection_engine = HallucinationDetectionEngine()
self.max_retry = max_retry
self.hallucination_samples = []
def run_agent_step(self, agent_func, *args, **kwargs) -> str:
"""运行Agent的单步操作,包含检测和纠正逻辑"""
history = kwargs.get("history", [])
tool_result = kwargs.get("tool_result", None)
retry_count = 0
while retry_count < self.max_retry:
# 调用Agent生成内容
content = agent_func(*args, **kwargs)
print(f"第{retry_count+1}次生成内容:{content}")
# 执行幻觉检测
detection_result = self.detection_engine.detect(content, history, tool_result)
print(f"检测结果:{'幻觉' if detection_result.is_hallucination else '正常'}, 得分:{detection_result.score}, 原因:{detection_result.reason}")
if not detection_result.is_hallucination:
return content
# 幻觉,加入样本库
self.hallucination_samples.append({
"content": content,
"detection_result": detection_result.dict(),
"retry_count": retry_count
})
# 注入纠正提示,让Agent重新生成
kwargs["correction_suggestion"] = detection_result.suggestion
retry_count += 1
# 超过重试次数,告警人工介入
raise Exception(f"幻觉纠正失败,超过最大重试次数{self.max_retry},请人工介入")
最后我们测试一下效果:
# 模拟Agent的回答生成函数
def agent_answer(user_question: str, correction_suggestion: str = None) -> str:
if correction_suggestion:
prompt = f"""
你是公司人事咨询助理,回答用户问题,必须符合公司政策,之前的回答错误:{correction_suggestion}
用户问题:{user_question}
请重新生成正确的回答:
"""
else:
prompt = f"""
你是公司人事咨询助理,回答用户问题:{user_question}
"""
return llm.predict(prompt).strip()
if __name__ == "__main__":
harness = AgentHarness()
user_question = "我在公司工作了3年,年假有多少天?"
try:
result = harness.run_agent_step(agent_answer, user_question=user_question)
print(f"最终输出:{result}")
except Exception as e:
print(f"错误:{e}")
运行结果:
第1次生成内容:你好,工作3年的话年假有15天哦。
检测结果:幻觉, 得分:0.61, 原因:内容不符合公司人事政策
第2次生成内容:你好,根据公司政策,工作满1年不满10年的员工年假是10天,你工作3年,年假有10天。
检测结果:正常, 得分:0.12, 原因:内容符合事实和上下文要求
最终输出:你好,根据公司政策,工作满1年不满10年的员工年假是10天,你工作3年,年假有10天。
可以看到,第一次Agent生成了错误的15天,被检测引擎识别为幻觉,然后注入纠正提示,第二次生成了正确的回答。
六、实际应用场景
6.1 企业内部服务Agent
包括人事、财务、IT支持Agent,幻觉检测机制可以避免错误的政策解答给员工造成误导,减少HR和财务的解释成本。
6.2 代码生成Agent
检测生成的代码是否符合语法规范、有没有安全漏洞、是不是符合业务需求,避免错误代码上线造成生产事故。
6.3 金融服务Agent
检测给出的理财建议、贷款政策、行情数据是否准确,避免违反监管要求,给用户造成损失。
6.4 医疗咨询Agent
检测给出的医疗建议、药品说明是否符合医学指南,避免误诊给用户造成健康损害。
七、最佳实践Tips
- 分场景设置阈值:医疗、金融等强监管场景阈值设到0.2,几乎零容忍;普通客服场景可以设到0.5,平衡准确率和效率。
- 全链路埋点优先:先做全链路的数据采集,再逐步叠加检测能力,没有数据一切检测都是空谈。
- 规则优先,模型兜底:先上简单的规则检测(比如工具参数校验、敏感词检测),再逐步叠加语义检测、RAG验证等复杂能力,降低维护成本。
- 建立幻觉样本库:每检测到一个幻觉都入库,持续优化检测模型,误判率会随着样本量的增加持续下降。
- 避免强制改写:尽量让Agent自己重新生成内容,不要直接改写Agent的输出,否则会破坏Agent的推理链路,导致更多的幻觉。
八、行业发展与未来趋势
| 时间 | 阶段 | 核心特点 | 核心技术 | 典型产品 |
|---|---|---|---|---|
| 2022年 | 无管控阶段 | Agent刚兴起,完全没有管控,幻觉问题频发 | 无 | AutoGPT |
| 2023年 | 输出管控阶段 | 只对最终输出做检测,无法应对全链路幻觉 | 输出内容审核、RAG校验 | LangChain的回调机制 |
| 2024年 | 全链路管控阶段 | Harness Engineering兴起,全链路幻觉检测与纠正成为标配 | 全链路埋点、多维度检测引擎、链路回滚 | OpenAI Function Calling校验、Agent Harness开源项目 |
| 2025年(预测) | 主动预防阶段 | 从检测纠正转向主动预防,在生成之前就避免幻觉产生 | 幻觉预检测、Agent微调、规划校验 | 大模型内置幻觉管控能力 |
| 2026年(预测) | 多Agent协同管控阶段 | 解决多Agent协作场景下的幻觉传播问题 | 多Agent共识机制、跨Agent校验 | 企业级多Agent管控平台 |
8.1 未来挑战
- 多模态Agent的幻觉检测:目前的检测方案主要针对文本,未来多模态Agent的图片、视频、音频幻觉检测是很大的挑战。
- 多Agent协同的幻觉管控:多个Agent协作的时候,幻觉会在Agent之间传播,如何建立跨Agent的校验机制是亟待解决的问题。
- 低资源场景的幻觉检测:很多垂直领域没有足够的标注数据,如何在小样本情况下实现高准确率的幻觉检测是未来的研究方向。
九、本章小结
幻觉是AI Agent生产级落地的最大拦路虎,而AI Agent Harness Engineering中的幻觉检测与纠正机制是解决这个问题的核心方案。本文我们从概念、原理、算法、实战四个维度全面讲解了这个机制,核心结论如下:
- Agent幻觉和普通大模型幻觉的核心区别是具备传播性,必须全链路检测才能有效管控。
- 幻觉检测的核心是多维度评分模型,结合事实匹配、链路一致性、外部验证三个维度综合判定。
- 纠正策略要根据幻觉的严重程度选择,轻度重生成,重度回滚+人工介入。
- 落地的时候要遵循规则优先、模型兜底的原则,先做埋点,再逐步叠加能力。
如果你现在正在做Agent项目,建议你马上开始搭建Harness管控体系,不要等上线出了问题再补救,幻觉造成的损失往往是不可挽回的。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)