Function Calling入门
什么是Function Calling
Function Calling = 大模型主动调用你写好的函数 / 接口,完成真实任务的能力。

不过,springAI在这个依然做了封装,它利用tool类把循环的部分封装到一块,所以我们只需要把我们的接口写到tool里即可实现传统编程和大模型的搭配使用

实现Function Calling

初始化客户端
这里的客户端是在之前的基础上增加了tool的功能
什么是tool
我们要实现AI+传统编程相结合的功能,就要使用AI的响应结果;把响应结果作为入参输入到传统的方法中。
那么tool就是把响应结果注入到传统编程的参数中的过程,或者可以理解为一个注入类。
▼java复制代码@Bean public ChatClient serviceChatClient(DashScopeChatModel model, ChatMemory chatMemory, CourseTools courseTools) { return ChatClient .builder(model)// 对接阿里云百炼的大模型 .defaultSystem(SystemConstants.SERVICE_SYSTEM_PROMPT)//系统AI设定 .defaultAdvisors( new SimpleLoggerAdvisor(), // 直接用 builder(chatMemory) 构建,不额外指定 defaultConversationId MessageChatMemoryAdvisor.builder(chatMemory)// 记忆 .build() ) .defaultTools(courseTools)//工具类 .build(); }
那么tool就是把响应结果注入到传统编程的参数中的过程,或者可以理解为一个注入类。
▼java复制代码@Bean public ChatClient serviceChatClient(DashScopeChatModel model, ChatMemory chatMemory, CourseTools courseTools) { return ChatClient .builder(model)// 对接阿里云百炼的大模型 .defaultSystem(SystemConstants.SERVICE_SYSTEM_PROMPT)//系统AI设定 .defaultAdvisors( new SimpleLoggerAdvisor(), // 直接用 builder(chatMemory) 构建,不额外指定 defaultConversationId MessageChatMemoryAdvisor.builder(chatMemory)// 记忆 .build() ) .defaultTools(courseTools)//工具类 .build(); }
如何编写一个TOOL
SpringAI已经封装好了注解,我们利用注解就能把AI的返回结果作为参数注入到方法中
@Tool注解:给AI作为一个标记,利用()中的description的描述来告诉AI这个方法的作用,比如下面的这个方法当AI需要查询课程的时候他就会通过description调用这个方法。
@ToolParam:工具类的参数,也就是AI返回结果在方法中充当的参数。
比如我告诉AI:我是大专生,我想学编程,帮我查询响应的课程。
AI会通过@ToolParam将“大专”和“编程”作为参数去查询queryCourse方法
▼java复制代码@Slf4j @Component public class CourseTools { @Autowired private ICourseService courseService; @Autowired private ISchoolService schoolService; @Autowired private ICourseReservationService reservationService; @Tool(description = "根据条件查询课程") public List<Course> queryCourse(@ToolParam(description = "查询的条件", required = false) CourseQuery query) { if (query == null) { return courseService.list(); } log.info("当前查询课程的条件为:{}",query); QueryChainWrapper<Course> wrapper = courseService.query() .eq(query.getType() != null, "type", query.getType()) // type = '编程' .le(query.getEdu() != null, "edu", query.getEdu());// edu <= 2 log.info("查询接口为:{}",wrapper); if (query.getSorts() != null && !query.getSorts().isEmpty()) { for (CourseQuery.Sort sort : query.getSorts()) { wrapper.orderBy(true, sort.getAsc(), sort.getField()); } } return wrapper.list(); }
同理,通过我们给AI的提示词,AI就可以调用我们的接口实现功能(预约功能)
▼java复制代码@Tool(description = "生成预约单,返回预约单号") public Integer createCourseReservation( @ToolParam(description = "预约课程") String course, @ToolParam(description = "预约校区") String school, @ToolParam(description = "学生姓名") String studentName, @ToolParam(description = "联系电话") String contactInfo, @ToolParam(description = "备注", required = false) String remark) { CourseReservation reservation = new CourseReservation(); reservation.setCourse(course); reservation.setSchool(school); reservation.setStudentName(studentName); reservation.setContactInfo(contactInfo); reservation.setRemark(remark); reservationService.save(reservation); return reservation.getId(); }
评论
问答助学
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
