cover_image

技术人的大模型应用初学指南

价格平台团队 大淘宝技术
2025年03月26日 07:30
图片



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


图片
前言

人工智能(AI)时代的到来为技术人员提供了丰富的学习和发展机会。对于没有算法背景的技术同学来说,迎接这种新兴机遇与挑战并做好应对准备和知识储备是非常重要的。

结合笔者这一段对于大模型和AI技术的一些学习以及对基于AI改造的诸多实际应用场景的了解。于是就写了这篇文章。另外,本篇文章不会用过多的篇幅来讲算法基础的内容,而把重点放在AI应用的核心技术概念的理解上。


图片
人工智能术语概述

想必大家在刚开始阅读人工智能相关的文章或书籍的时候,总是听到诸如LLM,chatGPT,RAG,Agent等等的术语,但是不知道这些术语对应的技术点关联性在哪里,没关系,咱们首先来学习下这些术语的定义:


  • AI:Artificial Intelligence的缩写,指“人工智能”,人工智能是指模拟人类智能的计算机系统或软件,使其能够执行诸如学习、推理、问题解决、感知、语言理解等复杂任务。

  • 生成式AI:是一种人工智能技术,能够自动生成新的内容,如文本、图像、音频和视频等。与传统的AI不同,生成式AI不仅能分析和理解数据,还能基于其学习到的信息创造出新的内容。

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

  • NLP:Natural Language Processing的缩写,指“自然语言处理”,自然语言处理是人工智能的一个子领域,主要研究计算机如何理解、解释和生成人类语言。NLP技术包括文本分析、语言生成、机器翻译、情感分析、对话系统等。

  • Transformer:一种用于自然语言处理(NLP)任务的深度学习模型,最初由Vaswani等人在2017年的论文中提出。它引入了一种名为“自注意力”(self-attention)的机制,能够有效地处理序列数据,且在许多NLP任务,如机器翻译、文本生成和语言建模中取得了巨大的成功。

  • BERT:Bidirectional Encoder Representations from Transformers的缩写,是一种自然语言处理(NLP)的预训练模型。它由 Google AI 研究团队于2018年首次提出。BERT 的主要创新在于它使用了双向(即上下文敏感)的Transformer模型来对文本进行编码。

  • PEFT:Parameter-Efficient Fine-Tuning的缩写,中文高效参数微调,这是一种微调机器学习模型的方法,旨在减少需要更新的参数数量,从而降低计算成本和存储需求,同时保持模型性能。PEFT 技术在大型预训练模型(如 BERT、GPT 等)的下游任务适配中尤为重要,因为直接微调这些模型可能会耗费大量计算资源和时间。

  • LoRA:Low-Rank Adaptation的缩写,一种用于微调大规模语言模型的一种技术。它通过将模型的权重分解成低秩矩阵来显著减少参数数量和计算开销,从而使得模型在资源受限的环境中也能进行高效的适应性调整。

  • LLM:Large Language Model的缩写,指“大语言模型”,这类模型是基于机器学习和深度学习技术,特别是自然语言处理(NLP)中的一种技术。大语言模型通过大量的文本数据进行训练,以生成、理解和处理自然语言。一些著名的 LLM 示例包括 OpenAI 的 GPT(Generative Pre-trained Transformer)系列模型,如 GPT-3 和 GPT-4

  • RAG:Retrieval-Augmented Generation的缩写,指“检索增强生成”,这是一个跨越检索和生成任务的框架,通过先从数据库或文档集合中检索到相关信息,然后利用生成模型(如Transformer模型)来生成最终的输出。目前在技术发展趋势和应用落地上,RAG是工程同学较为值得探索的领域。

  • Agent:中文叫智能体,一个能独立执行任务和做出决策的实体,在人工智能中,Agent可以是一个机器人,一个虚拟助手,或是一个智能软件系统,它能够通过学习和推理来完成复杂任务。在多Agent系统中,多个独立的Agents相互协作或竞争,以共同解决问题或完成任务。

  • GPT:Generative Pre-trained Transformer的缩写,指“生成式预训练变换器”,GPT 模型利用大量文本数据进行预训练,然后可以通过微调来执行特定任务,例如语言生成、回答问题、翻译、文本摘要等。

  • LLaMA:Large Language Model Meta AI的缩写,是由Meta开发的一系列大型自然语言处理模型。这些模型在处理文本生成和理解任务方面表现出色,类似于其他著名的大型语言模型如GPT-3

  • chatGPT:由 OpenAI 开发的一种基于 GPT(生成预训练变换模型)架构的人工智能聊天机器人。它使用自然语言处理技术,能够理解并生成类似人类的文本回复。可以看做是一种Agent。

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

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


图片

大模型应用发展趋势


▐  向量数据库


随着互联网内容化的飞速发展,以音视频等多媒体内容为代表的非结构化数据呈现出高速增长的趋势。图片、音频、视频等非结构化数据的存储和检索需求也变得越来越多。


IDC DataSphere 数据显示,到2027年全球非结构化数据将占到数据总量的86.8%,达到246.9ZB;全球数据总量从103.67ZB增长至284.30ZB,CAGR为22.4%,呈现稳定增长态势。

Link:https://www.idc.com/getdoc.jsp?containerId=prCHC51814824


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


向量数据库是用于存储和查询高维向量数据的数据库,通常在搜索、推荐系统、图像识别、自然语言处理等领域中广泛使用。随着AI创新应用的不断涌现,对于向量数据库需求也大增。


图片


下面是一些常用的向量数据库。

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算法可以在保证高召回率的基础上优化搜索速度。

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


3. 系统架构和基础设施


  • 云计算和弹性扩展:利用云计算平台(如AWS、Azure、GCP),按需扩展计算和存储资源,并且利用云端的分布式存储和计算技术来管理大规模数据。

  • 边缘计算:部分预处理和向量化工作放到边缘设备进行,减少中心服务器的负担。


4. 专用硬件加速


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

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


5. 持续优化和更新模型


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

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


6. 先进的嵌入技术


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

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


▐  Multi-Agent


图片


在软件领域,“分而治之”是一种常用的设计和开发理念,而在大模型场景中也同样适用。面向复杂任务场景,多Agent方法会将复杂任务分解为子任务,让不同的智能体完成不同的子任务,即专业“人”做专业“事”。因为,拆解任务有助于降低单个大模型的输入复杂度以及理解难度,从而有利于大模型专注于“做”一件事情,其性能可能会更好。


多Agent框架的核心交互流程可以概括如下:
  • controller更新当前环境的状态,选择下一时刻行动的agent X
  • agent X 与环境交互,更新自身memory信息
  • agent X 调用LLM,基于指令执行动作,获取输出message
  • 将输出message 更新到公共环境中
目前在多Agent协作方面,目前比较有名的是AutoGen框架和MetaGPT框架。

  • 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

旨在通过自然语言与人工智能系统进行交互,来实现编程和任务自动化。这个概念试图简化编程过程,使得用户无需深厚的编程背景也能使用自然语言描述需求,进而生成可执行的代码或自动化脚本。
在 Conversation Programming 中,用户通过与人工智能助手进行对话,将具体任务、算法逻辑或问题描述出来,AI 系统则负责理解这些意图并生成相应的代码。这种方式降低了编程的门槛,同时也加速了从想法到实现的过程。


  • MetaGPT框架


MetaGPT 是一个基于多智能体的元编程框架,它通过将不同的角色(如产品经理、架构师、项目经理等)分配给不同的大型语言模型(LLM),实现软件开发流程的自动化。这个框架特别适合于复杂的编程任务,能够自动生成用户故事、需求分析、数据结构、API 和文档等输出。MetaGPT 使用标准操作程序(SOPs)来指导智能体的协作,旨在提高代码生成的质量和效率 。


工作流程


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

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

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

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

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

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


设计层次


MetaGPT的设计分为两个主要层次:

  • Foundational Components Layer(基础组件层):

    • 作用:建立了智能体操作和整个系统范围内信息交流的核心基础构件。这包括了环境(Environment)、记忆(Memory)、角色(Roles)、动作(Actions)和工具(Tools)等元素。

    • 功能:

    • Environment:提供了共享的工作空间和通讯功能。
    • Memory:用于存储和检索历史消息。
    • Roles:封装了领域特定的技能和工作流程。
    • Actions:执行模块化的子任务。
    • Tools:提供常用服务和工具。
  • Collaboration Layer(协作层):
    • 作用:在基础组件层之上,协调各个智能体共同解决复杂问题。它建立了合作的基本机制,包括知识共享和封装工作流程。

    • 功能:

    • Knowledge Sharing(知识共享):允许智能体有效地交换信息,贡献到共享的知识库中,从而提高协调能力,减少冗余通讯,提高整体操作效率。
    • Encapsulating Workflows(封装工作流程):利用 SOP 将复杂任务分解成小而可管理的组件,将这些子任务分配给合适的智能体,并通过标准化的输出来监督其性能,确保其行动符合总体目标。

这两个层次共同构建了MetaGPT的框架,为智能体提供了强大的功能,使其能够协作解决复杂任务。


▐  RAG


2020年,Facebook(后更名为Meta)在“Retrieval-Augmented Generation for Knowledge-Intensive NLPTasks”一文中首先提出了一种称为检索增强生成(RAG)的框架。该框架可以使模型访问超出其训练数据范围之外的信息,使得模型在每次生成时可以利用检索提供的外部更专业、更准确的知识,从而更好地回答用户问题。


在RAG系统中,模型可以通过浏览外部知识来回答用户的问题,而不是试图从参数记忆中找到问题相关的答案,就像在考试的时候是开卷考试还是闭卷考试一样。例如:我们可以分别询问ChatGPT和Bing Chat两个问题:“RAG是什么?”“为什么大模型都是Decoder(解码器)结构?”因为Bing Chat可以结合互联网的搜索数据来生成答案,所以答案会更精准并且信息量更足。


▐  工作流程


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


图片


  • 数据准备


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


  • 数据召回


数据召回部分的主要任务是从大型文本数据库中检索与输入关的信息。为了尽可能保证正确答案被送入生成器部分,数据召回部分的召回率显得非常重要。一般来说,召回的数量越大,正确答案被召回的概率也就越高,但同时会面临大模型上下文长度限制的问题。


许多开源博客或框架在这部分的流程中都采用向量搜索出最相近的k个候选。例如,如果我们正在构建一个问答系统,并使用向量数据库存储相关数据块,可以为用户的问题生成向量,对向量数据库中的向量进行相似性搜索并检索最相似的数据块。除此之外,还可以根据用户问题,对同一数据库进行混合搜索或使用多个数据库进行搜索,并将结果组合起来作为生成器的上下文进行传递。

关于检索这部分,还有许多提高检索效果的技巧,这会引入更多的小模块,例如候选重排、大模型辅助召回等,这些都属于数据检索的范畴。


  • 答案生成


一旦检索到用户问题相关的数据片段,RAG系统就将其与用户的问题和相关数据一起传递给生成器(LLM)。LLM利用检索到的数据和用户的查询或任务生成输出。输出的质量取决于数据的质量和检索策略,同时生成输出的指令也会极大地影响输出的质量。


  • RAG的优缺点


RAG的优点


前面介绍了RAG的基础内容,下面来具体梳理一下RAG的优点。


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

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


可扩展性

RAG展示了出色的可扩展性,这意味着它能够轻松适应新数据和任务。利用RAG的检索—生成框架,只需更新检索部分的数据,模型便可适应新的知识领域。这使得RAG能够在面对新领域或不断变化的知识库时保持高度的适应性。


模型可解释性

RAG具有一定程度的可解释性,这意味着我们可以理解模型是如何生成回答的。由于RAG的特性,我们可以很容易地追溯模型是从哪些文档中提取信息的。这使得我们可以评估模型的回答是否基于可靠的数据来源,从而提高模型的可信度。


成本效益

由于RAG的知识库能够与生成模型解耦,因此只要拥有一定的数据量,企业便可将RAG作为微调的替代方法,而微调可能需要大量资源。这种模式对中小企业非常友好。从另一个角度来看,由于企业的数据都是私有的,提供相关文档作为背景信息可以使生成结果更加准确、更具实用性,以满足企业的特定任务需求。


RAG的缺点

依赖于检索模块

RAG系统给出的答案极其依赖于检索的质量。如果检索到的文档与问题无关或质量较低,生成的回答也可能质量较低。如果搜索的文档并未覆盖到问题的答案,那模型也基本无法回答用户提出的问题。因此,在实际应用中,我们会利用很多策略来提高文档片段的召回率。在很多场景中,文档片段的时效性也是要考虑的一部分,例如金融场景,用户咨询10月份的金股是什么,如果召回片段不包含10月份的券商金股研报,甚至召回很多旧的金股研报,那对最后的大模型生成会产生很大的干扰。还有很多其他的召回情况都会影响到模型的结果生成,因此想构建一个好的RAG系统,检索部分是极其重要的,需要花费大量的时间来打磨。


依赖于现有的知识库

RAG依赖于一个现有的文档数据库进行检索。首先,如果没有一个大规模的知识库,就无法发挥RAG的优点。其次,如果知识库覆盖面不够,无法召回相应的知识块,那么模型因为需要遵循指令的约束而无法给出答案,这就会影响到整个系统的问题覆盖率。


推理耗时

由于RAG系统需要先检索文档,然后生成答案,相比于纯粹的大模型推理,整个系统的推理耗时会更长。在这种情况下,对于一些延时要求高的场景就无法满足需求。不过这个耗时问题属于大模型的通病,在使用网页端ChatGPT的时候,它以流式打字机的模式展示并按字来输出结果,所以用户可能不会感觉很慢,但如果统计从问题发送到答案完整生成这个过程,耗时还是非常长的。


上下文窗口限制

召回模块输出的文档片段数量需要考虑到生成模型能处理的最大长度,例如最早的ChatGPT(GPT-3.5-turbo)的最大上下文长度是4096个token。如果你的文档片段是512个token的长度,那实际上需要使用8个片段(512×8 = 4096),所以召回部分就需要考虑如何在这8个片段中把召回率做到最优。不过也有其他的折中方案,可以召回更多的文档片段。例如,可以采用对检索的文档片段进行压缩,借助大模型进行要点总结之类的策略。也可以对生成端的模型应用长度外推技巧,现有的长度外推策略已经比较成熟,有很多非常优秀的外推策略,可以让模型推理的长度远远超过训练阶段的长度。


▐  提示词工程


图片


提示词工程(Prompt Engineering)是一种在人工智能和自然语言处理领域中开发和设计提示词(Prompts)以引导大型语言模型(例如GPT-3等)产生特定输出的方法。通过精心构建和优化提示词,用户可以更有效地获得所需的答案、生成文本或执行其他自然语言处理任务。


提示词工程的关键在于找到合适的语言和结构来清晰地表达问题或任务,使得模型可以更准确地理解并给出相关的回应。这可能涉及反复试验、调整提示词的细节,以及利用对模型行为的理解来优化结果。接下来通过一些基础案例介绍如何优化Prompt使得大模型更好的回答我们的问题。


描述答案的标注

在与LLM交互时,最好在提示中清楚地描述所期望的答案标准。不要假设LLM具有与人类相似的理解能力,也不要期望它一定会以人类的方式进行回答。与LLM交互时使用prompt通常会显得有些“啰嗦”,这是正常的。但要注意每一条关于答案标准的描述都应与所期望实现的目标密切相关,避免冗余信息,以降低LLM理解的难度。
比如我们可以在提问“北京有哪些景点”时增加“请不要过多介绍景点”来简化ChatGPT的输出结果。


设置兜底的回答方式

在某些情况下,向量化模型可能无法准确召回与用户问题相关的文本,甚至与用户问题几乎没有任何关联。如果让LLM根据这些召回的文本生成答案,可能会得到与问题无关或不符合事实的答案。因此,我们需要明确告知LLM,如果上下文中没有与用户问题相关的答案,就不要强行生成答案了。这样能够避免产生不准确或不相关的回答。


输入中提供问答实例

有时候,我们很难通过语言准确地描述一项任务。如果任务描述不清楚,或者问题本身很复杂,会导致语言模型产生歧义,进而严重影响回答的效果。遇到这种情况,可以尝试在输入中增加一些问答示例,让语言模型自行领悟接下来应该做的任务。一般情况下,为语言模型提供问答示例是有益的。然而,需要注意的是,示例的数量、顺序以及与真实问题的相关性等因素都会影响语言模型的回答效果,这需要大量实践来确定。在提供示例时,尽量涵盖简单、困难、长尾等各种类型的示例。


标识出prompt中不同类型的内容

在撰写prompt时,最好能把任务描述、示例、引用文本等不同类型的内容用特殊符号隔开,避免LLM在内容理解上有歧义,同时也便于用户对prompt进行修改与维护。如果用户下达的指令和prompt其他内容是冲突的,使用该技巧就十分重要了。





设定输出格式
ChatGPT等模型都是经过对话数据微调的。在需要准确输出内容点的场景中,有时可能会出现输出无用信息或过于口语化的情况,这不利于进一步提取输出中所需的内容。一种有效的解决方法是让LLM以json格式输出内容,如果效果不佳,也可以尝试在提示中增加输出json的示例。有时候LLM输出的json格式可能不够标准(例如,字典的键值没有引号或冒号采用中文格式),不能直接使用Python的json包进行处理,则可以借助正则表达式进行处理。如果不熟悉正则表达式,可直接向ChatGPT询问。


指定大模型的身份

在prompt中,告诉LLM所扮演的身份是什么,这可以帮助LLM确定接下来输出的内容和说话风格。


使用思维链

于LLM来说,当它进行推理相关的任务时,要求它输出推理过程同样可以减少错误的发生。以计算一个简单的数学题为例,直接输出的答案可能是错误的。只有要求它逐步给出每一步的计算过程,才能得到正确的答案。LLM不仅在训练时可以通过增加计算量(训练更多数据)来提高效果,而且在推理过程中也可以做到这一点(输出更多内容)。


▐  模型微调


图片


目前通用的大语言模型,比如ChatGPT,Gemini,通义千问等事实上都属于预训练(Pre-trained)模型,预训练是指通过互联网上已知的海量的语料对原始大模型进行训练,训练后的大模型具有了通用领域知识的解答和推理能力。而对于拥有特定领域知识的企业来说,想要落地大模型往往需要大模型能够理解企业的领域知识且私有数据不能被泄露。所以在企业落地的实际应用中需要对大模型进行微调。


基于已有开源大模型进行微调训练,如果采用预训练的方式对模型的所有参数都进行训练微调,由于现有的开源模型参数量都十分巨大,如最新千问72B模型(qwen/Qwen1.5-72B-Chat)有720亿参数,对所有的参数都进行处理,那GPU资源成本会非常高,可能高达数百万每年,为了解决这个问题,社区提出了大模型微调的概念:PEFT (Parameter-Efficient Fine-Tuning),即对开源预训练模型的所有参数中的一小部分参数进行训练微调,最后输出的结果和全参数微调训练的效果接近。


PEFT的基本思想是保持大部分参数不变,通过微调一小部分参数,达到具有竞争力甚至是领先的性能。由于需要更新的参数量小,其所需的数据和算力资源变小,使得微调更加有效率。
下面介绍最常见的高效微调方法LoRA以及他的一些变体:


LoRA(Low-Rank Adaptation)

LoRA即LLMs的低秩适应,是参数高效微调最常用的方法。LoRA的本质就是用更少的训练参数来近似LLM全参数微调所得的增量参数,从而达到使用更少显存占用的高效微调。
简单来说,LoRA在模型参数矩阵的(例如 m*n 维)旁边新增一支旁路,由两个低秩矩阵(m*r, r*n 维,r远小于m,n)相乘,前向过程中,同时经过原始矩阵和旁路(LoRA 部分),分别得到各自的输出再相加起来,训练时冻结原始参数,只训练 LoRA,由于 LoRA 部分是两个低秩矩阵,参数量远远小于原始矩阵,因此可以显著减少训练代价。


QLoRA(Quantized LoRA)

QLoRA是模型量化和 LoRA 的结合。除了增加了 LoRA 旁路,QLoRA 在加载时将大模型量化成 4bit 或者 8bit,但在计算时,又将该部分的参数反量化成 16bit 进行计算,其优化了非使用状态模型参数的存储,与 LoRA 相比进一步降低训练时显存消耗。





图片

大模型框架

大型语言模型(LLM)如GPT系列模型引领了人工智能领域的一场技术革命。开发者们都在利用这些LLM进行各种尝试,虽然已经产生了许多有趣的应用,但是单独使用这些LLM往往难以构建功能强大的实用应用。

也因此,大模型应用框架可以说是百花齐放,本文挑选了热度和讨论度较高的一些开源应用框架进行介绍。


▐  LangChain

LangChain是一个开源的应用开发框架,目前支持Python和TypeScript两种编程语言。它赋予LLM两大核心能力:数据感知,将语言模型与其他数据源相连接;代理能力,允许语言模型与其环境互动。结合上述两种能力,LangChain可以轻松管理与语言模型的交互,将多个组件链接在一起,并集成额外的资源。


通过LangChain可以实现围绕LLM核心快速构建AI应用,比如提示词工程、检索增强生成(RAG)、会话式Agent构建等。


LangChain提供了一系列的工具帮助我们更好的使用大语言模型(LLM)。主要有6种不同类型的工具:


图片


  1. 模型(models) : LangChain 支持的模型类型包括LLM、TextEmbedding,模型集成如GPT-4、Llama等。
  2. 提示(prompts) : 包括prompt模板管理、优化。
  3. 链(chains) : 链不仅仅是单个 LLM 调用,还包括一系列包含LLM、工具、业务api等的调用。LangChain 提供了标准的链接,以及一些常见的链实现,可快速实现应用程序的端到端的链调用。
  4. 索引(indexes) : 索引是连接知识与LLM的关键,可构建属于企业、场景、用户个人的专属知识库。主要包括文档加载、分割、向量化、检索,链中使用索引的常见方式是“检索”,如RAG一般都会经过“检索”步骤,以获取与用户问题最接近的可靠知识信息。
  5. 代理(agents) : 也可以称之为智能体,简而言之是某个人或场景的代理人,相关的任务都可以通过Agent完成。LangChain 提供了一个标准的代理接口,模拟人的通用思维链路,从作出决策到执行行动、观察结果,再重复,直至任务完成。开发者为agent提供一套工具,agent根据任务描述自行决策和编排使用何种工具完成目标任务。
  6. 记忆(memory) : LLM、chain、agent默认均是无状态的,即LLM会独立的处理每次输入。而记忆是人类智能的必要能力之一,不论长短期记忆,对后续的交互都非常重要。在LangChain中,记忆是在链/代理调用之间保持状态的概念,其提供了标准的记忆接口及部分实现。

图片
参考文档

  • 《大模型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


图片

团队介绍


我们来自淘天集团的价格平台技术。我们支撑大促 (双11、618 等)和日销业务;同时我们也直面竞对,深入参与淘宝好价、百亿补贴、聚划算等日销业务的价格心智打造。秉承“简单、开放、自驱”的技术文化,在使命与责任中互相成就,共同成长,践行让业务先赢,技术氛围浓郁。







继续滑动看下一个
大淘宝技术
向上滑动看下一个