注意:以下翻译的准确性尚未经过验证。这是使用 AIP ↗ 从原始英文文本进行的机器翻译。
要使用Palantir提供的语言模型,必须先在您的注册中启用AIP。您还必须拥有使用AIP开发者功能的权限。使用自定义模型?请查看使用自定义模型创建语义搜索工作流。
本页说明了使用Palantir提供的嵌入模型构建概念性的端到端语义搜索工作流的过程。
首先,您需要生成嵌入并将其存储在具有vector
类型的对象类型中。然后,您可以在Workshop中设置语义搜索工作流,搭建一个AIP Agent增强的工作流,或创建一个自定义语义搜索函数以用于Workshop和AIP Logic。
前提条件:
选项:
我们将使用Pipeline Builder将数据集中的文本嵌入为向量,使用Text to Embeddings表达式。该表达式接收一个字符串并使用一个Palantir提供的模型将其转换为向量 - 在我们的案例中使用text-embedding-ada-002
嵌入模型。
然后可以将这些嵌入作为向量属性添加到Ontology中。
如果您希望对使用Palantir提供的模型生成嵌入有更多控制,请参见Python变换中的语言模型。
在Workshop中配置一个KNN对象集是构建语义搜索工作流的简单无代码方法。
+ On a property
选项,然后从菜单中的属性列表中选择您的嵌入属性。在此面板中,您可以配置:
有关更自定义的语义搜索逻辑,请参见函数部分。
在AIP Agent Studio中创建的AIP Agent非常适合起始跨对象的语义搜索,因为它们不需要任何代码。了解更多关于结合语义搜索以更好控制功能性。
按照入门指南中的说明创建一个AIP Agent,并添加Ontology上下文或一个Ontology语义搜索工具。此初始设置将使您能够请求AIP Agent进行对象的语义搜索。
我们可以创建一个typescript代码库并创建一个函数来查询我们的对象类型。总体目标是能够接收一些用户输入,使用与之前相同的Palantir提供的模型生成向量,然后对我们的对象类型进行KNN搜索。有关如何导入Palantir提供的模型的更多信息,请查看函数中的语言模型。
在下面的代码片段中,将每个ObjectApiName
实例替换为您的唯一ObjectType。请注意,标识符有时可能以小写字母objectApiName
出现。
在继续之前,确保在您的Functions代码库中的functions.json
文件中存在条目"enableVectorProperties": true
。如果此条目不存在,请将其添加到functions.json
并提交更改以继续。如需进一步协助,请联系您的Palantir代表。
Copied!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
import { Function, Integer } from "@foundry/functions-api"; import { Objects, ObjectApiName } from "@foundry/ontology-api"; import { TextEmbeddingAda_002 } from "@foundry/models-api/language-models" // 定义一个名为 MyFunctions 的类 export class MyFunctions { // 使用装饰器标记该方法为一个函数 @Function() // 定义一个异步方法 findRelevantObjects,用于查找相关对象 public async findRelevantObjects( query: string, // 输入查询字符串 kValue: Integer, // 需要返回的对象数量 ): Promise<ObjectApiName[]> { // 返回一个 ObjectApiName 数组的 Promise // 如果查询字符串为空,返回空数组 if (query.length < 1) { return [] } // 使用 TextEmbeddingAda_002 模型创建查询字符串的嵌入 const embedding = await TextEmbeddingAda_002.createEmbeddings({inputs: [query]}).then(r => r.embeddings[0]); // 在对象中查找与嵌入最相似的对象,并按相关性排序,返回前 kValue 个对象 return Objects.search() .objectApiName() .nearestNeighbors(obj => obj.embeddings.near(embedding, {kValue: kValue})) .orderByRelevance() .take(kValue); } }
此时,我们已经有一个可以运行语义搜索以使用自然语言查询Objects的函数。记得发布函数以便该函数可以在Foundry内的任何地方使用。
kValue
设置为您希望返回的结果数量,受指定限制的约束。将已发布的函数作为工具添加到AIP Logic中。使用类似以下的提示指示语言模型使用该工具:
使用fetchRelevantObjects工具并将kValue设置为5,以找到最相关的Objects。使用工具时,记得在查询周围添加引号。