舍友给了一个deepseek的KEY,本着不浪费的原则,顺便学习新知识,就在我的电子商城里加入了AI智能推荐。
为了实现AI推荐功能,先需要记录下用户的行为记录,我的系统里会记录下用户的访问商品
@Override
public Integer insertVisit(Integer pid, Integer uid) {
Visit visit = new Visit();
visit.setUid(uid);
visit.setCreatedTime(new Date());
visit.setModifiedTime(new Date());
visit.setCreatedUser(userMapper.findByUid(uid).getCreatedUser());
visit.setModifiedUser(userMapper.findByUid(uid).getCreatedUser());
visit.setTitle(productMapper.findById(pid).getTitle());
Integer rows = visitMapper.insertVisit(visit);
if(rows != 1){
throw new InsertException("插入浏览记录时发送未知的异常");
}
return rows;
}
然后与AI的交互,就像上次我写的博客里那样就可以了,这里”user”需要注意一下,具体可以看API的调用文档。
具体代码🖱️
@Override
public List<Product> recProduct(Integer uid) {
String visitHistory = "";
List<Visit> listvist = visitMapper.selectVisits(uid);
for(Visit visit : listvist){
visitHistory = visitHistory + visit.getTitle()+",";
}
System.out.println(visitHistory);
/**
* 提示词
* 以下是我最近的访问记录,
* #{visithistory}
* 请帮我从一下列表中推荐四种我可能感兴趣的分类,
* #{列表}
* 只回答分类名称就可以了,每个分类之间用逗号分隔。
*/
String question ="以下是我最近的访问记录,"
+visitHistory
+"。请帮我从以下列表中推荐四种我可能感兴趣的分类,"
+"{图书、音像,汽车用品,礼品箱包,鞋靴,厨具,家居家装,数码,手机,玩具乐器,电脑、办公,个护化妆,食品饮料,母婴,服饰内衣,家用电器,钟表,珠宝,运动健康,充值、票务},"
+"只回答分类名称即可,每个分类之间用逗号分隔。";
String response = DeepSeekClient.ask(question);
List<String> list = Arrays.asList(response.split(","));
System.out.println(list);
List<Product> productList = new ArrayList<Product>();
for(int i=0;i<list.size();i++){
Integer pid = productMapper.findIdByTitle(list.get(i));
while(productMapper.checkSon(pid) == 1){
pid = productMapper.findIdById(pid);
}
System.out.println("最终分类:"+pid);
Product product = productMapper.guessByVisit(pid);
if(product!=null){
System.out.println(product.getTitle());
}else{
product = productMapper.randProduct();
System.out.print("随机产生:");
System.out.println(product.getTitle());
}
productList.add(product);
}
// System.out.println(productList);
return productList;
}
我的商品数据库中,根据商品的类别,分为{图书、音像,汽车用品,礼品箱包,鞋靴,厨具,家居家装,数码,手机,玩具乐器,电脑、办公,个护化妆,食品饮料,母婴,服饰内衣,家用电器,钟表,珠宝,运动健康,充值、票务},每一个分类又会标记是否为parent_id和is_parent。

//这段代码用来判断是否为叶子分类,如果不是的话,随机挑一种(可以再次问AI相似度更高的商品分类)
while(productMapper.checkSon(pid) == 1){
pid = productMapper.findIdById(pid);
}
我去淘宝上爬了很多商品的信息,再给AI帮我整理。但是因为分类很多种,多达1000+,还是有很多分类是空的,所以推荐系统的命中率很低,很容易找到没有具体商品的分类。我就加了个随机选一个商品
if(product!=null){
System.out.println(product.getTitle());
}else{
product = productMapper.randProduct();
System.out.print("随机产生:");
System.out.println(product.getTitle());
}
以上就是我的AI智能推荐系统的分享。就是AI的响应时间有点长,有的时候打开页面之后,显示推荐商品要三四秒才会显示出来。
