基于langchain的agentic+RAG+智谱清言+HuggingFace的简单实现

概要

基于langchain的agentic+RAG+智谱清言+HuggingFace的简单实现

整体架构流程

Langchain Agentic-RAG的简单demo(建议使用jupyter食用)


标准操作程序(SOP):构建索引并创建检索器

1. 概述

该操作程序用于从指定的网页中加载数据,进行文本分割和嵌入向量化,并将文档存储到一个向量数据库中。此索引可以在后续的检索任务中为 RAG(Retrieval-Augmented Generation)系统提供支持。

2. 前提条件

在执行此SOP之前,请确保系统中已安装以下Python库:

  • langchain
  • langchain_huggingface
  • langchain_community
  • chromadb
  • tiktoken

命令如下:pip install langchain_community tiktoken langchain-openai langchain-cohere langchainhub chromadb langchain langgraph tavily-python -i https://pypi.tuna.tsinghua.edu.cn/simple

3. 操作步骤

3.1 导入必要的库和模块

首先,导入所有需要的库和模块,确保后续的代码能够顺利执行。

from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.document_loaders import WebBaseLoader
from langchain_community.vectorstores import Chroma
from langchain_huggingface import HuggingFaceEmbeddings
3.2 配置嵌入模型

这儿采用hugingface中的开源模型,可以下载到本地,也可以在线使用,不用api-key
附上国内的镜像网站:https://hf-mirror.com/

选择并配置一个HuggingFace嵌入模型,当前代码使用的是 moka-ai/m3e-base。此模型将用于将文本转换为嵌入向量。至于为什么用m3e embedding,因为其预训练的语料库大部分是基于中文的,对中文的语义理解效果较好

# Set embeddings
embd = HuggingFaceEmbeddings(model_name="moka-ai/m3e-base")
3.3 指定待加载的网页URL

将需要加载的网页链接存储在 urls 列表中。每个链接将被加载并进行文本处理。(此处是我之前写的博客文章,关于langchain的)

# Docs to index
urls = [
    "https://blog.csdn.net/qq_44742936/article/details/144132892?spm=1001.2014.3001.5501",
    "https://blog.csdn.net/qq_44742936/article/details/143329561?spm=1001.2014.3001.5501",
    "https://blog.csdn.net/qq_44742936/article/details/143452968?spm=1001.2014.3001.5501",
]
3.4 加载网页内容

使用 WebBaseLoader 加载网页内容,将其转换为文档对象。每个URL都将通过 WebBaseLoader 加载并存储为文档。

# Load
docs = [WebBaseLoader(url).load() for url in urls]
docs_list = [item for sublist in docs for item in sublist]
3.5 文本分割

为了提高向量存储和检索效率,需要将文档内容分割成较小的文本块。使用 RecursiveCharacterTextSplitter 进行分割,设置 chunk_size 为500字符,并确保文本块之间没有重叠。

# Split
text_splitter = RecursiveCharacterTextSplitter.from_tiktoken_encoder(
    chunk_size=500, chunk_overlap=0
)
doc_splits = text_splitter.split_documents(docs_list)
3.6 将文档存储到向量数据库

使用 Chroma 向量数据库将分割后的文档嵌入向量存储。配置好存储路径和嵌入模型,确保数据能够持久化。

# Add to vectorstore
vectorstore = Chroma.from_documents(
    documents=doc_splits,
    collection_name="rag-chroma-glm-long",
    embedding=embd,
    persist_directory="./chroma_agentic_rag_glm_long"
)

说明:存储路径 ./chroma_agentic_rag_glm_long 可以根据需要调整,确保该目录具有适当的写权限。

后面可直接从向量数据库中进行加载

# 直接加载
vectorstore = Chroma(
    embedding_function=embd,
    persist_directory="./chroma_adaptive_rag"
)
3.7 创建检索器

通过 Chroma 向量存储创建一个检索器(Retriever),该检索器将用于后续的文本查询和信息检索任务。

retriever = vectorstore.as_retriever()
3.8导入必要的库和模块

首先,导入所有必要的库和模块,确保后续的操作可以正常执行。

from langchain.tools.retriever import create_retriever_tool
from typing import Annotated, Sequence
from typing_extensions import TypedDict
from langchain_core.messages import BaseMessage
from langgraph.graph.message import add_messages
3.9 创建检索工具

通过 create_retriever_tool 方法创建检索工具,这个工具将允许我们向大语言模型(LLM)提交查询,并从已构建的检索器中查找相关信息。

# 创建检索工具
retriever_tool = create_retriever_tool(
    retriever,  # 使用之前创建的 retriever
    "检索信息提交",  # 工具名称
    "查找并返回小五郎关于langchain用法的相关描述."  # 工具描述
)
tools = [retriever_tool]  # 将工具加入工具列表
  • name: 为检索工具设置唯一且描述性的名称,在模型交互中用作识别标识。
  • description: 该字段描述了工具的作用,例如查找并返回与Langchain相关的描述。
3.10 定义 AgentState 类型

定义 AgentState 类型,用于存储代理状态及其相关消息。我们使用 add_messages 来更新消息,而不是简单替换。

# 定义 AgentState 类型
<think>好的,用户想了解如何个人搭建RAG模型或系统,需要详细的实现方案和教程。首先,我得回忆一下RAG的基本概念。RAG结合了检索和生成,通过检索相关知识来增强生成结果。现在需要拆解搭建步骤,确保结构清晰。 用户提供的引用里有提到Hugging Face Transformers、Dense Retriever和OpenAI GPT这些工具,可能需要结合这些资源。引用[1]提到用Hugging Face的预训练模型,引用[3]则介绍了Agentic RAG的结构,可能可以参考其工具集成方式。 第一步应该是数据准备,需要知识库的构建。可能需要用文本数据,进行清洗和分块处理。然后,向量数据库的选择,比如FAISS或Chroma,这些在引用[1]中也有提到。 接下来是检索器部分,可能需要用预训练的模型如BERT做编码,或者用Dense Retriever。生成器部分,用户可以选择GPT-2或者更大的模型,比如Hugging Face的模型库里的。 然后是系统集成,将检索和生成结合。这里可能需要用LangChain框架,如引用[2]提到的搭建最小RAG系统,可能涉及代码示例。另外,引用[3]的Agentic RAG提到智能体选择不同检索工具,可能需要根据用户问题动态选择检索方式。 测试和优化部分,需要评估指标,比如回答准确性和相关性,可能需要人工审核或者自动评估。引用[1]里的应用场景如问答系统、智能助手,可以举例说明应用方向。 用户可能需要具体代码示例,比如用LangChain的代码片段,或者Hugging Face的模型加载方法。同时,需要指出可能的优化方向,比如微调模型或者优化检索策略,引用[3]提到的根据问题类型选择不同工具,可以作为一个优化点。 最后,资源推荐部分要列出相关工具和文档,帮助用户进一步学习。确保引用标记正确,比如Hugging Face Transformers在引用[1],LangChain在引用[2],Agentic RAG在引用[3]。 需要检查是否所有步骤都覆盖,并且引用正确。例如,数据预处理、检索器生成器选择、系统搭建、测试优化、应用场景,每个部分都要有对应的引用支持。可能还需要考虑用户的技术水平,给出适合个人搭建的方案,避免过于复杂的步骤。</think>### 如何个人搭建RAG模型或系统 #### 一、RAG系统核心原理 RAG(Retrieval-Augmented Generation)通过结合检索与生成技术,使模型能够从外部知识库中检索相关信息,并基于此生成更准确的回答。其核心流程分为: 1. **检索阶段**:根据输入问题,从知识库中检索相关文本片段。 2. **生成阶段**:将检索到的上下文与问题结合,生成最终回答[^1]。 #### 二、搭建步骤详解 ##### 1. 数据准备 - **知识库构建**: - 收集与目标领域相关的文本数据(如PDF、网页、文档等)。 - 使用工具(如`Unstructured`、`LangChain`文档加载器)进行文本清洗和分块处理,推荐文本块大小为256-512字[^2]。 - **向量化存储**: - 使用预训练模型(如`sentence-transformers/all-mpnet-base-v2`)将文本转换为向量。 - 选择轻量级向量数据库(如FAISS、Chroma或LanceDB),适合个人部署。 ##### 2. 检索器实现 - **基础方案**: ```python from sentence_transformers import SentenceTransformer from langchain.vectorstores import FAISS # 加载编码模型 encoder = SentenceTransformer('all-mpnet-base-v2') # 生成向量库 vectors = FAISS.from_texts(text_chunks, encoder) ``` - **优化方案**:通过`Dense Retriever`工具包训练领域适配的检索模型。 ##### 3. 生成器选择 - **开源模型**: - 轻量级:使用FLAN-T5(3B参数版本) - 高性能:LLaMA-2(7B/13B参数) - **API调用**(适合快速验证): ```python from transformers import pipeline generator = pipeline('text-generation', model='gpt2') ``` ##### 4. 系统集成 使用LangChain框架构建完整流水线: ```python from langchain.chains import RetrievalQA rag_pipeline = RetrievalQA.from_chain_type( llm=generator, retriever=vectors.as_retriever(), chain_type="stuff" ) ``` #### 三、优化策略 1. **混合检索**:结合关键词检索(BM25)与向量检索提升召回率 2. **重排序机制**:使用`Cohere Reranker`优化检索结果排序 3. **交互式检索**:实现Agentic-RAG架构,根据问题类型动态选择检索策略[^3] #### 四、测试与部署 - **评估指标**: - 检索阶段:MRR@10、NDCG@5 - 生成阶段:BLEU-4、ROUGE-L - **部署方案**: - 本地部署:使用FastAPI封装为REST服务 - 云服务:通过HuggingFace Spaces免费部署 #### 五、典型应用场景 1. **个人知识助手**:基于本地文档构建问答系统 2. **垂直领域咨询**:例如法律条款解读、医疗知识查询 3. **学术研究支持**:论文资料检索与总结 #### 六、资源推荐 1. **框架工具**: - [LangChain](https://python.langchain.com/):快速搭建RAG系统(引用[2]) - [LlamaIndex](https://gpt-index.readthedocs.io/):优化检索流程 2. **模型库**: - Hugging Face Models:提供超500+预训练模型 - OpenAI API:快速接入GPT-4生成能力 3. **教程指引**: - 《Building Applications with RAG》官方文档 - 开源项目`privateGPT`(支持本地化部署)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值