🚀 PIG AI 新版来袭:AI能力全面升级! 点击了解一下?
public interface FunctionAssistant { String chat(String message); }
@Bean public FunctionAssistant functionAssistant(ChatModel chatModel) { // 工具说明 ToolSpecification ToolSpecification toolSpecification = ToolSpecification.builder() .name("invoice_assistant") .description("根据用户提交的开票信息,开具发票") .parameters(JsonObjectSchema.builder() .addStringProperty("companyName", "公司名称") .addStringProperty("dutyNumber", "税号") .addStringProperty("amount", "金额,保留两位有效数字") .addEnumProperty("temperatureUnit", List.of("CELSIUS", "FAHRENHEIT")) .required("companyName") // the required properties should be specified explicitly .build()) .build(); // 业务逻辑 ToolExecutor ToolExecutor toolExecutor = (toolExecutionRequest, memoryId) -> { String arguments1 = toolExecutionRequest.arguments(); System.out.println("arguments1 =>>>> " + arguments1); return "开具成功"; }; return AiServices.builder(FunctionAssistant.class) .chatModel(chatModel) .tools(Map.of(toolSpecification, toolExecutor)) .tools(new InvoiceHandler()) .build(); }
@Tool
ToolSpecification
@Slf4j public class InvoiceHandler { @Tool("根据用户提交的开票信息进行开票") public String handle(String companyName, String dutyNumber,@P("金额保留两位有效数字") String amount) { log.info("companyName =>>>> {} dutyNumber =>>>> {} amount =>>>> {}", companyName, dutyNumber, amount); return "开票成功"; } }
@Bean public FunctionAssistant functionAssistant(ChatModel chatModel) { return AiServices.builder(FunctionAssistant.class) .chatModel(chatModel) .tools(new InvoiceHandler()) .build(); }
ToolProvider
ToolProvider toolProvider = (toolProviderRequest) -> { if (toolProviderRequest.userMessage().singleText().contains("booking")) { ToolSpecification toolSpecification = ToolSpecification.builder() .name("invoice_assistant") .description("根据用户提交的开票信息,开具发票") .parameters(JsonObjectSchema.builder() .addStringProperty("companyName", "公司名称") .addStringProperty("dutyNumber", "税号") .addStringProperty("amount", "金额,保留两位有效数字") .addEnumProperty("temperatureUnit", List.of("CELSIUS", "FAHRENHEIT")) .required("companyName") // the required properties should be specified explicitly .build()) .build(); return ToolProviderResult.builder() .add(toolSpecification, toolExecutor) .build(); } else { return null; } };