在搜索结果中插入嵌入

对于搜索结果中的每一条记录,将数据从源字段发送到嵌入模型,并将返回的向量表示插入目标字段。

选项 

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

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

  • 来源字段是此脚本步骤将其值发送到模型以转换为嵌入向量的文本字段或容器字段。如果字段为空,则不会向模型发送任何内容,且目标字段保持不变。

  • 目标字段指定要插入返回的嵌入向量的字段。如果您指定文本字段,返回的数据将存储为文本。如果您指定容器字段,则返回的数据将存储为二进制数据,该数据可能比存储为文本时小,并且可以改进使用嵌入向量执行的任何进一步处理。

  • 替换目标内容将替换目标字段的内容(如果有的话)。若此选项关闭,则仅当字段为空时,才会将嵌入数据添加到目标字段中;否则,该字段保持不变。如果源字段的内容频繁更改,则打开此选项很有用。

  • 参数是 JSON 对象的文本表达式,用于指定对发送到模型的请求的大小、数量和频率的限制。根据数据量、使用的模型、模型提供商的令牌限制以及模型运行的机器的技术规格(核心、RAM 等),使用这些来优化脚本。详情请参阅“说明”。

兼容性 

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

原始版本 

21.0

说明 

对于当前搜索结果中的每个记录,此脚本步骤将源字段中的值发送到指定的模型,以转换为保存在目标字段中的嵌入向量。

如何使用嵌入向量的一个例子是执行语义查找脚本步骤,它可以查询此脚本步骤或插入嵌入脚本步骤产生的向量数据。

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

对于参数选项,如果需要,可以使用 JSON 对象中的以下键和值来调整此脚本步骤的行为。如果未指定密钥或未使用参数选项,则使用默认值。

参数键

说明

数据类型1

默认值

值范围

仅限 OpenAI

MaxRecPerCall

每次 API 调用要处理的最大记录数量

JSONNumber

20

1 到 500

MaxRetryPerWorker

API 调用失败时重试的最大次数

JSONNumber

5

1 到 100

MaxWaitPerRetry

OpenAI API 调用之间的最长等待时间(以毫秒为单位)。仅当 OpenAI 每分钟收到太多请求时才使用。在这种情况下,此脚本步骤的 OpenAI API 调用之间最长等待 MaxWaitPerRetry。如果等待时间超过此最大值,此脚本步骤将停止并返回错误。

JSONNumber

60,000

20 到 3,600,000

TruncateTokenLimit

TruncateEnabled 打开时从源字段中截断输入的标记数量。

JSONNumber

8,185

0 到 100,000

TruncateEnabled

1 (true) 在向 OpenAI 发送之前,从来源字段中截断输入到 TruncateTokenLimit

注释  如果输入被截断,执行语义查找可能会提供不太准确的结果。

JSONNumber

1

0 或 1

  1. 如果使用 JSONSetElement函数创建 JSON 对象,请使用指示的常量来设置 type 参数。

例如,此 JSON 对象设置参数选项中的所有键:

复制
{
    "MaxRecPerCall" : 40,
    "MaxRetryPerWorker" : 10,
    "MaxWaitPerRetry" : 300000,
    "TruncateTokenLimit" : 4000,
    "TruncateEnabled" : 1
}

注释 

  • 为了定期自动更新托管 FileMaker Pro 文件中的嵌入向量,您可以在主机上设置一个时间表,以在没有用户交互的情况下运行 FileMaker 脚本。请参阅 FileMaker Server 帮助FileMaker Cloud 帮助中的 FileMaker 脚本时间表。

示例 1

配置 AI 账户,转到会议详细信息布局,显示所有记录,然后在 Meetings::Note 字段中获取文本的嵌入向量,并将其作为二进制数据存储在 Meetings::Note_Embedding 容器字段中。由于替换目标内容选项已打开,因此即使已经包含数据,Meetings::Note_Embedding 也会更新。

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

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

在搜索结果中插入嵌入 [ 账户名称: "my-account" ; 嵌入模型: "text-embedding-3-small" ; 源字段: Meetings::Note ; 目标字段: Meetings::Note_Embedding ; 替换目标内容 ]

示例 2 

配置 AI 账户,转到“会议详细信息”布局,然后找到 Meetings::Title 字段包含“状态”的记录。对于此搜索结果,获取 Meetings::Note 字段中文本的嵌入向量,如果没有数据(替换目标内容已关闭),将其作为二进制数据存储在 Meetings::Note_Embedding 容器字段中。另请设置参数选项,以增加每次调用的记录数、重试次数和重试之间的时间,并降低令牌限制。

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

转到布局 [ "会议详细信息" (会议) ; 动画: 无 ]
进入查找模式 [ 暂停: 关闭 ]
设置字段 [ Meetings::Status ; "完成" ]
执行查找 [ ]

在搜索结果中插入嵌入 [ 账户名称: "my-account" ; 嵌入模型: "text-embedding-3-small" ; 源字段: Meetings::Note ; 目标字段: Meetings::Note_Embedding ; 
参数: JSONSetElement ( "" ;
    ["MaxRecPerCall" ; 40 ; JSONNumber] ; 
    ["MaxRetryPerWorker" ; 10 ; JSONNumber] ; 
    ["MaxWaitPerRetry" ; 300000 ; JSONNumber] ;
    ["TruncateTokenLimit" ; 4000 ; JSONNumber] ;
    ["TruncateEnabled" ; 1 ; JSONNumber]
) ]

示例 3

为自定义模型提供商配置 AI 账户,转到会议详细信息布局,显示所有记录,然后对于每个记录使用图像嵌入模型在 Meetings::Image 容器字段中获取图像的嵌入向量,并将其作为二进制数据存储在 Meetings::Image_Embedding 容器字段中。

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

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

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