使用langchain与你自己的数据对话(三):检索(Retrieval)_langchain 数据收集

LangChain核心模块 Retrieval——Retrievers 数据进入数据库,仍然需要检索,LangChain支持多种检索算法。LangChain支持易于上手的基本方法——即简单语义搜索。然而,我们还在此基础上添加了一系列算法以提高性能。检索器是一个接口,它根据非结构化查询返回文档,它比矢量存储更通用。检索器不需要能够存储文档,只需返回(或检索)它们即可。矢量存储可以用作检索器的骨干,但也有其他类型的检索器。检索器接受字符串查询作为输入,并返回文档列表作为输出。 阅读详情

今天我们来继续讲解deepleaning.AI的在线课程“LangChain: Chat with Your Data”的第四门课:检索(Retrieval)。

Langchain在实现与外部数据对话的功能时需要经历下面的5个阶段,它们分别是:Document Loading->Splitting->Storage->Retrieval->Output,如下图所示:

在上一篇博客:向量存储与嵌入中我们介绍了嵌入(Embeddings)和开源向量数据库Chroma的基本原理,当文档经过切割(splitting),嵌入(embedding)后存入向量数据库以后,接下来就来到了检索(retrieval)环节:

检索是指根据用户的问题去向量数据库中搜索与问题相关的文档内容,当我们访问和查询向量数据库时可能会运用到如下几种技术:

  • 基本语义相似度(Basic semantic similarity)
  • 最大边际相关性(Maximum marginal relevance,MMR)
  • 过滤元数据
  • LLM辅助检索

在讨论这些新技术之前,想让我们完成一些基础性工作,比如设置一下openai的api key:

import os
import openai
import sys
sys.path.append('../..')
 
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv()) # read local .env file
 
openai.api_key  = os.environ['OPENAI_API_KEY']

基本语义相似度(Basic semantic similarity)

下面我们来实现一下语义的相似度搜索,我们把三句英语的句子存入向量数据库Chroma中,然后我们提出问题让向量数据库根据问题来搜索相关答案:

from langchain.vectorstores import Chroma
from langchain.embeddings.openai import OpenAIEmbeddings

#创建open ai的embedding对象
embedding = OpenAIEmbeddings()

#需要存入数据库的文本
texts = [
    """The Amanita phalloides has a large and imposing epigeous (aboveground) fruiting body (basidiocarp).""",
    """A mushroom with a large fruiting body is the Amanita phalloides. Some varieties are all-white.""",
    """A. phalloides, a.k.a Death Cap, is one of the most poisonous of all known mushrooms.""",
]


#创建向量数据库
smalldb = Chroma.from_texts(texts, embedding=embedding)

下面我们把代码中的三句英语的文本翻译为中文,这样便于大家更好的理解其含义:

  • 1.“鹅膏菌具有巨大而雄伟的地上(地上)子实体(担子果)。”
  • 2.“具有较大子实体的蘑菇是鹅膏菌。有些品种是全白色的。”
  • 3.“鬼笔甲,又名死亡帽,是所有已知蘑菇中毒性最强的一种。”

我们可以看到前两句都是描述的是一种叫“鹅膏菌”的菌类,包括它们的特征:有较大的子实体,第三句描述的是“鬼笔甲”,一种已知的最毒的蘑菇,它的特征就是:含有剧毒。下面我们提出一个问题:“告诉我有关子实体大的全白蘑菇的信息”,然后让向量数据库用相似度(similarity)方法去搜索2个和问题最相关的答案:

#问题:告诉我有关子实体大的全白蘑菇的信息
question = "Tell me about all-white mushrooms with large fruiting bodies"

smalldb.similarity_search(question, k=2)

我们看到向量数据库返回了2个文档,就是我们存入向量数据库中的第一句和第二句。这里我们很明显的就可以看到chroma的similarity_search方法可以根据问题的语义去数据库中搜索与之相关性最高的文档也就是搜索到了第一句和第二句的文本,但这似乎有存在一些问题,因为第一句和第二句的含义非常接近,他们都是描述“鹅膏菌”及其“子实体”的,所以假如只返回其中的一句就足以满足要求了,如果返回两句含义非常接近的文本感觉是一种资源的浪费,下面我们来看一下max_marginal_relevance_search的搜索结果:

smalldb.max_marginal_relevance_search(question,k=2, fetch_k=3)

这里我们看到 max_marginal_relevance_search返回了第二和第三句的文本,尽管第三句与我们的问题的相关性不太高,但是这样的结果其实应该是更加的合理,因为第一句和第二句文本本来就有着相似的含义,所以只需要返回其中的一句就可以了,另外再返回一个与问题相关性弱一点的答案(第三句文本),这样似乎增强了答案的多样性,相信用户也会更加偏爱max_marginal_relevance_search 的结果,因为它兼顾了答案的相关性和多样性,下面我们就来讨论“最大边际相关性(Maximum marginal relevance ,MMR)”的问题。

最大边际相关性(Maximum marginal relevance ,MMR)

最大边际相关性(Maximum marginal relevance ,MMR)在论文:《The Use of MMR, Diversity-Based Reranking for Reordering Documents and Production Summaries》中有详细的介绍,MMR 尝试减少结果的冗余,同时保持结果与查询条件相关性和多样性的平衡(。作者在论文中提出了如下的公式:

其中:

  • Q: 查询条件
  • R: 与查询Q相关的所有文档集
  • D: 与查询条件相关的文档集
  • S: R中已选择的文档子集
  • R\S: R中未选择的文档子集
  • λ:[0–1] 范围内的常数,用于结果的多样化
  • Sim1,Sim2: 用来度量查询Q与文档相似度的指标,如余弦相似度等。

有兴趣的读者可以仔细研读该篇论文,幸运的是我们不需要手动去实现MMR算法,Langchain的内置方法max_marginal_relevance_search已经帮我们首先了该算法,在执行max_marginal_relevance_search方法时,我们需要设置fetch_k参数,用来告诉向量数据库我们最终需要k个结果,向量数据库在搜索时会获取一个和问题相关的文档集,该文档集中的文档数量大于k,然后从中过滤出k个具有相关性同时兼顾多样性的文档。

下面我们来测试一下max_marginal_relevance_search方法,还记得在上一篇博客(向量存储与嵌入)中我们介绍了两种向量数据在查询时的失败场景吗?当向量数据库中存在相同的文档时,而当用户的问题又与这些重复的文档高度相关时,向量数据库会出现返回重复的文档情况,现在我们就可以运用Langchain的max_marginal_relevance_search来解决这个问题,不过首先我们需要先加载一下上一篇博客中保存在本地的关于吴恩达老师的机器学习课程cs229课程讲义的向量数据库:

#向量数据库地址
persist_directory = 'docs/chroma/'

embedding = OpenAIEmbeddings()

vectordb = Chroma(
    persist_directory=persist_directory,
    embedding_function=embedding
)

#打印向量数据库中的文档数量
print(vectordb._collection.count())

这里我们加载了之前保存在本地的向量数据库,并查询了数据库中的文档数量为209,这与我们之前创建该数据库时候的文档数量是一致的,接下来我们提出了和上篇博客中相同的问题,然后先用similarity_search方法来查询一下,它应该会返回两篇相同的文档:

question = "what did they say about matlab?"
docs_ss = vectordb.similarity_search(question,k=3)

docs_ss 

这里我们看到向量数据库返回了两篇相同的文档,这是因为在上一篇博客中我们在创建向量数据库时加载了两篇相同的文档(Lecture01.pdf),所以这回通过similarity_search方法搜索相似文档时它们被同时搜索到并返回给了用户。下面我们使用max_marginal_relevance_search方法来搜索:

docs_mmr = vectordb.max_marginal_relevance_search(question,k=3)

docs_mmr

这里我们看到向量数据库返回了3篇完全不同的文档,这是因为我们使用的是MMR搜索,它把搜索结果中相似度很高的文档做了过滤,所以它保留了结果的相关性又同时兼顾了结果的多样性。

过滤元数据

在上一篇博客中的“失败的应用场景”的章节中我们还提出了一个问题:我们要求向量数据库在第三篇原始文档(Lecture03.pdf)中搜索相关答案,结果向量数据库的返回结果中除了第三篇文档的结果以外还包含了第一篇(Lecture01.pdf)和第二篇文档(Lecture02.pdf)的内容,这是我们所不希望看到的结果,之所以产生这样的结果是因为当我们向向量数据库提出问题时,数据库并没有很好的理解问题的语义,所以返回的结果不如预期,要解决这个问题,我们可以通过过滤元数据的方式来实现精准搜索,当前很多向量数据库都支持对元数据的操作:

question = "what did they say about regression in the third lecture?"

docs = vectordb.similarity_search(
    question,
    k=3,
    filter={"source":"docs/cs229_lectures/MachineLearning-Lecture03.pdf"}
)

for d in docs:
    print(d.metadata)

这里我们可以看到通过我们在代码中设置了filter过滤条件后,向量数据库返回的3个答案呢都是基于第三篇文档的(Lecture03.pdf),这就符合我们的要求了,通过在similarity_search方法中加入filter参数,就可以指定需要搜索的原始文档,因为所有原始文档的文件名信息都保存在切割后文档的元数据信息中,通过过滤元数据信息就可以使向量数据库在指定的文档中搜索和问题相关的答案了。

LLM辅助检索

上面我们使用的是手动设置元数据的过滤参数filter来实现过滤指定文档的功能,其实这也不是很方便,因为我们每次都需要手动去设置过滤条件,这会非常的麻烦。有没有方法可以准确识别问题中的语义(因为在用户的问题中已经指出了需要过滤的文档)从而自动实现元数据过滤呢?也就是说是否有一种方法可以从用户问题的语义中自动推断出需要过滤的元数据信息呢?Langchain为我们提供了这样的方法,我们可以使用 SelfQueryRetriever,它使用 LLM 从用户原始问题中抽取取:

  • 用于向量搜索的查询字符串(search term)
  • 用于过滤元数据的信息(Filter)

其原理如下图所示:

下面我们就来实现一下LLM辅助检索:

from langchain.llms import OpenAI
from langchain.retrievers.self_query.base import SelfQueryRetriever
from langchain.chains.query_constructor.base import AttributeInfo

#定义元数据的过滤条件
metadata_field_info = [
    AttributeInfo(
        name="source",
        description="The lecture the chunk is from, should be one of `docs/cs229_lectures/MachineLearning-Lecture01.pdf`, `docs/cs229_lectures/MachineLearning-Lecture02.pdf`, or `docs/cs229_lectures/MachineLearning-Lecture03.pdf`",
        type="string",
    ),
    AttributeInfo(
        name="page",
        description="The page from the lecture",
        type="integer",
    ),
]

#创建SelfQueryRetriever
document_content_description = "Lecture notes"
llm = OpenAI(temperature=0)
retriever = SelfQueryRetriever.from_llm(
    llm,
    vectordb,
    document_content_description,
    metadata_field_info,
    verbose=True
)

这里我们首先定义了metadata_field_info ,它包含了元数据的过滤条件source和page, 其中source的作用是告诉LLM我们想要的数据来自于哪里,page告诉LLM我们还需要提取相关的内容在原始文档的第几页。有了metadata_field_info信息后,LLM会自动从用户的问题中提取出上图中的Filter和Search term两项,然后向量数据库基于这两项去搜索相关的内容。下面我们看一下查询结果:

#问题
question = "what did they say about regression in the third lecture?"

#搜索相关文档
docs = retriever.get_relevant_documents(question)

#打印结果中的元数据信息
for d in docs:
    print(d.metadata)

由于我们在定义SelfQueryRetriever时设置了verbose=True,所以我们可以看到一些SelfQueryRetriever执行的中间结果,从上面的返回结果中我们看到query和filter这两项,其中query=‘regression’就是从用户问题中提取出来的搜索项,搜索内容为“regression”, 而filter项是LLM根据metadata_field_info中定义的信息对向量数据库中的文档块的元数据进行过滤的条件。最后我们看到返回结果均来自于第三个文档(Lecture03.pdf),完全符合我们的要求。

附加技巧:压缩(compression)

所谓压缩是指提高文档检索质量的一种方法,当我们根据用户的问题使用检索器(Retriever)去检索向量数据库时,向量数据库一般会返回与问题相关文档块(chunks)中的所有内容,即把整个文档块的内容全部输出,这就可能会产生一些资源浪费的情况,因为和问题相关的文档内容可能只占该文档块的一小部分,可我们却输出了整个文档块的全部内容,这样会增加token成本,因为我们使用的openai的LLM不是免费的,它是根据token数量来收费的,因此输出整个文档块的内容其实是一种资源的浪费,幸运的是Langchain为我们提供给了ContextualCompressionRetriever,其原理如下图所示:

从上图中我们看到,当向量数据库返回了所有与问题相关的所有文档块的全部内容后,会有一个Compression LLM来负责对这些返回的文档块的内容进行压缩,所谓压缩是指仅从文档块中提取出和用户问题相关的内容,并舍弃掉那些不相关的内容。

from langchain.retrievers import ContextualCompressionRetriever
from langchain.retrievers.document_compressors import LLMChainExtractor

def pretty_print_docs(docs):
    print(f"\n{'-' * 100}\n".join([f"Document {i+1}:\n\n" + d.page_content for i, d in enumerate(docs)]))
    
# Wrap our vectorstore
llm = OpenAI(temperature=0)
compressor = LLMChainExtractor.from_llm(llm)

compression_retriever = ContextualCompressionRetriever(
    base_compressor=compressor,
    base_retriever=vectordb.as_retriever()
)

在上面的代码中我们定义了一个LLMChainExtractor,它是一个压缩器,它负责从向量数据库返回的文档块中提取相关信息,然后我们还定义了ContextualCompressionRetriever,它有两个参数:base_compressor和base_retriever,其中base_compressor为我们前面定义的LLMChainExtractor的实例,base_retriever为早前定义的vectordb产生的检索器。下面我们来看一下执行结果:

question = "what did they say about matlab?"
compressed_docs = compression_retriever.get_relevant_documents(question)
pretty_print_docs(compressed_docs)

从上面的返回结果中我们看到,返回结果并不是整个文档块的内容,而只是文档块中的部分内容,这些内容与用户的问题是直接相关的,文档块中与问题不相关的内容都已经被舍弃了,这样就大大节省了使用LLM的成本。

其他类型的检索

值得注意的是,vectordb 并不是Langchain中唯一的一种检索器 。LangChain还提供了其他检索文档的方式,例如TF-IDF或SVM。

from langchain.retrievers import SVMRetriever
from langchain.retrievers import TFIDFRetriever
from langchain.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter


# Load PDF
loader = PyPDFLoader("docs/cs229_lectures/MachineLearning-Lecture01.pdf")
pages = loader.load()
all_page_text=[p.page_content for p in pages]
joined_page_text=" ".join(all_page_text)

# Split
text_splitter = RecursiveCharacterTextSplitter(chunk_size = 1500,chunk_overlap = 150)
splits = text_splitter.split_text(joined_page_text)


# Retrieve
svm_retriever = SVMRetriever.from_texts(splits,embedding)
tfidf_retriever = TFIDFRetriever.from_texts(splits)

这里我们定义了SVMRetriever,和TFIDFRetriever两个检索器,下面我们使用这两个检索器来检索向量数据库:

question = "What are major topics for this class?"
docs_svm=svm_retriever.get_relevant_documents(question)
docs_svm[0]

question = "what did they say about matlab?"
docs_tfidf=tfidf_retriever.get_relevant_documents(question)
docs_tfidf[0]

关于SVM和TF-IDF的相关技术不会在本文中讨论,读者可以执行查阅相关技术资料。

总结

今天我们学习了很多有用的新技术比如最大边际相关性(MMR),MMR可以让搜索结果保持相关性和多样性,这样可以避免出现冗余的搜索结果,除此之外我们可以定义元数据的过滤条件,这样向量数据库可以更加精准的搜索和问题相关的答案。另外我们还学习了LLM辅助检索,通过定义元数据字段信息metadata_field_info ,我们可以使用SelfQueryRetriever自动推断出用户问题中的搜索项和过滤项,这样可以避免手动设置元数据过滤条件带来的麻烦,后面我们还介绍了内容压缩检索器ContextualCompressionRetriever,通过ContextualCompressionRetriever我们可以从返回的整个文档块抽取和用户问题相关的内容,抛弃掉和问题无关的内容,这样可以大大节省LLM的使用成本。最后我们还简单介绍了SVM和TF-IDF检索器的使用方法,希望今天的内容对大家有所帮助!

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范
  • …

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署
  • …

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建
  • …

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案
  • …

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费】
【LangChain】检索器(Retrievers) 如何创建检索器加载文档创建拆分器,拆分文档创建嵌入。 阅读详情

相关推荐

Langchain 集成 FAISS

Langchain 集成 FAISS

engchina的专栏 3734

使用langchain与你自己的数据对话(三):检索(Retrieval)

今天我们学习了很多有用的新技术比如最大边际相关性(MMR),MMR可以让搜索结果保持相关性和多样性,这样可以避免出现冗余的搜索结果,除此之外我们可以定义元数据的过滤条件,这样向量数据库可以更加精准的搜索和问题相关的答案。

weixin_42608414的博客 7585

【LangChain】对话式问答(Conversational Retrieval QA)

它首先将聊天记录(显式传入或从提供的内存中检索)和问题组合成一个独立的问题,然后从检索器中查找相关文档,最后将这些文档和问题传递到问答链以返回一个响应。这样会有一个非常大的好处:我们可以使用更便宜、更快的模型来完成问题的凝练工作,然后再使用昂贵的模型来回答问题。首先,它将当前问题和聊天历史凝练为一个独立的问题。声明性特性的部分强大之处在于,您可以轻松地为每个调用使用单独的语言模型。之后,它进行检索,然后使用单独模型的检索增强生成来回答问题。在下面的示例中,我们将从向量存储创建一个,该向量存储可以从。

山鬼谣的专栏 1万+

向量数据库Chroma极简教程

目前向量数据库在AI中的应用越来越重要,但很多厂商更倾向于将向量数据库隐藏在产品内部,用户感知不到很多向量数据库的使用细节。但大模型的学习终究是建立在开源代码之上的,学习Chroma可以让我们快速了解向量数据库的基本原理,也有利于我们未来更好地理解大模型。

蛮三刀酱 1万+

RAG实战案例:如何基于 LangChain 实现智能检索生成系统

检索增强生成 (RAG) 是一种使用来自私有或专有数据源的信息来辅助文本生成的技术。它将检索模型(设计用于搜索大型数据集或知识库)和生成模型(例如大型语言模型 (LLM),此类模型会使用检索到的信息生成可供阅读的文本回复)结合在一起。通过从更多数据源添加背景信息,以及通过训练来补充 LLM 的原始知识库,检索增强生成能够提高搜索体验的相关性。这能够改善大型语言模型的输出,但又无需重新训练模型。

FrenzyTechAI的博客 1万+

使用Elasticsearch实现RAG:基于LangChain的智能检索问答系统

本文介绍了如何使用Elasticsearch和LangChain实现Retrieval-Augmented Generation智能问答系统。希望这篇文章能帮助您理解RAG架构和实现。Elasticsearch官方文档。

sjufgwgfhoia的博客 1426

【LangChain第7章-完】LangChain使用之Retrieval

本文详细介绍了LangChain框架中的Retrieval模块,重点讲解了如何构建企业/私人知识库以提升大模型能力。主要内容包括: Retrieval模块的核心流程:数据获取、切分、向量化、存储和检索 文档加载器(Document Loaders):支持多种格式如TXT、PDF、CSV、JSON等的统一加载 文档切分器(Text Splitters):包括字符切分、递归切分、语义切分等多种策略 文本嵌入模型(Embedding Models):将文本转换为向量表示的方法 向量存储(Vector Stores

春天的波菜 1257

AI大模型探索之路-应用篇5:Langchain框架Retrieval模块—高效的信息检索与增强

在人工智能的领域中,大模型的应用已经成为一种趋势。然而,大型语言模型(LLM)的应用程序往往需要特定于用户的数据,这些数据并不属于模型的训练集。为了实现这一目标,我们通常采用检索增强生成(Retrieval-augmented Generation,RAG)的方法。在此过程中,我们将从外部检索数据,然后在执行生成步骤时将其传递给 LLM。LangChain框架提供了一套完整的工具,以支持RAG应用程序的开发。

寻道AI,探索AI无限可能! 2533

LangChain 数据检索(Retrieval)

摘要:大型语言模型(LLM)的知识受限于训练数据,无法获取实时或特定领域信息。数据检索(Retrieval)技术通过关键组件解决这一问题:文档加载器从多种数据源提取内容,文本分割器将长文档切分为语义完整的片段,嵌入模型将文本转换为向量表示以支持相似度搜索。典型流程包括数据加载、分割、向量化存储和检索,最终增强LLM生成能力。该技术拓展了LLM的应用边界,使其能结合外部知识库提供更精准的响应。

qq_43644023的博客 1167

【大语言模型】LangChain 核心模块介绍(Chains、Retrieval、Tools)

Chains 是指调用的序列,这个序列包含 LLM、工具、数据预处理等多个不同类型的步骤。1、使用LangChain LCEL 表达式语言,构建 Chains。2、通过继承旧版 Chain 类的子类而构造的链(不推荐)。其中主要推荐大家使用 LCEL 进行 Chains 的使用。1、使用简单。2、支持多种方式,包含 streaming(流),async(异步),而且开箱即用。3、非常易于观察每个实现步骤。许多 LLM 应用程序需要使用用户的数据而这些数据不属于 LLM 的一部分。

python全栈 2302

【LangChain核心组件】Retrieval(检索)模块

在AI技术日新月异的今天,大型语言模型(LLM)的局限性也逐渐显现——它们无法有效处理特定领域知识和用户私有数据。这正是检索增强生成(Retrieval-Augmented Generation,RAG)技术崛起的根本原因。作为当前最主流的解决方案框架,LangChain的Retrieval模块为企业级AI应用开发提供了完整的工具链。本文将带您深入解析这个革命性框架的核心组件与技术实现。

qq_62223405的博客 952

LangChain最详细教程之Retrieval

本文详细介绍了LangChain框架中的Retrieval模块设计,重点解决大模型在专业领域知识问答中的“幻觉”问题。文章阐述了RAG(检索增强生成)技术的原理与实现流程,包括文档加载、转换、嵌入、存储和检索等核心环节。通过具体代码示例展示了如何加载多种格式文档(TXT/PDF/CSV/JSON等),使用不同策略进行文本拆分(字符/递归/语义分块),以及利用向量数据库实现相似性检索。最后演示了如何将检索结果与大模型结合,构建问答系统。全文系统性地讲解了LangChain框架下知识检索增强的实现方法,为开发专

m0_74977182的博客 1470

华为海思IC前端中后端(COT&XPU)岗位笔试机考题

华为海思COT和XPU部门IC前端,IC中端,IC后端岗位笔试真题分享

weixin_37584728的博客 3362

08—langchain Retrieval

本文介绍了RAG(检索增强生成)技术及其在解决大模型幻觉问题中的应用。主要内容包括: RAG的设计意义:通过检索外部知识库为大模型提供上下文,提高专业领域回答的准确性,缓解大模型幻觉问题。 RAG流程详解:包含数据源获取、文档加载、转换处理、向量嵌入、存储和检索六个关键环节。重点说明了文档拆分和向量化的重要性。 文档加载器的使用:展示了如何通过不同加载器(TextLoader、PDFLoader等)将各类格式文档转换为标准Document对象。 RAG的优缺点:优点是提供丰富上下文、保护隐私、提升时效性;缺

m0_65519288的博客 914

Windows11开机必看:3种方法跳过联网激活(含最新OOBE命令)

本文详细介绍了Windows11新机开箱时绕过联网激活的三种实用方法,包括任务管理器终止进程法、命令行强制终止法和最新的OOBE\BYPASSNRO命令法。特别推荐使用微软官方预留的OOBE命令,操作简单且无副作用,帮助用户快速完成系统设置。

weixin_28366353的博客 1627

IMU660RA姿态解算实战:从传感器滤波到欧拉角输出的完整实现

本文详细介绍了IMU660RA姿态解算的完整实现过程,从传感器滤波到欧拉角输出。通过实战案例和代码示例,展示了如何有效处理陀螺仪和加速度计的噪声问题,并选择合适的算法进行数据融合和姿态解算。特别强调了欧拉角输出中的坐标系对齐和动态补偿技巧,帮助工程师快速掌握IMU660RA的应用。

weixin_42524762的博客 386

【可能是全网最丝滑的LangChain教程】四、快速入门Retrieval Chain

LangChain中Retrieval Chain是什么,介绍Retrieval Chain的基本用法

Jeffray1991的博客 1861

RC4加密算法详解

RC4(也称为 Rivest Cipher 4)是流密码的一种形式,流密码逐字节操作数据流。RC4 流密码是使用最广泛的流密码之一,它通过算法一次一个字节地加密消息,简单并且操作速度快。RC4是一种在电子信息领域加密的技术手段,用于无线通信网络,是一种电子密码,只有经过授权的用户才能享受该服务,使用 64 位或 128 位密钥大小。它通常用于安全套接层 (SSL)、传输层安全 (TLS) 等应用,也用于 IEEE 802.11 无线 LAN 标准。在存储大量的信息时,RC4展现出它的实用性,面对大量的数据,

weixin_43211186的博客 1万+

LangChain-04 RAG Retrieval-Augmented Generation 检索增强生成 + ChatPromptTemplate

LangChain 中的 RAG(检索增强生成)通过“检索—增强—生成”三步实现精准问答:首先从向量数据库中检索相关文档片段,再结合问题筛选最优上下文,最后由大模型生成答案。这一机制能显著降低幻觉问题,提升回答准确率,并支持可追溯来源。典型应用涵盖智能客服、学术助手和企业知识管理,相比传统大模型,RAG在准确性、知识更新和透明性方面优势明显。LangChain 框架提供 Retriever 与 LLM 的组合接口,仅需少量代码即可构建 RAG 应用,并支持高级功能如多跳检索和重排序。同时,ChatPromp

谢谢你的喜欢 我们一起无限进步 5982

火山引擎实时对话AI实战:5分钟搞定WebRTC+大模型+ASR/TTS全链路集成

本文详细介绍了如何利用火山引擎的实时对话AI解决方案,快速集成WebRTC、大模型、ASR和TTS服务,构建低延迟、高保真的实时语音对话应用。通过实战代码示例,从环境准备、音频流管理到全链路串联与性能优化,为开发者提供了一套端到端的集成指南,适用于智能客服、在线教育等互动场景。

weixin_29051245的博客 1128

003、高通骁龙Spectra ISP架构深度解析:IFE/BPS/IPE流水线与Chromatix调优实战

摘要: 本文深入解析高通骁龙Spectra ISP架构,重点剖析IFE、BPS、IPE三阶段的流水线协作机制与Chromatix调优实战。通过夜景预览"水波纹"案例,揭示HDR对齐与TNR运动估计的关联性问题,指出ISP调优需关注模块间的时序与带宽约束。文章详解各模块核心功能:IFE负责RAW域处理(HDR合成/校正),BPS专注降噪与细节增强,IPE进行YUV域精处理。针对Chromatix调优,强调参数与寄存器映射关系,并给出LSC网格密度、TNR运动灵敏度、LTM光晕等典型问题的解决方案。最后提出实用

zzfmlxs的博客 229

第一版:9、LangChain使用之Retrieval

chunk_size=50, # 每块大小chunk_overlap=5,# 块与块之间的重复字符数separator=“” # 设置为空字符串时,表示禁用分隔符优先text = “这是一个示例文本啊。我们将使用CharacterTextSplitter将其分割成小块。分割基于字符数。chunk_size=30, # 每个块的最大字符数chunk_overlap=5, # 块之间的重叠字符数”, # 按句号分割text = “这是第一段文本。这是第二段内容。最后一段结束。

asdurt的博客 997

代谢组数据分析(五):代谢组的功能富集分析

本文介绍了代谢组数据分析中的功能分析,包括代谢物富集分析、GSEA和ssGSEA方法。文章详细阐述了分析原理、应用背景、数据准备、统计方法以及结果解释,强调了在代谢通路和代谢物ID对应关系建立、差异代谢物筛选、富集程度计算等方面的关键步骤。通过这些方法,可以揭示差异代谢物在生物过程中的作用,为疾病研究和药物开发提供依据。

专注生信领域 5981

LangChain-检索系统 (Retrieval)

检索系统解决了大型语言模型知识有限和过时的问题,允许模型访问外部信息源。文档加载:从各种来源加载文本数据文档处理:分割、清理和预处理文档嵌入和索引:将文本转换为向量并建立索引检索:搜索并获取相关文档上下文增强:将检索到的信息整合到模型输入中检索系统是LangChain中连接大语言模型与外部知识的关键组件。通过文档加载、文本处理、向量嵌入和检索,可以构建强大的知识增强型应用。RAG架构将检索系统与生成模型结合,创建了一种既有知识深度又能保持对话灵活性的AI应用框架。

1.大规模企业集群服务开发和服务架构设计,性能优化等经验。 2.企业级数据仓库0-1落地经验。 990

C# 量子级跨平台开发:用Uno Platform实现Windows、iOS、Android的“量子纠缠”UI同步

墨瑾轩推出编程学习平台,通过XAML的“量子纠缠”技术,实现跨平台开发的高效与一致性。传统方案中,多平台代码重复率高,UI差异大,而量子级方案则通过一套代码构建全平台应用,UI原子化同步,开发效率提升5倍。Uno Platform的“量子纠缠”架构解决了代码碎片化、性能瓶颈和调试难题,实现UI原子化同步、性能提升300%和跨平台数据无缝同步。核心架构包括XAML的跨平台渲染、MVVM的量子叠加态架构、平台差异的量子退相干处理以及性能优化的量子隧穿效应,为开发者提供高效、一致的跨平台开发体验。

java专栏 1165

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

LangChain4j Retrieval-Augmented Generation(检索增强生成)

如果你想加载所有子目录中的文档,可以使用。

qq_36178841的博客 1736

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

上一篇: 使用langchain与你自己的数据对话(二):向量存储与嵌入_langchain chat with your data
下一篇: 使用langchain与你自己的数据对话(四):问答(question answering)_max marginal relevance search
AI大模型_学习君
博客等级 码龄3年 6137粉丝 551原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值