14.Tools工具的介绍和使用

目录

一.期望实现的效果

二.准备工作

1.创建预约表

2.定义实体类

3.编写Mapper、Service、Controller这三层代码

4.测试效果

三.原理

四.具体实现

1.准备、配置系统提示词

2.准备工具方法

3.配置工具方法

五.测试效果

1.测试【添加预约】功能

2.测试【根据手机号查询预约】功能


声明:以前叫function calling,现在叫Tools工具。

一.期望实现的效果

(志愿填报系统AI智能客服)当我们问AI客服和志愿填报有关的问题时,AI客服都要询问是否需要预约一对一指导服务,并且要求用户提供相关的个人信息,然后进行预约操作(说白了就是往预约表中插入一条数据)。

二.准备工作

思路:我们先自己把sql、后端代码写好(说白了就是crud)。后续才能谈通过tools工具调用这些sql。

1.创建预约表

2.定义实体类

和预约表是对应的。

java 复制代码
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Reservation {
    private Integer id;//主键id
    private String name;//预约人姓名
    private String gender;//预约人性别
    private String phone;//预约人手机号
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime time;//预计沟通时间
    private String province;//省份
    private Integer score;//预估分数
}

3.编写Mapper、Service、Controller这三层代码

mapper

java 复制代码
@Mapper
public interface ReservationMapper {
    //1、添加预约信息
    @Insert("insert into reservation " +
            "values (null, #{name}, #{gender}, #{phone}, #{time}, #{province}, #{score}) ")
    int addOneReservation(Reservation reservation);

    //2、根据手机号查询预约信息
    @Select("select * " +
            "from reservation " +
            "where phone = #{phone}")
    Reservation queryOneReservationByPhone(String phone);
}

service、serviceImpl

java 复制代码
public interface ReservationService {
    //1、添加预约信息
    Result addOneReservation(Reservation reservation);

    //2、根据手机号查询预约信息
    Result queryOneReservationByPhone(String phone);
}
java 复制代码
@Service
public class ReservationServiceImpl implements ReservationService {
    @Autowired
    private ReservationMapper reservationMapper;

    public Result addOneReservation(Reservation reservation) {
        try{
            int i = reservationMapper.addOneReservation(reservation);
            return new Result(200, "成功添加"+i+"条预约信息~");
        }catch(Exception e){
            return new Result(500, "添加失败,错误信息:"+e.getMessage());
        }
    }


    public Result queryOneReservationByPhone(String phone) {
        try{
            Reservation reservation = reservationMapper.queryOneReservationByPhone(phone);
            return new Result(200, "查询成功", reservation);
        }catch(Exception e){
            return new Result(500, "查询失败,错误信息:"+e.getMessage());
        }
    }
}

controller

java 复制代码
@RestController//表明这是一个controller层,并且自动将对象转为JSON格式返回
@RequestMapping("/api/reservation")//该controller的访问路径
public class ReservationController {
    @Autowired
    private ReservationService reservationService;

    /**
     * 添加一条预约信息
     */
    @PostMapping("/addOneReservation")
    public Result addOneReservation(@RequestBody Reservation reservation){
        return reservationService.addOneReservation(reservation);
    }

    /**
     * 根据手机号查询预约信息
     */
    @GetMapping("/queryReservationByPhone")
    public Result queryOneReservationByPhone(String phone){
        return reservationService.queryOneReservationByPhone(phone);
    }
    
}

4.测试效果

接口1:添加一条报考服务

可见此时确实多了一条报考服务。

接口2:根据手机号,查询报考服务

三.原理

原理就是下图这个流程图。

我们不用担心,我们只需要了解下图的流程即可。

灰色部分(核心)由langchain4j帮我们完成,我们只需要会用就行(详情见【四】)。

四.具体实现

1.准备、配置系统提示词

这一步主要是给AI大模型一个身份(此时的身份是AI智能志愿填报助手)。

并让它在每个问题后,主动询问用户是否需要预约服务、如需预约则要用户提供个人信息。

2.准备工具方法

新建Tool工具类

编写代码

java 复制代码
@Component
public class ReservationTool {
    @Autowired
    private ReservationService reservationService;

    //1.工具方法:添加志愿报考预约
    @Tool("预约志愿填报服务")
    public Result addReservation(
            @P("考生姓名") String name,
            @P("考生性别") String gender,
            @P("考生手机号") String phone,
            @P("预约沟通时间,格式为:yyyy-MM-dd HH:mm:ss") String time,
            @P("考生所在省份") String province,
            @P("考生预估分数") Integer score){
        Reservation reservation = new Reservation(null, name, gender, phone, LocalDateTime.parse(time), province, score);
        return reservationService.addOneReservation(reservation);
    }

    //2.工具方法:根据手机号查询预约信息
    @Tool("根据手机号查询预约报考服务单")
    public Result queryReservationByPhone(@P("考生手机号") String phone){
        return reservationService.queryOneReservationByPhone(phone);
    }
}

代码解读:

①@Tool用于声明工具方法的作用

②@P用于声明工具方法入参的含义

3.配置工具方法

五.测试效果

1.测试【添加预约】功能

然后去查看数据库的预约表,看看是否真的多出一条预约记录

可见此时没毛病,的确帮我们进行了预约,完美实现!

2.测试【根据手机号查询预约】功能

这个功能也没毛病!

以上就是本篇文章的全部内容,喜欢的话可以留个免费的关注呦~~~

相关推荐
tachibana215 小时前
如何设计多 Agent 的协作与动态切换机制?
网络·人工智能·ai·大模型·llm·agent
程序员三明治16 小时前
【体验毛坯房】Deep Harness 入门教程
java·人工智能·后端·大模型·llm·deepseek·dsh
江厌0117 小时前
金融大模型私有化:信创合规下,算力该按哪个口径配
人工智能·深度学习·大模型·私有化部署·gpu·信创·ai服务器
梦想的颜色17 小时前
【AI实战】React‑Native + AI 移动端 APP 完整实战全流程|云端 / 本地大模型、Agent 集成、安装配置、避坑指南
react.js·大模型·app·agent·reactnative·expo·ai 应用开发
程序员于老七18 小时前
漫话大模型:先画轮廓再画细节——从 Flow Matching 看生成模型的“殊途同归“
深度学习·大模型·ai编程·diffusion·flowmatching
像风一样自由202018 小时前
17.Milvus如何完成一次向量相似度检索
人工智能·postgresql·大模型·milvus·rag·智能体
像风一样自由202019 小时前
19.Milvus数据分片扩展与高并发设计
postgresql·大模型·milvus·rag·智能体
绵满1 天前
"AgentOPSD: Recursive Self-Distillation for Agentic Reinforcement Learning" 论文笔记
大模型·智能体记忆
威化饼的一隅2 天前
【搜索推荐学习】生成式召回
大模型·双塔模型·语义id·召回·sid·生成式召回
thesky1234562 天前
27届大模型面试准备(六十七):大模型推理编译与图优化工程——从计算图到高效内核
大模型·tvm·图优化·xla·算子融合·编译期优化·推理编译