执行语义查找

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

选项 

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

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

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

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

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

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

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

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

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

  • 文本是文本查找的文本表达式。此文本被发送到模型,以与目标字段中的嵌入向量进行比较,以了解相似性。

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

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

兼容性 

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

原始版本 

21.0

说明 

此脚本步骤查找目标字段的内容在语义上与查询相似的记录,而不是像执行查找脚本步骤那样查找字面关键字匹配。

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

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

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

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

示例 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 ; 余弦相似条件: 大于 ; 余弦相似值: .4 ]