DeepSeek大模型推荐功能实现
DeepSeek大模型推荐功能实现

DeepSeek大模型推荐功能实现

舍友给了一个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的响应时间有点长,有的时候打开页面之后,显示推荐商品要三四秒才会显示出来。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注