做钓鱼网站会被抓吗,虚拟主机建站,wordpress标签内链,网络小说写作网站RAG
RAG(Retrieval Augmented Generation)系统#xff0c;代表“检索增强生成”。RAG由五个关键步骤组成#xff1a;
加载#xff1a;这是指将数据从其所在位置#xff08;无论是文本文件、PDF、其他网站、数据库还是 API#xff09;获取到您的管道中。LlamaHub提供数百…RAG
RAG(Retrieval Augmented Generation)系统代表“检索增强生成”。RAG由五个关键步骤组成
加载这是指将数据从其所在位置无论是文本文件、PDF、其他网站、数据库还是 API获取到您的管道中。LlamaHub提供数百种连接器可供选择。索引这意味着创建一个允许查询数据的数据结构。对于大模型来说这几乎总是意味着创建vector embeddings数据含义的数字表示以及许多其他元数据策略以便轻松准确地找到上下文相关的数据。存储一旦数据被索引您几乎总是希望存储索引以及其他元数据以避免重新索引。查询对于任何给定的索引策略您可以通过多种方式利用 LLM 和 LlamaIndex 数据结构进行查询包括子查询、多步查询和混合策略。评估任何管道中的关键步骤是检查它相对于其他策略的有效性或者何时进行更改。评估提供客观衡量您对查询的答复的准确性、忠实度和速度。
学习文章大模型RAG框架llama-index技术调研
1向量数据库
向量数据库是一种以向量或数据点的数学表示形式存储数据的数据库。 人工智能和机器学习使非结构化数据能够转换为捕获意义和上下文的数字表示向量。
常见的向量数据库
Chroma开源嵌入数据库。功能丰富:查询、过滤、密度估计和许多其他功能。LangChain和LlamaIndex都支持。Pinecone可托管向量数据库的平台。支持全托管服务、高度可伸缩、实时数据摄取、低延迟的搜索并且和LangChain集成。Weaviate开源向量数据库。可以无缝扩展到数十亿个数据对象。速度快Weaviate可以在几毫秒内从数百万个对象中快速搜索出最近的10个邻居、更灵活使用Weaviate可以在导入或上传自己的数据时对数据进行矢量化可以利用与OpenAI, Cohere, HuggingFace等平台集成的模块和搜索扩展除了快速矢量搜索Weaviate还提供推荐、摘要和神经搜索框架集成。Faiss用于快速搜索相似性和密集向量的聚类的开源库。它包含能够在不同大小的向量集中搜索的算法甚至可以处理那些超过内存容量的向量集。Qdrant可以作为API服务运行支持搜索最接近的高维向量。使用Qdrant可以将嵌入或神经网络编码器转换为应用程序用于匹配搜索推荐等任务。
参考文章LLM 学习之「向量数据库」
2LangChain
LangChain 是一个基于大型语言模型LLM开发应用程序的框架。
参考文章langchain 组件详解、Langchain、langchain-知识库问答
* 核心模块
核心模块主要有六个模型输入输出Model I/O、数据连接Data Connection、链Chains、记忆Memory、代理Agents和回调Callbacks。
1 Model I/O
管理大语言模型Models及其输入Prompts和格式化输出Output Parsers。 主要包含组件Prompts、Language Models 和 Output Parsers。用户原始输入与模型和示例进行组合然后输入给大语言模型再根据大语言模型的返回结果进行输出或者结构化处理。
学习文章02LangChain | 从入门到实战 -六大组件之Models IO
结构化格式输出16-2输出解析器Output Parsers2
2 Data connection
管理主要用于建设私域知识库的向量数据存储Vector Stores、内容数据获取Document Loaders和转化Transformers以及向量数据查询Retrievers 主要包含组件Document loaders、Document transformers、Text embedding models、Vector stores和Retrievers
学习文章03LangChain | 从入门到实战 -六大组件之Retrival
文本切割器LangChain教程 | langchain 文本拆分器 | Text Splitters全集、RAG 分块Chunk技术优劣、技巧、方法汇总五
上下文压缩器实现RAG管道中的上下文压缩和过滤
3 Chains
用于串联 Memory ↔️ Model I/O ↔️ Data Connection以实现 串行化 的连续对话、推测流程 学习文章04LangChain | 从入门到实战 -六大组件之chain
4 Memory
用于存储和获取对话历史记录的功能模块 主要包括两个操作读和写。把Memory集成到系统中涉及两个核心问题存储的历史信息是什么、如何检索历史信息。
学习文章05LangChain | 从入门到实战 -六大组件之Memory、LangChain之内存记忆 ( Memory )
5 Agents
Agent的核心思想是使用大型语言模型LLM来选择要采取的行动序列。在Chain中行动序列是硬编码的而Agent则采用语言模型作为推理引擎来确定以什么样的顺序采取什么样的行动。 Agent相比Chain最典型的特点是“自治”它可以通过借助LLM专长的推理能力自动化地决策获取什么样的知识采取什么样的行动直到完成用户设定的最终目标。因此作为一个智能体需要具备以下核心能力
规划借助于LLM强大的推理能力实现任务目标的规划拆解和自我反思。记忆具备短期记忆上下文和长期记忆向量存储以及快速的知识检索能力。行动根据拆解的任务需求正确地调用工具以达到任务的目的。协作通过与其他智能体交互合作完成更复杂的任务目标。
学习文章从API到Agent万字长文洞悉LangChain工程化设计、06LangChain | 从入门到实战 -六大组件之Agent
6 Callbacks
Callbacks模块是框架中的一个核心组件它允许用户定义特定的回调函数来响应某些事件或执行特定动作。这种机制极大地增强了Langchain的灵活性和功能性使得在不修改现有代码的基础上可以扩展或定制AI模型的行为。提供了一个回调系统可连接到 LLM 申请的各个阶段便于进行日志记录、追踪等数据导流。
主要有两种回调机制
构造器回调将用于在该对象上进行的所有调用并且将仅作用于该对象即如果将处理程序传递给LLMChain的构造函数则不会被附加到该链上的模型使用。请求回调仅用于该特定请求以及该请求包含的所有子请求例如对LLMChain的调用触发对模型的调用使用的是通过传递的相同处理程序这些回调是显式传递的。
学习文章大模型从入门到应用——LangChain回调函数Callbacks
3LlamaIndex
LlamaIndex是一个连接大型语言模型LLMs与外部数据的工具它通过构建索引和提供查询接口使得大模型能够学习和利用私有或者特定领域的数据。这一工具的出现极大地拓展了大型语言模型的应用范围和深度下面我们就来详细介绍LlamaIndex的基本概念、优劣势、代码示例以及使用场景。
参考文章LlamaIndex 入门实战、LlamaIndex 一 简单文档查询、LlamaIndex 文档1
* 核心模块 LlamaIndex为我们提供了五大功能模块:
数据连接器Data connectors从其原生源和格式中获取现有数据。这些数据可以是 API、PDF、 SQL 等。数据索引Data Indexes将数据结构化为中间表示使其易于 LLM 使用且性能良好。引擎Engines为数据提供便捷访问。例如 查询引擎用于问答的接口例如 RAG pipeline。聊天引擎用于与数据进行多消息“来回”互动的对话接口。 数据代理Data Agents由 LLM 驱动通过工具增强从简单的助手函数到 API 集成等。应用集成Application Integrations此模块可以方便的将LlamaIndex与AI应用框架结合。 1 Data connectors
数据连接器(也称为reader)是LlamaIndex中的重要组件它有助于从各种来源和格式摄取数据并将其转换为由文本和基本元数据组成的简化文档表示形式。
首先使用文件加载器将不同类型的文件加载成Document对象形式。使用SimpleDirectoryReader是一种基础的文件加载方式。from llama_index.core import VectorStoreIndex, SimpleDirectoryReader# 使用SimpleDirectoryReader从指定路径加载数据
documents SimpleDirectoryReader(D:\GitHub\LEARN_LLM\LlamaIndex\data).load_data()可以在LlamaHub中找到需要的文件类型的加载器LlamaHub。 也可以选择将文字转换成Document结构。例如from llama_index.core import Document
doc Document(texttext)然后将文档内容进行转换。这些转换包括分块、提取元数据和对每个块进行向量化从而确保大模型能够检索数据。最简单的方式是用from_documents方法。from llama_index.core import VectorStoreIndexvector_index VectorStoreIndex.from_documents(documents)
vector_index.as_query_engine()此外我们可以选择更改embeding模型。 先使用pip install llama-index-embeddings-huggingface 安装相应的库然后用下述代码更改嵌入模型。 节点是更细粒度的数据实体表示源文档的“块”可以是文本块、图像或其他类型的数据。它们还携带元数据和与其他节点的关系信息这有助于构建更加结构化和关系型的索引。在LlamaIndex中一旦数据被摄取并表示为文档就可以选择将这些文档进一步处理为节点。下面是如何使用SimpleNodeParser将文档解析为节点from llama_index.node_parser import SimpleNodeParser # Assuming documents have already been loaded # Initialize the parser
parser SimpleNodeParser.from_defaults(chunk_size1024, chunk_overlap20) # Parse documents into nodes
nodes parser.get_nodes_from_documents(documents)学习文档【AI大模型应用开发】【LlamaIndex教程】1. 数据连接模块教程附代码、Embeddings、LlamaIndex 组件 - Loading
2 Data Indexes
LlamaIndex的核心本质在于它能够在被摄取的数据上构建结构化索引这些数据表示为文档或节点。它的核心其实就是索引结构的集合用户可以使用索引结构或基于这些索引结构自行建图。
下面是最简单的构建索引方式 from llama_index.core importVectorStoreIndex# Assuming docs is your list of Document objectsindex VectorStoreIndex.from_documents(docs)学习文档【LlamaIndex 教程】一文看懂LlamaIndex用法为LLMs学习私有知识、LlamaIndex使用指南、LlamaIndex 组件 - Storing
3 Engines
LlamaIndex 提供了定义 LLM 模块的统一接口无论是来自 OpenAI、Hugging Face 还是 LangChain这样您就不必自己编写定义 LLM 接口的样板代码。该接口由以下部分组成更多详细信息如下
支持文本完成和聊天端点支持流式和非流式端点支持同步和异步端点
基座LLM模型 LlamaIndex支持OpenAI和HuggingFace上的模型。使用Huggingface上的模型需要结合Settings库来自定义模型。
from llama_index.core import PromptTemplate# Transform a string into input zephyr-specific input
def completion_to_prompt(completion):return f|system|\n/s\n|user|\n{completion}/s\n|assistant|\n# Transform a list of chat messages into zephyr-specific input
def messages_to_prompt(messages):prompt for message in messages:if message.role system:prompt f|system|\n{message.content}/s\nelif message.role user:prompt f|user|\n{message.content}/s\nelif message.role assistant:prompt f|assistant|\n{message.content}/s\n# ensure we start with a system prompt, insert blank if neededif not prompt.startswith(|system|\n):prompt |system|\n/s\n prompt# add final assistant promptprompt prompt |assistant|\nreturn promptimport torch
from llama_index.llms.huggingface import HuggingFaceLLM
from llama_index.core import SettingsSettings.llm HuggingFaceLLM(model_nameHuggingFaceH4/zephyr-7b-beta,tokenizer_nameHuggingFaceH4/zephyr-7b-beta,context_window3900,max_new_tokens256,generate_kwargs{temperature: 0.7, top_k: 50, top_p: 0.95},messages_to_promptmessages_to_prompt,completion_to_promptcompletion_to_prompt,device_mapauto,
)嵌入Embedding模型 LlamaIndex也支持使用本地的自定义嵌入模型
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from llama_index.core import SettingsSettings.embed_model HuggingFaceEmbedding(model_nameBAAI/bge-small-en-v1.5
)Prompts LlamaIndex 使用提示来构建索引、执行插入、在查询期间执行遍历并合成最终答案。LlamaIndex 使用一组开箱即用的默认提示模板。
from llama_index.core import PromptTemplatetemplate (We have provided context information below. \n---------------------\n{context_str}\n---------------------\nGiven this information, please answer the question: {query_str}\n
)
qa_template PromptTemplate(template)# you can create text prompt (for completion API)
prompt qa_template.format(context_str..., query_str...)# or easily convert to message prompts (for chat API)
messages qa_template.format_messages(context_str..., query_str...)
查询引擎 检索器负责根据用户查询或聊天消息获取最相关的上下文。它可以构建在索引之上但也可以独立定义。它用作查询引擎和聊天引擎中的关键构建块用于检索相关上下文。
retriever index.as_retriever()
nodes retriever.retrieve(Who is Paul Graham?)学习文章LlamaIndex 组件 - Models、LlamaIndex 组件 - Querying
4 Data Agents
5 Application Integrations
4LangChain和LlamaIndex区别
LangChain一个使用LLM开发应用程序的通用框架。LangChain是一个基于大语言模型LLM的框架它并不开发LLM而是为各种LLM实现通用的接口将相关的组件“链”在一起简化LLM应用的开发。它支持模型集成、提示工程、索引、记忆、链、代理等多种组件功能。
1核心架构LangChain 的核心是其链式架构它允许开发者将不同的组件如模型、提示、索引、记忆等组合成一个处理流程。这种设计旨在灵活地处理各种复杂任务。
2集成与交互强调大模型与外部工具和数据库的集成。这种方法允许开发者利用各种资源来完成任务而不仅限于模型本身的能力。
3抽象层提供了一个抽象层允许不同的模型和工具通过标准化的接口进行交互增加了模块间的互操作性。
4组件与支持功能
支持多种模型接口如OpenAI、Hugging Face等。支持提示工程将提示作为输入传递给模型。提供基于向量数据库的索引功能如文档检索。基于记忆组件提供上下文功能存储对话过程中的数据。支持链式调用将多个组件链接在一起逐个执行。支持代理Agent功能用于根据用户输入决定模型采取的行动。
5适用情景更适合需要复杂对话流程、上下文管理、以及多步骤任务的应用场景如聊天机器人、任务自动化等。 由于其提供了较为全面的组件支持LangChain可以简化开发流程让开发者更加关注于业务逻辑和模型效果的优化。但是这也意味着它的学习曲线可能较陡需要开发者对各种组件有深入的理解。 LlamaIndex一个专门用于构建RAG系统的框架。LlamaIndex是一个基于向量搜索的索引框架主要用于提升大型语言模型在长文本或大量数据上的查询效率。它侧重于处理数据的索引和检索使得模型能够快速定位到最相关的信息。
1核心架构Llama-Index 专注于索引和检索主要通过向量搜索来提高大型语言模型在处理大量数据时的效率。
2数据结构与优化更侧重于数据索引的结构和优化。这使得它在处理和访问大型数据集方面表现出色。
3信息索引设计允许开发者构建和维护一个可扩展的信息索引以便快速响应查询特别适用于需要快速访问和分析大量数据的应用。
4组件与支持功能
专注于索引和检索功能与向量数据库紧密结合。支持自定义的索引结构和查询逻辑适用于复杂的数据检索需求。通常与大型语言模型结合使用但更侧重于索引侧的性能优化。提供了优化的数据结构和算法以提升在大量数据上的查询速度。
5适用场景当应用场景主要涉及大量数据的快速检索和查询时LlamaIndex更加适用如知识问答系统、文档搜索引擎等。 专注于索引和检索LlamaIndex相对容易上手特别是对于需要快速构建高效查询系统的开发者来说可以快速实现原型并优化性能。 参考文章深度比较大模型开发工具链-LangChain和Llama-Index