创新设计记录-6:博客上传知识库

创新设计记录-6:博客

博客上传知识库

因为我们的系统是采用知识库&大模型回答的模式的RAG技术,在回答问题时候大模型也会搜索用户知识库中的知识,如果知识库中有相关内容的话,会把相关内容引用出来,再进行回答。

因此用户的博客也可以作为知识库很关键的一部分,这样用户在使用大模型的时候也会得到更偏向于自己的大模型回答。

这里用到了添加博客方法的后半部分

if blog.save_to_kb:
    filename = save_md(blog.title, blog.content)
    file = open(filename, "rb")
    files = {'files': (blog.title + '.md', file)}
    form_data = {
        'knowledge_base_name': KB_ARGS["default_kb"],
        'override': DOC_ARGS["override_custom_docs"],
        'to_vector_store': DOC_ARGS["to_vector_store"],
        'chunk_size': DOC_ARGS["chunk_size"],
        'chunk_overlap': DOC_ARGS["overlap_size"],
        'zh_title_enhance': DOC_ARGS["zh_title_enhance"],
        'docs': DOC_ARGS["docs"],
        'not_refresh_vs_cache': DOC_ARGS["not_refresh_vs_cache"]
    }
    try:
        response = requests.post(DOC_ARGS['url'], files=files, data=form_data)
    except Exception as e:
        return BaseResponse(code=500, msg="上传文件失败", data={"error": f'{e}'})

    print(response.json())
    return BaseResponse(code=200, msg='添加成功', data={'blog_id': blog_id})

这里判断了用户是否选择将博客添加到知识库中。

添加到知识库中的方法是,先将文件存储到本地定义好的文件夹里,然后将文件上传到服务器上。

def save_md(title: str, content: str):
    """将md文件存本地"""
    filename = title + '.md'
    path = os.getcwd() + FILE_ARGS["relative_path"]
    if not os.path.exists(path):
        os.makedirs(path)
    with open(path + filename, 'w', encoding='utf-8') as f:
        f.write(content)
        f.close()
    return path + filename

该方法返回文件名。

这里调用服务器提供的DOC_ARGS[‘url’]接口

"url": f'http://{LANGCHAIN_SERVER["address"]}/knowledge_base/upload_docs',

上传成功之后,用户在进行大模型回答时后就会看到自己的博客相关的回答内容

在这里插入图片描述

在这里插入图片描述

博客评论

在博客界面的下方,有一个评论区组件,该组件显示该博客所有的评论信息

<Comment v-if="this.blog_id" :comment_list="comment_list" @refresh_comment_list="get_comment_" />
<script>
get_comment_() {
    get_comment_list(this.blog_id).then(res => {
        this.comment_list = res.data.data.comment_list
        console.log(this.comment_list);
    })
},
</script>

现在看一下评论区组件的信息:

<template>
    <el-card shadow="never">
        <template #header>
            <h3 style="text-align: left">评论区</h3>
        </template>
        <template v-for="(item, index) in comment_list">
            <div class="container">
                <el-card shadow="never" class="comment-card">
                    <template #header>
                        <div class="card-header">
                            <el-avatar src="https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png" />
                            <h4 class="author">{{ item.user_name }}</h4>
                            <div style="text-align: end; width: 100%;" class="header_item">
                                评论时间:{{ item.create_time }}
                            </div>
                        </div>
                    </template>
                    <div class="card-body">
                        {{ item.content }}
                    </div>
                </el-card>
                <div>
                    <el-button type="danger" @click="delete_comment_(item.id)" v-if="item.user_id == user_id">删除</el-button>
                </div>
            </div>
        </template>
        <el-empty v-if="this.comment_list.length == 0" description="还没有评论……"></el-empty>
    </el-card>
</template>

删除评论方法:

 delete_comment_(id) {
     console.log(id);
     ElMessageBox.confirm(
         '确定要删除吗?',
         '消息',
         {
             confirmButtonText: '确定',
             cancelButtonText: '取消',
         }
     ).then(() => {
         let user_id = localStorage.getItem('user_id')
         delete_comment(id, user_id, this.blog_id).then(res => {
             if (res.data.code == 200) {
                 ElMessage({
                     type: 'success',
                     message: '删除成功'
                 })
                 this.$emit('refresh_comment_list')
             } else {
                 ElMessage({
                     type: 'error',
                     message: res.data.msg
                 })
             }
         })
     })
 },
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值