目录
3.编写Mapper、Service、Controller这三层代码
声明:以前叫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.测试【根据手机号查询预约】功能

这个功能也没毛病!
以上就是本篇文章的全部内容,喜欢的话可以留个免费的关注呦~~~