Why
将大模型应用于实际业务场景时会发现,通用的基础大模型基本无法满足我们的实际业务需求,主要有以下几方面原因:
- 知识的局限性:大模型对于一些实时性的、非公开的或离线的数据是无法获取到的。
- 幻觉问题:所有的AI模型的底层原理都是基于数学概率,其模型输出实质上是一系列数值运算,大模型也不例外,所以它有时候会一本正经地胡说八道,尤其是在大模型自身不具备某一方面的知识或不擅长的场景。而这种幻觉问题的区分是比较困难的,因为它要求使用者自身具备相应领域的知识。
- 数据安全性:对于企业来说,数据安全至关重要,没有企业愿意承担数据泄露的风险,将自身的私域数据上传第三方平台进行训练。
RAG vs Fine-tuning
Fine-tuning(微调)是用一定量的数据集对LLM进行局部参数的调整,以期望LLM更加理解我们的业务逻辑,有更好的zero-shot能力。
RAG(检索增强生成)是把内部的文档数据先进行embedding,借助检索先获得大致的知识范围答案,再结合prompt给到LLM,让LLM生成最终的答案。
What:
RAG = LLM + 外部知识
RAG(Retrieval-Augmented Generation)检索增强生成就是通过检索获取相关的知识并将其融入Prompt,让大模型能够参考相应的知识从而给出合理回答。
Retrieval - 检索模型
旨在从一组给定的文档或知识库中检索相关信息。具体来说,将用户的查询 embedding,以便与向量数据库中的其他上下文信息进行比对。通过这种相似性搜索,可以找到向量数据库中最匹配的前 k 个数据。
检索的核心分为如下两部分:
- 索引:嵌入(Embeddings),将知识库转换为可搜索/查询的内容。
- 查询:从搜索内容中提取最相关的、最佳知识片段。
Augmented - 增强
将用户的查询和检索到的额外信息一起嵌入到一个预设的提示模板中。
Generate - 生成模型
最终,检索增强 prompt 被输入到 LLM 中。
Piepline
1. 提取数据阶段
Ingestion stage of a RAG pipeline
1.1 数据清洗
在进行以下任何步骤之前,确保数据符合以下标准:
- clean:应用一些常见的自然语言处理基础数据清理技术,例如确保所有特殊字符都被正确编码。
- correct:确保信息一致且事实准确,以避免相互矛盾的信息混淆 LLM。
1.3 Chunking
一个需要考虑的因素是分块技术的选择。例如,在[LangChain]中,不同的文本拆分器会根据不同的逻辑来拆分文档,例如按字符、标记等。这取决于您所拥有的数据类型。例如,如果你的输入数据是代码,与Markdown文件相比,你需要使用不同的分块技术。
理想的分块长度(chunk_size
)取决于你的用例:如果你的用例是问答,可能需要较短的具体分块,但如果用例是摘要,可能需要较长的分块。此外,如果分块太短,可能不会包含足够的上下文。另一方面,如果分块太长,可能会包含过多无关的信息。
此外,还需要考虑在分块之间引入一些额外上下文的 “滚动窗口”(overlap
) 。
1.4 Embedding models - LLM
-
通常,生成 embedding 的维度越高,embedding 的精度就越高。
[MTEB Leaderboard - a Hugging Face Space by mteb]中文文本嵌入模型比较
-
LlamaIndex 的实验显示,微调 embedding models [5–10%]
1.5 Metadata
给向量嵌入添加 metadata 标注 可以在后续的搜索结果处理中发挥重要作用,如进行元数据筛选。比如,可以加入诸如日期、章节或小节的引用等额外信息。
1.6 Multi-indexing
在 metadata ****无法充分区分不同上下文类型的情况下,可以考虑尝试多重索引技术。比如,针对不同文档类型采用不同的索引策略。注意,这样做需要在数据检索时加入索引路由机制。
对于表:可以提取每个表,生成适合检索的表摘要,但将原始表返回到LLM进行答案合成。
1.7 Indexing algorithms
向量数据库和索引库通常采用近似最近邻 (ANN) 搜索方法,而不是传统的 k-最近邻 (kNN) 搜索。ANN 算法通过近似计算来定位最近邻,因此可能在精确度上稍逊于 kNN 算法。
2. 推理阶段 (Retrieval & Generation)
Inference stage of a RAG pipeline
2.1 Retrieval
2.1.1 Query transformations - LLM
[query transformation techniques]
-
Rephrasing: 使用 LLM 重新措辞 query 并再次尝试。query 的措辞会直接影响搜索结果。
-
假设性文档嵌入 (HyDE) :使用 LLM 生成假设性响应(答案)。该答案用于搜索查询。
-
子查询:将复杂查询分解为子问题。
-
假设性问题:为每个分块生成一个问题,对问题向量执行查询搜索,然后在检索后路由到原始文本分块。
-
Step-back prompting | multi-query: 利用大模型生成多个query 来检索,然后筛选。
[Query Transform Cookbook - LlamaIndex]
2.1.2 Retrieval parameters | Hybrid search
[Hybrid search]
The first consideration is whether semantic search will be sufficient for your use case or if you want to experiment with hybrid search.
在选择混合搜索时,需要研究如何在稀疏和密集检索方法之间进行有效的权重分配 [1, 4, 9]。这就涉及到调整 alpha
参数,该参数负责平衡基于语义的搜索(alpha = 1
)和基于关键词的搜索(稀疏)(alpha = 0
)的重要性。
[Improving Retrieval Performance in RAG Pipelines with Hybrid Search]
如何通过混合搜索在 RAG 流程中提升检索性能
混合搜索也可以是将检索实体关系的知识图技术与 vector search 相结合。
不同的搜索系统各自擅长揭示文本(段落、句子、单词)中的各种微妙联系,包括精确关系、语义关系、主题关系、结构关系、实体关系、时间关系和事件关系。可以说,没有一种单一的搜索模式适用于所有情况。混合搜索通过整合多个搜索系统,在各种搜索技术之间实现了互补。
2.1.3 Advanced retrieval strategies
基本思想是,用于检索的块不一定是用于生成的相同块。理想情况下,应该嵌入更小的数据块来进行检索,但同时检索更广泛的上下文。The concept here is to retrieve smaller chunks for better search quality, but add up surrounding context for LLM to reason upon.
-
Sentence-window retrieval: 在检索时,不只是找到相关的单个句子,而是要获取该句子前后的相关句子。
-
Auto-merging retrieval(aka Parent Document Retriever): 文档按树状结构组织。在查询时,可以把若干个小的、相关的数据块合并成一个更大的上下文。
文档被分割成层次化的块结构,最小的叶子块被送至索引。在检索时,我们会找出 k 个叶子块,如果存在 n 个块都指向同一父块,我们就用这个父块替换它们,并把它送给 LLM 用于生成答案。
2.1.4 查询构建
自然语言的 query 需要转换为检索的查询语法。
文本到 Metadata Filter
配备 Metadata Filter 的向量存储使结构化查询能够过滤嵌入式非结构化文档。self-query retriever可以使用向量存储中元数据字段的规范,使用元数据过滤器将自然语言转换为这些结构化查询。
文本到 SQL
相当多的工作集中在将自然语言翻译成SQL请求上。通过向LLM提供自然语言问题以及相关表格信息,可以轻松完成从文本到SQL的转换。开源LLM可以轻松完成此类任务。
文本到 Cypher
- 向量存储很容易处理非结构化数据,但它们不理解向量之间的关系。
- SQL数据库可以对关系进行建模,但模式更改可能具有破坏性且成本高昂。
知识图谱可以通过对数据之间的关系进行建模和扩展关系类型来应对这些挑战。对于具有难以以表格形式表示的多对多关系或层次结构的数据,它们也是比较适合的。
Re-ranking models - LLM
使用重排序模型时,可能需要重新调整搜索结果的数量(re-rank 输入),以及想要输入到大语言模型的经过重排序的结果数量(re-rank 输出)。
和 嵌入模型 一样,可能需要尝试针对特定应用场景对重排序模型进行微调。
re-rank 是增强现有搜索系统的辅助工具。它最大的优势在于不仅提供了一种简单和低复杂度的方法来改善搜索结果,而且还允许用户将语义相关性集成到现有的搜索系统中,而无需进行重大基础设施修改。
Query Routing - LLM
是指在接收到用户的查询后,由大语言模型决定接下来的操作步骤。常见的做法包括概述查询内容、对特定数据索引进行搜索,或尝试多个不同的处理方法,并将这些方法的结果合成一个答案。
选择特定路由的过程是通过大语言模型来实现的,其结果按照预定义的格式返回,以指导查询到达指定的索引。如果是涉及到关联操作,这些查询还可能被发送到子链或其他智能体。
2.2 Generation
2.2.1 LLMs - LLM
与嵌入模型或重新排序模型一样,你可能希望尝试根据你的特定用例对 LLM 进行微调,以合并特定的措辞或语气。
2.2.2 Prompt engineering
Please base your answer only on the search results and nothing else!
Very important! Your answer MUST be grounded in the search results provided.
Please explain why your answer is grounded in the search results!
此外,在提示中使用少样本示例可以提高完成任务的质量。
输入到提示中的上下文数量是一个需要你进行实验的参数。
Chat Engine
It is solved by query compression technique, taking chat context into account along with the user query.
- ContextChatEngine: 检索与用户查询相关的上下文,然后将其与内存缓冲区中的聊天历史一起发送到LLM。 (query → context) + history → answer
- CondensePlusContextMode: <(query + history) → new query> + context → answer
Response synthesiser
基于初始查询和检索到的所有上下文生成response。
- 将所有获取到的 contexts(超过某个相关性阈值)与查询一起连接并一次性输入到LLM中。
- 通过逐步将检索到的 contexts 分块发送到LLM,迭代地完善答案。
- 将检索到的内容总结成符合 prompt 的形式。
- 基于不同的 contexts 生成多个答案,然后将它们连接或总结。
大模型&AI产品经理如何学习
求大家的点赞和收藏,我花2万买的大模型学习资料免费共享给你们,来看看有哪些东西。
1.学习路线图
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
2.视频教程
网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己整理的大模型视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。
(都打包成一块的了,不能一一展开,总共300多集)
因篇幅有限,仅展示部分资料,需要点击下方图片前往获取
3.技术文档和电子书
这里主要整理了大模型相关PDF书籍、行业报告、文档,有几百本,都是目前行业最新的。
4.LLM面试题和面经合集
这里主要整理了行业目前最新的大模型面试题和各种大厂offer面经合集。
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓