递归顾问

什么是递归顾问?

顾问递归递归顾问是一种特殊类型的顾问,可以多次循环下游顾问链。 当你需要反复调用LLM直到满足某个条件时,这种模式非常有用,例如:spring-doc.cadn.net.cn

CallAdvisorChain.copy(CallAdvisor 之后)方法是实现递归顾问模式的关键工具。 它创建了一个新的顾问链,只包含原链中指定顾问之后的顾问 并允许递归顾问根据需要调用该子链。 这种方法确保了:spring-doc.cadn.net.cn

内置递归顾问

Spring AI 提供了两个内置递归顾问,展示了这一模式:spring-doc.cadn.net.cn

工具呼叫顾问

工具呼叫顾问将工具调用循环作为顾问链的一部分实现,而非依赖模型内部工具的执行。这使得链中其他顾问能够拦截并观察工具调用过程。spring-doc.cadn.net.cn

主要特点:spring-doc.cadn.net.cn

  • 通过设置禁用模型的内部工具执行setInternalToolExecutionEnabled(false)spring-doc.cadn.net.cn

  • 循环于顾问链,直到没有更多工具调用存在spring-doc.cadn.net.cn

  • 支持“直接返回”功能——当工具执行returnDirect=true它会中断工具调用循环,并将工具执行结果直接返回给客户端应用程序,而不是返回给LLMspring-doc.cadn.net.cn

  • 使用callAdvisorChain.copy(this)为递归调用创建子链spring-doc.cadn.net.cn

  • 包含空安全检查,以处理聊天响应可能为空的情况spring-doc.cadn.net.cn

var toolCallAdvisor = ToolCallAdvisor.builder()
    .toolCallingManager(toolCallingManager)
    .advisorOrder(BaseAdvisor.HIGHEST_PRECEDENCE + 300)
    .build();

var chatClient = ChatClient.builder(chatModel)
    .defaultAdvisors(toolCallAdvisor)
    .build();

返回直接功能

“直接返回”功能允许工具绕过LLM,直接将结果返回给客户端应用程序。这在以下情况下非常有用:spring-doc.cadn.net.cn

当工具执行具有returnDirect=true工具呼叫顾问将:spring-doc.cadn.net.cn

  1. 按常规执行工具调用spring-doc.cadn.net.cn

  2. 检测返回直达旗帜工具执行结果spring-doc.cadn.net.cn

  3. 打破工具调用循环spring-doc.cadn.net.cn

  4. 将工具执行结果直接返回给客户端应用程序,作为聊天回应以工具的输出为生成内容spring-doc.cadn.net.cn

结构化输出验证顾问

结构化输出验证顾问验证结构化的JSON输出与生成的JSON模式对照,并在验证失败时重试调用,最多可尝试指定次数。spring-doc.cadn.net.cn

主要特点:spring-doc.cadn.net.cn

var validationAdvisor = StructuredOutputValidationAdvisor.builder()
    .outputType(MyResponseType.class)
    .maxRepeatAttempts(3)
    .advisorOrder(BaseAdvisor.HIGHEST_PRECEDENCE + 1000)
    .build();

var chatClient = ChatClient.builder(chatModel)
    .defaultAdvisors(validationAdvisor)
    .build();