循序渐进 · 教学 · 用自定义模型做语义搜索 Custom models

当你必须用「自己的」嵌入模型时

这一篇讲怎么把非 Palantir 提供的嵌入模型接进语义搜索:用 Foundry 模型生成向量、建对象类型、再写函数做 KNN 检索。 原文也直言——这已不是推荐做法,先看清何时才值得。

全部目录 ← 上一篇 用自定义模型做语义搜索 下一篇 →
原文 Use custom models to create a semantic search workflow 预计阅读 11 分钟 互动演示 + 6 道测验
本文来源 · Source 内容整理自 Palantir Foundry 官方文档:
https://www.palantir.com/docs/foundry/ontology/using-custom-models-to-create-a-semantic-search-workflow/
原始标题:Use custom models to create a semantic search workflow

一句话速览

当你必须用「自己的」嵌入模型时:这一篇讲怎么把非 Palantir 提供的嵌入模型接进语义搜索:用 Foundry 模型生成向量、建对象类型、再写函数做 KNN 检索。

1 这是给「自带模型」的人看的
这篇教程面向使用非 Palantir 提供的嵌入模型的场景
2 用 Foundry 模型生成嵌入
从一份已解析好的数据集(含 Document_Content、Link 等元数据)出发,目标是给文本生成嵌入以便语义搜索
3 创建对象类型
有了含浮点向量列的数据集后,创建一个对象类型(文中名为 Document),并
4 写函数做 KNN 检索
最后一步是写一个函数:接收用户输入,用前面建好的 Live Modeling Deployment 生成查询向量,然后对该对象类型跑…
1

定位:这是给「自带模型」的人看的

原文开宗明义:自定义模型已不是推荐做法。

这篇教程面向使用非 Palantir 提供的嵌入模型的场景。原文第一句就给了一个重要提醒: 自定义模型这条路已经不再是推荐的工作流(no longer a recommended workflow), 建议优先看 Palantir 提供的模型清单与官方语义搜索教程。

先想清楚:除非你有「必须用自有模型」的硬理由(合规、数据不出域、已有自研模型), 否则上一页的官方模型方案更快、更省心。本篇的价值,在于让你知道「真要走自定义」时每一步做什么。

文中用一个「端到端的文档搜索服务」作例子:用 Foundry 的 modeling objective 把文档嵌入成向量、存入带 vector 属性的对象类型, 再写函数用自然语言查询它。

2

与官方模型方案:差异对照

同样的目标,不同的「模型从哪来」。

自定义模型
模型来源:你自己带入 需在 Foundry 导入/部署自有模型 要建 Live Modeling Deployment 供查询时嵌入 原文:已非推荐工作流
官方提供模型
模型来源:Palantir 提供 直接用 text-embedding-ada-002 等 Pipeline Builder 一键生成嵌入 更快起步、更省心

两条路最终都落到「带 vector 属性的对象类型 + KNN 检索」,差别主要在模型从哪来、谁部署。

3

步骤一:用 Foundry 模型生成嵌入

import 一个开源模型,用 transform 把文本列变成 embedding 列。

从一份已解析好的数据集(含 Document_ContentLink 等元数据)出发,目标是给文本生成嵌入以便语义搜索。

  • 原文示例用开源模型 all-MiniLM-L6-v2:一个通用文本嵌入模型,产出维度 384 的向量。
  • 这个模型可以被任何「输出与 Foundry Ontology vector 类型兼容的向量」的模型替换。
  • 模型需暴露一个 API:表格输入含一个 text 字符串列;表格输出含一个 embedding 浮点数列。
  • transform 跑完数据后返回 embedding,再把值转成 float 以匹配向量类型。
还要一个部署:除批量生成初始嵌入外,你还需要一个 Live Modeling Deployment, 用来针对「用户查询」实时生成嵌入去比对已有向量——且这个部署用的模型要和第一步一致。
4

步骤二:创建对象类型

把 embedding 建成 Vector 属性,并配好维度与相似度函数。

有了含浮点向量列的数据集后,创建一个对象类型(文中名为 Document),并:

  • embedding 属性设为 Vector 类型。
  • 配置两个值:
    • Dimension(维度):即 embedding 列里数组的长度(如 384)。
    • Similarity Function(相似度函数):两个对象的 embedding 之间计算距离的方法。

对象类型建好后,ObjectApiName(本例为 Document)会在配置页拿到,后续代码里用它指代该对象类型。

可替换项(value substitution):全流程里可一致替换的占位符还有 ModelApiNameOutputDatasetRidInputDatasetRidModelRid——保持每处一致即可。
5

步骤三:写函数做 KNN 检索

函数接收用户输入,用 live 部署生成向量,再跑 KNN。

最后一步是写一个函数:接收用户输入,用前面建好的 Live Modeling Deployment 生成查询向量, 然后对该对象类型跑 KNN 搜索(TSv1)

  • 函数把用户文本变成向量,再交给 nearestNeighbors 找最近邻对象。
  • 文中强调:Python 函数也支持模型函数与语义搜索,但本教程未给出 Python 示例。
  • 向量属性(vector properties)的修改,也可以由 Actions 和 Functions 来施加。
与官方方案的代码差异:官方方案里 TSv2 / Python 可把查询文本直接传给 nearestNeighbors; 自定义方案因为模型在你自己手里,通常要先调用你的 live 部署把文本转成向量,再去做近邻搜索。
6

动手演示:该用哪种方案?

给一个场景,判断该走「官方模型」还是「自定义模型」。

下面每个场景,点「用官方模型」或「用自定义模型」来作答。原文的核心立场是:自定义已非推荐, 只有「硬要用自有模型」时才值得——用这个标尺去判断。

一页带走

① 非推荐路径
自定义模型已非推荐,先确认「必须自有模型」。
② 生成嵌入
导入模型(如 all-MiniLM,dim 384),transform 产 embedding 列。
③ 建 Vector 对象
配 Dimension 与 Similarity Function,拿到 ObjectApiName。
④ live 部署+函数
建 Live Deployment 实时嵌查询,函数跑 KNN。

延伸阅读 · 相关页面

按主题横向跳转,不必顺着目录一篇篇读。

常见问题速答 · FAQ

关于「当你必须用「自己的」嵌入模型时」,读者最常问的几个问题。

定位:这是给「自带模型」的人看的是什么?
这篇教程面向使用非 Palantir 提供的嵌入模型的场景。原文第一句就给了一个重要提醒:自定义模型这条路已经不再是推荐的工作流(no longer a recommended workflow),建议优先看 Palantir 提供的模型清单与官方语义搜索教程…
步骤一:用 Foundry 模型生成嵌入是什么?
从一份已解析好的数据集(含 Document_Content、Link 等元数据)出发,目标是给文本生成嵌入以便语义搜索。
步骤二:创建对象类型是什么?
有了含浮点向量列的数据集后,创建一个对象类型(文中名为 Document),并。
步骤三:写函数做 KNN 检索是什么?
最后一步是写一个函数:接收用户输入,用前面建好的 Live Modeling Deployment 生成查询向量,然后对该对象类型跑 KNN 搜索(TSv1)。