今天简单用了一下Spring AI中的工具化调用。现在很多传统行业的系统中想集成一些AI,或者想让跟用户的交流更加智能化,那我强烈推荐@Tool
这个工具在接收到用户的请求后,先是AI处理请求,判断是否有可调用的接口,如果有的话,就调用接口得到接口返回,然后再根据返回自己润色答案。因为其中请求以及返回内容都是AI模型控制,所以比传统接口要灵活的多。而且可以将AI深度嵌入到你的系统中,让你的系统更加智能化,从原理上可以通过对话实现你的系统中的绝大多数功能。
话不多说,看代码
@Tool(description = "该接口的功能")
核心代码只有这一行,在原来的接口上加上注解就能实现,AI会自动根据用户请求的内容判断是否需要调用接口
@Tool(description = "根据大类的编码获取名称")
public String getClassNameByCode(String code) {
if(Objects.equals("system", code)){
return "系统";
}
if(Objects.equals("user", code)){
return "玩家";
}
return "";
}
调用
String userText = """
告诉我编码为{code}的大类,名称是什么?
""";
String response = ChatClient.create(this.chatModel)
.prompt()
.system("仅回答名称即可,比如名称是 大类 ,则仅回复大类,详细情况根据编码内容而定")
.user(userPrompt ->userPrompt
.text(userText)
.param("code",code))
.tools(new DouBaoChatServiceImpl())
.call()
.content();
最后得到结果
简单实现就是这样,不过为了测一下AI可以做到什么程度,咱们可以给他加需求,看他能不能连着调用两个接口
首先加上两个接口内容
1、根据大类名称获取编码
@Tool(description = "根据大类的名称获取编码")
public String getClassCodeByName(String name) {
if(Objects.equals("系统", name)){
return "system";
}
if(Objects.equals("用户", name)){
return "user";
}
return "";
}
2、根据编码获取q3季度比q4季度多盈利多少钱
@Tool(description = "根据编码获取q3季度比q4季度多盈利多少钱")
public Integer q3ToQ4(String code){
if(Objects.equals("system", code)){
return 1;
}
if(Objects.equals("user", code)){
return 2;
}
return 0;
}
调用
String response = ChatClient.create(this.chatModel)
.prompt()
.user(userPrompt ->userPrompt
.text(userText))
.tools(new DouBaoChatServiceImpl())
.call()
.content();
然后问问题
帮我获取大类名称为系统的,q3比q4多赚多少钱
得到答案
根据查询结果,大类名称为"系统"(编码为"system")的Q3季度比Q4季度多赚了 **1元**。
完成
另外还可以加需求,我要求每次回答的时候后加上,“感谢您的付出”
改调用代码,加上系统的提示词。
String response = ChatClient.create(this.chatModel)
.prompt()
.system("请你在每次回答的时候,回复后加上,“感谢您的付出”")
.user(userPrompt ->userPrompt
.text(userText))
.tools(new DouBaoChatServiceImpl())
.call()
.content();
问
也加上需求,要求AI简单分析
帮我获取大类名称为系统的,q3比q4多赚多少钱,并且简单分析
得到答案
根据查询结果,我为您分析如下:
**查询结果:**
- 大类名称:系统
- 大类编码:system
- Q3比Q4多赚金额:1(单位)
**简单分析:**
1. **盈利情况**:系统大类在第三季度(Q3)比第四季度(Q4)多盈利1个单位。这表明Q3的盈利能力略高于Q4。
2. **季度表现**:
- Q3表现相对较好,盈利能力略胜一筹
- Q4盈利能力相对较弱,但差距不大
- 两个季度之间的盈利差异较小,仅为1个单位
3. **可能影响因素**:
- 季节性因素:某些系统类业务可能在Q3有更好的表现
- 市场环境:Q3可能处于业务旺季或需求高峰期
- 项目周期:系统类项目的交付和收款可能集中在Q3
4. **建议**:
- 分析Q4盈利能力下降的具体原因
- 考虑如何将Q3的成功经验应用到Q4
- 制定季节性调整策略以平衡全年盈利
总体来看,系统大类的季度盈利表现相对稳定,Q3略优于Q4,但差异不大,整体经营状况较为平稳。
感谢您的付出
完成
小结
AI的嵌入意味着系统的使用过程更加顺滑,对于客户更加友好。测试过程中,我试过在@Tool中加入错别字,或者问的时候问的简单一点,但是AI的理解能力还是比较强的,不管是处理用户信息,还是在调用系统本身接口的时候,都比较智能。
这个功能调用简单,但是确实是把AI深入嵌入到系统中了。我是一个开发,不是产品,但是我看到了无数种可能性。