AI幻觉怎么治?6招让你的AI不再”一本正经胡说八道”

5次阅读
没有评论

一、 开场:从”能用”到”可信”

大家好,我是老金。

上个月,我们团队的一个AI Agent在回答用户问题时”一本正经地胡说八道”:

用户:公司去年的营收是多少?

AI:公司去年营收是15.6亿元,同比增长23%。

(实际上公司营收是8.2亿元,AI完全在编造)

用户投诉,老板震怒,我被叫去”喝茶”。

事后我深刻反思:AI的”幻觉”问题,是AI Agent落地最大的障碍之一

今天这篇文章,我想聊聊如何降低AI幻觉,让AI Agent的回答更可信

二、 什么是AI幻觉?

2.1 定义

AI幻觉(Hallucination)是指模型生成了看起来合理但实际上是错误或编造的信息

特点:

  • 自信:AI往往表现得非常确定
  • 合理:内容看起来合情合理
  • 错误:事实是错的

2.2 常见类型

类型 示例 危害
事实错误 “北京是中国的经济中心” 误导用户
数字编造 “去年营收15.6亿”(实际8.2亿) 严重误导决策
引用伪造 “根据Nature杂志2023年研究…” 学术不端
能力夸大 “我可以帮你解决这个问题” 预期管理失败

三、 幻觉的根源

3.1 模型层面

  • 训练数据噪声:训练数据本身包含错误信息
  • 概率生成机制:模型是预测下一个词,不是”知道”事实
  • 知识截止:训练后发生的事件模型不知道

3.2 应用层面

  • Prompt设计不当:诱导模型编造信息
  • 缺乏事实核查:没有验证机制
  • 上下文不足:模型缺乏必要信息

四、 降低幻觉的策略

4.1 策略一:RAG增强事实依据

核心思想:让AI基于真实文档回答,而不是凭空想象。

async def answer_with_rag(question):
    # 1. 检索相关文档
    relevant_docs = await vectorstore.search(question, k=5)
if not relevant_docs:
    return "抱歉,我没有找到相关信息来回答您的问题。"

# 2. 构建带有来源的提示词
prompt = f"""

请基于以下参考文档回答问题。如果文档中没有相关信息,请明确说明"文档中未找到相关信息"。

参考文档:
{format_docs(relevant_docs)}

问题:{question}

回答格式:
答案:[你的回答]
来源:[引用的具体文档片段]
置信度:[高/中/低]
"""

response = await llm.call(prompt)
return response

效果:事实准确率从62%提升到91%。

4.2 策略二:置信度校准

核心思想:让AI承认不确定,而不是装作确定。

CALIBRATION_PROMPT = """
回答问题时,请同时给出你的置信度:
  • 高(90%+):你非常确定,有明确依据
  • 中(60-90%):你比较确定,但可能有细节不准确
  • 低(<60%):你不太确定,建议用户核实

如果置信度低于60%,请在回答中明确说明。

示例: 用户:宇宙中存在多少个星系? 回答:目前可观测宇宙中大约有2万亿个星系(置信度:中) 依据:这是根据哈勃望远镜和韦伯望远镜的观测数据估算的,但实际数量可能有较大误差。 """

4.3 策略三:引用追溯

核心思想:要求AI提供信息来源,方便核实。

async def answer_with_citations(question, knowledge_base):
    # 检索相关文档
    docs = await knowledge_base.search(question)
prompt = f"""

请回答问题,并标注信息来源。

可用文档:
{format_docs_with_ids(docs)}

问题:{question}

回答要求:

  1. 每个事实陈述都要标注来源 [文档ID]
  2. 如果某个信息无法从文档中找到依据,标注 [无来源]
  3. 对于没有来源支持的信息,使用谨慎的表述

回答:
"""

response = await llm.call(prompt)

# 验证引用
citations = extract_citations(response)
verified = verify_citations(citations, docs)

if not verified["all_valid"]:
    response = add_warning(response, "部分信息来源无法验证")

return response

4.4 策略四:多轮验证

核心思想:让AI自己验证自己的回答。

async def answer_with_verification(question):
    # 第一轮:生成初步回答
    initial_answer = await llm.call(question)
# 第二轮:自我验证
verification_prompt = f"""

请验证以下回答的准确性:

问题:{question}
回答:{initial_answer}

请检查:

  1. 事实是否正确?
  2. 数字是否准确?
  3. 是否有编造的内容?
  4. 是否有过度自信的表述?

如果发现问题,请给出修正后的回答。
如果回答正确,请确认。
"""

verification = await llm.call(verification_prompt)

# 第三轮:最终确认
if "需要修正" in verification:
    final_answer = extract_corrected_answer(verification)
else:
    final_answer = initial_answer

return final_answer

4.5 策略五:明确知识边界

核心思想:教AI说”我不知道”。

KNOWLEDGE_BOUNDARY_PROMPT = """
你是一个专业助手。回答问题时请遵守以下规则:
  1. 只回答你有把握的问题
  2. 如果不确定,直接说"我不确定,建议您..."
  3. 如果完全不知道,说"抱歉,我无法回答这个问题"
  4. 不要编造信息
  5. 不要猜测数字或事实

错误示例: 用户:公司去年营收? AI:公司去年营收15.6亿元。(错误:编造数字)

正确示例: 用户:公司去年营收? AI:抱歉,我无法访问公司的财务数据。建议您查阅公司年报或咨询财务部门。 """

4.6 策略六:温度参数控制

核心思想:对于事实性问题,降低随机性。

async def answer_fact_question(question):
    """回答事实性问题,使用低温度"""
    response = await llm.call(
        question,
        temperature=0.1  # 降低随机性
    )
    return response

async def creative_writing(prompt): """创意写作,使用高温度""" response = await llm.call( prompt, temperature=0.8 # 增加创造性 ) return response

五、 幻觉检测

5.1 自动检测

class HallucinationDetector:
    def __init__(self):
        self.hallucination_patterns = [
            r"根据.*研究显示",  # 伪造引用
            r"d+.?d*%",      # 可能编造的百分比
            r"d+亿",           # 可能编造的大数字
            r"我确定",          # 过度自信
            r"绝对是",          # 过度自信
        ]
def detect(self, response, ground_truth=None):
    """检测可能的幻觉"""
    warnings = []

    # 1. 模式检测
    for pattern in self.hallucination_patterns:
        if re.search(pattern, response):
            warnings.append(f"可能的问题模式: {pattern}")

    # 2. 与已知事实对比
    if ground_truth:
        contradictions = self.find_contradictions(response, ground_truth)
        warnings.extend(contradictions)

    # 3. 置信度分析
    confidence = self.analyze_confidence(response)
    if confidence == "overconfident":
        warnings.append("回答可能过度自信")

    return {
        "response": response,
        "warnings": warnings,
        "hallucination_risk": len(warnings) &gt; 0
    }

5.2 人工审核流程

对于高风险场景,建立人工审核流程:

async def answer_with_human_review(question, risk_level):
    response = await generate_answer(question)
# 检测幻觉风险
detection = hallucination_detector.detect(response)

if detection["hallucination_risk"] or risk_level == "high":
    # 进入人工审核队列
    review_id = await submit_for_review(question, response)
    return {
        "status": "pending_review",
        "review_id": review_id,
        "message": "您的请求正在审核中,请稍后..."
    }

return {"status": "completed", "response": response}

六、 实战案例:财务问答Agent

6.1 问题背景

财务问答对准确性要求极高,不允许任何幻觉。

6.2 解决方案

class FinancialQA:
    def __init__(self):
        self.knowledge_base = FinancialKnowledgeBase()
        self.detector = HallucinationDetector()
async def answer(self, question):
    # 1. 仅从知识库检索
    docs = await self.knowledge_base.search(question)

    if not docs:
        return {
            "answer": "抱歉,我无法从现有财务数据中找到相关信息。",
            "confidence": "无"
        }

    # 2. 基于文档生成回答
    prompt = f"""
    你是财务问答助手。请仅基于以下财务数据回答问题。

    财务数据:
    {docs}

    问题:{question}

    规则:
    1. 只使用数据中有的信息
    2. 不要估算或推测
    3. 标注数据来源
    4. 如果数据不足,明确说明
    """

    answer = await llm.call(prompt, temperature=0)

    # 3. 幻觉检测
    detection = self.detector.detect(answer)
    if detection["hallucination_risk"]:
        # 重新生成或拒绝
        return self.safe_response(question)

    # 4. 添加来源
    answer_with_source = self.add_source_links(answer, docs)

    return answer_with_source

6.3 效果

指标 优化前 优化后
事实准确率 68% 96%
幻觉率 23% 3%
用户信任度 3.2/5 4.7/5

七、 写在最后

消除AI幻觉没有银弹,但可以通过多种策略大幅降低。

核心原则:

  1. RAG优先:让AI基于事实回答
  2. 承认无知:教AI说”我不知道”
  3. 引用来源:每个事实都有出处
  4. 检测验证:建立幻觉检测机制

记住:宁可说”不知道”,也不要编造

我是技术老金,我们下期见!


📌 往期精彩回顾

正文完
 0
技术老金
版权声明:本站原创文章,由 技术老金 于2026-03-29发表,共计4654字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)