大模型出现幻觉啦

你可以把大模型想象成:一个知识渊博、口才极佳的“大忽悠”。

这个“大忽悠”脑子里装了海量的知识,所以跟你聊天时总是侃侃而谈,听起来非常有道理。但问题是,他有一种“无法忍受沉默和不知道”的强迫症。当你问到一个他不知道或者他记忆模糊的事情时,他不会说“我不知道”,而是会基于他已有的知识“脑补”出一段听起来极其合理、但完全是编造的内容,并且用非常自信、肯定的语气告诉你。

这就是大模型的“幻觉”,学术上常称为“胡言乱语”或“虚构”。它指大模型生成的内容在事实层面是错误的、不存在的,但形式上却非常连贯、可信。

比如~我的代码里有一个名为@CustomFilter注解,这个注解大模型肯定不知道吧....下面是大模型的回答,我搜了下 Mybatis-Plus 并没有这个注解。

image-20251114230523762

让大模型别“胡说八道”

如何不让大模型胡说八道呢?看一下下面这些方式吧,其中 RAG 将会是我们这篇文章讲述的重点。

Prompt - 在提问时给它立规矩

通过精心设计你的提问方式,来约束模型的行为。

  • 是什么:在提问的指令中,明确告诉模型“必须基于已知事实”、“如果不知道就明确说不知道”、“禁止虚构信息”。

  • 举例:提示词如下,大模型也给出了“不知道”的回答

    1.不确定、不清楚、无法确认的内容,一律回答:不知道。
    2.不能根据猜测、可能性、假设来回答。
    3.所有回答必须基于确定、准确、可靠的知识。
    4.不允许编造事实或补充未经确认的信息。
    

    image-20251115000335026

  • 优点:零成本,简单易用,对所有模型都有效。

  • 缺点:约束力有限,对于复杂或模型知识盲区的问题,它可能还是会“忍不住”编造,并且我们是想要它回答的...


Fine-Tuning - 从根本上改变它的知识

  • 是什么:用大量“高质量、高事实性、相关内容的”的数据对基础模型进行额外的训练,微调其参数。
  • 优点:能从模型内部提升其事实性和可靠性,效果比较根本。
  • 缺点:成本高昂(需要大量算力和高质量数据),过程复杂,而且无法教给模型它从未学过的知识(比如最新新闻)。

比曾经的AI六小虎,搜狗创始人王小川创立的百川智能已经不再推出通用大模型,转向医疗大模型,背后就是给大模型不断的 Fine-Tuning 医疗相关的数据。

image-20251114232027429


RAG - 给它一本“参考答案”,让它照本宣科

这是目前最流行、最有效且成本最低的方法。

  • 是什么检索增强生成。在让模型回答之前,先从一个你准备好的、可信的知识库(比如公司文档、产品手册、权威论文)里,搜索出与问题最相关的片段,然后把“问题+相关片段”一起交给模型,让它基于这些片段来组织答案。

  • 生活比喻:就像考试时,不允许学生自由发挥,而是发给他一本《标准答案汇编》,要求他所有的回答都必须引用这本汇编里的原话。

  • 如何工作:

    1. 准备知识库:把你的所有可靠资料(PDF、Word、网页等)处理成可搜索的格式。
    2. 用户提问:用户问:“我们产品的旗舰型号支持哪些AI功能?”
    3. 实时检索:系统立刻在你的产品手册知识库里搜索“旗舰型号”、“AI功能”等关键词,找到最相关的几段描述。
    4. 组合并回答:模型收到的指令实际上是:“请根据以下资料,回答用户的问题。资料:[检索到的产品手册原文]。 问题:我们产品的旗舰型号支持哪些AI功能?”
    5. 模型生成:模型会乖乖地基于你提供的资料,总结、复述生成答案,几乎不会编造。

检索增强生成

Retrieval-Augmented Generation

  • 解决思路:将外部知识库与LLM结合,通过检索获取相关信息,增强生成质量
  • 核心价值:降低幻觉、提供实时信息、支持私域知识

一个RAG系统的基本架构就是如下图所示,分为索引、检索、生成三个步骤,接下来我们娓娓道来

image-20251114222532878

什么是向量?

想象一下,你正在教一个外星人理解地球语言。这个外星人不懂中文、英文,但它精通数学。你怎么向它解释"苹果"这个词的含义呢?

向量的神奇之处就在于:它把人类语言中模糊的、主观的语义概念,转换成了精确的、可计算的数学表示(最终形态是 一个固定长度的浮点数数组)。

image-20251114234945089

把你的资料向量化

在RAG中便是将你所要构建的“知识”文本先切分成很多端的小块,然后将这些小块使用向量模型进行向量化,最后将文本块的向量和文本块同时存到向量数据库当中。

文本块向量和文本块是一种 key-value结构,所以后面我们找到了文本块向量也就找到了文本块。

1. 文本分块处理

  • 固定长度分块:按预设字符数均匀切分,适合格式规整的文档
  • 语义分块:基于句子边界和语义完整性进行智能分割
  • 重叠分块:在相邻分块间设置重叠区域,避免关键信息被割裂
  • 自定义分块:可根据段落、章节等文档结构进行灵活划分

2. 向量化编码

  • OpenAI的text-embedding-ada-002等系列

  • Google的BERT及其变体模型

  • Sentence-BERT等专用语义编码模型

  • 阿里云的text-embedding系列

  • 轻量级本地部署:

    • all-MiniLM-L6-v2等小型模型 (试过了,不好用别用,中小型公司乖乖用厂商的)
    • 针对中文优化的m3e等开源模型

3. 向量存储方案

  • Milvus(开源首选,强推,国产之光)

  • Pinecone(全托管服务)

  • Chroma(轻量易用)

  • 传统数据库扩展

    • ElasticSearch with 向量插件
    • PostgreSQL + pgvector扩展
    • Redis 向量搜索模块

image-20251114235538955

检索向量化后的内容

那么将原始的文档转换为向量存储后,我们要怎么用呢?其实一个向量可以在一堆向量之间找出他的“哥们”。

举个:假如全世界的人都面部信息是一个向量数据库,我们把周杰伦的脸看作一个向量,那么向量数据库就会很快给我们匹配出“周饼伦“。

image-20251115010225934

那么我们想要从向量数据库里匹配出相似的内容,需要以下步骤

  • 将查询的内容也转换为向量
  • 计算查询向量与所有文档向量的相似度
  • 返回相似度最高的K个文本块(前面我们讲了向量和文本块是一种key-value结构,我们搜索到了向量,就找到文本块,这里向量起到的是一个索引的作用)

image-20251115002605890

怎么计算相似度呢

计算向量相似度常用的算法有三种:分别是点积相似、余弦相似、欧氏距离

点积相似度

点积相似的计算方式很简单,就是两个向量对应位置的数值相乘,值越大就是越相似

点积 = (A₁ × B₁) + (A₂ × B₂) + (A₃ × B₃) + ... + (Aₙ × Bₙ)  = Σ(Aᵢ × Bᵢ)  对于 i1 到 n

image-20251115013647329

余弦相似度

其实就是高中学的计算两个点与原点形成的夹角的余弦值,比如说已知平面内两个点 X(x1,y1) 和 Y(x2,y2),我们就是要计算,这两个点与原点的连接线的夹角的余弦值,最终也是值越大的越相似。

image-20251115015359575

公式如下:

            A·B
cos(θ) = ———————————————
          |A| × |B|
​
其中:
A·B = 向量AB的点积
|A| = 向量A的长度 = √(A₁² + A₂² + ... + Aₙ²)
|B| = 向量B的长度 = √(B₁² + B₂² + ... + Bₙ²)
​
举个吧
​
假设:
向量A = (1, 2, 3)
向量B = (4, 5, 6)
​
计算步骤:
1. 点积 A·B = (1×4) + (2×5) + (3×6) = 4 + 10 + 18 = 32
2. 向量A长度 |A| = √(1² + 2² + 3²) = √(1 + 4 + 9) = √143.74
3. 向量B长度 |B| = √(4² + 5² + 6²) = √(16 + 25 + 36) = √778.77
4. 余弦相似度 = 32 / (3.74 × 8.77) ≈ 32 / 32.80.975

image-20251115015759265

欧氏距离

在语义空间中测量"直线距离",公式为:距离 = √[(A₁-B₁)² + (A₂-B₂)² + ... + (Aₙ-Bₙ)²]

image-20251115015900791

三种方式的适用场景

余弦相似度:文本语义比较、文档检索排序、内容推荐系统(多数场景用的都是这个)

欧氏距离:空间位置测量、聚类分析、异常检测

点积相似度:快速初步筛选、计算资源有限场景(说白了,就是比较拉)

image-20251115002350117

LLM 生成

好了,经历了上面流程我们基本知道了索引和检索的过程,那么经过检索匹配后的文档就会作为我们跟大模型交互的一部分,这样大模型就会根据我们推荐给它的文档进行思考回复,就避免“胡说八道”。

下面有一个完整的流程图,可以回顾一下~

image-20251115021335718

RAG 实战案例

为了更深入的了解 RAG 我们就利用 Cherry Studio 这个工具搭建一个最简单的 RAG

第一步-注册一个阿里百炼的账号

为什么选择阿里百炼?其实现在的 LLM 差距并不大,我们选择哪家都可以,最主要的百炼平台上有向量模型,我们从上面取一份密钥就可以直接用 LLM 和向量模型啦,比较方便一点(也许腾讯云、百度飞桨、字节火山也会有,但是我并不知道......这个随意)

我们就直接创建一个API 复制就行了

image-20251115223214671

第二步-打开Cherry Studio进行相关配置

首先,在模型服务中搜索到“阿里云百炼”,然后填充好刚刚复制好的密钥,检测成功即可

image-20251115223906067

然后点击最下方的添加按钮,添加向量模型:text-embedding-v4

image-20251115224016654

第三步-添加知识库

创建知识库,配置向量模型

image-20251115224418364

添加要向量化的文件或者目录的位置(我要演示的是 @CustomFilter 这个注解,所以就把有这个注解的MilvusPlus的源码添加进来了),

image-20251115224610581

这整个过程对应的就是,之前讲的RAG系统中的索引流程

image-20251115224833168

第四步-配置助手,体验知识库

首先我们先不给他配置知识库,体验一下他是否会“胡说八道“

image-20251115225044022

确实在胡说八道了。。。。

image-20251115225448855

现在编辑助手,给他安排上知识库看一下,完美撒花

image-20251115225537768

本站提供的所有下载资源均来自互联网,仅提供学习交流使用,版权归原作者所有。如需商业使用,请联系原作者获得授权。 如您发现有涉嫌侵权的内容,请联系我们 邮箱:[email protected]