Knowledge-QA-LLM: 基于本地知识库+LLM的开源问答系统

⚠️注意:后续更新,请移步README

Knowledge QA LLM

  • 基于本地知识库+LLM的问答系统。该项目的思路是由langchain-ChatGLM启发而来。
  • 缘由:
    • 之前使用过这个项目,感觉不是太灵活,部署不太友好。
    • 借鉴如何用大语言模型构建一个知识问答系统中思路,尝试以此作为实践。
  • 优势:
    • 整个项目为模块化配置,不依赖lanchain库,各部分可轻易替换,代码简单易懂。
    • 除需要单独部署大模型接口外,其他部分用CPU即可。
    • 支持常见格式文档,包括txt、md、pdf, docx, pptx, excel等等。当然,也可自定义支持其他类型文档。

TODO

  • 完善解析office文档接口及单元测试
  • 完善PDF提取接口及单元测试
  • 完善图像内容提取接口及单元测试
  • 完善LLM接口
  • 完善UI
  • 合并基于关键词搜索和基于向量搜索两种方法

整体流程

  • 解析文档并存入数据库
    ExtractText
    Embedding
    Store
    文档
    sentences
    Embeddings
    DataBase
  • 检索并回答问题
    Embedding
    Search
    Query
    Embeddings
    Database
    Context
    Prompt
    LLM
    Answer

使用

  1. 下载和部署模型

    1. 下载moka-ai/m3e-small模型,放到assets/models/m3e-small目录下,用于向量化文本内容。
    2. 单独配置好chatglm2-6b的接口,接口启动参考:ChatGLM2-6B API。具体使用方式可参考:knowledge_qa_llm/llm/chatglm2_6b.py
    3. 将部署好的llm_api写到配置文件knowledge_qa_llm/config.yaml中的llm_api_url字段下。
  2. 安装运行环境

    pip install -r requirements.txt --no-cache-dir
    
  3. 运行

    streamlit run webui.py
    
  4. UI Demo

    Knowledge-QA-LLM: 基于本地知识库+LLM的开源问答系统_第1张图片
  5. CLI Demo

    Knowledge-QA-LLM: 基于本地知识库+LLM的开源问答系统_第2张图片

所用工具

  • 文档解析:extract_office_content, rapidocr_pdf, rapidocr_onnxruntime
  • 提取特征向量:moka-ai/m3e-small
  • 向量存储:sqlite
  • 向量检索:faiss
  • UI: streamlit>=1.24.0

文件结构

.
├── assets
│   ├── db                  # 存放向量数据库
│   ├── models              # 放置提取embedding的模型
│   └── raw_upload_files
├── knowledge_qa_llm
│   ├── __init__.py
│   ├── config.yaml         # 配置文件
│   ├── file_loader         # 处理各种格式的文档
│   ├── llm                 # 大模型接口,大模型需要单独部署,以接口方式调用
│   ├── utils
│   └── vector_utils        # embedding的存取和搜索
├── LICENSE
├── README.md
├── requirements.txt
├── tests
├── cli.py
└── webui.py                # 基于streamlit的UI实现

更新日志

  • 2023-07-29 v0.0.4 update:
    • 基于streamlit==1.25.0优化UI
    • 优化代码
    • 录制UI GIF demo
  • 2023-07-28 v0.0.3 update:
    • 完成文件解析部分
  • 2023-07-25 v0.0.2 update:
    • 规范现有目录结构,更加紧凑,提取部分变量到config.yaml
    • 完善说明文档

你可能感兴趣的:(RapidAI,工具,llm,QA,文档问答)