当前位置:首页 >域名 >超实用!用FunctionCall实现快递AI助手 正文

超实用!用FunctionCall实现快递AI助手

来源:益强资讯优选   作者:IT科技类资讯   时间:2025-11-05 03:26:35

昨天晚上直播,超实我们用 RAG(Retrieval-Augmented Generation,用用检索增强生成)实现了数据库 AI 助手,实现今天我们准备换一个技术使用 function call 来实现快递 AI 助手。快递

执行效果

快递 AI 助手的助手业务逻辑很清晰,就是超实我通过 LLM 大语言模型的对话来查询我的快递详情,例如,用用我问 AI 我有几个“运送中”的实现快递,他把这些快递查询并展示出来,快递效果如下图所示:

图片

什么是助手 function call?

定义: Function Call(也称为 Tool Call)它允许大模型与一组 API 或工具进行交互,从而增强其功能。超实

也就是用用说 Function Call 和 RAG、MCP 等类似都是服务器租用实现用于增强 AI 能力边界的

function call 执行流程

执行流程如下:

图片

其中,快递Tool 既为 Function Call。助手

当然如果你上图看的不是很懂的话,也可以参考阿里云提供的 function call 的工作流程:

快递 AI 助手实现

具体实现步骤:

添加大模型依赖配置大模型参数创建 function call调用 function call 实现快递查询

接下来,我们一步步来看,我们以阿里云的百炼(通义千问)大模型对接为例。

1.添加大模型依赖 复制<dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-starter-model-openai</artifactId> </dependency>1.2.3.4. 2.配置大模型参数 复制spring: ai: openai: base-url: https://dashscope.aliyuncs.com/compatible-mode/ api-key: ${ALIYUN-AK} chat: options: model: deepseek-v31.2.3.4.5.6.7.8. 3.创建 function call

这里就不连接数据库查询快递信息了,生成级别需要连接数据库,这里演示效果,构建测试数据即可,如下代码所示:

复制import org.springframework.ai.tool.annotation.Tool; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; publicclass ExpressService { @Tool(description = "用于查询我的亿华云计算快递") public List<Express> getExpress(String state) { // 生成测试数据 List<Express> data = getData(); // 根据状态过滤(如果state为null或空则返回全部) return state == null || state.isEmpty() ? data : data.stream() .filter(e -> e.state().equalsIgnoreCase(state)) .collect(Collectors.toList()); } /** * 生成测试快递数据 */ private List<Express> getData() { List<Express> data = new ArrayList<>(); LocalDateTime now = LocalDateTime.now(); data.add(new Express(1001L, "北京", "西安", now.minusDays(12), "已签收")); data.add(new Express(1002L, "广州", "西安", now.minusDays(12), "已签收")); data.add(new Express(1003L, "杭州", "西安", now.minusDays(3), "运送中")); data.add(new Express(1004L, "深圳", "西安", now.minusDays(3), "运送中")); data.add(new Express(1005L, "南京", "西安", now.minusDays(1), "待发货")); return data; } /** * 快递类 * * @param id * @param from * @param to * @param createtime * @param state */ record Express(long id, String from, String to, LocalDateTime createtime, String state) { } }1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49. 4.调用 function call

调用大模型可以使用 ChatModel 和 ChatClient,这里使用 ChatClient 调用:

复制@RequestMapping("/tool") public Flux<String> tool(@RequestParam("msg") String msg) { return chatClient.prompt(msg) .tools(new ExpressService(), new DateTimeTools()) .stream().content(); }1.2.3.4.5.6.7.

最终执行效果如下:

图片

小结

大模型应用开发是以后程序开发的主流方向,他也会巅峰以往的开发形式,早早掌握大模型的开发知识,对于后期涨薪或找工作都有巨大的帮助。程序员群体注定是一个活到老学到老的群体,因为学习的本质在于扩展自己的能力边界,让自己变得更值钱,所以各位动起来,让我们一起拥抱这场 AI 盛宴吧。IT技术网

标签:

责任编辑:IT科技