大模型总是「胡说八道」怎么办?手把手教你如何应对!

news2024/11/23 23:04:54

随着 ChatGPT 的出现,「AI 幻觉」一词被频繁提及。那么,什么是 AI 幻觉?简单来说,就是大模型在一本正经地胡说八道。

不止 ChatGPT,其他大语言模型也经常如此,究其根本是大语言模型在训练的过程中存在数据偏差。为此,当问题不在射程范围内,它们或开始模糊答案,或编造一些看似正确的错误答案。在此情况下,如何阻止「AI 幻觉」成为开发者亟待解决的事情。

本文将从应对思路讲起,由原理、工具、操作实例展开,手把手教你如何阻止「AI 幻觉」!

阻止大模型“胡说八道”的三种思路

总体而言有三种思路:微调大语言模型、调整 prompt、用知识库进行限制。

提起阻止「AI 幻觉」,大家首先会想到用自己的数据对大语言模型进行微调。不过,这种思路是不切实际的,因为微调这件事情本身就与大语言模型的特点——零样本迁移。再者,微调需要准备大量的数据用于训练,这就对数据提出了更高的要求,例如数据必须有用,要进行数据清洗、数据要与训练适配等。此外,训练大模型对于资源的消耗堪称巨大,一般开发者很难承受背后的高昂费用。不止如此,经过微调的模型也不足以通用,甚至失去了大语言模型零样本迁移的优势,其成本和收益根本不成比例。

第二种思路是调整 prompt,即修改提示,例如,可以跟 ChatGPT 说"当你不知道答案的时候,不要编造答案,直接回答不知道。"但是,如果大家尝试过就会发现,ChatGPT 并不能很好地遵循此类指令,仍旧会出现编造答案的情况。另外,prompt 的长度是有限制的,众所周知 OpenAI 的调用按照长度单位 token 收费。超长且不甚有用的 prompt 只会弊大于利,只调整 prompt 的方式都谈不上是最优解。

第三种思路是通过建立知识库(Knowledge Base)的方式限制 「AI 幻觉」的“自由发挥”。知识库,顾名思义是给 ChatGPT 灌输一些额外的知识,为它提供更多的参考。前面提到了 token 的限制,因此如果把知识一股脑地“喂”给 ChatGPT 绝对属于得不偿失,且知识库中的知识未必都对问题有帮助。在此情况下,需要对这些知识进行语义搜索或者说是初步筛选,以找出真正有用的知识。不过,传统的知识检索的方式与之并不适配。如果只进行关键词搜索,答案很可能对回答问题毫无帮助或者遗漏重要的消息, CVP Stack 能够有效地解决这一问题。

什么是 CVP Stack?C 是以 ChatGPT 为代表的大模型,它在 AI 程序中充当中央处理器的角色;V 代表 Vector Database,即以 Zilliz Cloud 和 Milvus 为代表的向量数据库,为大模型提供知识存储;P 代表 Prompt Engineering,各环节通过 prompt 的方式进行交互。CVP 是我们的工程师在做问答机器人 OSSChat 时提出来的一种技术栈,对该项目感兴趣的同学可以点击详情了解(https://osschat.io/chat)。

CVP Stack 实操:用 Zilliz Cloud 和 LangChain 进行知识增强

如何借助 CVP Stack 模式对大模型进行知识增强?接下来的这个实例或许可以帮助大家了解一二。

不过,在正式进入实操环节前,需要先准备好 Zilliz Cloud。Zilliz Cloud 是用于全托管 Milvus 的云服务,有了 Zilliz Cloud 后,用户无需本地部署或维护向量数据库 Milvus,可以更加简单、快速地上手操作。目前,Zilliz Cloud 已经支持 AWS、GCP 的服务,今年 6 月底即将登陆阿里云,其他几朵云的服务也已提上日程。

回到 Zilliz Cloud 的准备环节:

  • 用户首先可以在 Zilliz 官网注册账号及登陆(https://cloud.zilliz.com/signup),现在注册即可获赠价值 400 的 credits;

  • 登陆后可以创建 Database,在此环节可以选择对应的云服务及所属项目;

  • 选择过后,页面右边会给出计费方式;

  • 随后便可在底部使用你所创建的 database;

  • 完成该步骤后,在 database details 中找到连接数据库的地址。有了连接地址后,用户就可以根据自己的计算机语言偏好选择用何种 SDK 进行操作。

准备完成后便可进入实操环节,用 Python 代码基于 Langchain 搭建一个带有知识增强的智能聊天机器人。其中 Vectorstore,也就是向量存储部分,会用到 Zilliz Cloud。该系统的架构主要分为问答和知识录入两条链路:

  • 知识录入:把文档转成向量,将其存储在 Zilliz Cloud 之中。由 Zilliz Cloud 提供向量存储和语义搜索的能力,在提问环节为 ChatGPT 提供额外的知识以增强其问答能力。

  • 问答:向大模型提问并得到最后的答案。不过如果在这个过程中使用知识增强,首先会将问题转换成向量,随后在知识库也就是向量数据库中进行语义搜索,并筛选出其中有用的信息,最终连同问题一起交给 ChatGPT。此时,ChatGPT 会综合问题及接收到的有用信息给出一个更靠谱的回答。

具体操作如下:

首先导入需要的 Langchain 模块(根据环境安装相关 python 依赖,比如 LangChain、pymilvus)。

alt

其中文档的加载和处理部分会用到 LangChain 提供的网页加载、文本拆分工具,具体代码如下:

alt

此处有一个在线的 demo 供大家参考,目前已公开在 Hugging Face 中,链接为 https://huggingface.co/spaces/SimFG/LangChain-Zilliz-Cloud

alt |demo 图片

alt

alt |打开 demo 后会看到该页面

  • 输入 URL 地址,该网页的内容将会被拆分并转成向量,存入数据库;

  • 从 OpenAI 获取 key,用于连接 OpenAI 服务;

  • 填写 Zilliz Cloud 数据库的连接信息,包括前文中提到的连接地址、用户名和密码;

  • 点击 Load Data 创建知识底库,创建时间取决于文档长度;

  • 加载完毕便可进行提问。

以上便是借助 Zilliz Cloud 和 LangChain 实现问答机器人(大模型)知识增强的全过程,具体讲解视频和 PPT 可点击获取。 (本文作者顾梦佳系 Zilliz 算法工程师)


  • 如果在使用 Milvus 或 Zilliz 产品有任何问题,可添加小助手微信 “zilliz-tech” 加入交流群。 ​
  • 欢迎关注微信公众号“Zilliz”,了解最新资讯。 ​ alt

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/560188.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

驱动开发-----io模型总结(2023-5-23)

1.非阻塞模型 在我们使用open函数时,将打开的驱动设置为O_NONBLOCK时,当我们用read函数去读取硬件数据时,无论硬件是否有数据,都会往下执行,不会被阻塞在这里 2.阻塞模型 在我们使用open函数时,没有设置…

C++学习之路-变量和基本内置类型

变量和基本内置类型 一、基本内置类型1.1 算数类型1.2 带符号类型和无符号类型1.3 类型转换含有无符号类型的表达式 1.4 字面值常量整形和浮点型字面值字符和字符串字面值转义序列指定字面值的类型 二、变量2.1 变量的定义初始化列表初始化默认初始化 2.2 变量声明和定义的关系…

斐波那契数列数列相关简化1

斐波那契数列问题介绍: 斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”&#xf…

包管理工具详解npm、yarn、cnpm、npx、pnpm

目录: 1 npm包管理工具 2 package配置文件 3 npm install原理 4 yarn、cnpm、npx 5 发布自己的开发包 6 pnpm使用和原理 当我们使用npm install xxxx 的时候会添加一个node_module和2个json文件: package.json是配置信息文件,  这个配…

Go完整即时通讯项目及Go的生态介绍

Go完整即时通讯项目 项目架构: 1 编写基本服务端-Server server.go package mainimport ("fmt""net" )// 定义服务端 type Server struct {ip stringport int }// 创建一个Server func NewServer(ip string, port int) *Server {return …

Jenkins + docker-compose 在 Centos 上搭建部署

一、前期准备 1. 检查 CentOS上 是否安装 docker 可以使用以下命令: sudo docker version 如果已经安装了Docker,它将显示有关Docker版本和构建信息的输出。如果未安装Docker,将收到有关命令未找到的错误消息。 2. 检查是否安装 docker-…

cookie-机制

目录 一、基础概念 二、cookie的处理方式 一、基础概念 1、cookie是存储在客户端的一组键值对 2、web中cookie的典型应用:免密登陆 3、cookie和爬虫之间的关联 有时,对一张页面进行请求的时候,如果请求的过程中不携带cookie的话&#xf…

Openai+Coursera: ChatGPT Prompt Engineering(四)

想和大家分享一下最近学习的Coursera和openai联合打造ChatGPT Prompt Engineering在线课程.以下是我写的关于该课程的前两篇博客: ChatGPT Prompt Engineering(一)ChatGPT Prompt Engineering(二)ChatGPT Prompt Engineering(三) 今天我们来学习第三部分内容&…

Java on Azure Tooling 4月更新|路线图更新及 Azure Toolkit for IntelliJ 增强

作者:Jialuo Gan - Program Manager, Developer Division at Microsoft 排版:Alan Wang 大家好,欢迎来到 Java on Azure 工具产品的4月更新。让我们首先来谈谈我们对未来几个月的 Java on Azure 开发工具的投资。在这次更新中,我们…

js - 闭包

1、闭包的概念 闭包:函数嵌套函数,内层函数访问了外层函数的局部变量。 // 闭包 function func1() {let a 9;let b 8;function func2() {console.log("a", a); // a 9}func2(); } func1(); 分析: 需要访问的变量会被放到闭包…

【云原生|Kubernetes】05-Pod的存储卷(Volume)

【云原生Kubernetes】05-Pod的存储卷(Volume) 文章目录 【云原生Kubernetes】05-Pod的存储卷(Volume)简介Volume类型解析emptyDirHostPathgcePersistentDiskNFSiscsiglusterfsceph其他volume 简介 Volume 是Pod 中能够被多个容器访问的共享目录。 Kubern…

ChatGPT可以帮助开发人员的8种方式...

“适应或灭亡”是科技界的口头禅,如果您是开发人员,则尤其如此。 由于技术的动态发展,开发人员面临着比大多数人更大的压力,他们要领先于适应和精通最好的工具。ChatGPT 是最新的此类工具。 虽然有人说 ChatGPT 是“工作杀手”&…

比Figma更丝滑的“Figma网页版“

随着互联网的全面普及和全球化,设计协作工具逐渐成为团队协作中不可或缺的一部分。设计师们常需要通过在线设计协作工具来完成设计任务,而 Figma 作为协作工具的佼佼者,成为了许多设计师心中的首选。但是,对于国内设计师来说&…

Leetcode406. 根据身高重建队列

Every day a Leetcode 题目来源:406. 根据身高重建队列 解法1:贪心 题解:根据身高重建队列 我们先按照身高从大到小排序(身高相同的情况下K小的在前面),这样的话,无论哪个人的身高都小于等于…

kubeadm安装集群的时候kube-proxy是如何安装的

背景 最近升级k8s集群时遇到这个问题,集群是使用kuberadm自动化脚本安装的,之前一直认为kubeadm安装的集群这些组件除了kubelet都是静态pod跑起来的。 其实kube-proxy并不是. kube-proxy是如何安装的 在使用kubeadmin安装Kubernetes集群时&#xff0c…

Echarts通过Jquery添加下拉列表动态改变展示的数据和图表

前言 在项目中,有时候我们会一些需求,比如要用Echarts绘制一个饼状图,并且要设置一个下拉列表,当我点击某个选项的时候,饼状图里面的数据会改变,图表样式也会发生改变。我们可以配合Jquery来实现这个功能。…

数字电路基础

目录 一、不同进制之间的转换 二、逻辑代数基础 三、门电路 四、组合逻辑电路 五、半导体存储电路 六、时序电路 一、不同进制之间的转换 二-十转换: 十-二转换: 二-十六转换 十六-二转换 八-二转换 二-八转换 十六-十转换: 先转换成…

python绘制气泡图|随机生成数据

python绘图系列文章目录 往期python绘图合集: python绘制简单的折线图 python读取excel中数据并绘制多子图多组图在一张画布上 python绘制带误差棒的柱状图 python绘制多子图并单独显示 python读取excel数据并绘制多y轴图像 python绘制柱状图并美化|不同颜色填充柱子 python随机…

log4cpp的使用

log4cpp的使用逻辑构造基本模板布局的格式化目的地对象操作文件回卷文件 log4cpp的使用 逻辑构造 目的地Appender:用于表示日志系统最后输出到哪 布局Layout:表示你输出的格式,类似与printf 优先级Priority:常见的优先级有emerg&…

【WSN覆盖】基于麻雀搜索算法的三维无线传感器网络覆盖优化 三维WSN覆盖优化【Matlab代码#26】

文章目录 【可更换其他算法,获取资源请见文章第5节:资源获取】1. SSA算法2. 三维覆盖模型3. 部分代码展示4. 仿真结果展示5. 资源获取 【可更换其他算法,获取资源请见文章第5节:资源获取】 1. SSA算法 2. 三维覆盖模型 三维覆盖模…