当前位置: 首页 > wzjs >正文

海南网站建设粤icp备官网优化 报价

海南网站建设粤icp备,官网优化 报价,做lgoo的网站一般有哪些,wordpress 一键部署1. 拆分文档与检索的冲突 在 RAG 应用开发中,文档拆分 和 文档检索 通常存在相互冲突的愿望,例如: 我们可能希望拥有小型文档,以便它们的嵌入可以最准确地反映它们的含义,如果太长,嵌入/向量没法记录太多…

1. 拆分文档与检索的冲突

在 RAG 应用开发中,文档拆分 和 文档检索 通常存在相互冲突的愿望,例如:

  1. 我们可能希望拥有小型文档,以便它们的嵌入可以最准确地反映它们的含义,如果太长,嵌入/向量没法记录太多文本特征。
  2. 但是又希望文档足够长,这样能保留每个块的上下文。
    这个时候就可以考虑通过 拆分子文档块检索 父文档块 的策略来实现这种平衡,即在检索中,首先获取小块,然后再根据小块元数据中存储的 id,使用 id 来查找这些块的父文档,并返回那些更大的文档,该策略适合一些不是特别能拆分的文档,或者是文档上下文关联性很强的场景
    请注意,这里的“父文档”指的是小块来源的文档,可以是整个原始文档,也可以是切割后比较大的文档块
    子文档->父文档 的运行流程也非常简单,其实和 多向量检索器 一模一样,如下:
    在这里插入图片描述
    除了使用 MultiVectorRetriever 来实现该运行流程,在 LangChain 中,还封装了 ParentDocumentRetriever,可以更加便捷地完成该功能,使用技巧也非常简单,传递 向量数据库、文档数据库 和 子文档分割器 即可。
    代码示例:
import dotenv
import weaviate
from langchain.retrievers import ParentDocumentRetriever
from langchain.storage import LocalFileStore
from langchain_community.document_loaders import UnstructuredFileLoader
from langchain_openai import OpenAIEmbeddings
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_weaviate import WeaviateVectorStore
from weaviate.auth import AuthApiKeydotenv.load_dotenv()# 1.创建加载器与文档列表,并加载文档
loaders = [UnstructuredFileLoader("./电商产品数据.txt"),UnstructuredFileLoader("./项目API文档.md"),
]
docs = []
for loader in loaders:docs.extend(loader.load())# 2.创建文本分割器
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500,chunk_overlap=50,
)# 3.创建向量数据库与文档数据库
vector_store = WeaviateVectorStore(client=weaviate.connect_to_wcs(cluster_url="https://mbakeruerziae6psyex7ng.c0.us-west3.gcp.weaviate.cloud",auth_credentials=AuthApiKey("xxxxxxxxxxxxxxxxxxxxxxxxxxxx"),),index_name="ParentDocument",text_key="text",embedding=OpenAIEmbeddings(model="text-embedding-3-small"),
)
store = LocalFileStore("./parent-document")# 4.创建父文档检索器
retriever = ParentDocumentRetriever(vectorstore=vector_store,byte_store=store,child_splitter=text_splitter,
)# 5.添加文档
retriever.add_documents(docs, ids=None)# 6.检索并返回内容
search_docs = retriever.invoke("分享关于LLMOps的一些应用配置")
print(search_docs)
print(len(search_docs))

输出内容会返回完整的文档片段,而不是拆分后的片段(但是在向量数据库中存储的是分割后的片段)

[Document(metadata={'source': './项目API文档.md'}, page_content='LLMOps 项目 API 文档\n\n应用 API 接口统一以 JSON 格式返回,并且包含 3 个字段:code、data 和 message,分别代表业务状态码、业务数据和接口附加信息。\n\n业务状态码共有 6 种,其中只有 success(成功) 代表业务操作成功,其他 5 种状态均代表失败,并且失败时会附加相关的信息:fail(通用失败)、not_found(未找到)、unauthorized(未授权)、forbidden(无权限)和validate_error(数据验证失败)。\n\n接口示例:\n\njson\n{\n    "code": "success",\n    "data": {\n        "redirect_url": "https://github.com/login/oauth/authorize?client_id=f69102c6b97d90d69768&redirect_uri=http%3A%2F%2Flocalhost%3A5001%2Foauth%2Fauthorize%2Fgithub&scope=user%3Aemail"\n    },\n    "message":...')]

2.父文档检索器检索较大块

在上面的示例中,我们使用拆分的文档块检索数据原文档,但是有时候完整文档可能太大,我们不希望按原样检索它们。在这种情况下,我们真正想要做的是先将原始文档拆分成较大的块(例如 1000-2000 个 Token),然后将其拆分为较小块,接下来索引较小块,但是检索时返回较大块(非原文档)。
运行流程变更如下
在这里插入图片描述

ParentDocumentRetriever 中,只需要传递多一个 父文档分割器 即可,其他流程无需任何变化,更新后的部分代码如下

parent_splitter = RecursiveCharacterTextSplitter(chunk_size=2000)
child_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)retriever = ParentDocumentRetriever(vectorstore=vector_store,byte_store=store,parent_splitter=parent_splitter,child_splitter=child_splitter,
)
http://www.dtcms.com/wzjs/282005.html

相关文章:

  • 做外贸需要到外汇管理网站天津疫情最新情况
  • 上海金桥建设监理有限公司网站企业网站建设推广
  • 甘肃网站建设公司大一html网页制作作业简单
  • 重庆公司做网站网络推广外包联系方式
  • cdn如何做网站统计苏州吴中区seo关键词优化排名
  • cvv钓鱼网站怎么做站长工具果冻传媒
  • dede当前位置点击去是其他网站百度推广开户代理商
  • asp.net网站第一次运行慢每日关键词搜索排行
  • 个人怎么做ckmov解析网站优化设计电子课本
  • 建网站淄博竞价开户推广
  • 一个ip怎么做多个网站seo优化网站排名
  • 做标记网站排名第一的助勃药
  • 华为云网站建设中小企业管理培训班
  • 金融公司网站开发费用入什么科目考研培训机构排名前五的机构
  • 乌鲁木齐 发布会推广学院seo教程
  • 手机网站总是自动跳转长沙做网站推广公司咨询
  • 短视频seo优化排名信息流优化师前景
  • 推广网站怎样做百度推广代运营公司
  • wordpress如何改字体深圳优化公司哪家好
  • 武汉专业做网站开发的公司推广普通话奋进新征程演讲稿
  • 临朐网站建设价格全网自媒体平台大全
  • 店铺推广和网站优化一起做网络营销课程感悟
  • 一个域名权重3如果做网站的话权重会降为0吗郑州网络优化实力乐云seo
  • 帝国CMS做的淘客网站网站统计数据分析
  • 两学一做微网站交流it培训机构哪个好
  • 个人网站怎么做微商新闻网站排行榜
  • 永康建设局网站种子搜索神器下载
  • 淘宝网站建设与规划百度地图推广怎么做的
  • 长春门户网站建设制作建网站多少钱
  • 查看网站备案号seo优化的价格