大模型应用初学指南

        随着人工智能技术的快速发展,检索增强生成(RAG)作为一种结合检索与生成的创新技术,正在重新定义信息检索的方式,RAG 的核心原理及其在实际应用中的挑战与解决方案,通用大模型在知识局限性、幻觉问题和数据安全性等方面的不足,随后详细介绍了 RAG 通过 “检索 + 生成” 模式如何有效解决这些问题,RAG 利用向量数据库高效存储与检索目标知识,并结合大模型生成合理答案,RAG 的关键技术进行了全面解析,包括文本清洗、文本切块、向量嵌入、召回优化及提示词工程等环节,针对 RAG 系统的召回效果与模型回答质量,本文提出了多种评估方法,为实际开发提供了重要参考

一、人工智能术语或书籍

LLM,chatGPT,RAG,Agent 等等的术语,AI:Artificial Intelligence 的缩写,指 “人工智能”,AIGC:AI Generated Content 的缩写,意指由人工智能生成的内容。在算法和数码内容制作领域,AIGC 涉及使用人工智能技术生成各种形式的内容,比如文字、图像、视频、音乐,

Transformer:一种用于自然语言处理(NLP)任务的深度学习模型

BERT:Bidirectional Encoder Representations from Transformers 的缩写,是一种自然语言处理(NLP)的预训练模型

PEFT:Parameter-Efficient Fine-Tuning 的缩写,中文高效参数微调

LoRA:Low-Rank Adaptation 的缩写,一种用于微调大规模语言模型的一种技术

LLM:Large Language Model 的缩写,指 “大语言模型”

RAG:Retrieval-Augmented Generation 的缩写,指 “检索增强生成”,这是一个跨越检索和生成任务的框架,通过先从数据库或文档集合中检索到相关信息

Agent:中文叫智能体,一个能独立执行任务和做出决策的实体,在人工智能中

GPT:Generative Pre-trained Transformer 的缩写,指 “生成式预训练变换器”

LLaMA:Large Language Model Meta AI 的缩写,是由 Meta 开发的一系列大型自然语言处理模型

chatGPT:由 OpenAI 开发的一种基于 GPT(生成预训练变换模型)架构的人工智能聊天机器人

Prompt:指的是提供给模型的一段初始文本,用于引导模型生成后续的内容

Embedding:中文叫嵌入,是一种将高维数据映射到低维空间的技术,但仍尽可能保留原数据的特征和结构。嵌入技术通常用于处理和表示复杂的数据如文本、图像、音乐以及其他高维度的数据类型

二、向量数据库

非结构化数据呈现出高速增长的趋势。图片、音频、视频等非结构化数据的存储和检索需求也变得越来越多

IDC DataSphere 数据显示 IDC FutureScape:2024年中国数据和分析市场十大预测

        为了更有效地管理非结构化数据,常见的做法是将其转换为向量表示,并存储在向量数据库中。这种转换过程通常被称为向量化或嵌入(Embedding)。通过将文本、图像或其他非结构化数据映射到高维向量空间,我们可以捕捉数据的语义特征和潜在关系。向量数据库通过在「向量表示」上构建索引,实现快速的相似性搜索。

        向量数据库是用于存储和查询高维向量数据的数据库,通常在搜索、推荐系统、图像识别、自然语言处理等领域中广泛使用。

常用的向量数据库

1. Faiss (Facebook AI Similarity Search):

  • 开发者:Facebook AI Research

  • 特点:高效的相似性搜索和密集向量聚类,支持 CPU 和 GPU 加速。

  • 适用场景:图像相似性搜索、大规模推荐系统等。

2. Annoy (Approximate Nearest Neighbors Oh Yeah):

  • 开发者:Spotify

  • 特点:基于内存的高效最近邻搜索,使用构建的可持久化树数据结构。

  • 适用场景:音乐推荐、快速搜索等。

3. HNSW (Hierarchical Navigable Small World):

  • 开发者:Yury Malkov(和其他社区贡献者)

  • 特点:小世界图算法,高效的近似最近邻搜索,支持动态插入和删除。

  • 适用场景:实时搜索和推荐系统。

4. Elasticsearch with k-NN Plugin:

  • 开发者:Elastic

  • 特点:在 Elasticsearch 之上添加 k-NN 搜索功能,结合全文搜索和向量搜索。

  • 适用场景:综合搜索引擎,需要同时支持文本和向量查询的场景。

5. Milvus:

  • 开发者:ZILLIZ

  • 特点:分布式、高性能向量数据库,支持大规模数据管理和检索。

  • 适用场景:图像、视频、文本等大规模向量数据的存储和检索。

6. Pinecone:

  • 开发者:Pinecone

  • 特点:专用于机器学习应用程序的向量数据库,易于集成和扩展。

  • 适用场景:个性化推荐、语义搜索、实时机器学习应用等。

7. Weaviate:

  • 开发者:SeMI Technologies

  • 特点:开源的向量搜索引擎,支持上下文感知的语义搜索,扩展性强。

  • 适用场景:知识图谱构建、语义搜索、推荐系统。

8. Vectara:

  • 开发者:Vectara, Inc.

  • 特点:基于向量的全托管搜索服务,专注于语义搜索和相关性。

  • 适用场景:搜索引擎优化、自然语言处理应用。

        在向量数据的存储成本、召回率等方面都面临较大的挑战。随着非结构化数据的进一步增长,成本和召回率的挑战会变得困难

1. 存储和索引优化
  • 量化技术:使用向量量化(Vector Quantization, VQ)技术,例如产品量化(Product Quantization, PQ)或乘积量化(Additive Quantization, AQ),可以在保证精度的同时大幅度减少存储和计算资源。

  • 压缩向量:采用哈希方法如局部敏感哈希(Locality-Sensitive Hashing, LSH)来减少存储消耗,并加速相似性搜索。

  • 分布式存储:使用分布式文件系统和数据库(如 Apache Hadoop、Cassandra)可以优化存储和查询的大规模向量数据。

  • 存储器级别调整:利用固态硬盘(SSD)甚至是新兴的持久化内存(Persistent Memory, PMEM)来在内存和磁盘之间找到平衡,优化存储成本。

2. 召回率优化
  • 混合搜索技术:结合粗粒度和细粒度的索引,例如先使用粗滤技术快速缩小搜索范围,然后进行精确查找。

  • 近似最近邻查找(ANN)算法:如 HNSW(Hierarchical Navigable Small World)图、FAISS 中使用的 ANN 算法可以在保证高召回率的基础上优化搜索速度。

  • 多层次检索:分层结构的检索方法,从粗到细进行,逐步提高召回率和精度。

4. 专用硬件加速
  • GPU 和 TPU:使用专门的硬件加速器,如 GPU(图形处理单元)或 TPU(张量处理单元),以加速向量计算和相似性搜索。

  • FPGA:使用可编程门阵列(FPGA)为特定向量计算任务定制硬件加速,以提高效率和降低延迟。

5. 持续优化和更新模型
  • 动态索引更新:随着非结构化数据的增长和变化,保持索引和向量表示的及时性,使用在线或增量更新的方法管理索引。

  • 自适应模型:利用机器学习和深度学习模型不断优化向量表示的嵌入质量,使得向量检索更加精准有效

6. 先进的嵌入技术
  • 预训练模型:使用当前的预训练语言模型(如 BERT、GPT-3)进行上下文嵌入,捕捉复杂的语义信息。

  • 多模态嵌入:对于不同类型的数据(如文本、图像、视频),使用多模态嵌入模型来统一表示和处理,提升检索性能。

  • AutoGen 框架

AutoGen 是一个能让多个 Agent 进行沟通协作的 Python 开源框架。核心解决两个问题:

第一个问题:如何设计用户可定制、可重用的、能够互相协作的 Agent。AutoGen 是要设计为一个通用的能够适用多种场景的框架,在 AutoGen 的官网 Examples 中给出了在多种场景下能够解决问题的例子,此外在 git 仓库中的 notbook 目录中有 50 + 例子。有解决数学问题场景、有通过开发代码进行分析的场景(比如上一章节的列子)、还有通过五六个 Agent 讨论分析开放问题的场景。所以 Agent 的扩展能力是需要重要考虑问题,AutoGen 中通过支持多种外部工具、不同 LLM、支持 human in the loop 的方式,Agent 之间能够通信的方式来解决扩展问题。

第二个问题:如何让 Agent 能灵活支持不同模式的会话方式。不同的场景,根据复杂度、问题的类型需要不同的 Agent 会话模式。这里的 “模式” 包括了单轮对话 or 多轮对话、自动选择每轮的 speaker or 通过规则选择、通过自然语言控制逻辑 or 通过代码控制,此外设计需要考虑多个 Agent 之间如何灵活 “组网”,比如三人一组,每组一个 leader,组内互相通信,leader 能够通信的方式。

为了解决这两个问题,AutoGen 抽象了一些基础概念。

Conversable Agents

旨在用于在复杂任务中进行多轮交互。这些智能体能够理解和处理用户输入,维护上下文,并生成合适的响应。Conversable Agents 通常集成了自然语言处理技术,包括自然语言理解(NLU)和自然语言生成(NLG),以提高对话的流畅性和智能性

Conversation Programming

旨在通过自然语言与人工智能系统进行交互,来实现编程和任务自动化。这个概念试图简化编程过程,使得用户无需深厚的编程背景也能使用自然语言描述需求,进而生成可执行的代码或自动化脚本。

MetaGPT 的主要工作流程和特点包括:

  • 角色定义(Role Definitions):MetaGPT 通过定义不同的角色(如产品经理、架构师、项目经理等)来封装每个角色的特定技能和业务流程。这些角色类继承自一个基础角色类,具有名称、简介、目标、约束和描述等关键属性。角色定义帮助 LLM 生成符合特定角色要求的行为。

  • 任务分解(Task Decomposition):MetaGPT 将复杂的软件开发任务分解成更小、更易于管理的部分,然后将这些子任务分配给合适的智能体执行。

  • 流程标准化(Process Standardization):MetaGPT 定义了一系列标准化操作,每个操作都具有前缀、LLM 代理、标准化输出模式、执行内容、重试机制等属性。这些标准化操作确保了智能体之间的协作是一致的,输出的结果也是结构化的。

  • 知识共享(Knowledge Sharing):MetaGPT 通过环境日志复制消息,智能体可以根据自己的角色订阅感兴趣的消息类型。这种方式使智能体可以主动获取相关信息,而不是被动地通过对话获取。

  • 端到端开发(End-to-End Development):从产品需求到技术设计,再到具体编码,MetaGPT 通过多智能体的协作可以完成整个软件开发生命周期。

RAG 的工作流程涉及 3 个主要阶段:数据准备、数据召回和答案生成。数据准备阶段包括识别数据源、从数据源提取数据、清洗数据并将其存储在数据库中。数据召回阶段包括根据用户输入的查询条件从数据库中检索相关数据。答案生成阶段则是利用检索到的数据和用户输入的查询条件生成输出结果。输出质量的高低取决于数据质量和检索策略。

  • 数据准备

根据 LLM 需要处理的任务类型,数据准备通常包括识别数据源、从数据源中提取数据、清洗数据并将其存储在数据库中等环节。用于存储数据的数据库类型和准备数据的步骤可能会因应用场景和检索方法的不同而有所变化。例如,如果使用像 Faiss 这样的向量存储库,需要为数据创建嵌入并将其存储在向量存储库中;如果使用像 Elasticsearch 这样的搜索引擎,需要将数据索引到搜索引擎中;如果使用像 Neo4j 这样的图数据库,需要为数据创建节点和边,并将它们存储到图数据库中

RAG 的优点。

高质量的答案生成,降低答案生成的幻觉

RAG 的一个优点是它能够生成高质量的回答。因为在生成过程中,检索器可以从大量文档中检索问题相关的信息,然后基于这些信息生成回答。这使得整个系统能够充分利用现有知识生成更准确、更具深度的回答,也意味着模型出现幻觉答案的概率更小。

五、大模型框架

LangChain 是一个开源的应用开发框架,目前支持 Python 和 TypeScript 两种编程语言。它赋予 LLM 两大核心能力:数据感知,将语言模型与其他数据源相连接;代理能力,允许语言模型与其环境互动。

来源

  • 《大模型 RAG 实战:RAG 原理、应用与系统构建》:https://m.douban.com/book/subject/37104428/

  • 《从 AIGC 典型客户实践揭秘云原生向量数据库内核设计与智能创新》: https://www.infoq.cn/article/5frz8imatl9yevqjofct

  • AutoGen Blog 官网: https://microsoft.github.io/autogen/0.2/blog/

  • 《AI Agent【项目实战】:MetaGPT 遇上元编程,重塑复杂多智能体协作的边界》: https://xie.infoq.cn/article/a9977d01e3131bf951ba28e72

 

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

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

相关文章

docker-compose部署prometheus+grafana+node_exporter+alertmanager规则+邮件告警

目录 一.docker-compose文件 二.配置文件 三.文件层级关系,docker-compose和配置文件位于同级目录 四.node_exporter页面json文件 五.效果展示 prometheusalertmanager邮件告警 grafana面板效果 六.涉及离线包 一.docker-compose文件 [rootsulibao prometh…

AI设计再现新引擎,科技创新又添新动能——广东省首家行业AI设计工程中心获批成立

近期,大捷智能科技(广东)有限公司(以下简称“大捷智能”)凭借其在人工智能与智能制造领域的突出研发实力与创新科技成果,由广东省科技厅批准设立“广东省模具智能设计与智能制造工程技术研究中心”。 广东省…

【MongoDB + 向量搜索引擎】MongoDB Atlas 向量搜索 提供全托管解决方案

在代码审计项目中,MongoDB可以用于存储元数据和部分结构化信息,但要高效处理向量相似性搜索,需结合其他工具。以下是具体分析: 1. MongoDB 的适用场景 元数据存储: 存储代码片段的文件路径、行号、语言类型等结构化信…

基于ANSYS 概率设计和APDL编程的结构可靠性设计分析

01 可靠度基本理论 结构的极限状态:整个结构的一部分超过某一特定状态就不能满足设计规定的某一功能要求。结构的极限状态实质上是结构工作状态的一个阀值,如果工作状态超过这一阀值,则结构处于不安全、不耐久或不适用的状态;若工…

CyclicBarrier、Semaphore、CountDownLatch的区别,适用场景

CyclicBarrier、Semaphore 和 CountDownLatch 是 Java 并发包中用于线程协作的工具类,它们虽然都与线程同步相关,但设计目的和使用场景有显著差异。以下是它们的核心区别和典型应用场景: 1. CountDownLatch 核心机制 一次性计数器&#xf…

新能源汽车测试中的信号调理模块:从原理到实战应用

摘要 信号调理模块(Signal Conditioning Module, SCM)是新能源汽车(NEV)测试系统中的关键环节,直接影响数据采集的精度与可靠性。本文面向HIL测试工程师、电机测试工程师及整车动力经济性测试工程师,系统性…

Qt5 Mac系统检查休眠

在开发跨平台应用程序时,有时候我们需要检测系统的状态,比如是否处于休眠或唤醒状态。Qt是一个强大的跨平台应用开发框架,支持多种操作系统,包括Windows、Linux、macOS等。在这个场景下,我们关注的是如何在Qt5.10中检测到系统是否休眠以及在Mac上实现这一功能。本文将深入…

RabbitMQ简单介绍和安装

RabbitMQ简单介绍 一.RabbitMQ介绍二.RabbitMQ的作用1.异步解耦2.流量削峰3.消息分发4.延迟通知 三.RabbitMQ安装(Ubuntu)1.先安装Erlang2.安装RabbitMQ3.安装RabbitMQ的管理界面4.创建虚拟机5.端口号信息 四.工作原理图 一.RabbitMQ介绍 RabbitMQ 是一款…

汇编学习之《call, return指令》

call 指令 call 指令就是调用函数的执行,不过它也是几个指令的组合 第一步通过jmp 函数地址的方式先跳转到函数 第二步通过push 指令将函数地址指令额下一行的指令的地址压入栈中。 我们来验证下 首先打开OllyDbg,导入你的程序,找到一个call 函数&…

接口自动化学习三:参数化parameterize

使用parametrize之前: def add(x,y):return xy class TestAddFunction(object):def test01(self):resadd(2,4)assert 6resdef test02(self):resadd(4,6)assert 10resparametrize参数化之后: import pytest def add(x,y):return xydata[(10,20,30),(200…

全面解析 Mybatis 与 Mybatis-Plus:深入原理、实践案例与高级特性对比

全面解析 Mybatis 与 Mybatis-Plus:深入原理、实践案例与高级特性对比 🚀 前言一、基础介绍 ✨1. Mybatis 简介 🔍2. Mybatis-Plus 简介 ⚡ 二、核心区别与高级特性对比 🔎1. 开发模式与配置管理2. 功能丰富度与扩展性3. 自动填充…

【区块链安全 | 第十九篇】类型之映射类型

文章目录 映射类型可迭代映射 映射类型 映射类型使用语法 mapping(KeyType KeyName? > ValueType ValueName?),映射类型的变量声明使用语法 mapping(KeyType KeyName? > ValueType ValueName?) VariableName。 KeyType 可以是任何内置值类型、bytes、st…

动态循环表单+动态判断表单类型+动态判断表单是否必填方法

页面效果: 接口请求到的数据格式: list: [{demandType: "设备辅助功能要求",demandSettingList: [{id: "1907384788664963074",name: "测试表单",fieldType: 0,contentValue: "",vaildStatus: 0, // 0 非必填&a…

蓝桥杯DFS算法题(java)

最大连通 链接: https://www.lanqiao.cn/problems/2410/learning/ 问题描述 小蓝有一个 30 行 60 列的数字矩阵,矩阵中的每个数都是 0 或 1 。 1100100000111111101010010010011010101110110110111010011111100100000000010100011011000000100101100011…

解锁物种分布模拟新技能:MaxEnt 模型与 R 语言的奇妙融合

技术点目录 第二章、常用数据检索与R语言自动化下载及可视化方法第三章、R语言数据清洗与特征变量筛选第四章、基于ArcGIS、R数据处理与进阶第五章、基于Maxent的物种分布建模与预测第六章、基于R语言的模型参数优化第七章、物种分布模型结果分析与论文写作 —————————…

三轴云台之相机技术篇

一、结构设计 三轴云台通常由空间上三个互相垂直的框架构成,包括内框(俯仰框)、中框(方位框)和外框(横滚框)。这些框架分别负责控制相机的俯仰运动、方位运动和横滚运动,从而实现对目…

全文 - MLIR Toy Tutorial Chapter 3 :高层次上语言特定的分析和变换

使用 C 风格的模式匹配和重写来优化转置运算 使用 DRR 优化 reshape 运算 创建一种贴近输入语言的语义表示的方言,可以在 MLIR 中分析、变换和优化,这些过程中需要用到高级语言的信息,而且通常是在语言的 AST 上执行的这些过程。…

js逆向入门图灵爬虫练习平台 第四题学习

(base64解码)地址:aHR0cHM6Ly9zdHUudHVsaW5ncHl0b24uY24vcHJvYmxlbS1kZXRhaWwvNC8 先找到请求接口带有加密参数: 全局搜索Sign,找到参数生成位置 看到这就一目了然塞,知道参数是怎么构造生成的,不知道这段 JavaScript 代码没关系…

【Flask开发】嘿马文学web完整flask项目第2篇:2.用户认证,Json Web Token(JWT)【附代码文档】

教程总体简介:2. 目标 1.1产品与开发 1.2环境配置 1.3 运行方式 1.4目录说明 1.5数据库设计 2.用户认证 Json Web Token(JWT) 3.书架 4.1分类列表 5.搜索 5.3搜索-精准&高匹配&推荐 6.小说 6.4推荐-同类热门推荐 7.浏览记录 8.1配置-阅读偏好 8.配置 9.1项目…

[dp5_多状态dp] 按摩师 | 打家劫舍 II | 删除并获得点数 | 粉刷房子

目录 1.面试题 17.16. 按摩师 题解 2.打家劫舍 II 题解 3.删除并获得点数 题解 4.粉刷房子 题解 一定要有这样的能力,碰到一个新题的时候,可以往之前做过的题方向靠! 打家劫舍问题模型: 不能选择相邻的两个数,并且要最终…