h5手机网站源码下载,wordpress 转中文,北京宣传片制作,wordpress tagRAG#xff08;检索增强生成#xff09;的核心是通过外部知识库增强大模型回答的准确性和针对性#xff0c;其工作流程与优化策略如下#xff1a; 一、RAG 核心流程 知识库构建
文档加载与分割#xff1a;将非结构化文档#xff08;PDF、Markdown等#xff09;…RAG检索增强生成的核心是通过外部知识库增强大模型回答的准确性和针对性其工作流程与优化策略如下 一、RAG 核心流程 知识库构建
文档加载与分割将非结构化文档PDF、Markdown等按语义拆分为合理长度的段落或句子避免信息碎片化或冗余。 向量化与存储使用嵌入模型如Embedding将文本转换为向量存入向量数据库如FAISS、Chroma加速相似度检索。 用户查询处理
查询向量化将用户问题转换为向量通过相似度检索匹配知识库中相关段落如Top-K个结果 上下文增强将检索到的段落与原始查询拼接形成包含背景知识的提示词输入大模型。 答案生成 大模型基于增强后的提示词生成答案显著提升专业性和准确性尤其适用于训练数据未覆盖的场景如时效性知识、私有化数据。 从chormdb 和 embedding 入手
from langchain_huggingface import HuggingFaceEmbeddings
from langchain_core.documents import Document
from langchain_chroma import Chroma
import uuid# 加载embedding 模型
en_embedding_name E:\models\model\qwens-embeddingembed_model HuggingFaceEmbeddings(model_nameen_embedding_name
)# 初始化chromdb 数据库chrom_db Chroma(embedding_functionembed_model,collection_nametest01,persist_directory./test_chromadb)texts [我爱吃西瓜,我不爱吃榴莲,李文喜欢和奶茶,我爱睡觉]
# 数据准备组件document
documents [Document(page_contenttext,metadata{source:健康档案}) for text in texts ]
chrom_db.add_documents(documentsdocuments, # 文档的文本数据ids[str(uuid.uuid4()) for i in range(len(documents))]) # 文档的唯一标识符 自动生成uuid,128位print(chrom_db.similarity_search(我爱吃什么,k1))langchain vectorstore 的使用
# 将向量存储转换为检索器
retriever chrom_db .as_retriever()
vectorstores chrom_db.as_retriever(search_kwargs{k:1})
print(vectorstores.invoke(我爱吃什么))混合检索
向量索引和关键词索引
from dotenv import load_dotenv
from langchain.retrievers.document_compressors import DocumentCompressorPipeline, LLMChainExtractor
from langchain_openai import ChatOpenAI
from langchain_community.embeddings import DashScopeEmbeddings
from langchain_community.vectorstores.chroma import Chroma
from langchain_community.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.retrievers.document_compressors import DocumentCompressorPipeline# 加载环境变量
load_dotenv()# 初始化大模型
langchainModel ChatOpenAI(modelqwen-plus,api_keyos.getenv(DASHSCOPE_API_KEY),base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1
)# 加载并切分文档
pdfLoader PyPDFLoader(r../LangChain/异地测试安排 20230424.pdf)
documents pdfLoader.load()
testSplit RecursiveCharacterTextSplitter(chunk_size200, chunk_overlap30)
split_documents testSplit.split_documents(documents)# 初始化嵌入模型并创建向量数据库
embeddings DashScopeEmbeddings(modeltext-embedding-v3,dashscope_api_keyos.getenv(DASHSCOPE_API_KEY)
)
retriever Chroma.from_documents(split_documents, embeddings).as_retriever(search_kwargs{k: 2})## 常见关键词索引器
from langchain_community.retrievers import BM25RetrieverBM25_retriever BM25Retriever.from_documents(split_documents)
BM25_retriever.k 2# 创建混合索引器
from langchain.retrievers import EnsembleRetriever, ContextualCompressionRetrieverensemble_retriever EnsembleRetriever(retrievers[retriever, BM25_retriever], weights[0.5, 0.5])rag chain
etrievalQAEnsemble RetrievalQA.from_chain_type(llmlangchainModel,chain_typestuff,retrieverensemble_retriever ,return_source_documentsTrue
)
RetrievalQAEnsembleReturn RetrievalQAEnsemble.invoke({query: questions[0], k: 2})