
学习如何有效地在 iOS 或 macOS 应用程序中使用和集成 Weaviate 云(WCD)查询可能具有挑战性。本文通过专注于各种可用的查询类型并提供一个实时运行工具来简化这一过程。我们将详细解释常见且易于实现的查询类型,您可以实时查看结果。此外,Mac 用户可以下载我们的自定义应用程序,直接在笔记本电脑上运行实时示例,并允许他们复制这些查询作为自己项目的模板。
内容基于 Adam Chan 的图书推荐项目,该项目可在 此处 的 Git 仓库中找到。

搜索向量数据库
想象你有一个巨大的图书馆,书是用数字而不是文字来描述的。向量相似度搜索就像一个特殊的工具,通过比较数字,帮助你找到与你手中那本相似的书。它比阅读每本书的描述更快,并且非常适合寻找相似图像或推荐产品等场景。
假设你在图书馆,爱上了一本特定的推理小说。这本书可以用一个向量来表示,通俗地说,就是一串捕捉了该书信息的数字。这些数字可能对类型、角色数量或某些词出现的频率等信息进行了编码。
现在,你想找其他类似的推理小说。图书馆(或者本例中的 Weaviate 平台)对所有书籍使用同一种数字代码(向量)。然后,搜索工具会将你最喜欢的书的向量与所有其他书进行比较。向量相似的书(即它们的数字靠得很近)很可能是你也会喜欢的类似推理小说。通过这种方式,你无需翻阅每一本书的描述就能找到新读物。

应用概览
内附一个可供 Mac 用户下载的应用程序,用于直接在笔记本电脑上运行实时查询示例。
您可以随意将这些查询复制并粘贴到您自己的项目中,作为您自己查询的模板。
阅读更多关于 iOS 和 Mac 开发者如何使用 Weaviate 的内容。
要熟悉所使用的数据以及 Weaviate 数据库的创建方式,可以参考 此项目。
查询辅助应用程序
一个可用于对 Weaviate 查询进行实时测试的应用程序。
该 MacOS 应用已由 Apple 签名,可以在 此处下载。

API 设置
首要任务是根据需要创建运行应用程序所需的 API 密钥。

API 密钥设置面板
在 3 个 API 密钥中,Weaviate API 密钥已为您预定义,在此演示应用中无法更改。
下方是对每个密钥的解释、用途以及如何定义您自己的密钥的链接。
- Weaviate API 密钥: 用于访问存储域数据的 Weaviate 向量数据库的访问密钥。
- OpenAI API 密钥: OpenAI 的访问密钥,Weaviate 使用它来访问 OpenAI 大语言模型以查询嵌入。在此处创建密钥:https://openai.com
- Cohere API 密钥: Cohere 的访问密钥,Weaviate 使用它进行文本嵌入、生成式 AI 和重排序(Reranking)。在此处创建密钥:https://cohere.com
点击设置图标调出 API 密钥设置面板,即可在应用程序中定义密钥。

查询提示按钮

查询提示功能包括:
- 复制提示词: 用于您自己的应用。
- 重置为选定的原始提示词: 如果提示词被修改,可手动重置。
- 搜索提示词: 使用提示词开始搜索。
查询提示词
查询提示词可以在查询文本框中手动更改,并针对 Weaviate 向量数据库运行,为您提供实验自己想法的机会。

查询菜单
通过选择您心仪的按钮,可以从查询菜单中访问预设的查询模板。

查询提示词示例
本文讨论了几种类型的查询,所有这些查询都需要 Weaviate API 密钥。根据正在执行的特定查询类型,可能还需要额外的 OpenAI 和/或 Cohere API 密钥。虽然已经提供了所需的 Weaviate API 密钥,但用户应注意某些操作可能需要进一步的 API 密钥。
基础 (Primary): 查询数据的基本选项。
- 基础查询: 检索有限数量项目的简单查询。
- 第三个项目: 跳至查询的第三个项目。
- 元数据: 可用的属性(如 ID、创建日期、最后更新日期等),这些属性超出了加载到 向量数据库 的原始值。
重排序 (Reorder): 重新排列数据或确定其优先级。
- 远离 (Move Away): 允许用户优先考虑相似的术语/概念并淡化其他术语/概念。(需 OpenAI 密钥)
- 重排序 (ReRank): 更改数据元素的显示顺序,可能基于特定标准。(需 OpenAI 密钥、Cohere 密钥)
聚合 (Aggregate): 汇总计数数据。
- 按类别: 根据特定属性对计数进行分组。
- 总计: 整个数据集的总计数。
单一结果 (Single Result): RAG 处理产生的单一结果。
- 摘要: 特定查询的摘要。(需 OpenAI 密钥、Cohere 密钥)
- 翻译为: 将数据元素或结果翻译成不同的语言。(需 OpenAI 密钥、Cohere 密钥)
- 源/目标翻译: 在不同语言之间翻译数据元素或结果。(需 OpenAI 密钥、Cohere 密钥)
分组结果 (Grouped Result): 使用 RAG 对数据进行分组或整理。
- 分组结果: 对从另一个提示词检索到的所有记录执行提示操作。(需 OpenAI 密钥、Cohere 密钥)
基础
基础查询
创建查询的基本构建块。
示例:获取前 5 本书,并列出书名、页数和描述。
{
Get {
Book(limit: 5) {
title
num_pages
description
}
}
}
第三个项目
从第三条记录开始的查询。
示例:以基础查询为基础,跳过前两本书,从其后的书开始。例如:从第 3 本书开始,列出接下来的 5 本书的书名、页数和描述。
{
Get {
Book(limit: 5, offset: 2) {
title
num_pages
description
}
}
}
元数据
显示超出初始加载域数据的信息。这是由系统生成的数据。
示例:包含 ID、创建日期、最后更新日期。
{
Get {
Book(limit: 5) {
title
_additional {
id
vector
certainty
score
distance
creationTimeUnix
lastUpdateTimeUnix
}
}
}
}
重排序
远离 (Move Away)
允许用户优先考虑相似的概念并淡化其他概念。示例:强调“战争”主题并淡化“浪漫”。
{
Get {
Book(
limit: 5
nearText: {
concepts: ["Mysteries set in Western Europe"]
distance: 0.6
moveAwayFrom: { concepts: ["romance"], force: 0.45 }
moveTo: { concepts: ["war"], force: 0.85 }
}
) {
title
description
num_pages
}
}
}
重排序 (Rerank)
根据特定标准更改数据元素的显示顺序。这是由系统生成的数据。
示例:对结果进行重新排序,以优先显示讨论机器人的描述。
{
Get {
Book(nearText: { concepts: "science fiction" }, limit: 10) {
title
description
num_pages
categories
_additional {
distance
rerank(property: "description", query: "robot") {
score
}
}
}
}
}
聚合
按类别
根据特定属性对计数进行分组。
示例:显示每个类别的书籍数量。
{
Aggregate {
Book(groupBy: ["categories"]) {
meta {
count
}
groupedBy {
value
}
}
}
}
总计
整个数据集的总计数。
示例:显示数据库中所有书籍的数量。
{
Aggregate {
Book {
meta {
count
}
}
}
}
单一结果
总结
特定查询的摘要。
示例:用 10 个字总结发生在西欧的推理主题书籍。
{
Get {
Book(
nearText: { concepts: ["Search for mysteries set in WesternEurope"] }
limit: 5
) {
title
description
_additional {
generate(
singleResult: {
prompt: "Describe the following as a short summary in 10 words:{description}"
}
) {
singleResult
error
}
}
}
}
}
翻译为
将数据元素或结果翻译成不同的语言。
示例:搜索墨西哥书籍并将书名翻译成西班牙语。
{
Get {
Book(nearText: { concepts: ["What books are Mexican"] }, limit: 5) {
title
description
_additional {
generate(
singleResult: { prompt: "Translate the following in Spanish:{title}" }
) {
singleResult
error
}
}
}
}
}
源/目标翻译
在不同语言之间翻译数据元素或结果。示例:用西班牙语提问并将结果书名翻译成西班牙语。
{
Get {
Book(nearText: { concepts: ["Que libros son mexicanos"] }, limit: 5) {
title
description
_additional {
generate(
singleResult: { prompt: "Translate the following in Spanish:{title}" }
) {
singleResult
error
}
}
}
}
}
分组结果
分组结果
对从另一个提示词检索到的所有记录执行提示操作。示例:搜索关于欧洲政府的书籍。
总结结果中这些领导人的共同点。
{
Get {
Book(nearText: { concepts: ["Governments of Europe"] }, limit: 5) {
title
description
_additional {
generate(
groupedResult: {
task: "What do these leaders have in common, if anything?"
}
) {
groupedResult
error
}
}
}
}
}
结论
希望这篇文章能为您提供在 iOS 和 macOS 上使用 Weaviate Cloud (WCD) 构建查询的实用指南,即使您是该平台的新手。它简化了向量相似度搜索的核心概念,向您展示了如何查找相似数据。文章将 Weaviate Cloud 定位为一项全托管服务,可处理 AI 基础设施的技术复杂性,让您能够专注于开发诸如推荐引擎和语义搜索等吸引人的功能。
为了帮助您入门,本指南为 Mac 用户提供了 一个自定义的 查询辅助应用程序,它提供了一种动手测试不同查询的方式。文章将这些查询分为不同的类别,从基础数据检索到重排序结果、总结数据甚至翻译文本等高级功能。这一资源为您提供了基础知识和实用工具(包括实时测试应用和代码示例),让您能够充满信心地开始创建自己的先进 AI 驱动型应用程序!
准备开始构建了吗?
请查看 快速入门教程,或使用 Weaviate Cloud (WCD) 的免费试用版构建令人惊叹的应用程序。