LangGraph构建Ai智能体-9-RAG概念

93 阅读6分钟

前言

LangGraph中的代理检索增强生成(RAG)全称为Agentic Retrieval-Augmented Generation

简单来说,RAG 就像是给大型语言模型(LLM)装了一个“外挂”,让它能够用到最新的、相关的或者私密的信息,从而更好地回答问题。这个技术特别适合问答机器人、客服系统,还有那些需要针对特定数据提供见解的场景。

LLM 虽然很厉害,但它有个“知识截止日期”,之后的知识就不知道了。RAG 就是通过检索机制,从提前整理好的数据里找到有用的信息,然后结合 LLM 的能力,生成针对用户问题的答案。

RAG 主要有两个关键部分:

  • 索引:就是把数据整理好,方便快速找到需要的内容。
  • 检索和生成:当用户提问时,先找到相关的数据,再用 LLM 的能力生成回答。

具体来说,RAG 需要完成两个主要流程:

  • 数据索引:把数据分成小块,然后存起来,方便搜索。
  • 查询处理:根据用户的问题,找到相关的数据块,然后生成合适的回答。

总之,RAG 就是让 LLM 能够更好地利用外部信息,更聪明地回答问题。

Embeddings

什么是嵌入(Embeddings)?

嵌入是一种把复杂的数据(比如单词、句子)转换成一组数字的方法。这些数字就像一个“代码”,能够把数据的意思或者特征“打包”起来,让机器更容易理解。你可以把它想象成把单词、短语或者文档变成机器能处理的数字形式,但同时尽量保留它们本来的意思。

比如说,在自然语言处理(NLP)里,一个单词嵌入可以把“cat”(猫)这个词变成一个数字向量,让它在数字空间里离“kitten”(小猫)或者“dog”(狗)这样的词更近,因为它们意思相近,而不是因为它们拼写相似。

嵌入是什么样的?

一个单词或短语的嵌入看起来可能是一串数字,比如:

[0.32, -0.45, 1.67, 0.25, -0.09, ... , -0.65] 

这个向量里的每一个数字都代表了一个“维度”,用来捕捉这个词意思的一个独特方面。这些数字是根据嵌入的训练数据得出来的。

对我们来说,这只是一串数字,但对机器来说,这串数字就像是一个“小包裹”,里面装着这个词的意思,而且这个表示方式很紧凑,很有意义。

流行的嵌入类型

1. OpenAI 嵌入

  • 介绍:基于 GPT 的嵌入,很擅长捕捉广泛的知识。
  • 优点:因为是在海量、多样化的数据上训练的,所以适合各种通用的自然语言处理任务。
  • 缺点:计算成本高,对特别专业的数据不够“贴身”。

2. Sentence-BERT(SBERT)

  • 介绍:常用来比较句子或段落之间的相似性。
  • 优点:专门优化了句子级别的比较,非常适合问答和文档检索。
  • 缺点:如果遇到复杂、微妙的文本,而这些文本和它的训练数据不匹配,效果可能会打折扣。

3. Doc2Vec

  • 介绍:适合处理大段文本,比如文档或章节。
  • 优点:能够处理整个文档,非常适合文档聚类和分类。
  • 缺点:在单词或句子级别的细粒度相似性比较上不太行。

4. FastText

  • 介绍:Facebook AI 开发的模型,能捕捉词内部的信息,比如词根、词缀,对罕见词或专有名词很有效。
  • 优点:在处理复杂词形变化的语言或者生僻词时特别厉害。
  • 缺点:相比大型模型,可能对语义的理解不够细腻。

5. TF-IDF 嵌入

  • 介绍:经典的“词频 - 逆文档频率”方法,虽然简单,但对有些应用来说很有效。
  • 优点:速度快,计算成本低,适合基于关键词的简单检索。
  • 缺点:因为它只看词频,所以缺乏对上下文的深度理解。

简单来说,这些嵌入各有各的“拿手活”,选择哪种取决于你要解决的问题!

相关资料和论文

1. Word2Vec(Mikolov 等人,2013)
  • 核心概念:Word2Vec 是一种用神经网络生成密集单词向量的方法。它的核心思想是“相似的上下文,相似的词”,也就是说,经常出现在相似上下文中的词,在向量空间里会被放得很近。
  • 例子:比如,“猫”和“狗”经常出现在宠物相关的上下文中,所以它们的向量会很接近。
2. GloVe(全局词向量,Pennington 等人,2014)
  • 核心概念:GloVe 是一种基于统计的方法,通过分析整个语料库中词的共现关系来学习词之间的关系。
  • 例子:如果“猫”和“宠物”经常一起出现,那么它们的向量就会反映出这种关系。GloVe 的特点是它会考虑全局的词频信息。
3. BERT(Devlin 等人,2018)
  • 核心概念:BERT 和后来的模型(比如 RoBERTa 和 DistilBERT)引入了一种能够捕捉上下文中词关系的嵌入方法。BERT 的特点是它可以根据上下文动态生成词向量,而不是固定不变的。
  • 例子:比如“银行”这个词,在“河边的银行”和“银行的利率”中,BERT 能生成不同的向量,因为它能理解上下文。

从大型语言模型(LLM)中提取的嵌入模型

什么是基于 LLM 的嵌入模型?

像 OpenAI 的 GPT、Google 的 BERT 或 Meta 的 LLaMA 这样的大型语言模型(LLM)生成的嵌入模型,彻底改变了我们从文本中提取语义信息的方式。这些模型生成的嵌入能够捕捉语言中的复杂细节,比如上下文、细微差别、语法和语义,这比传统的嵌入技术厉害多了。

为什么用基于 LLM 的嵌入?

基于 LLM 的嵌入(比如 BERT 或 GPT 的嵌入)有以下几个好处:

  1. 捕捉上下文中的意思:这些嵌入可以根据周围的词动态调整,能够理解句子或短语中的具体含义。比如,“苹果”在“苹果手机”和“苹果树”中,嵌入会不一样,因为它能理解上下文。

  2. 动态、任务专用的表示:这些嵌入可以根据不同的任务(比如问答或者文本总结)调整自己的表示方式。比如,同一个句子在问答任务和翻译任务中,嵌入可能会有所不同,因为任务的需求不一样。

  3. 支持迁移学习:这些嵌入是在海量数据上预训练的,能够很好地适应各种不同的任务和行业。比如,一个在新闻数据上训练好的嵌入模型,也可以用在医疗文本分析上,因为它有很强的泛化能力。

简单来说,基于 LLM 的嵌入就像是一个“智能翻译器”,能够根据不同的场景和任务,灵活地理解语言的复杂性。