联系方式
- 欢迎您联系我们,留下您的建议
- 联系人:吴经理
- 手机:15968855264
- 传真: 0571-63488497
- 邮箱: sales@newstarpaper.cn
时间: 2024-09-02 06:39:30 | 作者: 滤器
在检索增强生成 (RAG) 设置中,用户指定的过滤器(无论是隐含的还是显式的)在向量搜索期间通常会被忽视,因为向量搜索主要关注语义相似性。
在某些情况下,必须确保使用预定义的文档集(子集)专门回答特定查询。利用“元数据”或标签,您可以强制执行每种类型的用户查询应使用的文档类型。当每个用户的查询都使用过滤器标记其凭据/身份验证级别时,这还可以变成安全覆盖策略,以便使用其身份验证级别的文档回答他们的查询。
当 RAG 数据由大量单独的数据对象(例如文件)组成时,每个数据对象都可以用一组预定义的元数据进行标记。然后,这些标记可以在向量或混合搜索期间用作过滤器。元数据可以与向量嵌入一起合并到搜索索引中,随后用作过滤器。
出于合规角度,建议国内公司能够选择微软的Azure OpenAI服务来使用接口。
通过微软官方合作伙伴获取服务,企业用户都能够合规、稳定地使用ChatGPT,满足国内发票需求,同时也能解决连接不稳定/响应速度慢/并发配额低等问题。
作为微软的合作伙伴,全云在线可为企业开通绿色申请通道!包括最新版本GPT-4o、Dalle-3等,只要企业有需求,全云在线都能协助快速开通!
为了演示,本博文将使用电影的文章作为我们的文档。然后,我们将使用元数据(例如、和)标记这些电影文件,然后使用这一些元数据过滤 RAG 代。
请注意,LLM 还可用于在将文档上传到搜索索引以便大规模部署之前对其进行“分类”。当用户输入提示时,我们大家可以使用额外的 LLM 调用对用户提示进行分类(匹配一组元数据),然后使用它来筛选结果。Blogpost 演示了一个更简单的用例,其中 RAG 文档(页面保存为 pdf 文件并预先标记电影元数据……
我们需要创建一个 Azure AI 搜索索引,其中元数据字段将为“可搜索”和“可过滤”字段。以下是我们将使用的架构定义。
然后运行以下脚本,通过对 Azure AI 搜索服务的 REST API 调用创建索引……
创建 Azure AI 搜索索引后,在门户中确认元数据字段已标记为可过滤和可搜索……
我们将使用的文档是电影的页面,保存为 pdf 文件。为了将文档以 RAG 模式集成到 LLM,我们首先将“预处理”文档。下面的代码首先 使用 函数 打开指定的 PDF 文件,使用类读取其内容,然后从每页中提取文本,将所有文本组合成一个字符串。该函数接收一个文本字符串并删除任何不必要的空格,确保文本被规范化为带有空格的单个连续字符串。然后,该函数获取此规范化的文本并将其拆分为较小的块,每个块不大于指定的大小(默认为 6000 个字符)。这是通过将文本标记为句子并将它们分组为块来实现的,同时确保每个块不超过指定的大小,从而使文本更易于管理和处理较小的段。
然后我们嵌入每个块,并将嵌入连同文档元数据一起上传到之前创建的 Azure AI 搜索索引。
首先,让我们使用相对通用的提示进行向量搜索,该提示将匹配多个文档块……请注意显示筛选语句“该电影于 2010 年上映”。请注意,向量搜索无法成功解释所述筛选条件,搜索结果中也会返回错误结果(早在 2010 年之前上映的电影)。
接下来,向向量搜索添加一个过滤器...过滤器定义为 releaseYear 元数据值(int32)大于 2010 的任何文档块。在这种情况下,只返回正确的搜索结果,即来自电影“盗梦空间”的文档块。
本博客介绍了一个简单的场景,其中文档块被嵌入并上传到 Azure 搜索索引,其中文档元数据作为可搜索和可过滤的字段。
该概念可以扩展,以便使用额外的 llm 查询步骤来“分类”用户提示并推断将用于预/后过滤矢量搜索匹配块的元数据。同样,能够正常的使用 LLM 调用用元数据标记文档本身,而不是依赖静态人工注释,如本例所示。