执行语义查找

在指定字段中执行语义查找,并对要使用的给定搜索文本和模型或对给定嵌入向量约束指定的记录集。

选项 

  • 查询依据指定查询是自然语言(文本)还是嵌入向量数据

  • 记录集选择是搜索所有记录还是当前搜索结果

  • 目标字段指定要搜索的文本或容器字段。字段的内容必须嵌入向量,如果是文本字段,则为 JSON 数组,如果是容器字段,则为二进制数据。

  • 返回数是作为搜索结果返回的语义上相似记录数量的数字表达式。如果未指定,默认值最多为 10 条记录。

  • 余弦相似条件指定数据的余弦相似性与余弦相似值的比较。如果未指定,则搜索结果不受余弦相似条件的限制。

  • 余弦相似值是与余弦相似条件一起使用的阈值,用于确定数据在语义上相似还是相反。此数字表达式必须具有 -1(相反)和 1(相似)之间(含)的值。

  • 保存结果将文本字段或变量中的搜索结果保存为记录 ID 的 JSON 数组及其同序相似性值,按下行的内弦相似性排序。

仅当查询依据自然语言时,选项才可用:

  • 账户名称是此脚本步骤所使用的 AI 账户的文本表达式。在当前文件中,使用配置 AI 账户脚本步骤设置账户,并在此脚本步骤运行之前随时为其分配此名称。

  • 嵌入模型是生成嵌入向量的模型的名称。将模型名称指定为文本表达式,该文本表达式由模型提供商提供。

  • 文本是自然语言文本查询的文本表达式。生成的文本发送到嵌入向量的模型,然后将其与目标字段中的嵌入向量进行比较以获得相似性。

仅当查询依据向量数据时,选项才可用:

  • 向量是表示要查找的文本或图像的嵌入向量。这是一个返回容器数据的表达式,例如对容器字段的引用。结果在语义上与此向量数据所代表的文本或图像相似。

兼容性 

产品 是否支持
FileMaker Pro
FileMaker Go
FileMaker WebDirect
FileMaker Server
FileMaker Cloud
FileMaker Data API
自定义 Web 发布

原始版本 

21.0

说明 

此脚本步骤寻找目标字段的内容在语义上与查询相似的记录。搜索文本时,这可以提供比执行查找那样查找字面关键字匹配更有用的结果。

搜索图像时,您可以指定描述所搜索的图像的自然语言文本或文本嵌入向量。或者,也可以为与搜索的图像相似的图像指定嵌入向量。

此脚本步骤有两种操作模式,具体由查询依据选项决定:

  • 当设置为自然语言时,您在文本选项中将查询作为自然语言文本提供。此脚本步骤将该查询文本发送到指定的模型,以转换为嵌入向量。这就是为什么这种模式需要 AI 账户名称和嵌入模型的原因。

  • 当设置为向量数据时,您将提供嵌入向量作为查询的容器数据。如果您通常使用某些查询,那么为这些查询获取一次嵌入向量并存储它们可能会更有效率,而不用经常从模型中获取它们。

    为要搜索的图像指定嵌入向量时,请使用此选项。必须使用与目标字段中的图像嵌入向量相同的图像嵌入模型为向量选项生成向量。

对于图像和文本嵌入向量,可以使用 FileMaker Pro 单独提供或与 FileMaker Server 一起安装的开源模型服务器支持的模型。请参阅 Claris 工程博客

从当前表中的所有记录或仅当前搜索结果中的记录(由记录集选项设置)开始,此脚本步骤将目标字段中的数据与语义相似性(或相反性)的查询进行比较。结果是一个受限(缩小)的集合,包含最多返回数条符合余弦相似条件的记录。最终的搜索结果按降序余弦相似性排序,因此最相关的记录排在第一位。

注释 

  • 需要规范化的嵌入向量。所有嵌入向量必须从同一模型生成,以确保兼容性和性能;不支持混合来自不同模型的嵌入向量。

示例 1 

配置 AI 账户,转到“会议详细信息”布局,然后在所有记录中,在 Meetings::Note_Embedding 容器字段中执行文本(作为自然语言)的语义查找,其中包含 Meetings::Note 字段内容的嵌入向量(请参阅在搜索结果中插入嵌入中的示例 1)。为了获得更有用的结果,返回数限制为 10,文本和 Meetings::Note_Embedding 字段内容之间的余弦相似性必须大于 0.4。最终的搜索结果将最相关的记录排在第一位。

复制
配置 AI 账户 [ 帐户名称: "my-account" ; 模型提供商: OpenAI ; API 密钥: "sk-RZCtpWT..." ]

转到布局 [ "会议详细信息" (会议) ; 动画: 无 ]

执行语义查找 [ 查询依据: 自然语言 ; 账户名称: "my-account" ; 嵌入模型: "text-embedding-3-small" ; 文本: "Recruitment, job definition, training plan" ; 记录集: 所有记录 ; 目标字段: Meetings::Note_Embedding ; 返回数: 10 ; 余弦相似条件: 大于 ; 余弦相似值: .4 ]

示例 2 

配置 AI 账户,转到“会议详细信息”布局,然后要求用户查找文本。GetEmbedding函数将该文本发送到模型,然后“设置字段”将嵌入向量存储在全局容器字段 Meetings::Input 中。假设 Meetings::Note_Embedding 容器字段包含 Meetings::Note 字段内容的嵌入向量(请参阅在搜索结果中插入嵌入中的示例 1),“执行语义查找”将 Meetings::Input 与 Meetings::Note_Embedding 中的向量数据进行比较,并返回符合返回数和相似性标准的搜索结果。

复制
配置 AI 账户 [ 账户名称: "my-account" ; 模型提供商: OpenAI ; API 密钥: "sk-RZCtpWT..." ]
        转到布局 [ "会议详细信息" (会议) ; 动画: 无 ]
        显示自定义对话框 [ "查找带有以下注释的会议:" ; $Input ]
        设置字段 [ Meetings::Input ; GetEmbedding ( "my-account" ; "text-embedding-3-small" ; $Input ]
        执行语义查找 [ 查询依据: 向量数据 ; Meetings::Input ; 记录集: 所有记录 ; 目标字段: Meetings::Note_Embedding ; 返回数: 10 ; 余弦相似条件: 大于 ; 余弦相似值: .5 ; 保存结果: $$result] ]

选择“保存结果”选项后,对于返回三条记录的给定查询,JSONFormatElement($$result) 返回:

复制
[
    {
        "recordId" : "7",
        "similarity" : 0.999999947111836
    },
    {
        "recordId" : "1",
        "similarity" : 0.529809641529481
    },
    {
        "recordId" : "5",
        "similarity" : 0.524595621039394
    }
]

示例 3 

搜索一组与文本描述最匹配的图像。该脚本为使用 FileMaker Server 安装的开源模型服务器配置 AI 账户,转到“会议详细信息”布局,显示所有记录,然后使用图像嵌入模型在 Meetings::Image 字段中获取图像的嵌入向量,并将其作为二进制数据存储在 Meetings::Image_Embedding 容器字段中。执行语义查找使用同一账户将自然语言查询文本(“People sitting around a table”)发送到文本嵌入模型,然后将结果与所有记录中的 Meetings::Image_Embedding 进行比较,并返回符合相似性标准的发现集。

复制
配置 AI 账户 [ 账户名称: "my-account" ; 模型提供商: 自定义 ; 端点: "https://my-server.example.com:8080/" ; 验证 SSL 证书 ; API 密钥: Global::API_Key ]

转到布局 [ "会议详细信息" (会议) ; 动画: 无 ]
显示所有记录

在搜索结果中插入嵌入 [ 账户名称: "my-account" ; 嵌入模型: "clip-ViT-B-32" ; 来源字段: Meetings::Image ; 目标字段: Meetings::Image_Embedding ]

执行语义查找 [ 查询方式: 自然语言 ; 账户名称: "my-account" ; 嵌入模型: "sentence-transformers/clip-ViT-B-32-multilingual-v1" ; 文本: "People sitting around a table" ; 记录集: 所有记录 ; 目标字段: Meetings::Image_Embedding ; 余弦相似性条件: 大于 ; 余弦相似性值: .7 ]