如何让大模型理解用户意图,并且调用工具?
目前可以通过spring ai连接大模型,使用模型的能力,理解用户意图,并且调用工具。
一、增加组件
修改pom.xml文件,增加相关组件
<dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter</artifactId><version>1.0.0-M6.1</version></dependency>
二、增加配置
修改application.yml文件,增加配置
以下为阿里云百练平台申请API KEY地址
https://bailian.console.aliyun.com/?tab=model#/api-key
spring:ai:dashscope:api-key: 123456 # 替换申请的KEYopenai:chat:options:model: qwen-plustemperature: 0.7api-key: 123456 # 替换申请的KEYbase-url: https://dashscope.aliyuncs.com/compatible-mode
三、增加ChatConfig
@Configuration
public class ChatConfig {@Beanpublic ChatClient chatClient(ChatModel chatModel, ChatMemory chatMemory) {return ChatClient.builder(chatModel).build();}
}
四、增加工具
@Description,提示语很重要
@Component
public class UserStatisticsFunction {final Logger logger = LoggerFactory.getLogger(getClass());@AutowiredUserStatisticsService userStatisticsService;@Bean@Description("根据日期查询用户统计数据")public Function<LocalDate, UserStatisticsEntity> queryUserStatisticsByDate() {return date -> {logger.info("Function queryUserStatisticsByDate,date={}", date);DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");String dateString = date.format(formatter);logger.info("Function queryUserStatisticsByDate,dateString={}", dateString);UserStatisticsEntity entity = this.userStatisticsService.queryUserStatisticsByDate(dateString);if (entity == null) {return null;}return entity;};}
}
五、增加接口
把工具关联到chatClient,让大模型评估是否需要调用工具
@PostMapping("/chat")public ResponseEntity<Object> chat(@RequestBody ChatDto chatDto) {try {logger.info("@RequestBody={}", chatDto);String result = this.chatClient.prompt().user(chatDto.getContent()).tools("queryUserStatisticsByDate").call().content();logger.info("result={}", result);return ResponseEntity.ok(ResponseDto.success("ok", result));} catch (Exception e) {return ResponseEntity.badRequest().body(ResponseDto.error(e.getMessage()));}}
六、测试验证
下图是一个demo页面,通过聊天的方式,给大模型发送自然语言,查询数据
下图是数据库的测试数据样例。
至此,一个能让大模型理解用户意图,并且调用工具的功能就已实现。
总结
如何让大模型理解用户意图,并且调用工具?
可以使用spring ai连接大模型来实现,具体有如下六个步骤。
第一、增加组件
第二、增加配置
第三、增加ChatConfig
第四、增加工具
第五、增加接口
第六、测试验证
通过上面六个步骤,一个简单的大模型调用工具的功能就完成了。
最后因本人能力有限,有什么不对的地方望各位大佬指出好让我改进,多多包含,谢谢大家。