使用Weaviate构建自查询检索器来探索电影数据

Weaviate Vector数据库的技术背景介绍

在现代AI应用中,存储和检索海量的向量化数据是一个关键需求。Weaviate作为一个开源的向量数据库,可以帮助我们高效地存储和查询来自机器学习模型的数据对象及其向量嵌入,从而轻松扩展到数十亿的数据对象。在本次教程中,我们将展示如何利用Weaviate和自查询检索器来构建高效的数据检索系统。

核心原理解析

我们将利用SelfQueryRetriever,它是一个围绕Weaviate向量存储封装的检索器,能够在支持动态查询的同时,根据文档的元数据来提升检索精度。我们将具体展示如何用Python实现这种检索功能。

代码实现演示

让我们用几个简单的步骤来构建我们的Weaviate向量存储,并用它来实现一个自查询检索器。

首先,我们安装必要的依赖包:

%pip install --upgrade --quiet lark weaviate-client

然后,创建Weaviate向量存储并添加一些电影的文档数据:

from langchain_community.vectorstores import Weaviate
from langchain_core.documents import Document
from langchain_openai import OpenAIEmbeddings

# 初始化向量嵌入
embeddings = OpenAIEmbeddings()

# 创建示
### 如何在 Python 中集成和使用 Weaviate Weaviate 是一种基于图数据库模型的语义搜索和知识图谱平台,能够利用向量搜索技术实现高效且智能的数据检索功能。为了方便开发者与其交互,官方提供了 `weaviate-python-client` 库作为原生 Python 客户端工具。 #### 1. 安装 Weaviate Python 客户端 要开始使用 Weaviate,在 Python 环境中需要先安装其客户端库。可以通过 pip 工具完成安装操作: ```bash pip install weaviate-client ``` 此命令会自动下载并配置最新版本的 `weaviate-python-client` 到当前环境中[^1]。 #### 2. 连接到 Weaviate 实例 连接到运行中的 Weaviate 数据库实例是第一步实际操作的关键环节。下面展示了一个简单的初始化方法用于建立与远程服务之间的通信链路: ```python import os import weaviate class WeaviateConnector: def __init__(self, index_name): url = os.getenv("WEAVIATE_URL", "localhost") # 默认值为本地主机名 port = int(os.getenv("WEAVIATE_PORT", 8080)) # 假设标准HTTP端口未更改 self.weaviate_client = weaviate.Client( url=f"http://{url}:{port}", # 构建完整的URL字符串形式指定目标位置 ) from langchain.vectorstores import Weaviate as LangChainWeaviate self.db = LangChainWeaviate.from_weaviate_client( client=self.weaviate_client, index_name=index_name, text_key="text", embedding=None, # 或者自定义嵌入函数 get_embedding() ) connector_instance = WeaviateConnector(index_name='MyIndex') print(connector_instance.weaviate_client.is_ready()) # 验证服务器状态是否正常工作 ``` 上述代码片段展示了如何通过设置环境变量或者默认参数的方式灵活调整连接细节,并最终确认所连上的节点处于可用状态[^3]。 #### 3. 创建数据模式 (Schema) 为了让 Weaviate 能够存储特定类型的对象信息,必须事先定义好相应的 Schema 结构描述这些实体及其属性特征等内容。这里给出一个基础的例子说明怎样新增类(Class): ```python schema_definition = { "classes": [{ "class": "Article", # 类名称首字母大写遵循惯例 "description": "An article written by an author.", "properties": [ {"name": "title", "dataType":["string"], "description":"Title of the Article"}, {"name": "content", "dataType":["text"], "description":"Content body"} ] }] } if not connector_instance.weaviate_client.schema.contains(schema_definition['classes'][0]): connector_instance.weaviate_client.schema.create_class(schema_definition['classes'][0]) else: print('Class already exists.') ``` 这段脚本检查是否存在名为 “Article” 的 Class 如果不存在则创建之;否则提示用户该类别已存在无需重复定义[^4]。 #### 4. 插入数据记录 有了合适的 Schema 后就可以往里面填充具体的内容项啦!以下是添加单条文档至先前声明过的 Articles 表格内的做法演示: ```python article_data = { 'title': 'How to Use Weaviate in Python', 'content': '''This guide explains step-by-step instructions on integrating and utilizing Weaviate within your Python projects...''' } response = connector_instance.weaviate_client.data_object.create(article_data, class_name="Article") print(response) # 输出成功与否的消息反馈 ``` 每当你调用 `.create()` 方法时都会返回一条 JSON 字符串告知请求处理的结果情况。 #### 5. 执行查询操作 最后一步便是学会提取之前存进去的信息出来做进一步分析或呈现给终端使用者看咯~ 下面列举了几种常见的检索方式供参考学习: ##### A. 使用近邻算法查找相似度最高的若干篇文章 ```python nearTextQuery = { 'concepts': ['semantic search'], 'moveTo': {'force': 0.9}, 'certainty': 0.7 } result = ( connector_instance.weaviate_client.query.get(class_name="Article", properties=["title", "content"]) .with_near_text(nearTextQuery) .do() ) for record in result['data']['Get']['Article']: print(f"Title: {record['title']}\nSnippet:\n{record['content'][:100]}...\n---\n") ``` ##### B. 按条件过滤筛选符合条件的目标集合 ```python filterCondition = weaviate.Filter(where={ "path": ["title"], "operator": "Like", "valueString": "*Python*" }) filteredResults = ( connector_instance.weaviate_client.query.get(class_name="Article", properties=["title", "content"]) .with_where(filterCondition) .do() ) # 显示匹配结果列表 titles = [item['title'] for item in filteredResults['data']['Get']['Article']] print(titles) ``` 以上两部分分别介绍了基于内容关联程度以及关键词匹配两种不同维度下的探索途径[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值