|
如何用自然语言查询(或问答)本体对象的信息? 本质上Palantir AIP Logic提供了三种查询(或问答)本体对象信息的方式。 第一种:在AIP Logic中通过语义搜索block+LLM块实现AI搜索。 第二种:在Ontology上定义query,然后在AIP Logic的LLM块上通过Query Objects工具调用实现AI搜索。 第三种:在AIP Logic的LLM块上直接调用Query Objects工具通过LLM自动生成查询条件完成AI搜索。 另外,在AIP Agent studio中也可以在大模型的工具调用中配置调用Query Objects工具。原理和上面类似。 在Palantir AIP Logic中,配置Use LLM块里的Query Objects工具是连接LLM与Palantir Ontology的核心步骤。这个功能允许LLM根据用户的自然语言问题,自动生成过滤条件,从本体中检索数据,而不是仅仅依靠预训练的知识。 在使用query objects工具时,有一个重要点:本体字段的元数据信息也非常重要。我们给本体字段增加了一个描述信息,这个描述信息有助于LLM更好的理解本体属性的语境。
为什么需要配置Query Objects? LLM本身没有企业私有数据。通过配置这个工具,实际上是给了LLM一个搜索引擎权限。 (1)输入:用户的自然语言(例如:“帮我找出所有状态为‘紧急’且未处理的工单”)。 (2)LLM的工作:它分析这句话,决定调用Query Objects工具,并生成结构化的过滤参数(例如:Status='Urgent',Resolution='Unresolved')。 (3)AIP的工作:执行查询,返回对象列表。 (4)结果:LLM拿到数据,生成最终回答。
详细配置步骤 在AIP Logic的编辑器中,进入Logic流程,找到或添加一个Use LLM节点。 第一步:启用工具(EnableTools) 在Use LLM的配置面板中,找到Tools部分,点击添加工具。会看到Query Objects的选项。 第二步:配置Query Objects 当选择了查询对象的工具后,需要进行以下关键配置: 这是最重要的安全和上下文边界设置。 (1)配置项:需要明确勾选LLM允许访问哪些Object Types(例如Customer,Order,Product)。 (2)逻辑:如果不勾选Employee对象,LLM就永远无法查询员工信息,即使它想这么做。 (3)只添加当前业务场景真正需要的对象类型,以减少干扰并提高安全性。 对于选中的每个ObjectType,需要定义哪些Properties(属性)是可见的。 (1)AllProperties:简单粗暴,但可能会消耗大量Token。 (2)SpecificProperties:推荐做法。只勾选LLM做判断或回答问题所需的字段(如Name,ID,Status,Description)。如果LLM需要根据创建时间进行过滤,必须勾选CreatedTime属性,否则它无法生成针对该字段的查询条件。需要注意,能不用的大字段(大文本、日志、附件)一律不要勾选,防止tokens爆表。 某些配置允许指定查询的起始范围。 Global(Default):LLM可以在整个本体库中搜索该类型的对象。 Scoped(局部):可以将上一步骤(如前一个Block)输出的一个ObjectSet作为输入。限制LLM只能在这个子集里进行二次筛选。 第三步:工具描述与上下文(ToolDescription) LLM依靠描述来决定何时调用工具。 自动生成:AIP通常会根据对象类型的名称自动生成描述(例如:“SearchforCustomerobjectsbasedonproperties...”)。 手动优化:如果对象名称很晦涩(如Obj_001),需要手动修改工具描述,告诉LLM:“这是客户数据表,包含客户等级和联系方式”。
下面是一个例子 你是一个企业内部订单分析助手,可以通过一个名为「QueryCustomerOrders」的工具,在本公司的本体(Ontology)中查询订单对象。 【工具能力说明】 1. 工具查询的对象类型为:[ERP]CustomerOrder。 2. 你只能访问以下字段: id:订单唯一标识 customerName:客户名称 status:订单状态,例如"OPEN"、"CLOSED" totalAmount:订单金额(货币单位:人民币) createdAt:订单创建时间 3. 工具可以基于这些字段进行过滤、排序和限制返回数量。 4. 工具最多返回10条记录。除非用户特别要求更多,否则你应默认请求不超过10条。 5. 如果查询结果为空,你必须向用户说明“未查询到符合条件的订单”,并给出建议的下一步操作,而不是编造数据。 【使用工具的业务原则】 1. 用户如果问「有哪些符合XXX条件的订单?」「最近的高价值订单有哪些?」等问题,你应优先调用QueryCustomerOrders工具,而不是凭空猜测。 2. 在调用工具前,请先用自然语言在心里整理清楚筛选条件,包括: - 时间范围(例如最近30天) - 金额范围(例如totalAmount≥10000) - 状态(例如status="OPEN") 3. 如果用户没有给出条件,你可以先简要说明你可以按哪些条件查询,然后给出一个合理的默认条件并执行查询(例如:最近30天内金额最高的前5个订单)。 【输出要求】 1. 在向用户回答时,请使用简明的中文。 2. 对于列表结果,建议使用有序列表或表格形式展示,至少包含:id、customerName、totalAmount、createdAt。 3. 对于金额,请保留两位小数。 4. 不要杜撰不存在的订单或字段。
LLM如何使用这个配置 配置完成后,不需要写具体的SQL或Filter代码,交互流程如下: (1)Prompt阶段:在Prompt框中写道:“Userquestionis:{{variable}}”。 (2)推理阶段:LLM看到用户问:“找一下旧金山的客户”。 (3)工具调用阶段:LLM检查可用工具,发现配置了Customer对象的Query工具。它查看Customer对象的属性,发现有一个City属性。LLM生成一个JSON指令,类似于:calltool:search_customer(filter:{property:"City",value:"SanFrancisco"})。 (4)执行与返回:AIP Logic后端执行这个查询,返回10个客户对象的JSON数据(包含配置可见的属性)。 (5)生成回答:LLM读入这10个对象的数据,回复用户:“我找到了10个位于旧金山的客户,包括A公司和B公司...”。
高级配置:Query Functions(本体查询函数) 本质上是使用另一个工具callfunction。除了通用的“Search/Query Objects”,AIP Logic还允许调用在Ontology中预定义的Queries(SavedQueries)。如果的查询逻辑非常复杂(例如:需要多层关联、聚合计算、或者特定的业务逻辑筛选),单纯靠LLM生成过滤条件可能不准。此时应使用OntologyQueries,在OntologyManager中创建Query:编写一个带参数的函数,例如GetHighRiskVendors(region,min_spend)。 在AIP Logic中配置:在"Use LLM"工具栏选择该Query。参数映射需要告诉LLM如何填充region和min_spend这两个参数。通常LLM会根据上下文自动提取这些值。
在配置Query Objects时有一些注意事项 (1)Token限制:Query Objects返回的结果会被塞回LLM的上下文窗口。如果查询返回了500个对象,每个对象有50个属性,很容易撑爆ContextWindow。所以解决方法是在配置中设置Limit(返回数量限制,如Top10或Top20)。 (2)字段命名:Ontology中的字段名最好是自然语言友好的(例如phone_number优于p_n_v2)。如果字段名很烂,LLM会很难理解如何过滤。如果无法改名,请在Logic变量映射中添加注释。 (3)处理空结果:在Prompt中要指示LLM:“如果查询对象工具返回空结果,请回答‘未找到相关数据’,不要编造数据。” (4)权限(ACLs):AIP Logic运行时是遵循数据权限的。如果运行Logic的用户没有权限查看某些对象,Query Objects工具也会返回空,这可能会让LLM感到困惑。 配置Query Objects实际上是在做数据暴露控制。不需要告诉LLM如何查询(它自己懂逻辑),需要做的是告诉它“可以查哪些表(Object Types)”以及“可以看哪些列(Properties)”。 在Agent studio中的LLM工具调用配置大致类似。 详解Palantir AIP中开发Agent应用的精髓详解Palantir AIP的两个利器:LLM和Tool详解用Palantir AIP几分钟搭建一个文档智能搜索应用详解Palantir AIP的三个Flow:Dataflow、AI flow、Workflow |