Weaviate 是一个 AI 原生的开源向量数据库,它结合了强大的搜索能力和企业级的可靠性。它提供内置的 混合(语义 + 关键词)搜索、高级过滤、开箱即用的 RAG 功能,以及在数亿个向量上亚秒级的查询响应速度。它灵活的 即插即用模块提供使用最先进模型的自动嵌入生成。它可作为托管服务、自托管实例或完全托管的 Weaviate Cloud 服务提供,还具有多租户、向量压缩、基于角色的访问控制、API 密钥管理和零停机时间备份等功能。
Amazon Sagemaker Unified Studio 通过简化团队访问和准备遗留数据的方式来补充 Weaviate 的优势。组织正在构建数据驱动的 AI 应用程序来推动业务决策、创新和提高效率。然而,有效地利用分布式数据来构建现代 AI 应用程序可能具有挑战性。SageMaker Unified Studio 通过帮助您查找、访问和查询数据以及组织中的 AI 资产来应对这一挑战。团队可以轻松协作处理项目,使用 Amazon SageMaker Catalog 安全地构建和共享分析和 AI 工件,包括数据、模型和生成式 AI 应用程序。SageMaker 构建在与 Apache Iceberg 完全兼容的开放湖仓架构之上,统一了对 Amazon S3 数据湖、S3 Tables 和 Amazon Redshift 数据仓库中数据的访问,使组织能够在单个数据副本上构建强大的分析和 AI 应用程序。
Weaviate 和 SageMaker Unified Studio 协同工作,使团队能够构建由向量搜索和 RAG 驱动的实时生成式 AI 应用程序。无论您是正在使用嵌入进行实验的数据科学家、优化管道的机器学习工程师,还是构建面向客户的应用程序的开发人员,该集成都让您可以通过 SageMaker 部署嵌入模型(自定义或基于 LLM),并无缝地在 Weaviate 中向量化数据。
结合 Weaviate 和 Sagemaker Unified Studio 的优势
- 模型灵活性 - 使用部署到 SageMaker 端点或 Bedrock 中的任何自定义或开源嵌入模型。这包括 AWS 模型,如 Titan 和 Nova,以及来自 OpenAI 和 Cohere 的专有模型。
- 可扩展的基础设施 - Sagemaker Unified Studio 和 Weaviate 均设计为在 AWS 上运行和扩展,使您能够构建和部署可以处理数十亿个向量的生产就绪型 AI 应用程序。
- 端到端集成的工作流程。
- 从原型设计到生产的快速迭代 - 在笔记本中进行实验,使用小型数据集进行验证,然后在不重写代码或更改基础设施的情况下扩展到生产量。
- 多种角色 - 数据分析师、科学家和机器学习工程师可以通过共享项目轻松协作。
- 对数据源、ETL 流程和 Spark 作业的 Jupyter 笔记本以及其他 AI 工具的本机访问。
- 内置治理和目录。
- 减少运营摩擦,因为权限和集成由平台处理。
从客户反馈中解锁洞察
在航空、零售和酒店等面向客户的行业中,与客户互动的组织会从各种渠道收到大量反馈 - 包括调查、社交媒体、呼叫日志和评论平台。遗留系统通常难以有效地处理和解释这些大量信息,从而导致重大挑战。
- 丢失客户意图 - 关键词搜索无法掌握客户反馈背后的语义含义。抱怨“不舒适的座位”的客户可能会使用“狭窄的腿部空间”、“狭小的空间”或“硬座位”等短语。传统的基于关键词的分析难以将这些相关术语分组,从而导致错过洞察。
- 结构化和非结构化数据 - 分析评论以及航班时刻表、乘客和运营数据需要将多个 SQL 表与文本嵌入连接起来。遗留系统难以有效地处理这种数据类型的组合。
- 上下文感知响应 - 简单的关键词匹配会检索包含匹配词的文档,但缺乏上下文。使用向量搜索的 RAG 根据语义相关性检索数据,从而为生成响应提供更好的上下文。
- 复杂的搜索 - 回答“查找上个季度所有跨大西洋航班的负面评论”之类的查询通常会迫使数据分析师在传统系统中编写复杂的 SQL 连接。Weaviate 的向量搜索将语义搜索与 元数据过滤和时间搜索相结合,将复杂的分析转化为简单的 API 调用。
- 僵化的模型 - 在传统设置中,在嵌入方法之间切换需要系统重新配置和完全的数据重新处理。Weaviate 允许您使用更简单的策略进行重新配置。
对于此演示,我们将使用一家将客户评论存储在 Lakehouse 中的航空公司,因为它简单、可扩展且经济高效。这种方法解决了航空、零售和酒店等行业普遍存在的关键客户服务挑战,这些行业必须分析大量的客户反馈以提高服务质量和客户满意度。客户评论对于这些行业来说非常有价值,因此它们是语义搜索和 RAG 升级的理想用例。对于示例数据,我们使用 Hugging Face 数据集中的航空公司评论数据 Hugging Face 数据集。
解决方案架构
我们的解决方案架构利用了三种强大的技术,这些技术直接解决了上述挑战。
- SageMaker Lakehouse:使用与 Apache Iceberg 兼容的开放湖仓架构。它统一了 Amazon S3 数据湖和 Amazon Redshift 数据仓库中的数据,从而实现分析和 AI/ML。这将作为我们的数据存储。
- Amazon Bedrock:Bedrock 是一个全面、安全且灵活的平台,用于构建生成式 AI 应用程序和代理。我们将利用 Bedrock 的嵌入模型将数据转换为向量嵌入,从而捕获真正的语义意图。
- Weaviate:用于混合搜索和上下文感知 开箱即用的 RAG 的向量数据库。凭借对文本、图像和结构化数据的原生支持,Weaviate 可以捕获客户互动的完整范围。
我们将在 SageMaker Unified Studio 中演示一个企业数据管道,该管道旨在无缝地从传统数据存储过渡到 AI 驱动的应用程序。我们将从 Lakehouse 导入客户数据到向量数据库,从而促进高级语义和 RAG 查询。组织选择 Lakehouse 中的 S3 是因为它们可以灵活地存储大量数据,轻松扩展,并且只需为实际使用的资源付费。
笔记本可用于通过 Weaviate 的语义(混合)搜索识别新兴的客户满意度趋势和评论模式。此外,Weaviate 的 RAG API 可用于检索相关的历史交互并生成上下文适当的客户响应。
数据流很简单。存储在 Lakehouse 中的原始评论在 SageMaker Unified Studio 中处理并存储在 Lakehouse 中的 Apache Iceberg 表中。我们执行此步骤是为了进行高效查询,但如果您的数据已经存在于 Iceberg 格式中,则不需要。然后,这些评论使用托管在 Bedrock 中的嵌入模型进行向量化,并索引到 Weaviate 中以进行语义搜索和 RAG 查询。
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Lakehouse | → | Iceberg Tables | → | Weaviate | → | Semantic search |
| (raw reviews) │ │ │ │ │ │ + RAG │
└─────────────────┘ └─────────────────┘ └─────────────────┘ └─────────────────┘
先决条件
- Amazon SageMaker Unified Studio 环境
- Weaviate Cloud 帐户
- AWS Bedrock 访问权限(用于嵌入和生成)
- Hugging Face 中的 Airline Reviews 数据集
SageMaker Lakehouse
为了演示的目的,我们假设评论已经保存到 Lakehouse,位于我们项目根文件夹 {project.s3.root}/reviews 下。
from sagemaker_studio import Project
project = Project()
catalog = project.connection().catalog()
project_database = catalog.databases[0].name
tbl_name = "product_reviews_v1"
data_path = f"{project.s3.root}/reviews"
为高效查询定义 Iceberg 表模式
spark.sql(f"""USE {project_database}""")
spark.sql(f"""DROP TABLE IF EXISTS {tbl_name}""")
spark.sql(f"""
CREATE TABLE IF NOT EXISTS airline_reviews (
review_id string,
airline string,
product_id string,
customer_id string,
rating string,
luggage int,
staff int,
cabin int,
review_text string
)
USING iceberg
LOCATION '{project.s3.root}/reviews'
""")
无缝地将数据从 Lakehouse 传输到 Iceberg
raw_df = spark.read.option('delimiter',',').csv(data_path, header=True, inferSchema=True)
raw_df.write.format("iceberg").mode("append").saveAsTable(f"{project_database}.{tbl_name}")
df = spark.read.table(f"""{tbl_name}""")
df.show()
Weaviate 集合
Weaviate 提供 多种部署选项 以满足您的特定用例。在下面的示例中,我们正在建立与 Weaviate Serverless Cloud 的连接。Weaviate Cloud 快速入门 将帮助您设置云帐户并在几分钟内开始使用。有关更多部署选项和连接教程,请参阅文档。
import weaviate
import weaviate.classes as wvc
weaviate_client = weaviate.connect_to_weaviate_cloud(
cluster_url=[WEAVIATE_CLOUD_URL],
auth_credentials=weaviate.auth.AuthApiKey([WEAVIATE_API_KEY]),
headers={
"X-AWS-Access-Key": [AWS_ACCESS_KEY],
"X-AWS-Secret-Key": [AWS_SECRET_KEY],
}
)
接下来,我们使用 AWS Bedrock 模型创建向量化和 RAG 的集合。有关向量化器及其特定模型的不同属性的更多信息,请参阅此处的文档。同样,生成配置文档将为您提供更多生成模型的配置选项。
weaviate_client.collections.create(
name='Airline_Reviews',
vector_config=wvc.config.Configure.Vectors.text2vec_aws(
service="bedrock",
model="amazon.titan-embed-text-v2:0",
region="us-west-2",
vectorize_collection_name=False,
),
properties=[
wvc.config.Property(name="review_id", data_type=wvc.config.DataType.TEXT),
wvc.config.Property(name="airline", data_type=wvc.config.DataType.TEXT),
wvc.config.Property(name="product_id", data_type=wvc.config.DataType.TEXT),
wvc.config.Property(name="customer_id", data_type=wvc.config.DataType.TEXT),
wvc.config.Property(name="rating", data_type=wvc.config.DataType.INT),
wvc.config.Property(name="cabin", data_type=wvc.config.DataType.INT),
wvc.config.Property(name="luggage", data_type=wvc.config.DataType.INT),
wvc.config.Property(name="staff", data_type=wvc.config.DataType.INT),
wvc.config.Property(name="review_text", data_type=wvc.config.DataType.TEXT)
],
generative_config=wvc.config.Configure.Generative.aws(
region="us-west-2",
service="bedrock",
model="amazon.titan-text-lite-v1"
)
)
Lakehouse 到 Weaviate
使用批量操作将数据从我们的 Iceberg 表传输到 Weaviate
def save_reviews_to_weaviate(client, df):
reviews_collection = client.collections.get('Airline_Reviews')
with reviews_collection.batch.dynamic() as batch:
for _, row in df.iterrows():
review_obj = {
"review_id": row['review_id'],
"airline": row['airline'],
"product_id": row['product_id'],
"customer_id": row['customer_id'],
"rating": int(row['rating']),
"cabin": int(row['cabin']),
"luggage": int(row['luggage']),
"staff": int(row['staff'],
"review_text": row['review_text']
}
batch.add_object(review_obj)
reviews_saved = save_reviews_to_weaviate(weaviate_client, df)
混合搜索
混合搜索结合了
- BM25(关键词匹配):快速、传统的搜索
- 向量相似度:语义理解
response = reviews_collection.query.hybrid(
limit=5,
alpha=0.5, # Balance between BM25 and vector search
query="poor service",
filters=(
wvc.query.Filter.by_property("rating").less_than(3)
),
return_metadata=wvc.query.MetadataQuery(score=True),
)
for obj in response.objects:
print(f"Product: {obj.properties['product_id']}")
print(f"Review: {obj.properties['review_text']}")
print(f"Relevance Score: {obj.metadata.score}")
0.5 的 alpha 参数平衡了传统搜索和 AI 驱动的搜索。使用上述混合搜索
- 像“不舒适的座位”这样的查询将匹配精确的关键词提及(BM25)以及语义上相似的短语,如“狭窄的腿部空间”或“狭小的空间”
- 确保我们仅使用过滤器检索低评级的评论
Weaviate 允许您通过提供额外的参数(如 对象排名和 查询权重)来配置您的混合搜索结果。有关完整的查询选项列表,请查看此处的文档。您还可以在 Weaviate Recipes 中找到有关使用混合搜索的端到端笔记本!
RAG
检索增强生成是一种强大的技术,它检索相关数据以提供给大型语言模型 (LLM) 作为上下文,以及任务提示。在某些情况下,它也被称为 RAG、生成搜索或上下文学习。在 Weaviate 中,您可以使用 RAG 将 整个结果集转换为新的文本,或者为 单个对象生成新的内容。请查看文档以了解哪种更适合您的用例。在我们的演示中,我们使用 RAG grouped_task 来检索评论(正确的上下文)并生成信息丰富的分析。
instruction = """
Based on the retrieved customer reviews, create a professional summary
highlighting the main concerns.
"""
response = reviews_collection.generate.hybrid(
limit=10,
query='service complaints',
grouped_task=instruction,
)
print(response.generative.text)
示例输出:“基于对近期服务投诉的分析,出现了三个主要问题:客舱乘务员的响应速度(在 45% 的负面评论中提及)、餐食质量问题(32%)和登机过程延误(28%)。”
下一步
随着数据量的增长,Weaviate 可以水平扩展。在本研讨会中,虽然我们使用了批量导入,我们也可以实施流式传输以实时导入评论。为了立即捕获关键反馈,应用程序还可以添加带有 SNS 和 Cloudwatch 警报的通知
结论
一旦您学会了如何利用向量数据库来利用您的数据,您就可以在应用程序的各个部分中使用它们来改进查询。例如,识别客户反馈中的模式和检测趋势也可以由团队内部用于改进产品路线图。通过将 Amazon SageMaker Unified Studio 的数据管理能力与 Weaviate 的语义搜索和 RAG 功能相结合,公司可以将客户反馈从合规性复选框转变为战略资产。我们构建的架构可以大规模处理评论,理解超越关键词的上下文,并生成可操作的见解,同时保持生产级的可靠性。
准备开始构建了吗?
请查看 快速入门教程,或使用 Weaviate Cloud (WCD) 的免费试用版构建令人惊叹的应用程序。
