• 如何使用Weaviate构建语义搜索引擎

如何使用Weaviate构建语义搜索引擎

2025-08-16 12:32:48 栏目:宝塔面板 54 阅读

译者 | 李睿

审校 | 重楼

Weaviate是一款开源向量数据库,专为处理高维非结构化数据(文本、图像、视频)设计,通过向量嵌入实现语义搜索,替代传统关键字匹配。其核心优势包括人工智能原生架构、分布式扩展、基于图形的模型及混合搜索能力。本文将通过代码示例和实际应用,探讨Weaviate成为游戏规则改变者的原因。

人们获取与关联信息的方式正在经历根本性的转变。在传统搜索模式中,用户需要拆分关键词进行检索,例如输入舒适”(cozy)和“角落”(nook),而现代语义搜索技术可以直接输入舒适的阅读角落”(cozy reading nooks)将会呈现出“壁炉旁软椅”等符合语义关联的视觉化内容。这种基于语义理解的搜索范式,标志着信息检索从机械式关键词匹配向自然语言理解的跨越。这一转变至关重要,因为在人工智能时代,图像、文本、视频等非结构化数据呈现指数级增长,传统数据库已经难以满足人工智能时代的需求。

这正是Weaviate发挥重要作用的地方,并使其成为向量数据库领域的领导者。凭借其独特的功能和性能,Weaviate正在改变企业使用基于人工智能的见解和数据的方式。本文将通过代码示例和实际应用,探讨Weaviate为何能成为游戏规则的改变者。

Weaviate是什么?

Weaviate是一款开源向量数据库,专门用于存储和处理以向量表示的高维数据,例如文本、图像或视频等。Weaviate允许企业进行语义搜索,创建推荐引擎,并轻松构建人工智能模型。

Weaviate专注于智能数据检索,而不是依赖于基于每行存储的列检索精确数据的传统数据库。它使用基于机器学习的向量嵌入来根据语义找到数据点之间的关系,而不是搜索精确的数据匹配。

Weaviate提供了一种简单的方法来构建运行人工智能模型的应用程序,这些模型需要快速有效地处理大量数据来构建模型。在Weaviate中存储和检索向量嵌入使其成为涉及非结构化数据的企业的理想选择。

Weaviate的核心原理和架构

Weaviate的核心是建立在处理高维数据和利用高效和可扩展的向量搜索的原则之上。以下是其架构的设计原则与核心模块:

  • 人工智能原生和模块化:Weaviate从设计之初就将机器学习模型集成到架构中,为其开箱即用地生成不同数据类型的嵌入(向量)提供支持。模块化设计允许用户扩展功能、集成自定义特性或调用外部系统。
  • 分布式系统:数据库被设计成能够横向扩展。Weaviate采用无领导者架构,这意味着没有单点故障。通过多节点数据复制实现高可用性,即使节点故障也能保障数据安全。最终一致性使其适用于云原生及其他环境。
  • 基于图形:Weaviate是一种基于图形的数据模型。对象(向量)通过它们的关系连接起来,使得具有复杂关系的数据易于存储和查询,这在推荐系统等应用程序中非常重要。
  • 向量存储:Weaviate旨在将数据存储为向量(对象的数值表示)。这非常适合支持人工智能的搜索、推荐引擎和所有其他人工智能/机器学习相关用例。

Weaviate快速入门:实践指南

无论是在构建语义搜索引擎、聊天机器人还是推荐系统,这都无关紧要。Weaviate快速入门指南将演示如何连接到Weaviate,摄取向量化内容,并提供智能搜索功能,最终通过使用OpenAI模型的检索增强生成(RAG)生成上下文感知的答案。

前提条件

确保安装了最新版本的Python。如果没有安装,可以使用如下命令安装:

sudo apt update
sudo apt install python3 python3-pip –y

创建并激活虚拟环境:

python3 -m venv weaviate-env
Source weaviate-env/bin/activate

使用上述代码,shell提示符现在将显示虚拟环境名称(例如weaviate-env),表明环境已经激活。

步骤1:部署Weaviate

部署Weaviate有两种方法:

选项1:使用Weaviate云服务

部署Weaviate的一种方法是使用其云服务:

  • 首先,登录https://console.weaviate.cloud/
  • 然后,注册并通过选择OpenAI模块创建集群。

还要注意WEAVIATE_URL(类似于https://xyz.weaviate.network)以及WEVIATE_API_KEY

选项2:使用Docker Compose在本地运行

创建docker- composer .yml

version: '3.4'
services:
 weaviate:
 image: semitechnologies/weaviate:latest
 ports:
 - "8080:8080"
 environment:
 QUERY_DEFAULTS_LIMIT: 25
 AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true'
 PERSISTENCE_DATA_PATH: './data'
 DEFAULT_VECTORIZER_MODULE: 'text2vec-openai'
 ENABLE_MODULES: 'text2vec-openai,generative-openai'
 OPENAI_APIKEY: 'your-openai-key-here'

配置Weaviate容器与OpenAI模块和匿名访问。

使用以下命令启动它:

docker-compose up -d

这将以分离模式启动Weaviate服务器(在后台运行)。

步骤2:安装Python依赖项

要安装程序所需的所有依赖项,需要在操作系统的命令行中运行以下命令:

pip install weaviate-client openai

这将安装Weaviate Python客户机和OpenAI库。

步骤3:设置环境变量

export WEAVIATE_URL="https://.weaviate.network"
export WEAVIATE_API_KEY=""
export OPENAI_API_KEY=""

对于本地部署,不需要WEAVIATE_API_KEY(无需验证)。

步骤4:连接到Weaviate

import os
import weaviate
from weaviate.classes.init import Auth
client = weaviate.connect_to_weaviate_cloud(
 cluster_url=os.getenv("WEAVIATE_URL"),
 auth_credentials=Auth.api_key(os.getenv("WEAVIATE_API_KEY")),
 headers={"X-OpenAI-Api-Key": os.getenv("OPENAI_API_KEY")}
)
assert client.is_ready(), " Weaviate not ready"
print(" Connected to Weaviate")

前面的代码使用凭据连接Weaviate云实例,并确认服务器已经启动并可访问。

对于本地实例,使用:

client = weaviate.Client("http://localhost:8080")

这将连接到本地Weaviate实例。

步骤5:使用嵌入和生成支持定义模式

schema = {
 "classes": [
 {
 "class": "Question",
 "description": "QA dataset",
 "properties": [
 {"name": "question", "dataType": ["text"]},
 {"name": "answer", "dataType": ["text"]},
 {"name": "category", "dataType": ["string"]}
 ],
 "vectorizer": "text2vec-openai",
 "generative": {"module": "generative-openai"}
 }
 ]
}

定义了一个名为Question的模式,其中包含属性和基于openai的向量和生成模块。

client.schema.delete_all() # Clear previous schema (if any)
client.schema.create(schema)
print(" Schema defined")

输出:

上述语句将模式上传到Weaviate并确认成功。

步骤6:批量插入样例数据

data = [
 {"question":"Only mammal in Proboscidea order?","answer":"Elephant","category":"ANIMALS"},
 {"question":"Organ that stores glycogen?","answer":"Liver","category":"SCIENCE"}
]

创建一个小型QA数据集:

with client.batch as batch:
 batch.batch_size = 20
 for obj in data:
 batch.add_data_object(obj, "Question")

以批处理方式插入数据以提高效率:

print(f"Indexed {len(data)} items")

输出:

确认已经索引的项目数量。

步骤7:使用nearText进行语义搜索

res = (
 client.query.get("Question", ["question", "answer", "_additional {certainty}"])
 .with_near_text({"concepts": ["largest elephant"], "certainty": 0.7})
 .with_limit(2)
 .do()
)

使用文本向量对“largest elephant”等概念进行语义搜索。仅返回确定性≥0.7且最多2个结果的结果。

print(" Semantic search results:")
for item in res["data"]["Get"]["Question"]:
 q, a, c = item["question"], item["answer"], item["_additional"]["certainty"]
 print(f"- Q: {q} → A: {a} (certainty {c:.2f})")

输出:

显示具有确定性分数的结果。

步骤8:检索-增强生成(RAG

rag = (
 client.query.get("Question", ["question", "answer"])
 .with_near_text({"concepts": ["animal that weighs a ton"]})
 .with_limit(1)
 .with_generate(single_result=True)
 .do()
)

语义搜索,并要求Weaviate使用OpenAI(通过generate)生成响应。

generated = rag["data"]["Get"]["Question"][0]["generate"]["singleResult"]
print(" RAG answer:", generated)

输出:

根据Weaviate数据库中最接近的匹配项打印生成的答案。

Weaviate的主要特性

Weaviate有许多独特的功能,使它在大多数基于向量的数据管理任务中具有灵活和强大的优势。

  • 向量搜索:Weaviate可以将数据作为向量嵌入进行存储和查询,从而进行语义搜索;它提高了准确性,因为基于意义而不是简单地匹配关键字来找到相似的数据点。
  • 混合搜索:通过将向量搜索和传统的基于关键字的搜索结合起来,Weaviate提供了更相关和上下文相关的结果,同时为各种用例提供了更大的灵活性。
  • 可扩展的基础设施:Weaviate能够使用单节点和分布式部署模型进行操作;它可以横向扩展以支持非常大的数据集,并确保性能不受影响。
  • 人工智能原生架构:Weaviate旨在与机器学习模型一起工作,支持直接生成嵌入,而无需通过额外的平台或外部工具。
  • 开源:作为开源软件,Weaviate允许一定程度的定制、集成,甚至允许用户在其持续发展中做出贡献。
  • 可扩展性:Weaviate通过模块和插件支持可扩展性,使用户能够从各种机器学习模型和外部数据源集成。

Weaviate vs 竞争对手

下表强调了Weaviate和在向量数据库领域的一些竞争对手之间的主要区别。

特性

Weaviate

Pinecone

Milvus

Qdrant

开源

混合搜索

是(向量+关键词)

是(向量+关键词)

是(向量+关键词)

分布式架构

内置AI模型支持

云原生集成

数据复制

如上表所示,Weaviate是唯一提供混合搜索的向量数据库,它既可以进行向量搜索,也可以进行基于关键字的搜索。因此,有更多的搜索选项可用。Weaviate是开源的,不像Pinecone是闭源的。Weaviate的开源优势和透明库提供了有益于用户的定制选项。

特别是,Weaviate将机器学习集成到数据库中,使其解决方案与竞争对手的解决方案截然不同。

结论

Weaviate是一款处于行业前沿的基于向量的数据库,具有革命性的人工智能原生的架构,旨在处理高维数据,同时还结合了机器学习模型。Weaviate的混合数据和搜索功能及其开源特性为每个可想象的行业中的人工智能应用程序提供了强大的解决方案。Weaviate的可扩展性和高性能使其成为非结构化数据的领先解决方案。从推荐引擎和聊天机器人到语义搜索引擎,Weaviate充分发挥其先进功能的潜力,帮助开发人员增强他们的人工智能应用程序。随着人工智能解决方案需求的增长;Weaviate在向量数据库领域的重要性将变得越来越重要,并将通过其处理复杂数据集的能力从根本上影响该领域的未来。

常见问题

Q1Weaviate是什么?

答:Weaviate是一款开源向量数据库,专为高维数据(如文本、图像或视频)而设计,用于实现语义搜索和人工智能驱动的应用程序。

Q2Weaviate与传统数据库有何不同?

答:与检索精确数据的传统数据库不同,Weaviate使用基于机器学习的向量嵌入来检索结构化数据,并根据含义和关联进行检索。

Q3Weaviate中的混合搜索是什么?

答:Weaviate中的混合搜索结合了向量搜索和基于关键字的传统搜索的概念,为更多样化的用例提供相关和上下文相关的结果。

原文标题:Building a Semantic Search Engine using Weaviate,作者:Janvi Kumari

本文地址:https://www.yitenyun.com/327.html

搜索文章

Tags

数据库 API FastAPI Calcite 电商系统 MySQL Web 应用 异步数据库 数据同步 ACK 双主架构 循环复制 TIME_WAIT 运维 负载均衡 JumpServer SSL 堡垒机 跳板机 HTTPS JumpServer安装 堡垒机安装 Linux安装JumpServer Deepseek 宝塔面板 Linux宝塔 Docker 生命周期 esxi esxi6 root密码不对 无法登录 web无法登录 HexHub 序列 核心机制 Windows Windows server net3.5 .NET 安装出错 服务器 管理口 HTTPS加密 宝塔面板打不开 宝塔面板无法访问 查看硬件 Linux查看硬件 Linux查看CPU Linux查看内存 Windows宝塔 Mysql重置密码 Oracle 处理机制 InnoDB 数据库锁 无法访问宝塔面板 开源 PostgreSQL 存储引擎 监控 连接控制 机制 Serverless 无服务器 语言 ES 技术 服务器性能 协同 Spring Redis 异步化 缓存方案 缓存架构 缓存穿透 分页查询 索引 高可用 group by Undo Log GreatSQL 连接数 SQL 动态查询 机器学习 日志文件 MIXED 3 响应模型 R2DBC SVM Embedding 优化 万能公式 R edis 线程 数据 主库 RocketMQ 长轮询 配置 自定义序列化 Linux 安全 ​Redis 推荐模型 Postgres OTel Iceberg 工具 云原生 Netstat Linux 服务器 端口 scp Linux的scp怎么用 scp上传 scp下载 scp命令 AI 助手 SQLark 向量数据库 大模型 共享锁 PG DBA 存储 SQLite-Web SQLite 数据库管理工具 openHalo Hash 字段 Recursive OB 单机版 查询 电商 系统 Ftp 架构 流量 Rsync 锁机制 • 索引 • 数据库 修改DNS Centos7如何修改DNS redo log 重做日志 数据分类 加密 磁盘架构 人工智能 推荐系统 场景 聚簇 非聚簇 sftp 服务器 参数 线上 库存 预扣 向量库 Milvus 业务 同城 双活 信息化 智能运维 MySQL 9.3 防火墙 黑客 Doris SeaTunnel MVCC Python 高效统计 今天这篇文章就跟大家 不宕机 数据备份 传统数据库 向量化 缓存 mini-redis INCR指令 网络架构 网络配置 INSERT COMPACT 分库 分表 窗口 函数 Redisson 锁芯 RDB AOF prometheus Alert PostGIS 启动故障 事务 Java 开发 Canal Web IT运维 崖山 新版本 filelock MongoDB 数据结构 核心架构 订阅机制 引擎 性能 数据脱敏 加密算法 B+Tree ID 字段 分布式 集中式 ZODB Go 数据库迁移 读写 容器 数据类型 虚拟服务器 虚拟机 内存 容器化 网络故障 DBMS 管理系统 频繁 Codis 模型 Redis 8.0 OAuth2 Token JOIN 微软 SQL Server AI功能 QPS 高并发 国产数据库 发件箱模式 自动重启 Pottery 聚簇索引 非聚簇索引 原子性 工具链 部署 Entity Testcloud 云端自动化 速度 服务器中毒 事务隔离 SpringAI 排行榜 排序 SSH Caffeine CP Web 接口 分页方案 排版 数据集成工具 MCP 开放协议 行业 趋势 数据页 Redka 悲观锁 乐观锁 StarRocks 数据仓库 sqlmock LRU 大表 业务场景 分页 AIOPS 分布式架构 分布式锁​ 1 优化器 池化技术 连接池 单点故障 仪表盘 网络 dbt 数据转换工具 Order EasyExcel MySQL8 意向锁 记录锁 事务同步 InfluxDB 日志 IT 对象 字典 RAG HelixDB 双引擎 播客 订单 主从复制 代理 单线程 Crash 代码 编程 UUIDv7 主键 UUID ID Ansible LLM 语句 Pump 恢复数据 Valkey Valkey8.0 ReadView 产业链 兼容性 数据字典 线程安全 List 类型 Weaviate 失效 MGR 分布式集群 解锁 调优 Next-Key 表空间 分布式锁 Zookeeper 关系数据库 慢SQL优化 RR 互联网 GitHub Git 矢量存储 数据库类型 AI代理 国产 用户 查询规划 算法 快照读 当前读 视图 千万级 神经系统 count(*) count(主键) 行数 CAS 技巧 拦截器 动态代理 多线程 并发控制 恢复机制 闪回