用通俗易懂的方式讲解:使用 LangChain 和 LlamaIndex 从零构建PDF聊天机器人

这篇具有很好参考价值的文章主要介绍了用通俗易懂的方式讲解:使用 LangChain 和 LlamaIndex 从零构建PDF聊天机器人。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

随着大型语言模型(LLM)(如ChatGPT和GPT-4)的兴起,现在比以往任何时候都更容易搭建智能聊天机器人,并且可以堆积如山的文档,为你的输入提供更准确的响应。

用通俗易懂的方式讲解:使用 LangChain 和 LlamaIndex 从零构建PDF聊天机器人,大模型,langchain,llamaindex,大模型,模型部署,算法

无论你是想构建个人助理、定制聊天机器人还是自动文档分析系统,本系列都将为你提供构建自己的LLM聊天机器人所需的知识。

创建什么?

使用ChatGPT作为助手来帮助用户基于多个文档进行问答系统搭建的想法是非常酷。起初,我们的想法是用特定的数据对模型进行微调,以实现这一目标,但这可能成本高昂,并且需要庞大的数据集。此外,对模型进行微调只能教会它一项新技能,而不能提供有关文档的完整信息。

另一种方法是使用提示工程在(多)文档QA的提示中提供上下文。然而,GPT模型的注意力范围有限,将上下文传递给API也可能很昂贵,尤其是在处理大量客户反馈电子邮件和产品文档时。

那么如何创建呢?

以下是实现这些目标的具体步骤:

  1. 首先加载文档(PDF、HTML、文本、数据库等);

  2. 然后将数据分割成块,并对这些块建立embedding索引,这样方便使用向量检索工具进行语义搜索;

  3. 对于每个问题,通过搜索索引和embedding数据来获取与问题相关的信息;

  4. 将问题和相关数据输入到LLM模型中。在这个系列中使用OpenAI的LLM;

实现上述过程主要的两个框架,分别是:Langchain(https://python.langchain.com/en/latest/)和LLamaIndex(https://gpt-index.readthedocs.io/en/latest/)

通俗易懂讲解大模型系列

  • 用通俗易懂的方式讲解:大模型算法工程师最全面试题汇总

  • 用通俗易懂的方式讲解:我的大模型岗位面试总结:共24家,9个offer

  • 用通俗易懂的方式讲解:大模型 RAG 在 LangChain 中的应用实战

  • 用通俗易懂的方式讲解:一文讲清大模型 RAG 技术全流程

  • 用通俗易懂的方式讲解:如何提升大模型 Agent 的能力?

  • 用通俗易懂的方式讲解:ChatGPT 开放的多模态的DALL-E 3功能,好玩到停不下来!

  • 用通俗易懂的方式讲解:基于扩散模型(Diffusion),文生图 AnyText 的效果太棒了

  • 用通俗易懂的方式讲解:在 CPU 服务器上部署 ChatGLM3-6B 模型

  • 用通俗易懂的方式讲解:使用 LangChain 和大模型生成海报文案

  • 用通俗易懂的方式讲解:ChatGLM3-6B 部署指南

  • 用通俗易懂的方式讲解:使用 LangChain 封装自定义的 LLM,太棒了

  • 用通俗易懂的方式讲解:基于 Langchain 和 ChatChat 部署本地知识库问答系统

  • 用通俗易懂的方式讲解:在 Ubuntu 22 上安装 CUDA、Nvidia 显卡驱动、PyTorch等大模型基础环境

  • 用通俗易懂的方式讲解:Llama2 部署讲解及试用方式

  • 用通俗易懂的方式讲解:基于 LangChain 和 ChatGLM2 打造自有知识库问答系统

  • 用通俗易懂的方式讲解:一份保姆级的 Stable Diffusion 部署教程,开启你的炼丹之路

  • 用通俗易懂的方式讲解:对 embedding 模型进行微调,我的大模型召回效果提升了太多了

技术交流

技术要学会分享、交流,不建议闭门造车。一个人可以走的很快、一堆人可以走的更远。

本文完整代码、相关资料、技术交流&答疑,均可加我们的交流群获取,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友。

方式①、微信搜索公众号:机器学习社区,后台回复:加群
方式②、添加微信号:mlc2060,备注:来自CSDN + 技术交流

用通俗易懂的方式讲解:使用 LangChain 和 LlamaIndex 从零构建PDF聊天机器人,大模型,langchain,llamaindex,大模型,模型部署,算法

我们如何开始

下面是使用Langchain和ChatGPT实现PDF问答系统的大致框架:

用通俗易懂的方式讲解:使用 LangChain 和 LlamaIndex 从零构建PDF聊天机器人,大模型,langchain,llamaindex,大模型,模型部署,算法

在本文,不会详细介绍Langchain或LLamaIndex具体原理和实现细节,后面会专门介绍。本文主要介绍如下内容:

  • 基于Langchain的生成式问答

  • LLamaIndex生成式问答

  • 奖金部分。

准备工作

首先我们需要在OPenAI官网获取API秘钥,具体步骤是:转到https://platform.openai.com,登录或注册新帐户→ 点击您的个人资料→ 查看API密钥并创建新的密钥,如下图所示:

用通俗易懂的方式讲解:使用 LangChain 和 LlamaIndex 从零构建PDF聊天机器人,大模型,langchain,llamaindex,大模型,模型部署,算法

用通俗易懂的方式讲解:使用 LangChain 和 LlamaIndex 从零构建PDF聊天机器人,大模型,langchain,llamaindex,大模型,模型部署,算法

Note:实际上,我们可以使用其他LLM模型。

下面准备安装相关的python包,需要保证Python>=3.7来进行操作,然后创建一个虚拟环境并安装以下Python库:

## to create virtual environment
$ python3 -m venv llm_app_env

## on MacOS or Linux
$ source llm_app_env/bin/activate

## on Window
$ llm_app_env\Scripts\activate.bat

## then install the following libraries.
openai[embeddings]==0.27.6
langchain==0.0.155
pypdf==3.8.1
tiktoken==0.3.3
faiss-cpu==1.7.4
unstructured==0.6.2
chromadb==0.3.21
llama-index==0.6.1
jupyterlab

Langchain 介绍

LangChain 是一个强大的开源工具,可以轻松地与大型语言模型交互并构建应用程序。将其视为一个中间人,将您的应用程序连接到广泛的LLM提供商,如OpenAI、Cohere、Huggingface、Azure OpenAI等。

然而,LangChain 不仅仅是一个访问预训练语言模型的工具,它还提供了许多有用的特性和功能,允许您构建自定义应用程序和工具。例如:

  • 使用自己的文档进行问答和文本摘要

  • 处理内存和具有有限令牌问题的长文档。

  • 与OpenAI ChatGPT Retriever插件的出色集成

  • 多个链来处理您定义的问题,或者使用Agent将其提升。

  • 还有更多。

Langchain是一个伟大的框架,它使人工智能应用程序的创建能力现在掌握在您手中。更令人惊讶的是,它是开源的,所以你知道它掌握在优秀社区的手中。

使用 Langchain 来搭建一个问答系统

设置OpenAI API密钥

import logging
import sys
import os

os.environ["OPENAI_API_KEY"] = "<YOUR_OPENAI_API_KEY>"

加载并拆分数据

## load the PDF using pypdf
from langchain.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter

# load the data
loader = PyPDFLoader('../notebooks/documents/Apple-Financial-Report-Q1-2022.pdf')

# the 10k financial report are huge, we will need to split the doc into multiple chunk.
# This text splitter is the recommended one for generic text. It is parameterized by a list of characters. 
# It tries to split on them in order until the chunks are small enough.
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
data = loader.load()
texts = text_splitter.split_documents(data)

# view the first chunk
texts[0]

简单问答

我们将使用OpenAI作为LLM提供者,因此使用OpenAI Embedding,但请注意,OpenAI Embedding API使用的是“text-davinci-003”模型(定价参考:https://openai.com/pricing)

接下来,我们将导入Chroma,Chroma是嵌入数据库,不像传统的SQL数据库,也不像你通常使用的NoSQL数据库。它嵌入了数据库,使构建LLM应用程序变得容易。

用通俗易懂的方式讲解:使用 LangChain 和 LlamaIndex 从零构建PDF聊天机器人,大模型,langchain,llamaindex,大模型,模型部署,算法

通过Chroma官方网站

我们的文档以文本的形式表示,因此很难根据问题找到相关信息。假设你需要在1000页中找到苹果上一季度的收入,并将收入与前几年进行比较。这可能需要多大的挑战性和耗时?因此,为了让我们的搜索更容易,我们首先需要以数字格式转换或表示单词或短语,这些单词或短语可以用作机器学习模型的输入。换句话说,帮助机器理解文本。embeddings将每个单词或短语映射到实数向量,通常具有数百个维度,使得相似的单词或短语被映射到嵌入空间中的相似向量。

使用embeddings的主要优点之一是,它们可以捕捉单词或短语之间的语义和句法关系。例如,在嵌入空间中,“国王”和“王后”的向量比“苹果”的向量更接近,因为它们在语义上与王室头衔相关。

用通俗易懂的方式讲解:使用 LangChain 和 LlamaIndex 从零构建PDF聊天机器人,大模型,langchain,llamaindex,大模型,模型部署,算法

因此,嵌入数据库正是这样做的。它将把所有embeddings数据存储在数据库中,然后给我们提供非常多的索引,使我们能够执行类似数据检索的操作,并以可扩展的风格进行操作。如果你需要得到之前关于寻找苹果上季度收入的问题的答案,我们首先需要在嵌入Chroma等数据库的基础上进行相似性搜索或语义搜索,以提取相关信息,并将这些信息提供给LLM模型来获得答案。

听起来太复杂了!这就是Langchain拯救我们的地方,所有的艰苦工作都将在后台完成。Just do it!

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

# initialize OpenAIEmbedding
embeddings = OpenAIEmbeddings(model='text-embedding-ada-002')

# use Chroma to create in-memory embedding database from the doc
docsearch = Chroma.from_documents(texts, embeddings,  metadatas=[{"source": str(i)} for i in range(len(texts))])

## perform search based on the question
query = "What is the operating income?"
docs = docsearch.similarity_search(query)

可以看到,我们能够执行相似性搜索,从嵌入数据库中获取相关信息。

现在,我们将使用Langchain的主要组件之一Chain将LLM提供程序合并到我们的代码中。

请记住,本文的目的是建立问答机器人。因此,只需按照步骤进行操作,如果你很好奇,迫不及待地想了解更多细节,请随时访问Langchain的官方网站。

Langchain 提供了四种预先构建的问答Chain,具体如下:

  • 问答:load_qa_chain

  • 有来源问答:load_qa_with_sources_chain

  • 检索问题答案:RetrievalQA

  • 资源检索问答:RetrievalQAWithSourcesChain

它们非常相似,RetrievalQA和RetrievalQAWithSourcesChain分别使用load_qa_chain和load_qa_with_sources_chain,唯一的区别是前两者将把所有嵌入都馈送到LLM中,而后两者只向LLM提供相关信息。我们可以使用前两个来首先提取相关信息,并仅将该信息提供给LLM。此外,前两个比后两个给了我们更多的灵活性。

下面的代码将演示我们是如何做到这一点的。

## importing necessary framework
from langchain.chains.question_answering import load_qa_chain
from langchain.chains.qa_with_sources import load_qa_with_sources_chain
from langchain.chains import RetrievalQA
from langchain.chains import RetrievalQAWithSourcesChain

from langchain.chat_models import ChatOpenAI

现在我们将尝试4种不同的问答链

1.load_qa_chain

## use LLM to get answering
chain = load_qa_chain(ChatOpenAI(temperature=0.2,model_name='gpt-3.5-turbo'), 
                      chain_type="stuff")
query = "What is the operating income?"
chain.run(input_documents=docs, question=query)

2.load_qa_with_sources_chain

chain = load_qa_with_sources_chain(ChatOpenAI(temperature=0.2,model_name='gpt-3.5-turbo'), 
                                   chain_type="stuff")
query = "What is the operating income?"
chain({"input_documents": docs, "question": query}, return_only_outputs=True)

3.RetrievalQA

qa=RetrievalQA.from_chain_type(llm=ChatOpenAI(temperature=0.2,model_name='gpt-3.5-turbo'), chain_type="stuff", 
                                                retriever=docsearch.as_retriever())
query = "What is the operating income?"
qa.run(query)

4.RetrievalQAWithSourcesChain

chain=RetrievalQAWithSourcesChain.from_chain_type(ChatOpenAI(temperature=0.2,model_name='gpt-3.5-turbo'), chain_type="stuff", 
                                                    retriever=docsearch.as_retriever())
chain({"question": "What is the operating income?"}, return_only_outputs=True)

上面的大部分代码都是非常基本的。我们只想在深入研究框架能提供什么之前完成这项工作。在此之前,让我们转到另一个可以与Langchain结合使用的框架,它将为您提供更多的能力来创建更好的LLM应用程序。

LLamaIndex介绍

我首先介绍了 Langchain,如果你花一些时间浏览它的官方文件,你可能会想“哇,没有什么好的东西可以超越这一点”。

我们生活在一个今天好的东西明天可能会过时的世界里。我个人认为 Langchain 将有一个非常光明的未来,并将成为用于构建LLM应用程序的核心技术。

但 LLamIndex 会让我们的工作变得更容易,它可以轻松处理一些棘手的问题和现有方法的局限性,引入了自己的优势,这些问题和局限性将花费您的时间和手动操作。

例如:

  • 文本块缺少全局上下文。通常,这个问题需要特定区块中索引之外的上下文。

  • 仔细调整前k/相似性得分阈值。如果值太小,就会错过上下文。让价值变得太大,成本/延迟可能会随着不相关的上下文而增加。

  • Embeddings 并不总是为问题选择最相关的上下文。Embeddings本质上是在文本和上下文之间分别确定的。

LLamaIndex(GPT索引)有自己的机制来处理这些限制。同样,这个博客的目的是完成这项工作。我不会详细介绍LLamaIndex是如何工作的(可以在官方文件上找到)。

那么LLM是什么

一张由Jerry Liu抄写的羊皮纸,他在羊皮纸上公布了LlamaIndex,这是一个利用GPT的力量,利用询问者提供的知识,形成对询问的回复的门户网站。

简而言之,LlamaIndex是通过以下步骤将LLM连接到用户来响应查询的另一种方式(类似于Langchain的方式):

  1. 加载文档(手动或通过数据加载程序)

  2. 将文档解析为节点

  3. 构造索引(从节点或文档)

  4. [可选,高级]在其他指数之上构建指数

  5. 查询索引

简单来说,LlamaIndex 将数据加载到文档对象中,并将其转换为索引。当您输入查询时,索引会将其发送到GPT提示符以生成响应,默认情况下使用OpenAI的text-davinci-003模型。尽管这个过程看起来很复杂,但只要几行代码就可以执行,您很快就会了解到这一点。

用通俗易懂的方式讲解:使用 LangChain 和 LlamaIndex 从零构建PDF聊天机器人,大模型,langchain,llamaindex,大模型,模型部署,算法

你很快就会看到LLamaIndex是多么容易使用,因为它已经完成了所有的艰苦工作。你的工作只是阅读它的官方文件,学习不同类型的索引,然后分析你的应用程序需求,看看什么最适合你。

当然,你的应用程序中可能需要越来越多复杂的东西,LLamaIndex 的高级API可能不足以处理此类情况。这就是 LLamaIndex 可以与 Langchain 等其他工具集成以加快开发过程的便利之处。

让我们从设置简单索引和加载文档开始。

import logging
import sys

## setup your OpenAI Key
import os
os.environ["OPENAI_API_KEY"] = "<YOUR_OPENAI_API_KEY>"
# enable logs to see what happen underneath
logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)
logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))

LlamaIndex 的核心是指数,有多种类型的指数。

  • 列表索引

  • 矢量存储索引

  • 树索引

  • 关键字表索引

  • 图形索引

  • SQL索引。

每个索引都有其独特的用途,具有不同的用途。好处是,您可以将索引堆叠在其他索引之上,这样做将使您的应用程序更强大,能够理解您的文档上下文和应用程序需求。

第一步是加载文档

from llama_index import GPTVectorStoreIndex
from llama_index import download_loader

# we will use this UnstructuredReader to read PDF file
UnstructuredReader = download_loader('UnstructuredReader', refresh_cache=True)
loader = UnstructuredReader()
# load the data
data = loader.load_data(f'../notebooks/documents/_10-Q-Q1-2022-(As-Filed).pdf', split_documents=False)

Document表示数据源的轻量级容器。可以选择下面两步骤之一:

  1. 将Document对象直接输入索引

  2. 首先,将文档转换为Node对象

同样,本系列的目的是帮助您尽快构建第一个应用程序,因此我将直接讨论索引构建。我将在未来的一篇文章中介绍LLamaIndex的所有方面。

索引构建与查询

我们现在可以在这些Document对象上建立一个索引。最简单的高级抽象是在索引初始化期间加载Document对象。

index = GPTVectorStoreIndex.from_documents(data)
query_engine = index.as_query_engine()
response = query_engine.query("What is the operating income?")
print(response)

用通俗易懂的方式讲解:使用 LangChain 和 LlamaIndex 从零构建PDF聊天机器人,大模型,langchain,llamaindex,大模型,模型部署,算法

根据您使用的索引,LlamaIndex可能会进行LLM调用以构建索引。GPTVvectorStoreIndex不会调用LLM,但GPTTreeStoreIndex会调用。

自定义LLM

默认情况下,LlamaIndex使用OpenAI的text-davinci-003模型。在构造索引时,您可以选择使用另一个LLM。

from llama_index import LLMPredictor, PromptHelper, ServiceContext
from langchain.chat_models import ChatOpenAI

# define LLM
llm_predictor = LLMPredictor(llm=ChatOpenAI(temperature=0.2,model_name='gpt-3.5-turbo'))
# define prompt helper
# set maximum input size
max_input_size = 4096
# set number of output tokens
num_output = 256
# set maximum chunk overlap
max_chunk_overlap = 20
prompt_helper = PromptHelper(max_input_size, num_output, max_chunk_overlap)
service_context = ServiceContext.from_defaults(llm_predictor=llm_predictor, prompt_helper=prompt_helper)
index = GPTVectorStoreIndex.from_documents(
    documents, 
    service_context=service_context
)
query_engine = index.as_query_engine()
response = query_engine.query("What is the operating income?")
print(response)

在短短几行代码中,我们就能够构建一个LLM应用程序,可以进行基本的问答。

对于具有机器学习工程师或数据科学背景的人来说,这是相当简单明了的,但我相信对于一些新手来说,有时会觉得很困惑。我理解这一点,但很难在一篇帖子中解释所有内容。这篇文章的目的只是让你体验一下现在构建这样一个令人惊叹的LLM应用程序是多么容易。你现在可能有很多问题,甚至可能几行代码都不懂,但这没关系。

用通俗易懂的方式讲解:使用 LangChain 和 LlamaIndex 从零构建PDF聊天机器人,大模型,langchain,llamaindex,大模型,模型部署,算法

您将很快收集组件的所有知识和方面,以构建自己的LLM应用程序。你可以等到我的下一篇文章,因为我将在下一篇中介绍LlamaIndex,或者如果你足够好奇,请通过阅读官方文件来做好准备。

在此之前,我希望这篇文章能够帮助您扩展编码知识,并为LLM提供有价值的见解。记得保持好奇心,继续探索人工智能的广阔世界。

祝贺你走到这一步!作为对您努力的奖励,这里有一段代码,您可以使用它与文档聊天

# do imports
from langchain.agents import Tool
from langchain.chains.conversation.memory import ConversationBufferMemory
from langchain.chat_models import ChatOpenAI
from langchain.agents import initialize_agent

from llama_index.langchain_helpers.agents import LlamaToolkit, create_llama_chat_agent, IndexToolConfig
query_engine = index.as_query_engine()
tool_config = IndexToolConfig(
    query_engine=query_engine, 
    name=f"Financial Report",
    description=f"useful for when you want to answer queries about the Apple financial report",
    tool_kwargs={"return_direct": True}
)
toolkit = LlamaToolkit(
    index_configs=[tool_config]
)
memory = ConversationBufferMemory(memory_key="chat_history")
llm=ChatOpenAI(temperature=0.2,model_name='gpt-3.5-turbo')
agent_chain = create_llama_chat_agent(
    toolkit,
    llm,
    memory=memory,
    verbose=True
)
while True:
    text_input = input("User: ")
    response = agent_chain.run(input=text_input)
    print(f'Agent: {response}')

参考文献:

[1] https://langchain.readthedocs.io/en/latest/index.html(LangChain docs)

[2] https://langchain.readthedocs.io/en/latest/modules/memory.html#memory(LangChain Prompt Memory module)

[3] https://github.com/hwchase17/langchain(LangChain Repo)

[4] https://gpt-index.readthedocs.io/en/latest/index.html(LlamaIndex docs)文章来源地址https://www.toymoban.com/news/detail-799863.html

到了这里,关于用通俗易懂的方式讲解:使用 LangChain 和 LlamaIndex 从零构建PDF聊天机器人的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 用通俗易懂的方式讲解:CatBoost 算法原理及案例

    前面已讲了7节,为方便大家学习,我总结在一起,无论是日常实践还是面试使用,都非常方便,喜欢记得收藏 用通俗易懂的方式讲解:逻辑回归模型及案例(Python 代码) 用通俗易懂的方式讲解:决策树模型及案例(Python 代码) 用通俗易懂的方式讲解: 随机森林及案例(

    2024年04月12日
    浏览(40)
  • 用通俗易懂的方式讲解大模型分布式训练并行技术:MOE并行

    前面的文章中讲述了数据并行、流水线并行、张量并行、序列并行、自动并行等多种并行技术。但现在的模型越来越大,训练样本越来越多,每个样本都需要经过模型的全部计算,这就导致了训练成本的平方级增长。 而当我们希望在牺牲极少的计算效率的情况下,把模型规模

    2024年02月02日
    浏览(63)
  • 用通俗易懂的方式讲解:数据预处理归一化(附Python代码)

    本文来自技术群小伙伴的分享,想加入按照如下方式 目前开通了技术交流群,群友已超过3000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友 方式①、添加微信号:dkl88191,备注:来自CSDN+技术交流 方式②、微信搜索公众号:Python学习与数据挖掘,后

    2023年04月10日
    浏览(38)
  • 用通俗易懂的方式讲解:十分钟读懂 Stable Diffusion 运行原理

    AIGC 热潮正猛烈地席卷开来,可以说 Stable Diffusion 开源发布把 AI 图像生成提高了全新高度,特别是 ControlNet 和 T2I-Adapter 控制模块的提出进一步提高生成可控性,也在逐渐改变一部分行业的生产模式。惊艳其出色表现,也不禁好奇其背后技术。 之前写过一篇实战类的文章一文

    2024年01月21日
    浏览(56)
  • 用通俗易懂的方式讲解:一文讲透主流大语言模型的技术原理细节

    大家好,今天的文章分享三个方面的内容: 1、比较 LLaMA、ChatGLM、Falcon 等大语言模型的细节:tokenizer、位置编码、Layer Normalization、激活函数等。 2、大语言模型的分布式训练技术:数据并行、张量模型并行、流水线并行、3D 并行、零冗余优化器 ZeRO、CPU 卸载技术 ZeRo-offload、

    2024年01月16日
    浏览(55)
  • 用通俗易懂的方式讲解:一文教会你学会 AI 绘画利器 Stable Diffusion

    随着 stable-diffusion 的开源,让更多人有机会直接参与到 AI 绘画的创作中,相关的教程也如雨后春笋般的出现。可是目前我看到的教程同质性较高,通常只能称作为\\\"使用流程讲解\\\",但是通常没有对其原理和逻辑进行深入说明。 所以本文的目的,是用尽可能少的废话,给大家补

    2024年01月18日
    浏览(47)
  • LLM本地知识库问答系统(一):使用LangChain和LlamaIndex从零构建PDF聊天机器人指南

           随着大型语言模型(LLM)(如ChatGPT和GPT-4)的兴起,现在比以往任何时候都更容易构建比普通熊更智能的智能聊天机器人,并且可以浏览堆积如山的文档,为您的输入提供准确的响应。        在本系列中,我们将探索如何使用pre-trained的LLM创建一个聊天机器人,该聊

    2024年02月11日
    浏览(60)
  • 最通俗易懂的讲解HTTPS的加密原理【多图、易懂】

    目录 前言 HTTPS加密原理概述 HTTP 为什么不安全 安全通信的四大原则 HTTPS 通信原理 对称加密:HTTPS 的最终加密形式 非对称加密:解决单向的对称密钥的传输问题 数字证书:解决公钥传输信任问题 证书一整个被掉包怎么办? 总结 其它 HTTPS 相关问题 什么是双向认证? 什么是

    2024年02月05日
    浏览(58)
  • 设计模式之-访问者模式,快速掌握访问者模式,通俗易懂的讲解访问者模式以及它的使用场景

    当谈到访问者模式时,我们可以通过以下方式进行详细解释: 访问者模式是一种行为型设计模式,它允许你在不修改已有代码的情况下,向现有对象结构添加新的操作。该模式将操作(或方法)封装在称为访问者的独立对象中,使得可以在不修改元素类的情况下,通过访问者

    2024年02月03日
    浏览(57)
  • 通俗易懂讲解CPU、GPU、FPGA的特点

      大家可以简单的将CPU理解为学识渊博的教授,什么都精通;而GPU则是一堆小学生,只会简单的算数运算。可即使教授再神通广大,也不能一秒钟内计算出500次加减法。因此,对简单重复的计算来说,单单一个教授敌不过数量众多的小学生。在进行简单的算数运算这件事上

    2024年02月11日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包