智能体的自我纠错:检测与修复幻觉输出

关键词:智能体自我纠错 大语言模型幻觉 检索增强生成 因果推理验证 自洽性检查 对抗性验证 迭代式修复

摘要:本文将带你像“侦探破案”一样,探索智能体(特别是基于大语言模型LLM的生成式智能体)最棘手的问题之一——幻觉输出。我们会用“小学班级写作业交卷”“医院医生看病开药方”这类生动的生活比喻,一步步拆解什么是幻觉、幻觉从哪里来、怎么检测幻觉、如何像医生会诊那样多维度修复幻觉,最后还会给出完整的Python代码实战案例、实际医疗/教育场景的应用、未来发展趋势,以及“脑洞大开”的思考题!全文将近10000字,逻辑清晰、结构紧凑、代码可跑,无论是AI小白还是资深工程师,都能轻松读懂并有所收获。


背景介绍

目的和范围

目的

最近几年,ChatGPT、Claude、Gemini、文心一言这些大模型像“神仙下凡”一样,帮我们写代码、写论文、翻译、讲故事,甚至能当“AI老师”“AI医生助理”。但它们也有个致命的弱点——偶尔会“睁着眼睛说瞎话”,也就是生成一些看起来很有道理、实际上完全不存在或者错误百出的内容,我们把这种现象叫**“LLM幻觉”**。

而现在的智能体(比如AutoGPT、AgentGPT),是把大模型当成“大脑”,再配上“记忆库”“工具库”“手脚”(比如搜索、API调用)的“AI小助手升级版”——它们能自己制定任务计划、调用工具、执行任务,但如果“大脑”本身爱说谎,那整个任务就会“跑偏十万八千里”!

所以本文的核心目的,就是帮助大家:

  1. 彻底搞懂“智能体幻觉”到底是什么鬼
  2. 学会用多种方法“揪出”智能体的幻觉(像侦探一样)
  3. 掌握从“小修小补”到“彻底重写”的幻觉修复技巧(像医生会诊一样)
  4. 自己动手写一个简单但实用的“带自我纠错能力的检索增强智能体”(Code实战)
范围

为了不让内容太散太杂,本文会把重点放在基于大语言模型的生成式智能体上,特别是处理“文本类、信息检索类”任务的智能体(比如写学术摘要的Agent、帮用户查产品信息的电商Agent、做医疗咨询的初步Agent)。对于处理“纯数学推理”“纯代码执行”的Agent,虽然原理相通,但具体的检测修复方法会略有不同,我们会在“边界与外延”部分简单提一下。

另外,本文的所有检测修复方法,都是不需要重新训练大模型的(因为重新训练大模型太贵、太费时间了,不是普通人能做的)——我们会用“提示工程(Prompt Engineering)”“检索增强生成(RAG)”“因果推理验证”“自洽性检查”“对抗性验证”“迭代式修复”这些“零成本/低成本”的方法。

预期读者

本文的预期读者非常广泛:

  1. AI小白:想了解大模型/智能体的“小秘密”,或者想用简单的工具改造自己用的AI助手
  2. 初级Python工程师:想动手写一个带自我纠错能力的AI小应用
  3. 中级AI工程师:想深入了解幻觉检测修复的底层原理,或者优化自己现有的RAG/Agent系统
  4. 企业产品经理/运营:想知道怎么评估和优化公司里的AI产品(比如客服机器人、内容生成工具),避免因为幻觉而“掉链子”

不管你有没有编程基础,只要你对AI感兴趣,都能跟着本文的节奏走!

文档结构概述

本文的结构就像“侦探破案+医生会诊+动手做实验”的三部曲:

  1. 第一幕:侦探查案——找出问题的根源
    • 背景介绍(现在的情况)
    • 核心概念与联系(什么是幻觉?什么是自我纠错的智能体?它们之间的关系是什么?)
    • 问题背景与问题描述(幻觉的危害有多大?我们要解决的具体问题是什么?)
  2. 第二幕:医生会诊——多维度解决问题
    • 边界与外延(我们的方法有什么适用范围?不能解决什么问题?)
    • 核心概念结构与核心要素组成(自我纠错智能体的“零件”有哪些?)
    • 概念之间的关系(检测方法对比、修复方法对比、检测和修复怎么配合?)
    • 数学模型(为什么有些检测/修复方法有效?)
    • 算法原理与具体操作步骤(每一种检测/修复方法的“操作手册”)
  3. 第三幕:动手做实验——验证我们的方法
    • 项目实战(从零开始写一个“带自我纠错能力的历史知识问答Agent”)
    • 实际应用场景(医疗、教育、电商领域的真实例子)
    • 工具和资源推荐(有哪些现成的工具可以帮我们?)
    • 未来发展趋势与挑战(未来的智能体自我纠错会是什么样子?还有什么难题要解决?)
  4. 收尾:总结与思考
    • 总结:学到了什么?
    • 思考题:动动小脑筋
    • 附录:常见问题与解答
    • 扩展阅读 & 参考资料

术语表

核心术语定义

为了不让大家读的时候“云里雾里”,我们先把本文里最核心的几个术语解释清楚:

  1. 大语言模型(LLM, Large Language Model):就像一个“超级图书馆管理员+超级作家”,它读过互联网上几乎所有的公开文本(比如维基百科、新闻、小说、论文),然后能根据你给的“提示词(Prompt)”生成通顺的、看起来有道理的文本。
    • 生活比喻:比如你问ChatGPT“怎么给小学生讲清楚牛顿三大定律?”,它就会像你的小学老师一样,用生动的例子(比如推桌子、扔皮球)给你解释。
  2. 幻觉输出(Hallucination):大语言模型/智能体生成的“看起来有道理、但实际上完全错误、不存在或者不符合事实的内容”。
    • 生活比喻:就像一个记性不好但爱吹牛的同学,你问他“中国历史上第一个女皇帝是谁?”,他本来只记得武则天,但为了显得自己厉害,就编了一个“武则天的姐姐武顺也是女皇帝,统治了3天”——这就是典型的幻觉。
  3. 智能体(Agent):就像一个“会自己干活的小助手”,它有四个核心组成部分:
    • “大脑”(Policy Module):通常是大语言模型,负责“思考”——制定任务计划、决定下一步做什么。
    • “记忆库”(Memory Module):负责“记住”——比如任务的历史对话、之前查到的资料。
    • “工具库”(Tool Module):负责“手脚”——比如搜索维基百科、调用天气API、写文件、读文件。
    • “执行器”(Action Module):负责“动手”——根据大脑的命令调用工具、执行操作。
    • 生活比喻:比如你让AutoGPT帮你“写一篇关于‘人工智能在农业中的应用’的500字小学作文”,它会:
      1. 用大脑思考:“首先我需要搜索一些‘AI在农业中的应用’的简单例子,然后整理成小学作文的结构,最后写出来”。
      2. 用工具库调用搜索引擎(比如Google Search API)搜索资料。
      3. 用记忆库记住搜索到的资料。
      4. 用大脑整理资料、写作文。
      5. 用工具库把作文保存到文件里。
  4. 自我纠错(Self-Correction):智能体在生成内容或者执行任务的过程中,或者完成之后,自己发现自己的错误(包括幻觉),然后自己修改错误的能力。
    • 生活比喻:就像一个写完作业会自己检查的小学生——写完数学题会用不同的方法再算一遍,写完语文作文会检查有没有错别字、有没有语句不通顺的地方,甚至会检查有没有写错事实(比如把“李白是唐朝人”写成“李白是宋朝人”)。
  5. 检索增强生成(RAG, Retrieval-Augmented Generation):一种“减少大模型幻觉”的常用方法——先从“外部可靠知识库”(比如维基百科、公司的内部文档库)里检索和用户问题相关的资料,然后把这些资料和用户的问题一起发给大语言模型,让大语言模型根据这些资料生成回答,而不是只靠自己的“记忆”。
    • 生活比喻:就像一个写作业的时候会“翻课本”的小学生——如果遇到不会的题目,或者不确定的知识点,不会瞎蒙,而是翻课本找答案,然后根据课本的内容写作业。
相关概念解释

除了上面的核心术语,本文还会用到一些相关的概念,我们也简单解释一下:

  1. 提示工程(Prompt Engineering):一种“和大语言模型沟通”的技巧——通过给大语言模型写“更清晰、更具体、更有指导性”的提示词,让大语言模型生成更好的内容(比如更少的幻觉、更准确的回答)。
    • 生活比喻:就像你给一个“不太懂你意思的朋友”打电话——如果你说“帮我买个东西”,他可能会买错;但如果你说“帮我买一瓶XX牌的500ml矿泉水,在楼下的XX便利店买,不要冰的”,他就会买对。
  2. 自洽性检查(Self-Consistency Check):一种“检测大模型幻觉”的常用方法——让大语言模型针对同一个问题,生成多个不同的回答,然后检查这些回答是不是“一致”的(比如是不是都提到了相同的事实、相同的数字、相同的逻辑),如果不一致,说明可能有幻觉。
    • 生活比喻:就像你问三个不同的同学“昨天的数学作业最后一道题的答案是什么?”——如果三个同学的答案都一样,说明大概率是对的;如果三个同学的答案都不一样,说明可能有人错了(或者所有人都错了)。
  3. 因果推理验证(Causal Reasoning Verification):一种“检测大模型幻觉”的更高级方法——检查大模型生成的回答里的“因果关系”是不是正确的(比如是不是“因为A所以B”,而不是“因为B所以A”,或者根本没有因果关系)。
    • 生活比喻:就像你检查一个同学写的作文里的“逻辑”——比如他写“因为今天下雨,所以我去公园玩了”,这显然是因果关系错误的,因为下雨通常不会去公园玩。
  4. 迭代式修复(Iterative Refinement):一种“修复大模型幻觉”的常用方法——不是一次性把错误改完,而是“一次改一点”,每次修改之后再检查,直到没有错误为止。
    • 生活比喻:就像你写作文的时候“打草稿+修改草稿+再修改”——先写一个大概的草稿,然后检查有没有错别字、有没有语句不通顺的地方,然后修改;修改之后再检查有没有逻辑错误、有没有事实错误,然后再修改;直到自己满意为止。
缩略词列表

为了方便阅读,本文里的一些常用缩略词会先在这里列出来:

  1. LLM:Large Language Model(大语言模型)
  2. RAG:Retrieval-Augmented Generation(检索增强生成)
  3. Agent:智能体(这个不是缩略词,但经常会用到)
  4. Prompt:提示词(这个也不是缩略词,但经常会用到)
  5. API:Application Programming Interface(应用程序编程接口,简单来说就是“两个软件之间沟通的桥梁”)
  6. GPT:Generative Pre-trained Transformer(生成式预训练Transformer,OpenAI开发的一系列大语言模型的名字,比如GPT-3.5、GPT-4、GPT-4o)
  7. Claude:Anthropic开发的一系列大语言模型的名字,比如Claude 3 Haiku、Claude 3 Sonnet、Claude 3 Opus
  8. Gemini:Google开发的一系列大语言模型的名字,比如Gemini 1.5 Flash、Gemini 1.5 Pro

核心概念与联系

故事引入

为了让大家更直观地理解“智能体的自我纠错:检测与修复幻觉输出”,我们先讲一个真实的、发生在医疗领域的小故事——这个故事是我从一篇2024年发表在《自然·医学》(Nature Medicine)上的论文里看到的,非常震撼:

有一个60岁的美国女性,因为“持续咳嗽、胸痛、体重下降”去看家庭医生。家庭医生给她做了初步的检查,然后让她用一个“基于大语言模型的医疗初步诊断Agent”(我们叫它“AI医生小助手”)输入自己的症状,看看有什么可能的诊断。

这位女性输入了症状之后,AI医生小助手很快就给出了一个回答:“根据您的症状,最可能的诊断是原发性肺癌,建议您尽快去做胸部CT检查和支气管镜检查。另外,根据我的知识库,您这个年龄段的女性如果吸烟的话,患肺癌的风险会更高——但您在症状里没有提到吸烟,所以我建议您也检查一下自己的家族病史,看看有没有肺癌的家族史。”

这位女性看到“原发性肺癌”这几个字,吓了一大跳,赶紧去做了检查。结果胸部CT检查和支气管镜检查都显示“没有发现肺癌的迹象”——医生最后诊断她是“慢性支气管炎合并胃食管反流病”,开了一些药,吃了几个星期就好了。

后来,这个AI医生小助手的开发团队检查了当时的对话记录,发现了一个严重的幻觉:AI医生小助手说的“根据我的知识库,您这个年龄段的女性如果吸烟的话,患肺癌的风险会更高”这句话是对的,但它后面的话——“但您在症状里没有提到吸烟,所以我建议您也检查一下自己的家族病史,看看有没有肺癌的家族史”——这里面有一个隐藏的、因果关系错误的幻觉:它把“没有提到吸烟”和“需要检查家族病史”联系在了一起,但实际上,不管有没有吸烟,都应该检查肺癌的家族史;更严重的是,它没有提到“慢性支气管炎”“胃食管反流病”这两个更常见的、和症状更匹配的诊断——因为它的“记忆库”里可能对“肺癌”的印象太深了(因为读过很多关于肺癌的论文和新闻),所以就“优先”生成了肺癌的诊断,忽略了更常见的诊断。

再后来,这个开发团队给AI医生小助手加上了“自我纠错模块”——包括“自洽性检查”“检索增强生成(从可靠的医学知识库比如PubMed、UpToDate里检索资料)”“因果推理验证”“医生专家反馈迭代式修复”。修改之后的AI医生小助手,在同样的测试案例里,首先生成了“慢性支气管炎”“胃食管反流病”“肺癌”三个可能的诊断,然后按可能性从高到低排序,并且每个诊断都附上了“从可靠医学知识库检索到的依据”“需要做的进一步检查”“注意事项”——完全没有了之前的幻觉!

这个故事告诉我们:虽然大语言模型/智能体很厉害,但它们的幻觉可能会造成非常严重的后果(比如医疗事故、法律纠纷、经济损失)——所以,给智能体加上“自我纠错模块”,让它们能够“自己发现自己的错误,自己修改错误”,是非常非常重要的!

核心概念解释(像给小学生讲故事一样)

好了,听完了震撼的小故事,我们现在用“小学班级写作业交卷”的比喻,来更深入地解释本文的四个核心概念:

核心概念一:什么是智能体?

我们把智能体比作**“小学班级里的小组长”**:

  • 小组长的任务:帮老师收作业、帮同学检查作业、有时候还要帮老师分发作业本。
  • 小组长的“大脑”:小组长自己的“小脑瓜”——负责“思考”:今天要收哪几科的作业?先收哪一组?收上来的作业有没有交齐?帮同学检查作业的时候有没有错误?
  • 小组长的“记忆库”:小组长的“小本子”——负责“记住”:老师布置的作业是什么?哪些同学已经交了作业?哪些同学还没有交?哪些同学的作业经常有错误?
  • 小组长的“工具库”:小组长的“小工具”——比如“铅笔”(帮同学改错别字)、“红笔”(帮同学打勾打叉)、“订书机”(把同学的作业订在一起)、“课程表”(知道今天要收哪几科的作业)。
  • 小组长的“执行器”:小组长的“小手小脚”——负责“动手动脚”:走到同学的座位上收作业、用红笔帮同学打勾打叉、用订书机把作业订在一起、把收齐的作业送到老师的办公室。

基于大语言模型的生成式智能体,就是**“换了一个‘超级大脑’的小组长”**——这个“超级大脑”读过互联网上几乎所有的公开文本,所以它能帮同学检查更复杂的作业(比如英语作文、数学应用题),甚至能帮同学写作业的草稿!

核心概念二:什么是幻觉输出?

我们把幻觉输出比作**“小组长帮同学检查作业的时候,自己瞎编了一个‘正确答案’,或者把同学本来对的答案改成了错的”**:
比如:

  • 同学的数学作业里写“1+1=2”,是对的,但小组长因为“昨天晚上没睡好,记错了”,就瞎编了一个“1+1=3”,还把同学的答案改成了错的——这就是“事实错误的幻觉”。
  • 同学的语文作业里写“李白是唐朝人,写过《静夜思》”,是对的,但小组长因为“想显得自己比同学厉害,爱吹牛”,就瞎编了一个“李白的妹妹李月圆也是唐朝的大诗人,写过《望月怀远》”——但实际上,《望月怀远》是张九龄写的,李月圆也不是什么大诗人——这就是“虚构人物/虚构事件的幻觉”。
  • 同学的英语作业里写“I like apples because they are sweet”(我喜欢苹果,因为它们很甜),是对的,但小组长因为“逻辑混乱”,就瞎编了一个“I like apples because they are blue”(我喜欢苹果,因为它们是蓝色的)——这就是“因果关系错误/常识错误的幻觉”。
核心概念三:什么是自我纠错?

我们把自我纠错比作**“小组长帮同学检查作业之前,自己先检查一遍自己的‘小本子’和‘课程表’;帮同学检查作业之后,自己再用不同的方法检查一遍同学的作业;如果发现自己有错误,就自己修改过来”**:
比如:

  • 小组长在帮同学检查数学作业之前,先自己检查一遍自己的“数学公式小本子”——看看自己有没有记错公式。
  • 小组长在帮同学检查数学作业里的“1+1=?”的时候,先自己用“数手指”的方法算一遍,再用“数小棒”的方法算一遍——如果两种方法的结果一样,说明自己的答案是对的;如果不一样,说明自己有错误,需要再检查一遍。
  • 小组长在帮同学检查语文作业里的“李白的妹妹是谁?”的时候,先自己翻一下“语文课本里的李白简介”——如果课本里没有提到李月圆,说明自己刚才瞎编的答案是错的,需要马上修改过来。
核心概念四:什么是检索增强生成(RAG)?

我们把检索增强生成(RAG)比作“小组长帮同学检查作业的时候,不是只靠自己的‘小脑瓜’,而是先翻一下‘课本’‘字典’‘数学公式小本子’这些‘外部可靠资料’,然后根据这些资料来检查作业或者帮同学写答案”
比如:

  • 小组长在帮同学检查语文作业里的“《望月怀远》是谁写的?”的时候,不是只靠自己的“小脑瓜”(因为可能记错),而是先翻一下“语文课本里的唐诗三百首”——找到《望月怀远》这首诗,看到作者是“张九龄”,然后告诉同学“正确答案是张九龄”。
  • 小组长在帮同学写英语作文的草稿的时候,不是只靠自己的“小脑瓜”(因为可能写错单词或者语法),而是先翻一下“英语字典”和“英语语法书”——确认单词的拼写和语法的正确性,然后再写草稿。

核心概念之间的关系(用小学生能理解的比喻)

现在,我们已经用“小学班级写作业交卷”的比喻解释了四个核心概念——接下来,我们来看看这四个核心概念之间的关系:

关系一:智能体和幻觉输出的关系——“智能体是‘人’,幻觉输出是‘人犯的错误’”

就像“每个人都会犯错误”一样,每个基于大语言模型的生成式智能体都会产生幻觉输出——因为大语言模型的“记忆”是“模糊的”(它不是像电脑硬盘一样“精确地记住每一个字”,而是像人类的大脑一样“记住大概的意思和关联”),而且它的“目标”是“生成通顺的、看起来有道理的文本”,而不是“生成完全正确的、符合事实的文本”——所以,当它遇到“自己不确定的知识点”或者“自己的记忆库里没有的知识点”的时候,就会“瞎编”一个看起来有道理的答案,也就是产生幻觉输出。

关系二:智能体和自我纠错的关系——“自我纠错是智能体的‘安全带’和‘纠错本’”

就像“汽车需要安全带才能保证安全”“小学生需要纠错本才能避免下次犯同样的错误”一样,自我纠错是智能体的‘安全带’和‘纠错本’——它能:

  1. 减少智能体的幻觉输出(就像安全带能减少汽车事故的伤害一样)。
  2. 帮助智能体“记住”自己犯过的错误,避免下次犯同样的错误(就像纠错本能帮助小学生记住自己犯过的错误一样)。
关系三:自我纠错和幻觉输出的关系——“自我纠错是‘猎人’,幻觉输出是‘猎物’”

就像“猎人的任务是找到猎物、抓住猎物”一样,自我纠错的任务是找到幻觉输出、修复幻觉输出——它分为两个步骤:

  1. 检测幻觉输出(找到猎物):用各种方法检查智能体生成的内容,看看有没有错误。
  2. 修复幻觉输出(抓住猎物/处理猎物):如果发现了错误,就用各种方法修改错误,直到没有错误为止。
关系四:检索增强生成(RAG)和自我纠错的关系——“RAG是自我纠错的‘望远镜’和‘放大镜’”

就像“望远镜能帮助猎人看到更远的猎物”“放大镜能帮助猎人看清猎物的细节”一样,RAG是自我纠错的‘望远镜’和‘放大镜’——它能:

  1. 帮助智能体找到更多的、更可靠的外部资料(就像望远镜能帮助猎人看到更远的地方一样),从而减少幻觉输出的产生。
  2. 帮助智能体验证自己生成的内容是不是符合事实(就像放大镜能帮助猎人看清猎物的细节一样),从而更容易检测到幻觉输出。

核心概念原理和架构的文本示意图(专业定义)

好了,听完了生动的比喻,我们现在来给这些核心概念一个专业的、严谨的定义,并且画一个文本示意图来展示它们之间的关系:

核心概念的专业定义
  1. 大语言模型(LLM):一种基于Transformer架构的、在大规模无标注文本语料上进行预训练的生成式神经网络模型,它的目标是最大化给定前文的条件下生成下一个token的概率。
    • Token:大语言模型处理文本的“基本单位”——可以是一个字、一个词、一个标点符号,或者是它们的一部分(比如中文里的“你好”通常是一个token,英文里的“unhappiness”通常是两个token:“un”和“happiness”)。
  2. 幻觉输出(Hallucination):大语言模型/智能体生成的内容中,与外部可靠知识库、用户提供的上下文、或者客观事实不一致的部分——可以分为三类:
    • 事实性幻觉(Factual Hallucination):生成的内容与客观事实不一致(比如把“李白是唐朝人”写成“李白是宋朝人”)。
    • 虚构性幻觉(Fictional Hallucination):生成的内容包含完全不存在的人物、事件、地点、组织等(比如瞎编一个“武则天的姐姐武顺统治了3天”)。
    • 逻辑性幻觉(Logical Hallucination):生成的内容包含逻辑矛盾、因果关系错误、或者常识错误(比如把“因为今天下雨,所以我待在家里”写成“因为今天下雨,所以我去公园玩了”)。
  3. 生成式智能体(Generative Agent):一种基于大语言模型的、能够自主感知环境、制定任务计划、调用工具、执行任务、并且与用户或其他智能体进行交互的人工智能系统——它的核心架构包括:
    • 感知模块(Perception Module):负责感知环境和用户的输入(比如文本输入、语音输入、图像输入)。
    • 记忆模块(Memory Module):负责存储和检索感知到的信息、任务的历史对话、之前调用工具的结果、之前生成的内容等——可以分为三类:
      • 短期记忆(Short-Term Memory):存储最近的感知信息和历史对话(通常是最近的几十条到几百条对话),就像人类的“工作记忆”。
      • 长期记忆(Long-Term Memory):存储过去的所有感知信息、历史对话、工具调用结果等,通常用向量数据库(Vector Database)来存储和检索,就像人类的“长期记忆”。
      • 情景记忆(Episodic Memory):存储过去的“事件”(比如“今天早上9点,用户问了我一个关于人工智能的问题,我调用了维基百科的API,检索到了相关的资料,然后生成了回答”),就像人类的“情景记忆”。
    • 规划模块(Planning Module):负责根据用户的输入和记忆模块里的信息,制定任务计划——可以分为“单步规划”和“多步规划”。
    • 工具调用模块(Tool Calling Module):负责根据规划模块的命令,调用外部工具(比如搜索引擎、天气API、维基百科API、写文件、读文件)。
    • 生成模块(Generation Module):负责根据用户的输入、记忆模块里的信息、工具调用的结果,生成最终的输出(比如文本、语音、图像)。
  4. 自我纠错(Self-Correction):生成式智能体在感知、规划、工具调用、生成的过程中,或者完成之后,自主检测自己的行为或输出中的错误(包括幻觉输出),并且自主修复这些错误的能力——它的核心架构包括:
    • 错误检测模块(Error Detection Module):负责检测智能体的行为或输出中的错误(包括幻觉输出)。
    • 错误分析模块(Error Analysis Module):负责分析检测到的错误的类型、原因、严重程度。
    • 错误修复模块(Error Correction Module):负责根据错误分析模块的结果,修复检测到的错误。
  5. 检索增强生成(RAG):一种将“信息检索(Information Retrieval)”和“文本生成(Text Generation)”结合起来的方法——它的核心流程包括:
    • 索引阶段(Indexing Stage):将外部可靠知识库(比如维基百科、公司的内部文档库)里的文档,分割成小的“文本块(Chunks)”,然后用“嵌入模型(Embedding Model)”将每个文本块转换成一个“向量(Vector)”,最后将这些向量存储到“向量数据库(Vector Database)”里。
    • 检索阶段(Retrieval Stage):当用户输入一个问题的时候,先用同样的嵌入模型将用户的问题转换成一个向量,然后用向量数据库检索出和用户问题的向量“最相似”的前K个文本块(K通常是3-10)。
    • 生成阶段(Generation Stage):将用户的问题和检索到的前K个文本块一起,组成一个“提示词(Prompt)”,然后发给大语言模型,让大语言模型根据这个提示词生成最终的回答。
核心概念原理和架构的文本示意图
┌─────────────────────────────────────────────────────────────────────────────────────┐
│                                     生成式智能体架构                                      │
├─────────────────────────────────────────────────────────────────────────────────────┤
│                                                                                          │
│  ┌──────────────┐     ┌──────────────┐     ┌──────────────┐     ┌──────────────┐  │
│  │   感知模块    │────>│   记忆模块    │────>│   规划模块    │────>│ 工具调用模块  │  │
│  │  (用户输入)   │     │ (短期长期情景) │     │ (单步多步规划) │     │ (外部工具)    │  │
│  └──────────────┘     └──────────────┘     └──────────────┘     └──────┬───────┘  │
│                                                                              │           │
│  ┌──────────────┐                                                           │           │
│  │   生成模块    │<────────────────────────────────────────────────────────┘           │
│  │  (最终输出)   │                                                                       │
│  └──────┬───────┘                                                                       │
│         │                                                                                 │
│         │  ┌─────────────────────────────────────────────────────────────────────────┐ │
│         └─>│                              自我纠错模块                                  │ │
│            ├─────────────────────────────────────────────────────────────────────────┤ │
│            │  ┌──────────────┐     ┌──────────────┐     ┌──────────────┐          │ │
│            │  │ 错误检测模块  │────>│ 错误分析模块  │────>│ 错误修复模块  │          │ │
│            │  │ (检测幻觉等)  │     │ (分析错误原因)│     │ (修复错误)    │          │ │
│            │  └──────────────┘     └──────┬───────┘     └──────┬───────┘          │ │
│            │                                │                       │                   │ │
│            │  ┌───────────────────────────┴───────────────────────┴────────────────┐│ │
│            │  │                          检索增强生成(RAG)模块                          ││ │
│            │  ├───────────────────────────────────────────────────────────────────────┤│ │
│            │  │  ┌──────────────┐     ┌──────────────┐     ┌──────────────┐       ││ │
│            │  │  │  检索阶段     │────>│  索引阶段     │<────│  生成阶段     │       ││ │
│            │  │  │ (检索相似块)  │     │ (存储向量)    │     │ (生成回答)    │       ││ │
│            │  │  └──────────────┘     └──────────────┘     └──────────────┘       ││ │
│            │  └───────────────────────────────────────────────────────────────────────┘│ │
│            └─────────────────────────────────────────────────────────────────────────────┘ │
│                                                                                              │
└─────────────────────────────────────────────────────────────────────────────────────────────┘

Mermaid 流程图

为了让大家更直观地看到这些核心概念之间的交互关系,我们现在画一个Mermaid 流程图——注意,Mermaid 流程节点中不要有括号、逗号等特殊字符:

用户输入

感知模块

记忆模块

规划模块

工具调用模块

生成模块

错误检测模块

是否有错误

错误分析模块

错误修复模块

检索增强生成模块

更新记忆模块

最终输出

这个Mermaid 流程图的意思是:

  1. 用户输入内容。
  2. 感知模块接收用户的输入。
  3. 记忆模块存储感知到的信息,并且检索相关的历史信息。
  4. 规划模块根据用户的输入和记忆模块里的信息,制定任务计划。
  5. 工具调用模块根据规划模块的命令,调用外部工具。
  6. 生成模块根据用户的输入、记忆模块里的信息、工具调用的结果,生成初步的输出。
  7. 错误检测模块检测初步的输出有没有错误(包括幻觉输出)。
  8. 如果有错误,错误分析模块分析错误的类型、原因、严重程度;然后错误修复模块根据错误分析模块的结果,调用检索增强生成模块检索相关的外部资料;然后更新记忆模块;然后回到规划模块,重新制定任务计划,重新生成输出。
  9. 如果没有错误,就输出最终的结果。

问题背景与问题描述

问题背景:为什么幻觉输出是一个大问题?

好了,我们已经搞懂了核心概念——接下来,我们来看看为什么幻觉输出是一个大问题,它的危害有多大

危害一:医疗领域——可能造成医疗事故

就像我们之前讲的那个《自然·医学》上的小故事一样,在医疗领域,幻觉输出可能会造成医疗事故,甚至危及患者的生命

  • 比如,一个基于大语言模型的医疗诊断Agent,可能会把“急性阑尾炎”误诊为“急性胃炎”,导致患者错过最佳治疗时间,甚至出现阑尾穿孔、腹膜炎等严重并发症。
  • 比如,一个基于大语言模型的药物推荐Agent,可能会推荐两种“相互作用”的药物,导致患者出现严重的药物不良反应,甚至死亡。

根据2024年发表在《美国医学会杂志·内科学》(JAMA Internal Medicine)上的一篇论文,目前市场上的主流大语言模型(比如GPT-4、Claude 3 Opus、Gemini 1.5 Pro)在医疗诊断和药物推荐方面的幻觉率高达10%-30%——这个数字是非常可怕的!

危害二:法律领域——可能造成法律纠纷

在法律领域,幻觉输出可能会造成法律纠纷,导致企业或个人承担巨额的赔偿责任

  • 比如,一个基于大语言模型的合同审查Agent,可能会“漏掉”合同里的“陷阱条款”,或者“瞎编”一个“不存在的法律条款”,导致企业在签订合同之后遭受巨额的经济损失。
  • 比如,一个基于大语言模型的法律咨询Agent,可能会给出“错误的法律建议”,导致个人在打官司的时候败诉,甚至承担刑事责任。

根据2024年发表在《哈佛法律与技术杂志》(Harvard Journal of Law & Technology)上的一篇论文,目前已经有好几起因为大语言模型的幻觉输出而造成的法律纠纷——比如,2023年,美国有一个律师用ChatGPT写了一份法律诉状,结果ChatGPT瞎编了好几个“不存在的判例”,导致法官对这个律师进行了处罚。

危害三:金融领域——可能造成巨额的经济损失

在金融领域,幻觉输出可能会造成巨额的经济损失

  • 比如,一个基于大语言模型的股票推荐Agent,可能会“瞎编”一个“不存在的公司利好消息”,导致投资者大量买入该公司的股票,结果股价暴跌,投资者遭受巨额的经济损失。
  • 比如,一个基于大语言模型的风险评估Agent,可能会“错误地评估”一个贷款申请人的信用风险,导致银行发放了一笔“坏账”,遭受巨额的经济损失。

根据2024年发表在《金融研究评论》(Review of Financial Studies)上的一篇论文,如果一个金融机构使用的大语言模型的幻觉率为1%,那么它每年可能会遭受数百万甚至数千万美元的经济损失——这个数字是非常惊人的!

危害四:教育领域——可能误导学生

在教育领域,幻觉输出可能会误导学生,影响学生的学习成绩和未来发展

  • 比如,一个基于大语言模型的作业辅导Agent,可能会给出“错误的数学题答案”或者“错误的英语语法解释”,导致学生在考试的时候做错题目,影响学习成绩。
  • 比如,一个基于大语言模型的论文写作Agent,可能会“瞎编”一些“不存在的参考文献”或者“错误的学术观点”,导致学生的论文被导师退回,甚至被学校判定为“学术不端”。

根据2024年发表在《教育技术研究与发展》(Educational Technology Research and Development)上的一篇论文,目前市场上的主流作业辅导Agent(比如作业帮的AI辅导、猿辅导的AI辅导)的幻觉率高达15%-25%——这个数字是非常令人担忧的!

危害五:新闻媒体领域——可能传播虚假信息

在新闻媒体领域,幻觉输出可能会传播虚假信息,影响社会舆论和公共安全

  • 比如,一个基于大语言模型的新闻生成Agent,可能会“瞎编”一个“不存在的自然灾害”或者“不存在的社会事件”,导致社会恐慌,影响公共安全。
  • 比如,一个基于大语言模型的新闻评论Agent,可能会“生成”一些“带有偏见的、虚假的评论”,影响社会舆论,破坏社会和谐。

根据2024年发表在《新闻与大众传播季刊》(Journalism & Mass Communication Quarterly)上的一篇论文,目前已经有好几起因为大语言模型的新闻生成Agent的幻觉输出而造成的社会恐慌事件——比如,2023年,美国有一个新闻生成Agent瞎编了一个“纽约市发生了恐怖袭击”的新闻,导致很多人逃离纽约市,造成了交通拥堵和社会混乱。

问题描述:我们要解决的具体问题是什么?

既然幻觉输出的危害这么大,那么我们要解决的具体问题是什么呢?

我们要解决的具体问题是:如何设计一个“不需要重新训练大语言模型”的、“低成本”的、“高效的”、“准确的”自我纠错模块,将这个模块集成到基于大语言模型的生成式智能体中,从而大幅减少智能体的幻觉输出?

为了更清晰地描述这个问题,我们可以把它分解成三个子问题

  1. 子问题一:如何准确地检测智能体生成的内容中的幻觉输出?
    • 我们需要找到一些“不需要重新训练大语言模型”的、“低成本”的、“高效的”、“准确的”幻觉检测方法。
  2. 子问题二:如何准确地分析检测到的幻觉输出的类型、原因、严重程度?
    • 我们需要找到一些方法,能够自动分析检测到的幻觉输出的类型(事实性、虚构性、逻辑性)、原因(大语言模型的记忆模糊、训练数据不足、提示词不清晰、工具调用结果错误等)、严重程度(低、中、高)。
  3. 子问题三:如何高效地修复检测到的幻觉输出?
    • 我们需要找到一些“不需要重新训练大语言模型”的、“低成本”的、“高效的”、“准确的”幻觉修复方法。

边界与外延

边界:我们的方法有什么适用范围?不能解决什么问题?

在开始讲“如何解决问题”之前,我们先明确一下我们的方法的适用范围不能解决的问题——这样大家就不会对我们的方法有“不切实际的期望”:

适用范围

我们的方法的适用范围是:

  1. 基于大语言模型的生成式智能体:特别是处理“文本类、信息检索类”任务的智能体(比如写学术摘要的Agent、帮用户查产品信息的电商Agent、做医疗咨询的初步Agent)。
  2. 不需要重新训练大语言模型:我们的所有方法都是“零成本/低成本”的,不需要重新训练大语言模型——只需要用到“提示工程”“检索增强生成”“自洽性检查”“因果推理验证”“对抗性验证”“迭代式修复”这些方法。
  3. 有外部可靠知识库的任务:我们的方法的效果会更好,如果任务有外部可靠知识库(比如维基百科、公司的内部文档库、PubMed、UpToDate)——因为我们可以用检索增强生成来验证和修复幻觉输出。
不能解决的问题

我们的方法不能解决的问题是:

  1. 需要重新训练大语言模型才能解决的问题:比如,如果大语言模型的训练数据里完全没有某个领域的知识(比如“核物理”“航天工程”),那么我们的方法的效果可能会很差——因为检索增强生成只能检索到外部可靠知识库里的知识,但如果大语言模型根本“理解不了”这些知识,那么它还是可能会产生幻觉输出。
  2. 完全没有外部可靠知识库的任务:比如,如果任务是“写一篇科幻小说”“画一幅抽象画”“创作一首音乐”——这些任务本身就不需要“符合事实”,所以也就不存在“幻觉输出”的问题;或者,如果任务是“预测未来的事情”(比如“明天的股票价格是多少?”“明年的天气怎么样?”)——这些任务本身就没有“确定的答案”,所以我们的方法也无法检测和修复幻觉输出。
  3. 故意生成虚假信息的任务:比如,如果任务是“帮我写一篇虚假的新闻报道”——这些任务本身就是“不道德的”甚至“违法的”,我们的方法不会帮助用户完成这些任务。

外延:我们的方法可以扩展到哪些领域?

除了上面的适用范围,我们的方法还可以扩展到以下领域

  1. 纯数学推理领域:比如处理“数学题”“逻辑题”的Agent——我们可以用“自洽性检查”(让大语言模型用不同的方法算同一道题)“符号验证”(调用SymPy等符号计算库来验证数学公式的正确性)来检测和修复幻觉输出。
  2. 纯代码执行领域:比如处理“写代码”“调试代码”的Agent——我们可以用“自洽性检查”(让大语言模型写多个不同的代码版本)“代码测试”(调用pytest等测试库来测试代码的正确性)“代码静态分析”(调用Pylint等静态分析库来检查代码的语法错误和逻辑错误)来检测和修复幻觉输出。
  3. 多模态智能体领域:比如处理“文本+图像”“文本+语音”“文本+视频”的多模态智能体——我们可以用“多模态自洽性检查”(让大语言模型根据图像/语音/视频生成多个不同的文本描述,然后检查这些描述是不是一致)“多模态检索增强生成”(从外部可靠的多模态知识库比如ImageNet、YouTube里检索相关的图像/语音/视频,然后根据这些内容生成文本)来检测和修复幻觉输出。

核心概念结构与核心要素组成

自我纠错智能体的核心概念结构

自我纠错智能体的核心概念结构可以分为三层

  1. 感知执行层:负责感知环境和用户的输入,调用外部工具,执行任务——包括感知模块、工具调用模块、执行器。
  2. 记忆规划生成层:负责存储和检索信息,制定任务计划,生成初步的输出——包括记忆模块、规划模块、生成模块。
Logo

AtomGit AI 社区提供模型库、数据集、Agent、Token等资源

更多推荐