知识图谱可视化问答系统技术文档

在这里插入图片描述

1. 项目概述

1.1 系统目标

构建一个支持知识图谱可视化、检索与智能问答的Web系统,实现登录注册、知识图谱可视化、智能问答功能。

1.2 核心功能

  • 用户管理:登录、注册、权限控制
  • 知识图谱管理:可视化展示、节点检索
  • 智能问答:自然语言问题解析、知识图谱查询、答案生成
  • 数据管理:SQLite存储用户数据,Neo4j存储图谱数据

2. 技术选型

分类 技术栈 说明
前端 Vue3 + Layui-Vue 响应式UI框架,组件化开发
后端 Python + Flask + py2neo RESTful API,Neo4j驱动
数据库 Neo4j + SQLite 图数据库存储知识,关系库存用户
工具 Postman 接口测试

3. 系统架构

3.1 分层架构

  1. 展示层:Vue3实现可视化界面
  2. 业务层:Flask处理业务逻辑
  3. 数据层:Neo4j存储知识图谱,SQLite存储用户数据
  4. NLP层:基于Deepseek 实现问题解析与答案生成

4. 模块详细设计

4.1 用户管理模块

数据库设计(SQLite)
class UserInfo(db.Model):
    """
    用户信息表
    """
    id = db.Column(db.Integer, primary_key=True)
    account = db.Column(db.String(255))
    password = db.Column(db.String(255))
    name = db.Column(db.String(255))

    def to_dict(self):
        return {
            'id': self.id,
            'account': self.account,
            'name': self.name,
            'password': self.password
        }

接口设计
端点 方法 参数 响应
/api/login POST account, password {token: JWT, code: 响应码}
/api/sign_in POST account,name, password {code: 响应码, msg: 提示信息}

4.2 知识图谱模块

核心接口
# py2neo查询示例
@app.route('/search_name_kg', methods=['POST'])
def search_name():
    entity = request.json.get('name')
    json_data = neo4j_db_handle.get_kg_new(entity)
    return jsonify({
        "code": 200,
        "data": json_data
    })

4.3 智能问答模块

处理流程
  1. 用户输入自然语言问题
  2. 生成Cypher查询语句,并执行查询
  3. 提示词组装,调用Deepseek大模型
  4. 返回结果
示例接口
@app.route('/chat_message', methods=['POST'])
def chat_message():
    chat_handler = ChatHandler()
    question = request.json.get('input')
    json_data = chat_handler.chat(question)
    return jsonify({
        "code": 200,
        "data": json_data
    })

5. 关键实现

5.1 图谱数据抽取

1.解析原始文档为txt文本
2. 根据章节切分文本
3. 使用多线程调用Deepseek大模型,结合提示词工程提取出三元组数据
4. 将大模型响应内容转换为json,再通过py2neo写入neo4j数据库

def ai_parser(file_path, index):
    file_name = os.path.basename(os.path.splitext(file_path)[0])
    file_name = f"result/{file_name}.json"
    if os.path.exists(file_name):
        return
    print(f"大模型开始解析第{index + 1}个文件\n")
    # 切分文件
    with open(file_path, 'r', encoding='utf-8') as file:
        content = file.read()
    try:
        result = llm_extra(content)
        write_ai_result_to_file(result, file_name)
    except Exception as e:
        print("调用异常", e)
    print(f"第{index + 1}个文件解析完成\n")

def extra_main(files):
    with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
        for index, file_path in enumerate(files):
            executor.submit(ai_parser, file_path, index)

if __name__ == '__main__':
    try:
        main('data/cache')
        print(f"处理完成,数据已写入文件result目录下")
    except Exception as e:
        print("调用异常", e)

5.2 图谱可视化

实现方案

  • 使用relation-graph-vue3实现图谱渲染和动态布局
  • Layui-vue提供前端基本组件
<template>
  <div style="width: 100%;height: calc(100vh - 120px)">
    <div class="tags">
      <lay-tag v-for="(value, key) in typeMapping" :key="key" :color="value.color" style="margin: 10px 0 0 20px">
        {{ key }}({{ value.count }})
      </lay-tag>
    </div>
    <div :style="styles">
      <RelationGraph ref="graphRef" :options="graphOptions" @node-click="onNodeClick">
        <template #node="{node}">
          <div style="display:flex;justify-content:center;">
            <lay-tooltip :content="node.text">
              <div class="node-text" style="width:160px">
                {{ node.text }}
              </div>
            </lay-tooltip>
          </div>
        </template>
      </RelationGraph>
    </div>

    <lay-layer :title="false" :closeBtn="false" type="drawer" area="600px" v-model="visible">
      <neo-drawer :data="selectNode"/>
    </lay-layer>
  </div>
</template>

5.3 安全机制

JWT身份验证

import jwt

secret = 'aayujhtsrgabbhdgjccras'


# 编码
def encode(user_id):
    return jwt.encode({'user_id': user_id}, secret, algorithm='HS256')


def decode(encoded_jwt):
    return jwt.decode(encoded_jwt, secret, algorithms=['HS256'])


6. 环境要求

  • Python 3.10+
  • Node.js 18.x
  • Neo4j 3.5.5
Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐