首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

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

  • 25-04-18 18:01
  • 3411
  • 7582
juejin.cn

昨天晚上直播,我们用 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 助手实现

具体实现步骤:

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

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

1.添加大模型依赖

xml
代码解读
复制代码
<dependency> <groupId>org.springframework.aigroupId> <artifactId>spring-ai-starter-model-openaiartifactId> dependency>

2.配置大模型参数

yaml
代码解读
复制代码
spring: ai: openai: base-url: https://dashscope.aliyuncs.com/compatible-mode/ api-key: ${ALIYUN-AK} chat: options: model: deepseek-v3

3.创建 function call

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

java
代码解读
复制代码
import org.springframework.ai.tool.annotation.Tool; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; public class ExpressService { @Tool(description = "用于查询我的快递") public List getExpress(String state) { // 生成测试数据 List data = getData(); // 根据状态过滤(如果state为null或空则返回全部) return state == null || state.isEmpty() ? data : data.stream() .filter(e -> e.state().equalsIgnoreCase(state)) .collect(Collectors.toList()); } /** * 生成测试快递数据 */ private List getData() { List 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) { } }

4.调用 function call

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

java
代码解读
复制代码
@RequestMapping("/tool") public Flux tool(@RequestParam("msg") String msg) { return chatClient.prompt(msg) .tools(new ExpressService(), new DateTimeTools()) .stream().content(); }

最终执行效果如下:

小结

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

本文已收录到我的技术小站 www.javacn.site,其中包含的内容有:Spring AI、大模型应用开发各种技术、MCP、Function Call、RAG、向量数据库、Prompt、多模态、向量数据库、嵌入模型等内容。

注:本文转载自juejin.cn的Java中文社群的文章"https://juejin.cn/post/7494067439241297946"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

109
人工智能
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top