执行 RAG 操作

向 RAG 账户指定的 AI 模型服务器上的 RAG 空间发送提示,或从 RAG 空间中添加和删除数据。

选项 

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

  • 空间 ID 是一个文本表达式,用于指定在指定的 RAG 账户中工作的 RAG 空间的唯一 ID。

  • 操作指定在 RAG 空间上执行的操作类型。此选项控制脚本步骤中其他选项的可用性。选择:

    • “添加数据”将文档(文本数据或 PDF 文件)添加到 RAG 空间。

    • “发送提示”发送提示来查询 RAG 空间并获得 AI 生成的响应。

    • “删除数据”从 RAG 空间中删除文档。

选项仅在“操作”为“添加数据”时才可用:

  • “RAG 数据”指定要添加到 RAG 空间的文档:

    • “来自文本”通过文本表达式直接添加文本。

    • “来自文件”添加给定路径的 PDF 文件,同步传输。

    • “来自文件(Async)”添加给定路径的 PDF 文件,异步传输(最适合大文件)。

    • “来自容器”从容器字段添加 PDF 文件,同步传输。

    • “从容器(Async)”从容器字段添加 PDF 文件,异步传输(最适合大型文件)。

  • “输入文件”指定 PDF 文件的一个或多个路径列表。脚本步骤会搜索列表,并添加它成功找到的第一个 PDF 文件。路径必须使用 image 路径前缀之一。请参阅创建文件路径。

  • “容器字段”指定存储要添加的 PDF 文件的容器字段。

选项仅当“操作”为“发送提示”时才可用:

  • “发送提示”的值是自然语言用户提示或问题的文本表达式。

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

  • 模型是要使用的文本生成模型的名称。将模型名称指定为文本表达式。有关支持的模型,请参阅 FileMaker 技术规格。

  • “流”控制响应的交付方式:

    • 开:检索响应并进行递增传递(逐字或逐短语)。这可让 FileMaker 客户端响应更快。

    • 关:在可用之前检索整个回复。这可能会导致 FileMaker 客户端在等待完整回复时出现无响应。

  • 提示模板名称指定使用配置提示模板脚本步骤配置的自定义提示模板的名称。此选项用于设计额外的提示,以帮助从 AI 模型获得最佳回复。

  • 响应目标指定要存储模型响应的字段或变量。

  • 参数是 JSON 对象的文本表达式,由模型提供商支持的其他参数的键值对组成。例如:{"温度": 0.7,“种子”:42}.有关受支持参数的键名称及其有效范围,请参阅模型提供商的文档。

    context_prompt 键是一个特殊参数,允许您在主提示之前向模型注入额外的指令或上下文。例如:{"context_prompt": “将'今天'视为12/01/2025”}。

选项仅当“操作”为“删除数据”时才可用:

  • “参数”是包含 id 键的 JSON 对象的文本表达式,其值是要从指定的 RAG 空间中删除的文档 ID 数组。例如,{"id" : [2, 3, 5, 7]}。要获取 RAG 空间中所有文档的 ID,请使用 GetRAGSpaceInfo函数。请参阅示例 3。

兼容性 

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

原始版本 

22.0

说明 

此脚本步骤允许您在 FileMaker Server 提供的 AI 模型服务器上创建和管理文档(文本数据和 PDF 文件)的知识缓存。然后,您可以使用一种名为检索增强生成 (RAG) 的技术来利用此缓存。运用这种技术,脚本步骤会将一个提示或问题,连同从知识缓存中检索到的最相关事实信息一并发送给 AI 模型,从而提高模型响应的可靠性和准确性。

“操作”选项决定此脚本步骤的作用:

操作 执行操作

添加数据

从指定的文档中添加 RAG 数据:文本(作为任何文本表达式)、按路径添加 PDF 文件或者来自当前或相关记录中的容器字段的 PDF 文件。流程遵循以下步骤:

  1. 脚本步骤将文档发送到 AI 模型服务器。

    如果添加 PDF 文件,脚本步骤将同步或异步发送文件,具体取决于“RAG 数据”选项。如果同步发送,在文件传输完成之前,脚本不会继续下一步。如果异步发送,则在文件传输过程中(最适合大文件),脚本将继续进行下一步,允许 FileMaker 客户端保持对用户交互的响应。

  2. AI 模型服务器为文档分配一个 ID。如果是 PDF 文件,它只从 PDF 文件中提取文本;如果是文本文档,它会将文本文档分解成块。然后,它使用为服务器上的 RAG 配置的文本嵌入模型获取所有块的嵌入向量。

发送提示

将用户提示发送到 AI 模型服务器,从指定的 RAG 空间获取最相关的数据,然后将用户提示与提示模板和 RAG 内容一起发送到 AI 模型。流程遵循以下步骤:

  1. 脚本步骤会将由“发送提示”所指定的提示内容,以及“空间 ID”,一并发送至由“RAG 账户名称”所指定的 AI 模型服务器。

  2. AI 模型服务器获取提示的嵌入向量,在指定的 RAG 空间中对提示进行语义搜索,然后将 RAG 结果返回到脚本步骤。

    RAG 结果是以文本形式呈现的、来自 RAG 空间的前 N 个最相关的文档片段(N 可在 FileMaker Server Admin Console 中进行配置)。

  3. 脚本步骤将提示、提示模板、模型参数和 RAG 结果发送到 AI 账户名称和模型指定的模型。

  4. 模型返回脚本步骤存储在“响应目标”中的响应。

删除数据

从 RAG 空间中删除文档。如果在“参数”选项中指定,则仅删除指定文档;否则,RAG 空间中的所有文档都将删除。

注释  从 RAG 空间中删除文档无法撤销。请务必将原始文件保留在其他地方,以防您需要再次添加它们。

注释 

  • 在使用此脚本步骤之前,必须使用配置 RAG 账户脚本步骤配置 RAG 账户。

  • 对于“发送提示”操作,还必须使用配置 AI 账户脚本步骤配置 AI 账户。

  • 使用“添加数据”操作无法处理具有加密或密码保护的 PDF 文件。

  • RAG 空间是持久的,将保留其文档直到使用“删除数据”操作明确删除。

  • 如果您添加与 RAG 空间中已有的文件名相同的 PDF 文件,则会删除现有的 PDF 文件,并使用新的文档 ID 添加新的 PDF 文件。无论是通过路径还是容器字段添加 PDF 文件,这种行为都是一样的。

  • 如果您指定提示模板名称,则此脚本步骤将使用通过配置提示模板脚本步骤设置的模板。提示模板可以使用 :question:(替换为“发送提示”值)和 :context:(替换为“参数”中的 context_prompt 参数)等常量。

  • AI 响应的质量取决于模型以及添加到 RAG 空间的文件的相关性和质量。

  • 在 FileMaker WebDirect 中,当此脚本步骤使用“添加数据”操作,并且“RAG 数据”为“来自文件”或“来自文件(Async)”时,将打开“插入”对话框,供用户选择要上传的 PDF 文件;“输入文件”选项被忽略。

示例 1 - 将文本添加到 RAG 空间

将文本内容添加到客户知识库的 RAG 空间中。

复制
配置 RAG 账户 [ RAG 账户名称: "customer-support-rag-account" ; 端点: "https://myserver.example.com/llm/v1/" ; API 密钥: "eyJh..." ; 验证 SSL 证书 ]

执行 RAG 操作 [ RAG 账户名称 : "customer-support-rag-account" ; 空间 ID: "knowledge-base" ; 操作: 添加数据 ; RAG 数据: 来自文本 ; "处理退货与换货的客户支持政策及流程..." ]

示例 2-发送查询 RAG 空间的提示

发送提示以查询与示例 1 相同的 RAG 空间,并将响应存储在字段中。

脚本设置 RAG 账户和 AI 账户使用 FileMaker Server 提供的 AI 模型服务器。当它发送提示时,脚本将自定义参数发送到模型以生成响应,并将响应流式传输到字段。

复制
配置 RAG 账户 [ RAG 账户名称: "customer-support-rag-account" ; 端点: "https://myserver.example.com/llm/v1/" ; API 密钥: Global::RAG_API_Key ; 验证 SSL 证书 ]

配置 AI 账户 [ 账户名称: "AI_Model_Server" ; 模型提供商: 自定义 ; 端点: "https://myserver.example.com/llm/v1/" ; API 密钥: Global::Text_Gen_API_Key ; 验证 SSL 证书 ]

执行 RAG 操作 [ RAG 账户名称: "customer-support-rag" ; 空间 ID: "knowledge-base" ; 操作: 发送提示 ; 发送提示: "有缺陷的产品的退货政策是什么?" ; AI 账户名称: "AI_Model_Server" ; 模型: Global::ModelName ; 流: 打开 ; 响应目标: Customer_Support::AI_Response ; 参数: "{\"temperature\": 0.3, \"max_tokens\": 500}" ]

Customer_Support::AI_Response 字段中可能的结果以“有缺陷产品的退货政策允许您在 14 个日历日内退货”开头。

示例 3 - 从 RAG 空间中添加和删除 PDF 文件

将名为 Policies.pdf 的 PDF 文件添加到 RAG 空间中,然后将其删除。

配置在 AI 模型服务器上使用的 RAG 账户后,脚本通过指定文件路径将 Policys.pdf 文件添加到 RAG 空间中。

在删除文件之前,脚本必须找到添加文件时分配的文档 ID。首先,脚本使用 GetRAGSpaceInfo函数来获取有关 RAG 空间的信息。然后,对于 $id 变量,它获取 values 数组,并使用 While 循环来查找其文件名密钥为“Policies.pdf”的元素,返回该元素的 id 值。

在将 $idArrayToRemove 设置为所需的 JSON 以指定 $id 后,脚本调用“执行 RAG 操作”,通过将“参数”选项设置为 $idArrayToRemove 来删除数据。

复制
配置 RAG 账户 [ RAG 账户名称: "customer-support-rag-account" ; 端点: "https://myserver.example.com/llm/v1/" ; API 密钥: Global::RAG_API_Key ; 验证 SSL 证书 ]

执行 RAG 操作 [ RAG 账户名称: "customer-support-rag-account" ; 空间 ID: "knowledge-base" ; 操作: 添加数据 ; RAG 数据: 来自文件 ; "Policies.pdf" ]

设置变量 [ $ragSpaceInfo ; 值: GetRAGSpaceInfo ( "customer-support-rag-account" ; "knowledge-base" ) ]

设置变量 [ $id ; Value: 
  Let ( [
    json = $ragSpaceInfo ;
    values = JSONGetElement ( json ; "values" ) ;
    arrayCount = ValueCount ( JSONListKeys ( values ; "" ) ) ;
    
    search = While ( 
      [ i = 0 ; result = "" ] ; 
      
      i < arrayCount and IsEmpty ( result ) ; 
      
      [ 
        filename = JSONGetElement ( values ; "[" & i & "].filename" ) ;
        result = Case ( 
          filename = "Policies.pdf" ; 
          JSONGetElement ( values ; "[" & i & "].id" ) ; 
          "" 
        ) ;
        i = i + 1 
      ] ; 
      
      result 
    )
  ] ;

  search
  )
]

设置变量 [ $idArrayToRemove ; Value: "{\"id\": [" & $id & "]}" ]

执行 RAG 操作 [ RAG 账户名称: "customer-support-rag-account" ; 空间 ID: "knowledge-base" ; 操作: 删除数据 ; 参数: $idArrayToRemove ]