山东大学软件学院创新实训——项目记录(十二)

 基于RAG技术的心理健康大模型的开发及应用

简述任务:这里将在日记页面增加日历,显示已经写过的日记的日期。并修改存储日记逻辑,将存储日记和将日记传给大模型分析分开执行分开,加快存储日记内容的速度。因为大模型只能读取没有表情等纯文本信息,因此,在传递给大模型的时候,要将日记内容(富文本格式)转化为纯文本格式

一、增加日历

1.前端编写

(1)首先进行npm组件

(2)在blog.vue中引入Calendar组件

(3)在前端增加Calendar组件,进行展示

  <Calendar
      backgroundText
      class-name="select-mode"
      :remarks="valueDate"
  />

(4)在data中加入被标记的数组

 data() {
    return {
      form: {
        user:'',
        uid:1,
        advice: '',
        mood:''
      },
      valueDate:[],// 日期:类型为空的空数组}

(5)调用api获取该用户所写日记的日期

(6)在mounted()方法中进行调用函数handleOpen()

2.后端编写

(1)Controller:这里返回date和√的Map

(2)这里是BlogServiceImpl中实现的方法

(3)Mapper 返回数据库中该用户所写的日记的时间列表

3.前端展示 在日历上显示用户哪天写了日记

二、更改存储逻辑

目的:为了让模型可以读取前端传过来的富文本的数据,因此,将前端传过来的数据进行修改,并将其保存在blog数据库afterBlog中。

(1)建立数据库新字段

在Blog实体类下增加新字段:

在Blog表中增加新字段:

(2)前端修改

a、在保存文章的时候,先存储日记,之后再将日记传给大模型进行分析,获得心灵鸡汤和心情分析字段。在这里首先对前端传入富文本进行处理,将其解析成纯文本存入afterBlog中,之后又传给大模型进行分析,得到心灵鸡汤和心情。

save() {
      // 使用正则表达式去除 content 中的图片
      const contentWithoutImages = this.form.content.replace(/!\[.*?\]\(.*?\)/g, '');
      const  c = contentWithoutImages.replace(/:[^:]*:/g, '')
      const contentWithoutImages1 = c.replace(/\{\{\{.*?\}\}\}/g, '');

      // 将富文本解析成纯文本
      this.form.afterBlog = this.stripHtml(marked(contentWithoutImages1));

      
      request.get("/user/" + this.user.id).then(res => {
        if (res.code === '200') {
          this.form.uid=res.data.id
          this.form.user=res.data.username
        }
        if(this.form.isPrivate==null){
          this.$message.error("请选择可见范围!")
        }
        else{
          request.post("/blog/saveN", this.form).then(res => {
            if (res.code === '200') {
              this.$message.success("保存成功")
              this.dialogFormVisible = false
              this.load()
            } else {
              this.$message.error("保存失败")
            }
          })
          
         // 传给后端
          request.post("/blog/sentence", this.form.afterBlog).then(res =>{
            if (res.code === '200') {
              // this.$message.success("保存成功")
              this.dialogFormVisible = false
              this.load()
            } else {
              // this.$message.error("保存失败")
            }
          })
        }
      })
    },

b、stripHtml方法

stripHtml(html) {
      // 创建一个临时 DOM 元素来解析 HTML 并提取纯文本
      const tmp = document.createElement('DIV');
      tmp.innerHTML = html;
      return tmp.textContent || tmp.innerText || '';
    },

(3)后端修改

这里的sentence当模型没有返回符合模板的话的时候,这里就强制将建议设为天天开心,心情未平静进行展示。

// 新增或者更新
    @ApiOperation("新增或者编辑博客,编辑时不返回time()")
    @PostMapping("/saveN")
    public Result save(@RequestBody Blog blog) {
        if(blog.getId()==null){//新增的时候初始化time和user 问题,更改的时候也要传时间哇
            blog.setTime(DateUtil.now());//不管新增还是编辑都要改变时间?算了编辑不改变时间好了
        }
        blogService.saveOrUpdate(blog);
        return Result.success();
    }


    // 新增或者更新
    @ApiOperation("新增或者编辑博客,编辑时不返回time()")
    @PostMapping("/sentence")
    public Result saveChat(@RequestBody String sentence) {
        System.out.println(sentence);

        //这里调用大模型,根据后端传入生成建议
        String url = "http://localhost:5000/connectToAPI?content=" + sentence +"&mode=6";
        String answer = HttpUtil.get(url);
        //这里需要进行分词
        String[] result = answer.split("心灵鸡汤:|心情分类:");
        //之后查找用户最新修改的一篇日志
        Blog newBlog = blogService.getByDay();

        if(result.length == 1){
            newBlog.setAdvice("天天开心!");
            newBlog.setMood("平静");
        }else{
            newBlog.setAdvice(result[1]);
            if(result[2].length() == 5){
                result[2] = result[2].split("。")[0];
                newBlog.setMood(result[2]);
            }else{
                newBlog.setMood("平静");
            }
        }
        blogService.saveOrUpdate(newBlog);
       return Result.success();
    }

这里编辑也是一样的修改,就不加赘述!

(4)测试

成功!!

后端存储修改过后的文字也是没有表情的!可以传给大模型!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值